From win-pv-devel-bounces@lists.xenproject.org Mon Oct 05 12:04:47 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 05 Oct 2026 12:04:47 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1440781.1658229 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDhR0-0002ha-Ly; Mon, 05 Oct 2026 12:04:46 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1440781.1658229; Mon, 05 Oct 2026 12:04:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDhR0-0002hT-J3; Mon, 05 Oct 2026 12:04:46 +0000
Received: by outflank-mailman (input) for mailman id 1440781;
 Mon, 05 Oct 2026 12:04:45 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10bf3abba0003f66@swg.vates.tech>)
 id 1xDhQz-0002hN-L9
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 12:04:45 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xDhQy-007E2K-L7
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 14:04:44 +0200
Received: from [10.42.69.9] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10bf3abba0003f66@swg.vates.tech>)
 id 6ac39254-bab6-0a2a0a5309dd-0a2a4509d0dc-24
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 14:04:44 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-bad1c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10bf3abba0003f66@swg.vates.tech>)
 id 6ac3925c-be1a-0a2a45090019-b9ff1c12a1f5-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 14:04:44 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a10bf3abba0003f66.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 05 Oct 2026 12:04:41 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 3BBC4823CA;
 Mon,  5 Oct 2026 14:04:40 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=+brxg8Z75Xhd9oqiFrzlGh6Mb7LUnPzQrrZAwjA3eeI=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:feedback-id;
 b=rGl8bfwHLWzhz35ZVp5mNINnCNS3JQzvczlPxyFBI02oB1dDaT4vqUWoLBl8lxNdf2UOLTgA8
 5dE/7+7XrPbkMPbpfxhiiVKv2wKxSYHC+dACpiH4pnSarBINADXnhWUr/FN5sHWhozRF/yv8T+E
 d+5jYdRazHEo71mIFnjC6xnRJg4l7oXxsddIEUXhFqCyQNA1z607JDuYVOXrRJZxyjxnmRSQnZu
 xL2ugpIFJbqAZNiU6wZQh5OJGHlCXyck2wKdlRLA+w0Gy2oRbKYPD/1wFERRvnZH9wKLkLf+IDk
 KQb/86h7/5utMusq14lyxnQayiV0lP4yIrN+HZ+zAIjQ==
X-Zone-Loop: 35ec8d8b4a66e6151df4481c7d3f0b1856e874f96c7c
x-campaign-type: default
x-transaction-id: 6bcf2679-a103-4493-97dc-1b4680d026aa
x-swg-uid: 01-ccc5b6a3-942d-4b79-a288-cfb3a16e83ce
X-Mailer: Sweego
Message-ID:
 <1791201881.8631fc262581453bbf619ec5b2062170.1a10bf3abba0003f66@vates.tech>
x-swg-bid: 1791201881.8631fc262581453bbf619ec5b2062170.1a10bf3abba0003f66
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 00/17] Update SAL annotations in xeniface
Date: Mon,  5 Oct 2026 14:04:26 +0200
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.639.79e4da061b42652.1a10bf3a90f.f0c022cfea2664b2=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791201880336
X-purgate-ID: tlsNG-bad1c0/1791201884-BC4CB034-24A0706C/0/0
X-purgate-type: clean
X-purgate-size: 2788

---=Part.639.79e4da061b42652.1a10bf3a90f.f0c022cfea2664b2=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

This update concerns updating and fixing SAL annotations in the xeniface dr=
iver=2E

C=C3=A9saire Mounah (17):
  xeniface: Sync common files with xenbus
  Convert to SAL 2=2E0 annotations
  util: fix some annotations
  wmi: fix some anntotations
  ioctl: fix annotations
  fdo: fix annotations
  update string typedefs in all include files
  wmi: fix annotation of AccessWmiBuffer
  fix XENBUS_GNTTAB_QUERY_REFERENCE annotation
  driver: fix annotation errors
  xc: fix annotations
  fdo: suppress warning in FdoQueryInterface
  ioctl: fix annotation of __CaptureUserBuffer
  wmi: fix output buffer annotations
  include: update the annotations of shared interfaces
  xeniface: route AccessWmiBuffer unknown-type exit through common path
  util: fix annotation of __wcstok_r

 include/cache_interface=2Eh       |  76 ++--
 include/evtchn_interface=2Eh      |  72 ++--
 include/gnttab_interface=2Eh      |  88 ++---
 include/shared_info_interface=2Eh |  44 +--
 include/store_interface=2Eh       |  84 ++---
 include/suspend_interface=2Eh     |  24 +-
 include/xencontrol=2Eh            | 165 +++++----
 src/xencontrol/xencontrol=2Ec     | 337 ++++++++---------
 src/xeniface/assert=2Eh           |  82 ++--
 src/xeniface/driver=2Ec           |  32 +-
 src/xeniface/fdo=2Ec              | 348 ++++++++---------
 src/xeniface/fdo=2Eh              |  26 +-
 src/xeniface/ioctl_evtchn=2Ec     | 144 +++----
 src/xeniface/ioctl_gnttab=2Ec     | 132 +++----
 src/xeniface/ioctl_sharedinfo=2Ec |  10 +-
 src/xeniface/ioctl_store=2Ec      | 162 ++++----
 src/xeniface/ioctl_suspend=2Ec    |  66 ++--
 src/xeniface/ioctls=2Ec           |  50 +--
 src/xeniface/ioctls=2Eh           | 272 +++++++-------
 src/xeniface/irp_queue=2Ec        |  46 +--
 src/xeniface/irp_queue=2Eh        |  28 +-
 src/xeniface/log=2Eh              |  16 +-
 src/xeniface/mutex=2Eh            |  10 +-
 src/xeniface/names=2Eh            |  18 +-
 src/xeniface/registry=2Ec         | 452 ++++++++++++----------
 src/xeniface/registry=2Eh         | 207 ++++++-----
 src/xeniface/thread=2Ec           |  38 +-
 src/xeniface/thread=2Eh           |  18 +-
 src/xeniface/util=2Eh             |  90 +++--
 src/xeniface/wmi=2Ec              | 638 ++++++++++++++++----------------
 src/xeniface/wmi=2Eh              |  18 +-
 31 files changed, 1954 insertions(+), 1839 deletions(-)

--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.639.79e4da061b42652.1a10bf3a90f.f0c022cfea2664b2=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 05 12:08:04 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 05 Oct 2026 12:08:04 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1440784.1658238 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDhUC-0002zs-6C; Mon, 05 Oct 2026 12:08:04 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1440784.1658238; Mon, 05 Oct 2026 12:08:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDhUB-0002za-T8; Mon, 05 Oct 2026 12:08:03 +0000
Received: by outflank-mailman (input) for mailman id 1440784;
 Mon, 05 Oct 2026 12:08:03 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10bf6b5a50003f66@swg.vates.tech>)
 id 1xDhUB-0002ya-1T
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 12:08:03 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xDhUA-00AyfZ-ES
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 14:08:02 +0200
Received: from [10.42.69.11] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10bf6b5a50003f66@swg.vates.tech>)
 id 6ac39311-bab6-0a2a0a5309dd-0a2a450ba4e6-36
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 14:08:02 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-42698a.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10bf6b5a50003f66@swg.vates.tech>)
 id 6ac39321-b7e8-0a2a450b0019-b9ff1c12963b-4
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 14:08:02 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a10bf6b5a50003f66.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 05 Oct 2026 12:08:00 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 9F437826C6;
 Mon,  5 Oct 2026 14:07:59 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=dBwC6hq4ShBhxN3xqN3RT9bzETpKkguAl+vgTFeothM=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=f+a05x4EQe5pMwxS2QpyW5omhClAbHB8oORgDWuvIeOJ1QjcV2x1P+6dNOpg2saKx03UCpGci
 faGW1w8x3H/GTGID1YhRBEADouOEM+fAWE6/d38RZ8bESN785yKZhCMrDne5KmFSanve5XIXKb3
 Vs5sGmhzZgIoF+R9dcbeh+G8G4t0c+nkHpgMfp0MpD1D5QuKlaus7twGiDqweGISKRcGFm/E35n
 lri9XfLyj+U2LVc+o7T9hLTUWxP60WphwVxvJlJiz0N0LHsbSSxpQMVaszRy/ELzf/eOQv55KZx
 NAm2t8523qg46pZ2eJHV/CS9GyXusSC/9bFXRkWTaUXw==
X-Zone-Loop: 5bac50b3b7cb76fb77422458af7b9b9e5c144a9c0fa1
x-campaign-type: default
x-transaction-id: 8db5f148-e8e1-49b7-82db-9634e4228704
x-swg-uid: 01-d13b4ece-a5d7-4187-afd7-dd9a09a3ffb5
X-Mailer: Sweego
Message-ID:
 <1791202080.8631fc262581453bbf619ec5b2062170.1a10bf6b5a50003f66@vates.tech>
x-swg-bid: 1791202080.8631fc262581453bbf619ec5b2062170.1a10bf6b5a50003f66
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 05/17] ioctl: fix annotations
Date: Mon,  5 Oct 2026 14:07:46 +0200
In-Reply-To: <1791201881.8631fc262581453bbf619ec5b2062170.1a10bf3abba0003f66@vates.tech>
References: <1791201881.8631fc262581453bbf619ec5b2062170.1a10bf3abba0003f66@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.63e.7d74fb33ee3490c0.1a10bf6b3fd.8cb220f187e06326=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791202079741
X-purgate-ID: tlsNG-42698a/1791202082-ABAD09EA-162ECD28/0/0
X-purgate-type: clean
X-purgate-size: 2876

---=Part.63e.7d74fb33ee3490c0.1a10bf6b3fd.8cb220f187e06326=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Buffer param is written later in IoctlLog(), IoctlStoreRead() and
IoctlStoreDirectory()=2E It should be annotated as _Inout_=2E
Corresponding signatures in header file are updated=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xeniface/ioctl_store=2Ec | 4 ++--
 src/xeniface/ioctls=2Ec      | 2 +-
 src/xeniface/ioctls=2Eh      | 6 +++---
 3 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/xeniface/ioctl_store=2Ec b/src/xeniface/ioctl_store=2Ec
index 796f55d=2E=2Edbe197b 100644
--- a/src/xeniface/ioctl_store=2Ec
+++ b/src/xeniface/ioctl_store=2Ec
@@ -113,7 +113,7 @@ DECLSPEC_NOINLINE
 NTSTATUS
 IoctlStoreRead(
     _In_ PXENIFACE_FDO  Fdo,
-    _In_ PCHAR          Buffer,
+    _Inout_ PCHAR       Buffer,
     _In_ ULONG          InLen,
     _In_ ULONG          OutLen,
     _Out_ PULONG_PTR    Info
@@ -228,7 +228,7 @@ DECLSPEC_NOINLINE
 NTSTATUS
 IoctlStoreDirectory(
     _In_ PXENIFACE_FDO  Fdo,
-    _In_ PCHAR          Buffer,
+    _Inout_ PCHAR       Buffer,
     _In_ ULONG          InLen,
     _In_ ULONG          OutLen,
     _Out_ PULONG_PTR    Info
diff --git a/src/xeniface/ioctls=2Ec b/src/xeniface/ioctls=2Ec
index d7d0aed=2E=2Edec68d7 100644
--- a/src/xeniface/ioctls=2Ec
+++ b/src/xeniface/ioctls=2Ec
@@ -112,7 +112,7 @@ DECLSPEC_NOINLINE
 NTSTATUS
 IoctlLog(
     _In_ PXENIFACE_FDO  Fdo,
-    _In_ PCHAR          Buffer,
+    _Inout_ PCHAR       Buffer,
     _In_ ULONG          InLen,
     _In_ ULONG          OutLen
     )
diff --git a/src/xeniface/ioctls=2Eh b/src/xeniface/ioctls=2Eh
index bb5a2d3=2E=2E71d74d3 100644
--- a/src/xeniface/ioctls=2Eh
+++ b/src/xeniface/ioctls=2Eh
@@ -118,7 +118,7 @@ DECLSPEC_NOINLINE
 NTSTATUS
 IoctlStoreRead(
     _In_ PXENIFACE_FDO  Fdo,
-    _In_ PCHAR          Buffer,
+    _Inout_ PCHAR       Buffer,
     _In_ ULONG          InLen,
     _In_ ULONG          OutLen,
     _Out_ PULONG_PTR    Info
@@ -137,7 +137,7 @@ DECLSPEC_NOINLINE
 NTSTATUS
 IoctlStoreDirectory(
     _In_ PXENIFACE_FDO  Fdo,
-    _In_ PCHAR          Buffer,
+    _Inout_ PCHAR       Buffer,
     _In_ ULONG          InLen,
     _In_ ULONG          OutLen,
     _Out_ PULONG_PTR    Info
@@ -395,7 +395,7 @@ IoctlSharedInfoGetTime(
 NTSTATUS
 IoctlLog(
     _In_ PXENIFACE_FDO  Fdo,
-    _In_ PCHAR          Buffer,
+    _Inout_ PCHAR       Buffer,
     _In_ ULONG          InLen,
     _In_ ULONG          OutLen
     );
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.63e.7d74fb33ee3490c0.1a10bf6b3fd.8cb220f187e06326=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 05 12:08:04 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 05 Oct 2026 12:08:04 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1440785.1658242 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDhUC-00030C-AX; Mon, 05 Oct 2026 12:08:04 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1440785.1658242; Mon, 05 Oct 2026 12:08:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDhUB-0002zj-Uo; Mon, 05 Oct 2026 12:08:03 +0000
Received: by outflank-mailman (input) for mailman id 1440785;
 Mon, 05 Oct 2026 12:08:03 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10bf6afe30003f66@swg.vates.tech>)
 id 1xDhUA-0002yX-PL
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 12:08:03 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xDhUA-00AyfZ-63
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 14:08:02 +0200
Received: from [10.42.69.11] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10bf6afe30003f66@swg.vates.tech>)
 id 6ac39311-bab6-0a2a0a5309dd-0a2a450ba4e6-32
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 14:08:02 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-42698a.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10bf6afe30003f66@swg.vates.tech>)
 id 6ac39321-b7e8-0a2a450b0019-b9ff1c12963b-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 14:08:02 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a10bf6afe30003f66.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 05 Oct 2026 12:07:58 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 0826681FA6;
 Mon,  5 Oct 2026 14:07:58 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=s9SCrF78770JdeJpdrvgwF8xmPNwX8MfhJZdugkn8q0=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=Sh67ciUbVEgqUVaEFj8/glIJA7u4gr1kc6/gm/B21kQhvyJ9h0UBykcvtNQ4Hz3BN46Rj6DaE
 WWMpfMJ2LZDMHeBB/XgZxJ5sMmnC7znBTVAYaFAEidUlTt9n33RyTT45F9e7qZPPgs6QyzOOMlP
 YzHigoNcUHakiRrTVvsg4f6Zo00alDfImTCXtFiHRPkb08737CytKdnyoQLQw8EcHdsFrxYh9+p
 WeRcOFRD1JPvzijuvyhNTEzWmTdxeINctICDzl4b1Sxm9IUkHGY5SiZ6Oe+mntVLCO8ZOGG3Vsl
 TRu1leCogh1gfhx0avJ9tF1eed2aKTLeGViND64wrQtg==
X-Zone-Loop: b3c289e608a0528fdd350e6a8224c8f4ab523bca5b21
x-campaign-type: default
x-transaction-id: e8cc2baa-cfa1-4217-a98c-c480b140fd87
x-swg-uid: 01-f1abb2f2-b4e0-4cce-b4b3-41f2b9fcbb72
X-Mailer: Sweego
Message-ID:
 <1791202078.8631fc262581453bbf619ec5b2062170.1a10bf6afe30003f66@vates.tech>
x-swg-bid: 1791202078.8631fc262581453bbf619ec5b2062170.1a10bf6afe30003f66
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 01/17] xeniface: Sync common files with xenbus
Date: Mon,  5 Oct 2026 14:07:42 +0200
In-Reply-To: <1791201881.8631fc262581453bbf619ec5b2062170.1a10bf3abba0003f66@vates.tech>
References: <1791201881.8631fc262581453bbf619ec5b2062170.1a10bf3abba0003f66@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.63a.88ec2d4af61b0f54.1a10bf6ade9.5c22bb5c04ae9235=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791202078186
X-purgate-ID: tlsNG-42698a/1791202082-A8CCF9EA-52D598C0/0/0
X-purgate-type: clean
X-purgate-size: 47862

---=Part.63a.88ec2d4af61b0f54.1a10bf6ade9.5c22bb5c04ae9235=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

xenbus common files annotations are already correctly converted to SAL 2=2E=
0=2E
We reuse these common files in xeniface=2E

Synced files:
* assert=2Eh
* registry=2Eh, registry=2Ec
* util=2Eh

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xeniface/assert=2Eh   |  82 ++++----
 src/xeniface/registry=2Ec | 452 +++++++++++++++++++++++-----------------
 src/xeniface/registry=2Eh | 207 +++++++++---------
 src/xeniface/util=2Eh     |  90 ++++----
 4 files changed, 464 insertions(+), 367 deletions(-)

diff --git a/src/xeniface/assert=2Eh b/src/xeniface/assert=2Eh
index d4d977b=2E=2E64d72cd 100644
--- a/src/xeniface/assert=2Eh
+++ b/src/xeniface/assert=2Eh
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -39,11 +39,11 @@
=20
 static FORCEINLINE VOID
 __Bug(
-    IN  ULONG       Code,
-    IN  ULONG_PTR   Parameter1,
-    IN  ULONG_PTR   Parameter2,
-    IN  ULONG_PTR   Parameter3,
-    IN  ULONG_PTR   Parameter4
+    _In_ ULONG      Code,
+    _In_ ULONG_PTR  Parameter1,
+    _In_ ULONG_PTR  Parameter2,
+    _In_ ULONG_PTR  Parameter3,
+    _In_ ULONG_PTR  Parameter4
     )
 {
 #pragma prefast(suppress:28159)
@@ -58,8 +58,8 @@ __Bug(
=20
 #define BUG(_TEXT)                                              \
         do {                                                    \
-            const CHAR  *_Text =3D (_TEXT);                       \
-            const CHAR  *_File =3D __FILE__;                      \
+            PCSTR       _Text =3D (_TEXT);                       \
+            PCSTR       _File =3D __FILE__;                      \
             ULONG       _Line =3D __LINE__;                       \
                                                                 \
             Error("BUG: " _TEXT "\n");                          \
@@ -89,7 +89,7 @@ __Bug(
 #define ASSERT(_EXP)                    \
         do {                            \
             __ASSERT(_EXP);             \
-            __analysis_assume(_EXP);    \
+            _Analysis_assume_(_EXP);    \
         } while (FALSE)
=20
 #define ASSERT3U(_X, _OP, _Y)                       \
@@ -132,7 +132,7 @@ __Bug(
=20
 #define ASSERT(_EXP)                    \
         do {                            \
-            __analysis_assume(_EXP);    \
+            _Analysis_assume_(_EXP);    \
         } while (FALSE)
=20
 #define ASSERT3U(_X, _OP, _Y)           \
@@ -154,10 +154,10 @@ __Bug(
=20
 static __inline BOOLEAN
 _IsZeroMemory(
-    IN  const PCHAR Caller,
-    IN  const PCHAR Name,
-    IN  PVOID       Buffer,
-    IN  ULONG       Length
+    _In_ PCSTR          Caller,
+    _In_ PCSTR          Name,
+    _In_ PVOID          Buffer,
+    _In_ ULONG          Length
     )
 {
     ULONG           Offset;
@@ -166,7 +166,7 @@ _IsZeroMemory(
     while (Offset < Length) {
         if (*((PUCHAR)Buffer + Offset) !=3D 0) {
             Error("%s: non-zero byte in %s (0x%p+0x%x)\n", Caller, Name, =
Buffer, Offset);
-            return FALSE;
+            return TRUE;
         }
         Offset++;
     }
@@ -178,10 +178,10 @@ _IsZeroMemory(
=20
 static __inline BOOLEAN
 _IsZeroMemory(
-    IN  const PCHAR Caller,
-    IN  const PCHAR Name,
-    IN  PVOID       Buffer,
-    IN  ULONG       Length
+    _In_ PCSTR          Caller,
+    _In_ PCSTR          Name,
+    _In_ PVOID          Buffer,
+    _In_ ULONG          Length
     )
 {
     UNREFERENCED_PARAMETER(Caller);
diff --git a/src/xeniface/registry=2Ec b/src/xeniface/registry=2Ec
index fef8c1b=2E=2E9789db9 100644
--- a/src/xeniface/registry=2Ec
+++ b/src/xeniface/registry=2Ec
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -47,7 +47,7 @@ static IOOPENDRIVERREGISTRYKEY __IoOpenDriverRegistryKey=
;
=20
 static FORCEINLINE PVOID
 __RegistryAllocate(
-    IN  ULONG   Length
+    _In_ ULONG  Length
     )
 {
     return __AllocatePoolWithTag(NonPagedPool, Length, REGISTRY_TAG);
@@ -55,7 +55,7 @@ __RegistryAllocate(
=20
 static FORCEINLINE VOID
 __RegistryFree(
-    IN  PVOID   Buffer
+    _In_ PVOID  Buffer
     )
 {
     __FreePoolWithTag(Buffer, REGISTRY_TAG);
@@ -64,8 +64,8 @@ __RegistryFree(
 NTSTATUS
 #pragma prefast(suppress:28101) // unannotated DriverEntry function
 RegistryInitialize(
-    IN  PDRIVER_OBJECT  DriverObject,
-    IN  PUNICODE_STRING Path
+    _In_opt_ PDRIVER_OBJECT DriverObject,
+    _In_ PUNICODE_STRING    Path
     )
 {
     UNICODE_STRING      Unicode;
@@ -110,21 +110,60 @@ RegistryTeardown(
     RegistryPath=2EMaximumLength =3D RegistryPath=2ELength =3D 0;
 }
=20
-PUNICODE_STRING
-RegistryGetPath(
-    VOID
+NTSTATUS
+RegistryOpenParametersKey(
+    _In_ ACCESS_MASK    DesiredAccess,
+    _Out_ PHANDLE       Key
     )
 {
-    return &RegistryPath;
-}
+    HANDLE              ServiceKey;
+    NTSTATUS            status;
+
+    if (__IoOpenDriverRegistryKey !=3D NULL) {
+        status =3D __IoOpenDriverRegistryKey(RegistryDriverObject,
+                                           DriverRegKeyParameters,
+                                           DesiredAccess,
+                                           0,
+                                           Key);
+        if (!NT_SUCCESS(status))
+            goto fail1;
=20
+        goto done;
+    }
+
+    status =3D RegistryOpenKey(NULL, &RegistryPath, DesiredAccess, &Servi=
ceKey);
+    if (!NT_SUCCESS(status))
+        goto fail2;
+
+    status =3D RegistryOpenSubKey(ServiceKey, "Parameters", DesiredAccess=
, Key);
+    if (!NT_SUCCESS(status))
+        goto fail3;
+
+    RegistryCloseKey(ServiceKey);
+
+done:
+    return STATUS_SUCCESS;
+
+fail3:
+    Error("fail3\n");
+
+    RegistryCloseKey(ServiceKey);
+
+fail2:
+    Error("fail2\n");
+
+fail1:
+    Error("fail1 %08x\n", status);
+
+    return status;
+}
=20
 NTSTATUS
 RegistryOpenKey(
-    IN  HANDLE          Parent,
-    IN  PUNICODE_STRING Path,
-    IN  ACCESS_MASK     DesiredAccess,
-    OUT PHANDLE         Key
+    _In_opt_ HANDLE         Parent,
+    _In_ PUNICODE_STRING    Path,
+    _In_ ACCESS_MASK        DesiredAccess,
+    _Out_ PHANDLE           Key
     )
 {
     OBJECT_ATTRIBUTES   Attributes;
@@ -150,15 +189,15 @@ fail1:
=20
 static NTSTATUS
 RegistryOpenRoot(
-    IN  PWCHAR          Path,
-    OUT PHANDLE         Parent,
-    OUT PWCHAR          *ChildPath
+    _In_ PWSTR              Path,
+    _Out_ PHANDLE           Parent,
+    _Outptr_result_z_ PWSTR *ChildPath
     )
 {
-    const WCHAR         Prefix[] =3D L"\\Registry\\Machine\\";
-    ULONG               Length;
-    UNICODE_STRING      Unicode;
-    NTSTATUS            status;
+    PCWSTR                  Prefix =3D L"\\Registry\\Machine\\";
+    ULONG                   Length;
+    UNICODE_STRING          Unicode;
+    NTSTATUS                status;
=20
     Length =3D (ULONG)wcslen(Prefix);
=20
@@ -183,17 +222,17 @@ fail1:
=20
 NTSTATUS
 RegistryCreateKey(
-    IN  HANDLE          Parent,
-    IN  PUNICODE_STRING Path,
-    IN  ULONG           Options,
-    OUT PHANDLE         Key
+    _In_opt_ HANDLE         Parent,
+    _In_ PUNICODE_STRING    Path,
+    _In_ ULONG              Options,
+    _Out_ PHANDLE           Key
     )
 {
-    PWCHAR              Buffer;
+    PWSTR               Buffer;
     HANDLE              Root;
-    PWCHAR              ChildPath;
-    PWCHAR              ChildName;
-    PWCHAR              Context;
+    PWSTR               ChildPath;
+    PWSTR               ChildName;
+    PWSTR               Context;
     HANDLE              Child;
     NTSTATUS            status;
=20
@@ -283,8 +322,8 @@ fail1:
=20
 NTSTATUS
 RegistryOpenServiceKey(
-    IN  ACCESS_MASK     DesiredAccess,
-    OUT PHANDLE         Key
+    _In_ ACCESS_MASK    DesiredAccess,
+    _Out_ PHANDLE       Key
     )
 {
     return RegistryOpenKey(NULL, &RegistryPath, DesiredAccess, Key);
@@ -292,65 +331,17 @@ RegistryOpenServiceKey(
=20
 NTSTATUS
 RegistryCreateServiceKey(
-    OUT PHANDLE         Key
+    _Out_ PHANDLE       Key
     )
 {
     return RegistryCreateKey(NULL, &RegistryPath, REG_OPTION_NON_VOLATILE=
, Key);
 }
=20
-NTSTATUS
-RegistryOpenParametersKey(
-    IN  ACCESS_MASK     DesiredAccess,
-    OUT PHANDLE         Key
-    )
-{
-    HANDLE              ServiceKey;
-    NTSTATUS            status;
-
-    if (__IoOpenDriverRegistryKey !=3D NULL) {
-        status =3D __IoOpenDriverRegistryKey(RegistryDriverObject,
-                                           DriverRegKeyParameters,
-                                           DesiredAccess,
-                                           0,
-                                           Key);
-        if (!NT_SUCCESS(status))
-            goto fail1;
-
-        goto done;
-    }
-
-    status =3D RegistryOpenKey(NULL, &RegistryPath, DesiredAccess, &Servi=
ceKey);
-    if (!NT_SUCCESS(status))
-        goto fail2;
-
-    status =3D RegistryOpenSubKey(ServiceKey, "Parameters", DesiredAccess=
, Key);
-    if (!NT_SUCCESS(status))
-        goto fail3;
-
-    RegistryCloseKey(ServiceKey);
-
-done:
-    return STATUS_SUCCESS;
-
-fail3:
-    Error("fail3\n");
-
-    RegistryCloseKey(ServiceKey);
-
-fail2:
-    Error("fail2\n");
-
-fail1:
-    Error("fail1 %08x\n", status);
-
-    return status;
-}
-
 NTSTATUS
 RegistryOpenSoftwareKey(
-    IN  PDEVICE_OBJECT  DeviceObject,
-    IN  ACCESS_MASK     DesiredAccess,
-    OUT PHANDLE         Key
+    _In_ PDEVICE_OBJECT DeviceObject,
+    _In_ ACCESS_MASK    DesiredAccess,
+    _Out_ PHANDLE       Key
     )
 {
     NTSTATUS            status;
@@ -370,15 +361,15 @@ fail1:
=20
 NTSTATUS
 RegistryOpenHardwareKey(
-    IN  PDEVICE_OBJECT      DeviceObject,
-    IN  ACCESS_MASK         DesiredAccess,
-    OUT PHANDLE             Key
+    _In_ PDEVICE_OBJECT     DeviceObject,
+    _In_ ACCESS_MASK        DesiredAccess,
+    _Out_ PHANDLE           Key
     )
 {
     HANDLE                  SubKey;
     ULONG                   Length;
     PKEY_NAME_INFORMATION   Info;
-    PWCHAR                  Cursor;
+    PWSTR                   Cursor;
     UNICODE_STRING          Unicode;
     NTSTATUS                status;
=20
@@ -395,11 +386,11 @@ RegistryOpenHardwareKey(
                         NULL,
                         0,
                         &Length);
-    if (status !=3D STATUS_BUFFER_OVERFLOW &&
+    if (!NT_SUCCESS(status) &&
+        status !=3D STATUS_BUFFER_OVERFLOW &&
         status !=3D STATUS_BUFFER_TOO_SMALL)
         goto fail2;
=20
-#pragma prefast(suppress:6102)
     Info =3D __RegistryAllocate(Length + sizeof (WCHAR));
=20
     status =3D STATUS_NO_MEMORY;
@@ -420,7 +411,7 @@ RegistryOpenHardwareKey(
     ASSERT(Cursor !=3D NULL);
=20
     *Cursor =3D L'\0';
-   =20
+
     RtlInitUnicodeString(&Unicode, Info->Name);
=20
     status =3D RegistryOpenKey(NULL, &Unicode, DesiredAccess, Key);
@@ -447,10 +438,10 @@ fail1:
=20
 NTSTATUS
 RegistryOpenSubKey(
-    IN  PHANDLE         Key,
-    IN  PCHAR           Name,
-    IN  ACCESS_MASK     DesiredAccess,
-    OUT PHANDLE         SubKey
+    _In_opt_ PHANDLE    Key,
+    _In_ PSTR           Name,
+    _In_ ACCESS_MASK    DesiredAccess,
+    _Out_ PHANDLE       SubKey
     )
 {
     ANSI_STRING         Ansi;
@@ -480,10 +471,10 @@ fail1:
=20
 NTSTATUS
 RegistryCreateSubKey(
-    IN  PHANDLE         Key,
-    IN  PCHAR           Name,
-    IN  ULONG           Options,
-    OUT PHANDLE         SubKey
+    _In_opt_ HANDLE     Key,
+    _In_ PSTR           Name,
+    _In_ ULONG          Options,
+    _Out_ PHANDLE       SubKey
     )
 {
     ANSI_STRING         Ansi;
@@ -513,8 +504,8 @@ fail1:
=20
 NTSTATUS
 RegistryDeleteSubKey(
-    IN  PHANDLE         Key,
-    IN  PCHAR           Name
+    _In_ PHANDLE        Key,
+    _In_ PSTR           Name
     )
 {
     ANSI_STRING         Ansi;
@@ -554,9 +545,9 @@ fail1:
=20
 NTSTATUS
 RegistryEnumerateSubKeys(
-    IN  HANDLE              Key,
-    IN  NTSTATUS            (*Callback)(PVOID, HANDLE, PANSI_STRING),
-    IN  PVOID               Context
+    _In_ HANDLE             Key,
+    _In_ NTSTATUS           (*Callback)(PVOID, HANDLE, PANSI_STRING),
+    _In_ PVOID              Context
     )
 {
     ULONG                   Size;
@@ -574,7 +565,6 @@ RegistryEnumerateSubKeys(
         status !=3D STATUS_BUFFER_TOO_SMALL)
         goto fail1;
=20
-#pragma prefast(suppress:6102)
     Full =3D __RegistryAllocate(Size);
=20
     status =3D STATUS_NO_MEMORY;
@@ -625,7 +615,7 @@ RegistryEnumerateSubKeys(
         status =3D RtlUnicodeStringToAnsiString(&Ansi, &Unicode, FALSE);
         ASSERT(NT_SUCCESS(status));
=20
-        Ansi=2ELength =3D (USHORT)(strlen(Ansi=2EBuffer) * sizeof (CHAR))=
;       =20
+        Ansi=2ELength =3D (USHORT)(strlen(Ansi=2EBuffer) * sizeof (CHAR))=
;
=20
         status =3D Callback(Context, Key, &Ansi);
=20
@@ -650,7 +640,7 @@ fail5:
 fail4:
 fail3:
     __RegistryFree(Full);
-   =20
+
 fail2:
 fail1:
     return status;
@@ -658,9 +648,9 @@ fail1:
=20
 NTSTATUS
 RegistryEnumerateValues(
-    IN  HANDLE                      Key,
-    IN  NTSTATUS                    (*Callback)(PVOID, HANDLE, PANSI_STRI=
NG, ULONG),
-    IN  PVOID                       Context
+    _In_ HANDLE                     Key,
+    _In_ NTSTATUS                   (*Callback)(PVOID, HANDLE, PANSI_STRI=
NG, ULONG),
+    _In_ PVOID                      Context
     )
 {
     ULONG                           Size;
@@ -678,7 +668,6 @@ RegistryEnumerateValues(
         status !=3D STATUS_BUFFER_TOO_SMALL)
         goto fail1;
=20
-#pragma prefast(suppress:6102)
     Full =3D __RegistryAllocate(Size);
=20
     status =3D STATUS_NO_MEMORY;
@@ -722,17 +711,24 @@ RegistryEnumerateValues(
         Ansi=2EMaximumLength =3D (USHORT)((Basic->NameLength / sizeof (WC=
HAR)) + sizeof (CHAR));
         Ansi=2EBuffer =3D __RegistryAllocate(Ansi=2EMaximumLength);
=20
+        status =3D STATUS_NO_MEMORY;
+        if (Ansi=2EBuffer =3D=3D NULL)
+            goto fail6;
+
         status =3D RtlUnicodeStringToAnsiString(&Ansi, &Unicode, FALSE);
-        ASSERT(NT_SUCCESS(status));
+        if (!NT_SUCCESS(status)) {
+            __RegistryFree(Ansi=2EBuffer);
+            goto fail7;
+        }
=20
-        Ansi=2ELength =3D (USHORT)(strlen(Ansi=2EBuffer) * sizeof (CHAR))=
;       =20
+        Ansi=2ELength =3D (USHORT)(strlen(Ansi=2EBuffer) * sizeof (CHAR))=
;
=20
         status =3D Callback(Context, Key, &Ansi, Basic->Type);
=20
         __RegistryFree(Ansi=2EBuffer);
=20
         if (!NT_SUCCESS(status))
-            goto fail6;
+            goto fail8;
     }
=20
     __RegistryFree(Basic);
@@ -741,6 +737,8 @@ RegistryEnumerateValues(
=20
     return STATUS_SUCCESS;
=20
+fail8:
+fail7:
 fail6:
 fail5:
     __RegistryFree(Basic);
@@ -748,7 +746,7 @@ fail5:
 fail4:
 fail3:
     __RegistryFree(Full);
-   =20
+
 fail2:
 fail1:
     return status;
@@ -756,8 +754,8 @@ fail1:
=20
 NTSTATUS
 RegistryDeleteValue(
-    IN  PHANDLE         Key,
-    IN  PCHAR           Name
+    _In_ PHANDLE        Key,
+    _In_ PSTR           Name
     )
 {
     ANSI_STRING         Ansi;
@@ -787,9 +785,9 @@ fail1:
=20
 NTSTATUS
 RegistryQueryDwordValue(
-    IN  HANDLE                      Key,
-    IN  PCHAR                       Name,
-    OUT PULONG                      Value
+    _In_ HANDLE                     Key,
+    _In_ PSTR                       Name,
+    _Out_ PULONG                    Value
     )
 {
     ANSI_STRING                     Ansi;
@@ -803,18 +801,18 @@ RegistryQueryDwordValue(
     status =3D RtlAnsiStringToUnicodeString(&Unicode, &Ansi, TRUE);
     if (!NT_SUCCESS(status))
         goto fail1;
-       =20
+
     status =3D ZwQueryValueKey(Key,
                              &Unicode,
                              KeyValuePartialInformation,
                              NULL,
                              0,
                              &Size);
-    if (status !=3D STATUS_BUFFER_OVERFLOW &&
+    if (!NT_SUCCESS(status) &&
+        status !=3D STATUS_BUFFER_OVERFLOW &&
         status !=3D STATUS_BUFFER_TOO_SMALL)
         goto fail2;
=20
-#pragma prefast(suppress:6102)
     Partial =3D __RegistryAllocate(Size);
=20
     status =3D STATUS_NO_MEMORY;
@@ -835,7 +833,77 @@ RegistryQueryDwordValue(
         Partial->DataLength !=3D sizeof (ULONG))
         goto fail5;
=20
-    *Value =3D *(PULONG)Partial->Data;           =20
+    *Value =3D *(PULONG)Partial->Data;
+
+    __RegistryFree(Partial);
+
+    RtlFreeUnicodeString(&Unicode);
+
+    return STATUS_SUCCESS;
+
+fail5:
+fail4:
+    __RegistryFree(Partial);
+
+fail3:
+fail2:
+    RtlFreeUnicodeString(&Unicode);
+
+fail1:
+    return status;
+}
+
+NTSTATUS
+RegistryQueryQwordValue(
+    _In_ HANDLE                     Key,
+    _In_ PSTR                       Name,
+    _Out_ PULONGLONG                Value
+    )
+{
+    ANSI_STRING                     Ansi;
+    UNICODE_STRING                  Unicode;
+    PKEY_VALUE_PARTIAL_INFORMATION  Partial;
+    ULONG                           Size;
+    NTSTATUS                        status;
+
+    RtlInitAnsiString(&Ansi, Name);
+
+    status =3D RtlAnsiStringToUnicodeString(&Unicode, &Ansi, TRUE);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    status =3D ZwQueryValueKey(Key,
+                             &Unicode,
+                             KeyValuePartialInformation,
+                             NULL,
+                             0,
+                             &Size);
+    if (!NT_SUCCESS(status) &&
+        status !=3D STATUS_BUFFER_OVERFLOW &&
+        status !=3D STATUS_BUFFER_TOO_SMALL)
+        goto fail2;
+
+    Partial =3D __RegistryAllocate(Size);
+
+    status =3D STATUS_NO_MEMORY;
+    if (Partial =3D=3D NULL)
+        goto fail3;
+
+    status =3D ZwQueryValueKey(Key,
+                             &Unicode,
+                             KeyValuePartialInformation,
+                             Partial,
+                             Size,
+                             &Size);
+    if (!NT_SUCCESS(status))
+        goto fail4;
+
+    status =3D STATUS_INVALID_PARAMETER;
+    if (Partial->Type !=3D REG_QWORD ||
+        Partial->DataLength !=3D sizeof (ULONGLONG))
+        goto fail5;
+
+    *Value =3D *(PULONGLONG)Partial->Data;
=20
     __RegistryFree(Partial);
=20
@@ -857,9 +925,9 @@ fail1:
=20
 NTSTATUS
 RegistryUpdateDwordValue(
-    IN  HANDLE                      Key,
-    IN  PCHAR                       Name,
-    IN  ULONG                       Value
+    _In_ HANDLE                     Key,
+    _In_ PSTR                       Name,
+    _In_ ULONG                      Value
     )
 {
     ANSI_STRING                     Ansi;
@@ -872,7 +940,7 @@ RegistryUpdateDwordValue(
     status =3D RtlAnsiStringToUnicodeString(&Unicode, &Ansi, TRUE);
     if (!NT_SUCCESS(status))
         goto fail1;
-       =20
+
     Partial =3D __RegistryAllocate(FIELD_OFFSET(KEY_VALUE_PARTIAL_INFORMA=
TION, Data) +
                                  sizeof (ULONG));
=20
@@ -883,7 +951,7 @@ RegistryUpdateDwordValue(
     Partial->TitleIndex =3D 0;
     Partial->Type =3D REG_DWORD;
     Partial->DataLength =3D sizeof (ULONG);
-    *(PULONG)Partial->Data =3D Value;           =20
+    *(PULONG)Partial->Data =3D Value;
=20
     status =3D ZwSetValueKey(Key,
                            &Unicode,
@@ -913,7 +981,7 @@ fail1:
=20
 static PANSI_STRING
 RegistrySzToAnsi(
-    IN  PWCHAR      Buffer
+    _In_ PWSTR      Buffer
     )
 {
     PANSI_STRING    Ansi;
@@ -952,7 +1020,7 @@ fail1:
=20
 static PANSI_STRING
 RegistryMultiSzToAnsi(
-    IN  PWCHAR      Buffer
+    _In_ PWSTR      Buffer
     )
 {
     PANSI_STRING    Ansi;
@@ -1014,10 +1082,10 @@ fail1:
=20
 NTSTATUS
 RegistryQuerySzValue(
-    IN  HANDLE                      Key,
-    IN  PCHAR                       Name,
-    OUT PULONG                      Type OPTIONAL,
-    OUT PANSI_STRING                *Array
+    _In_ HANDLE                     Key,
+    _In_ PSTR                       Name,
+    _Out_opt_ PULONG                Type,
+    _Outptr_ PANSI_STRING           *Array
     )
 {
     ANSI_STRING                     Ansi;
@@ -1031,18 +1099,18 @@ RegistryQuerySzValue(
     status =3D RtlAnsiStringToUnicodeString(&Unicode, &Ansi, TRUE);
     if (!NT_SUCCESS(status))
         goto fail1;
-       =20
+
     status =3D ZwQueryValueKey(Key,
                              &Unicode,
                              KeyValuePartialInformation,
                              NULL,
                              0,
                              &Size);
-    if (status !=3D STATUS_BUFFER_OVERFLOW &&
+    if (!NT_SUCCESS(status) &&
+        status !=3D STATUS_BUFFER_OVERFLOW &&
         status !=3D STATUS_BUFFER_TOO_SMALL)
         goto fail2;
=20
-#pragma prefast(suppress:6102)
     Value =3D __RegistryAllocate(Size);
=20
     status =3D STATUS_NO_MEMORY;
@@ -1061,12 +1129,12 @@ RegistryQuerySzValue(
     switch (Value->Type) {
     case REG_SZ:
         status =3D STATUS_NO_MEMORY;
-        *Array =3D RegistrySzToAnsi((PWCHAR)Value->Data);
+        *Array =3D RegistrySzToAnsi((PWSTR)Value->Data);
         break;
=20
     case REG_MULTI_SZ:
         status =3D STATUS_NO_MEMORY;
-        *Array =3D RegistryMultiSzToAnsi((PWCHAR)Value->Data);
+        *Array =3D RegistryMultiSzToAnsi((PWSTR)Value->Data);
         break;
=20
     default:
@@ -1101,10 +1169,10 @@ fail1:
=20
 NTSTATUS
 RegistryQueryBinaryValue(
-    IN  HANDLE                      Key,
-    IN  PCHAR                       Name,
-    OUT PVOID                       *Buffer,
-    OUT PULONG                      Length
+    _In_ HANDLE                     Key,
+    _In_ PSTR                       Name,
+    _Outptr_ PVOID                  *Buffer,
+    _Out_ PULONG                    Length
     )
 {
     ANSI_STRING                     Ansi;
@@ -1125,11 +1193,11 @@ RegistryQueryBinaryValue(
                              NULL,
                              0,
                              &Size);
-    if (status !=3D STATUS_BUFFER_OVERFLOW &&
+    if (!NT_SUCCESS(status) &&
+        status !=3D STATUS_BUFFER_OVERFLOW &&
         status !=3D STATUS_BUFFER_TOO_SMALL)
         goto fail2;
=20
-#pragma prefast(suppress:6102)
     Partial =3D __RegistryAllocate(Size);
=20
     status =3D STATUS_NO_MEMORY;
@@ -1186,10 +1254,10 @@ fail1:
=20
 NTSTATUS
 RegistryUpdateBinaryValue(
-    IN  HANDLE                      Key,
-    IN  PCHAR                       Name,
-    IN  PVOID                       Buffer,
-    IN  ULONG                       Length
+    _In_ HANDLE                     Key,
+    _In_ PSTR                       Name,
+    _In_ PVOID                      Buffer,
+    _In_ ULONG                      Length
     )
 {
     ANSI_STRING                     Ansi;
@@ -1243,8 +1311,8 @@ fail1:
=20
 NTSTATUS
 RegistryQueryKeyName(
-    IN  HANDLE              Key,
-    OUT PANSI_STRING        *Array
+    _In_ HANDLE             Key,
+    _Outptr_ PANSI_STRING   *Array
     )
 {
     PKEY_NAME_INFORMATION   Value;
@@ -1256,12 +1324,12 @@ RegistryQueryKeyName(
                         NULL,
                         0,
                         &Size);
-    if (status !=3D STATUS_BUFFER_OVERFLOW &&
+    if (!NT_SUCCESS(status) &&
+        status !=3D STATUS_BUFFER_OVERFLOW &&
         status !=3D STATUS_BUFFER_TOO_SMALL)
         goto fail1;
=20
     // Name information is not intrinsically NULL terminated
-#pragma prefast(suppress:6102)
     Value =3D __RegistryAllocate(Size + sizeof (WCHAR));
=20
     status =3D STATUS_NO_MEMORY;
@@ -1277,7 +1345,7 @@ RegistryQueryKeyName(
         goto fail3;
=20
     Value->Name[Value->NameLength / sizeof (WCHAR)] =3D L'\0';
-    *Array =3D RegistrySzToAnsi((PWCHAR)Value->Name);
+    *Array =3D RegistrySzToAnsi((PWSTR)Value->Name);
=20
     status =3D STATUS_NO_MEMORY;
     if (*Array =3D=3D NULL)
@@ -1298,20 +1366,20 @@ fail1:
=20
 NTSTATUS
 RegistryQuerySystemStartOption(
-    IN  PCHAR                       Prefix,
-    OUT PANSI_STRING                *Value
+    _In_ PSTR                       Prefix,
+    _Outptr_ PANSI_STRING           *Value
     )
 {
     UNICODE_STRING                  Unicode;
     HANDLE                          Key;
     PANSI_STRING                    Ansi;
     ULONG                           Length;
-    PCHAR                           Option;
-    PCHAR                           Context;
+    PSTR                            Option;
+    PSTR                            Context;
     NTSTATUS                        status;
=20
     RtlInitUnicodeString(&Unicode, L"\\Registry\\Machine\\SYSTEM\\Current=
ControlSet\\Control");
-   =20
+
     status =3D RegistryOpenKey(NULL, &Unicode, KEY_READ, &Key);
     if (!NT_SUCCESS(status))
         goto fail1;
@@ -1481,10 +1549,10 @@ fail1:
=20
 NTSTATUS
 RegistryUpdateSzValue(
-    IN  HANDLE                      Key,
-    IN  PCHAR                       Name,
-    IN  ULONG                       Type,
-    IN  PANSI_STRING                Array
+    _In_ HANDLE                     Key,
+    _In_ PSTR                       Name,
+    _In_ ULONG                      Type,
+    _In_ PANSI_STRING               Array
     )
 {
     ANSI_STRING                     Ansi;
@@ -1545,7 +1613,7 @@ fail1:
=20
 VOID
 RegistryFreeSzValue(
-    IN  PANSI_STRING    Array
+    _In_ PANSI_STRING   Array
     )
 {
     ULONG               Index;
@@ -1561,7 +1629,7 @@ RegistryFreeSzValue(
=20
 VOID
 RegistryFreeBinaryValue(
-    IN  PVOID   Buffer
+    _In_ PVOID  Buffer
     )
 {
     __RegistryFree(Buffer);
@@ -1569,8 +1637,16 @@ RegistryFreeBinaryValue(
=20
 VOID
 RegistryCloseKey(
-    IN  HANDLE  Key
+    _In_ HANDLE Key
     )
 {
     ZwClose(Key);
 }
+
+PUNICODE_STRING
+RegistryGetPath(
+    VOID
+    )
+{
+    return &RegistryPath;
+}
\ No newline at end of file
diff --git a/src/xeniface/registry=2Eh b/src/xeniface/registry=2Eh
index 42ee9c8=2E=2E867aefc 100644
--- a/src/xeniface/registry=2Eh
+++ b/src/xeniface/registry=2Eh
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -37,8 +37,8 @@
=20
 extern NTSTATUS
 RegistryInitialize(
-    IN  PDRIVER_OBJECT  DriverObject,
-    IN  PUNICODE_STRING Path
+    _In_opt_ PDRIVER_OBJECT DrvObj,
+    _In_ PUNICODE_STRING    Path
     );
=20
 extern VOID
@@ -46,171 +46,178 @@ RegistryTeardown(
     VOID
     );
=20
-extern PUNICODE_STRING
-RegistryGetPath(
-    VOID
+extern NTSTATUS
+RegistryOpenParametersKey(
+    _In_ ACCESS_MASK    DesiredAccess,
+    _Out_ PHANDLE       Key
     );
=20
 extern NTSTATUS
 RegistryOpenKey(
-    IN  HANDLE          Parent,
-    IN  PUNICODE_STRING Path,
-    IN  ACCESS_MASK     DesiredAccess,
-    OUT PHANDLE         Key
+    _In_opt_ HANDLE         Parent,
+    _In_ PUNICODE_STRING    Path,
+    _In_ ACCESS_MASK        DesiredAccess,
+    _Out_ PHANDLE           Key
     );
=20
 extern NTSTATUS
 RegistryCreateKey(
-    IN  HANDLE          Parent,
-    IN  PUNICODE_STRING Path,
-    IN  ULONG           Options,
-    OUT PHANDLE         Key
+    _In_opt_ HANDLE         Parent,
+    _In_ PUNICODE_STRING    Path,
+    _In_ ULONG              Options,
+    _Out_ PHANDLE           Key
     );
=20
 extern NTSTATUS
 RegistryOpenServiceKey(
-    IN  ACCESS_MASK DesiredAccess,
-    OUT PHANDLE     Key
+    _In_ ACCESS_MASK    DesiredAccess,
+    _Out_ PHANDLE       Key
     );
=20
 extern NTSTATUS
 RegistryCreateServiceKey(
-    OUT PHANDLE     Key
-    );
-
-extern NTSTATUS
-RegistryOpenParametersKey(
-    IN  ACCESS_MASK     DesiredAccess,
-    OUT PHANDLE         Key
+    _Out_ PHANDLE   Key
     );
=20
 extern NTSTATUS
 RegistryOpenSoftwareKey(
-    IN  PDEVICE_OBJECT  DeviceObject,
-    IN  ACCESS_MASK     DesiredAccess,
-    OUT PHANDLE         Key
+    _In_ PDEVICE_OBJECT DeviceObject,
+    _In_ ACCESS_MASK    DesiredAccess,
+    _Out_ PHANDLE       Key
     );
=20
 extern NTSTATUS
 RegistryOpenHardwareKey(
-    IN  PDEVICE_OBJECT  DeviceObject,
-    IN  ACCESS_MASK     DesiredAccess,
-    OUT PHANDLE         Key
+    _In_ PDEVICE_OBJECT DeviceObject,
+    _In_ ACCESS_MASK    DesiredAccess,
+    _Out_ PHANDLE       Key
     );
=20
 extern NTSTATUS
 RegistryOpenSubKey(
-    IN  HANDLE      Key,
-    IN  PCHAR       Name,
-    IN  ACCESS_MASK DesiredAccess,
-    OUT PHANDLE     SubKey
+    _In_opt_ HANDLE     Key,
+    _In_ PSTR           Name,
+    _In_ ACCESS_MASK    DesiredAccess,
+    _Out_ PHANDLE       SubKey
     );
=20
 extern NTSTATUS
 RegistryCreateSubKey(
-    IN  HANDLE      Key,
-    IN  PCHAR       Name,
-    IN  ULONG       Options,
-    OUT PHANDLE     SubKey
+    _In_opt_ HANDLE Key,
+    _In_ PSTR       Name,
+    _In_ ULONG      Options,
+    _Out_ PHANDLE   SubKey
     );
=20
 extern NTSTATUS
 RegistryDeleteSubKey(
-    IN  HANDLE      Key,
-    IN  PCHAR       Name
+    _In_ HANDLE     Key,
+    _In_ PSTR       Name
     );
=20
 extern NTSTATUS
 RegistryEnumerateSubKeys(
-    IN  HANDLE      Key,
-    IN  NTSTATUS    (*Callback)(PVOID, HANDLE, PANSI_STRING),
-    IN  PVOID       Context
+    _In_ HANDLE     Key,
+    _In_ NTSTATUS   (*Callback)(PVOID, HANDLE, PANSI_STRING),
+    _In_ PVOID      Context
     );
=20
 extern NTSTATUS
 RegistryEnumerateValues(
-    IN  HANDLE      Key,
-    IN  NTSTATUS    (*Callback)(PVOID, HANDLE, PANSI_STRING, ULONG),
-    IN  PVOID       Context
+    _In_ HANDLE     Key,
+    _In_ NTSTATUS   (*Callback)(PVOID, HANDLE, PANSI_STRING, ULONG),
+    _In_ PVOID      Context
     );
=20
 extern NTSTATUS
 RegistryDeleteValue(
-    IN  HANDLE      Key,
-    IN  PCHAR       Name
+    _In_ HANDLE     Key,
+    _In_ PSTR       Name
     );
=20
 extern NTSTATUS
 RegistryQueryDwordValue(
-    IN  HANDLE          Key,
-    IN  PCHAR           Name,
-    OUT PULONG          Value
+    _In_ HANDLE         Key,
+    _In_ PSTR           Name,
+    _Out_ PULONG        Value
     );
-   =20
+
+extern NTSTATUS
+RegistryQueryQwordValue(
+    _In_ HANDLE         Key,
+    _In_ PSTR           Name,
+    _Out_ PULONGLONG    Value
+    );
+
 extern NTSTATUS
 RegistryUpdateDwordValue(
-    IN  HANDLE          Key,
-    IN  PCHAR           Name,
-    IN  ULONG           Value
+    _In_ HANDLE         Key,
+    _In_ PSTR           Name,
+    _In_ ULONG          Value
     );
-   =20
+
 extern NTSTATUS
 RegistryQuerySzValue(
-    IN  HANDLE          Key,
-    IN  PCHAR           Name,
-    OUT PULONG          Type OPTIONAL,
-    OUT PANSI_STRING    *Array
+    _In_ HANDLE             Key,
+    _In_ PSTR               Name,
+    _Out_opt_ PULONG        Type,
+    _Outptr_ PANSI_STRING   *Array
     );
=20
 extern NTSTATUS
 RegistryQueryBinaryValue(
-    IN  HANDLE          Key,
-    IN  PCHAR           Name,
-    OUT PVOID           *Buffer,
-    OUT PULONG          Length
+    _In_ HANDLE         Key,
+    _In_ PSTR           Name,
+    _Outptr_ PVOID      *Buffer,
+    _Out_ PULONG        Length
     );
=20
 extern NTSTATUS
 RegistryUpdateBinaryValue(
-    IN  HANDLE          Key,
-    IN  PCHAR           Name,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length
+    _In_ HANDLE         Key,
+    _In_ PSTR           Name,
+    _In_ PVOID          Buffer,
+    _In_ ULONG          Length
     );
=20
 extern NTSTATUS
 RegistryQueryKeyName(
-    IN  HANDLE              Key,
-    OUT PANSI_STRING        *Array
+    _In_ HANDLE             Key,
+    _Outptr_ PANSI_STRING   *Array
     );
=20
 extern NTSTATUS
 RegistryQuerySystemStartOption(
-    IN  PCHAR           Name,
-    OUT PANSI_STRING    *Option
+    _In_ PSTR               Name,
+    _Outptr_ PANSI_STRING   *Option
     );
=20
 extern VOID
 RegistryFreeSzValue(
-    IN  PANSI_STRING    Array
+    _In_ PANSI_STRING   Array
     );
=20
 extern VOID
 RegistryFreeBinaryValue(
-    IN  PVOID           Buffer
+    _In_ PVOID          Buffer
     );
=20
 extern NTSTATUS
 RegistryUpdateSzValue(
-    IN  HANDLE          Key,
-    IN  PCHAR           Name,
-    IN  ULONG           Type,
-    IN  PANSI_STRING    Array
+    _In_ HANDLE         Key,
+    _In_ PSTR           Name,
+    _In_ ULONG          Type,
+    _In_ PANSI_STRING   Array
     );
=20
 extern VOID
 RegistryCloseKey(
-    IN  HANDLE  Key
+    _In_ HANDLE Key
+    );
+
+extern PUNICODE_STRING
+RegistryGetPath(
+    VOID
     );
=20
 #endif  // _XENIFACE_REGISTRY_H
diff --git a/src/xeniface/util=2Eh b/src/xeniface/util=2Eh
index a278d72=2E=2E8c6a917 100644
--- a/src/xeniface/util=2Eh
+++ b/src/xeniface/util=2Eh
@@ -38,12 +38,12 @@
=20
 #include "assert=2Eh"
=20
-#define	P2ROUNDUP(_x, _a)   \
-        (-(-(_x) & -(_a)))
+#define	P2ROUNDUP(_t, _x, _a)   \
+        (-(-((_t)(_x)) & -(((_t)(_a)))))
=20
 static FORCEINLINE LONG
 __ffs(
-    IN  unsigned long long  mask
+    _In_ unsigned long long mask
     )
 {
     unsigned char           *array =3D (unsigned char *)&mask;
@@ -82,11 +82,11 @@ __ffs(
=20
 static FORCEINLINE VOID
 __CpuId(
-    IN  ULONG   Leaf,
-    OUT PULONG  EAX OPTIONAL,
-    OUT PULONG  EBX OPTIONAL,
-    OUT PULONG  ECX OPTIONAL,
-    OUT PULONG  EDX OPTIONAL
+    _In_ ULONG          Leaf,
+    _Out_opt_ PULONG    EAX,
+    _Out_opt_ PULONG    EBX,
+    _Out_opt_ PULONG    ECX,
+    _Out_opt_ PULONG    EDX
     )
 {
     int         Value[4] =3D {0};
@@ -108,8 +108,8 @@ __CpuId(
=20
 static FORCEINLINE LONG
 __InterlockedAdd(
-    IN  LONG    *Value,
-    IN  LONG    Delta
+    _In_ LONG   *Value,
+    _In_ LONG   Delta
     )
 {
     LONG        New;
@@ -125,8 +125,8 @@ __InterlockedAdd(
=20
 static FORCEINLINE LONG
 __InterlockedSubtract(
-    IN  LONG    *Value,
-    IN  LONG    Delta
+    _In_ LONG   *Value,
+    _In_ LONG   Delta
     )
 {
     LONG        New;
@@ -140,23 +140,24 @@ __InterlockedSubtract(
     return New;
 }
=20
-__checkReturn
+_Check_return_
 static FORCEINLINE PVOID
 __AllocatePoolWithTag(
-    IN  POOL_TYPE   PoolType,
-    IN  SIZE_T      NumberOfBytes,
-    IN  ULONG       Tag
+    _In_ POOL_TYPE  PoolType,
+    _In_ SIZE_T     NumberOfBytes,
+    _In_ ULONG      Tag
     )
 {
     PUCHAR          Buffer;
=20
-    __analysis_assume(PoolType =3D=3D NonPagedPool ||
+    _Analysis_assume_(PoolType =3D=3D NonPagedPool ||
                       PoolType =3D=3D PagedPool);
=20
     if (NumberOfBytes =3D=3D 0)
         return NULL;
=20
 #if (_MSC_VER >=3D 1928) // VS 16=2E9 (EWDK 20344 or later)
+#pragma warning(suppress:28160) // annotation error
     Buffer =3D ExAllocatePoolUninitialized(PoolType, NumberOfBytes, Tag);
 #else
 #pragma warning(suppress:28160) // annotation error
@@ -171,8 +172,8 @@ __AllocatePoolWithTag(
=20
 static FORCEINLINE VOID
 __FreePoolWithTag(
-    IN  PVOID   Buffer,
-    IN  ULONG   Tag
+    _In_ PVOID  Buffer,
+    _In_ ULONG  Tag
     )
 {
     ExFreePoolWithTag(Buffer, Tag);
@@ -180,28 +181,37 @@ __FreePoolWithTag(
=20
 static FORCEINLINE PMDL
 __AllocatePages(
-    IN  ULONG           Count
+    _In_ ULONG          Count,
+    _In_ BOOLEAN        Contiguous
     )
 {
     PHYSICAL_ADDRESS    LowAddress;
     PHYSICAL_ADDRESS    HighAddress;
     LARGE_INTEGER       SkipBytes;
     SIZE_T              TotalBytes;
+    ULONG               Flags;
     PMDL                Mdl;
     PUCHAR              MdlMappedSystemVa;
     NTSTATUS            status;
=20
     LowAddress=2EQuadPart =3D 0ull;
     HighAddress=2EQuadPart =3D ~0ull;
-    SkipBytes=2EQuadPart =3D 0ull;
     TotalBytes =3D (SIZE_T)PAGE_SIZE * Count;
=20
+    if (Contiguous) {
+        SkipBytes=2EQuadPart =3D TotalBytes;
+        Flags =3D MM_ALLOCATE_REQUIRE_CONTIGUOUS_CHUNKS;
+    } else {
+        SkipBytes=2EQuadPart =3D 0ull;
+        Flags =3D MM_ALLOCATE_FULLY_REQUIRED;
+    }
+
     Mdl =3D MmAllocatePagesForMdlEx(LowAddress,
                                   HighAddress,
                                   SkipBytes,
                                   TotalBytes,
                                   MmCached,
-                                  MM_ALLOCATE_FULLY_REQUIRED);
+                                  Flags);
=20
     status =3D STATUS_NO_MEMORY;
     if (Mdl =3D=3D NULL)
@@ -245,11 +255,11 @@ fail1:
     return NULL;
 }
=20
-#define __AllocatePage()    __AllocatePages(1)
+#define __AllocatePage()    __AllocatePages(1, FALSE)
=20
 static FORCEINLINE VOID
 __FreePages(
-    IN	PMDL	Mdl
+    _In_ PMDL   Mdl
     )
 {
     PUCHAR	MdlMappedSystemVa;
@@ -265,15 +275,17 @@ __FreePages(
=20
 #define __FreePage(_Mdl)    __FreePages(_Mdl)
=20
-static FORCEINLINE PCHAR
+static FORCEINLINE PSTR
 __strtok_r(
-    IN      PCHAR   Buffer,
-    IN      PCHAR   Delimiter,
-    IN OUT  PCHAR   *Context
+    _In_opt_ PSTR   Buffer,
+    _In_ PSTR       Delimiter,
+    _When_(Buffer !=3D NULL, _Outptr_)
+    _When_(Buffer =3D=3D NULL, _Inout_)
+    PSTR            *Context
     )
 {
-    PCHAR           Token;
-    PCHAR           End;
+    PSTR            Token;
+    PSTR            End;
=20
     if (Buffer !=3D NULL)
         *Context =3D Buffer;
@@ -303,15 +315,17 @@ __strtok_r(
     return Token;
 }
=20
-static FORCEINLINE PWCHAR
+static FORCEINLINE PWSTR
 __wcstok_r(
-    IN      PWCHAR  Buffer,
-    IN      PWCHAR  Delimiter,
-    IN OUT  PWCHAR  *Context
+    _In_opt_ PWSTR  Buffer,
+    _In_ PWSTR      Delimiter,
+    _When_(Buffer !=3D NULL, _Outptr_)
+    _When_(Buffer =3D=3D NULL, _Inout_)
+    PWSTR           *Context
     )
 {
-    PWCHAR          Token;
-    PWCHAR          End;
+    PWSTR           Token;
+    PWSTR           End;
=20
     if (Buffer !=3D NULL)
         *Context =3D Buffer;
@@ -343,7 +357,7 @@ __wcstok_r(
=20
 static FORCEINLINE CHAR
 __toupper(
-    IN  CHAR    Character
+    _In_ CHAR   Character
     )
 {
     if (Character < 'a' || Character > 'z')
@@ -354,7 +368,7 @@ __toupper(
=20
 static FORCEINLINE CHAR
 __tolower(
-    IN  CHAR    Character
+    _In_ CHAR   Character
     )
 {
     if (Character < 'A' || Character > 'Z')
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.63a.88ec2d4af61b0f54.1a10bf6ade9.5c22bb5c04ae9235=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 05 12:08:04 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 05 Oct 2026 12:08:04 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1440783.1658233 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDhUB-0002zT-UX; Mon, 05 Oct 2026 12:08:03 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1440783.1658233; Mon, 05 Oct 2026 12:08:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDhUB-0002zM-Rh; Mon, 05 Oct 2026 12:08:03 +0000
Received: by outflank-mailman (input) for mailman id 1440783;
 Mon, 05 Oct 2026 12:08:02 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10bf6b41a0003f66@swg.vates.tech>)
 id 1xDhUA-0002yZ-U5
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 12:08:02 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xDhUA-00AyfZ-Ap
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 14:08:02 +0200
Received: from [10.42.69.12] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10bf6b41a0003f66@swg.vates.tech>)
 id 6ac39318-bab6-0a2a0a5309dd-0a2a450c8424-34
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 14:08:02 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-d25034.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10bf6b41a0003f66@swg.vates.tech>)
 id 6ac39321-f479-0a2a450c0019-b9ff1c2296bf-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 14:08:02 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a10bf6b41a0003f66.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 05 Oct 2026 12:07:59 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id EC537823B9;
 Mon,  5 Oct 2026 14:07:58 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=0xS2l3toBpYoWatRpmNB5HMsAiYdcjEwFYhrdjtAKow=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=DxuDfbNlj9Y4HVD8R9PTC/PnSuwqhhPtwBhro9BWbtX3YvNT/fJT2GXf9wgRY+jjWdfGqq54d
 9Eifi47s01Edl/bdG7TrWd1BddX/qkjx9PrpGR/v4FfJz3l1pYEzxWRq1p4E6SBLU/1hehLCltr
 nkQy81jWIxv3OxOwYnHbWg6oYiASOtjLOnwIz69mwn+GTN2NZEbGzBUxSSTZbYP8sAH3mzEf8Jl
 KPMOZqKwypvGDaqyi0/CH4otko8yhodRCAIdb9URgxa7ruCf5BUnmewkRoyd/KBfng+0EWyx/xD
 vuG+cO4CarzbdCncOGG0CBDR6mWMFf2OHt5jL8fuCw7g==
X-Zone-Loop: 5089fccd824cf4495cb7766300a88ef5cea031813801
x-campaign-type: default
x-transaction-id: 0c701b97-d3fa-427f-b9b8-decc6887f7db
x-swg-uid: 01-ab4e90ff-d595-4b2c-af7a-5bec41f6cf14
X-Mailer: Sweego
Message-ID:
 <1791202079.8631fc262581453bbf619ec5b2062170.1a10bf6b41a0003f66@vates.tech>
x-swg-bid: 1791202079.8631fc262581453bbf619ec5b2062170.1a10bf6b41a0003f66
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 03/17] util: fix some annotations
Date: Mon,  5 Oct 2026 14:07:44 +0200
In-Reply-To: <1791201881.8631fc262581453bbf619ec5b2062170.1a10bf3abba0003f66@vates.tech>
References: <1791201881.8631fc262581453bbf619ec5b2062170.1a10bf3abba0003f66@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.63c.32d088848a09685f.1a10bf6b181.9c67e17e1bea960f=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791202079105
X-purgate-ID: tlsNG-d25034/1791202082-51737A5B-5CD00143/0/0
X-purgate-type: clean
X-purgate-size: 3352

---=Part.63c.32d088848a09685f.1a10bf6b181.9c67e17e1bea960f=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

* _InterlockedAdd() and _InterlockedSubstract() call
InterlockedCompareExchange(Value, New, Old), however the signature of
InterlockedCompareExchange is annotated as (_Inout_, _In_, _Out_)[1], so
Value should be annotated as _Inout_ in these functions as Value could be
updated=2E

* __strtok_r() indirectly write in Buffer
(*Context =3D Buffer, and later *Context =3D End)=2E
So Buffer should be annotated as _Inout_opt_=2E

* functions using these are updated accordingly

[1]: https://learn=2Emicrosoft=2Ecom/en-us/windows/win32/api/winnt/nf-winn=
t-interlockedcompareexchange

Assisted-by: Claude/Opus-4
Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xeniface/fdo=2Ec  |  2 +-
 src/xeniface/util=2Eh | 28 ++++++++++++++--------------
 2 files changed, 15 insertions(+), 15 deletions(-)

diff --git a/src/xeniface/fdo=2Ec b/src/xeniface/fdo=2Ec
index e3f9b4f=2E=2Eaba717b 100644
--- a/src/xeniface/fdo=2Ec
+++ b/src/xeniface/fdo=2Ec
@@ -530,7 +530,7 @@ __FdoFreeAnsi(
 static FORCEINLINE BOOLEAN
 __FdoMatchDistribution(
     _In_ PXENIFACE_FDO  Fdo,
-    _In_ PCHAR          Buffer
+    _Inout_ PCHAR       Buffer
     )
 {
     PCHAR               Vendor;
diff --git a/src/xeniface/util=2Eh b/src/xeniface/util=2Eh
index 8c6a917=2E=2E77daa07 100644
--- a/src/xeniface/util=2Eh
+++ b/src/xeniface/util=2Eh
@@ -108,8 +108,8 @@ __CpuId(
=20
 static FORCEINLINE LONG
 __InterlockedAdd(
-    _In_ LONG   *Value,
-    _In_ LONG   Delta
+    _Inout_ LONG    *Value,
+    _In_ LONG       Delta
     )
 {
     LONG        New;
@@ -125,8 +125,8 @@ __InterlockedAdd(
=20
 static FORCEINLINE LONG
 __InterlockedSubtract(
-    _In_ LONG   *Value,
-    _In_ LONG   Delta
+    _Inout_ LONG    *Value,
+    _In_ LONG       Delta
     )
 {
     LONG        New;
@@ -277,15 +277,15 @@ __FreePages(
=20
 static FORCEINLINE PSTR
 __strtok_r(
-    _In_opt_ PSTR   Buffer,
-    _In_ PSTR       Delimiter,
+    _Inout_opt_ PSTR    Buffer,
+    _In_ PSTR           Delimiter,
     _When_(Buffer !=3D NULL, _Outptr_)
     _When_(Buffer =3D=3D NULL, _Inout_)
-    PSTR            *Context
+    PSTR                *Context
     )
 {
-    PSTR            Token;
-    PSTR            End;
+    PSTR                Token;
+    PSTR                End;
=20
     if (Buffer !=3D NULL)
         *Context =3D Buffer;
@@ -317,15 +317,15 @@ __strtok_r(
=20
 static FORCEINLINE PWSTR
 __wcstok_r(
-    _In_opt_ PWSTR  Buffer,
-    _In_ PWSTR      Delimiter,
+    _In_opt_ PWSTR      Buffer,
+    _In_ PWSTR          Delimiter,
     _When_(Buffer !=3D NULL, _Outptr_)
     _When_(Buffer =3D=3D NULL, _Inout_)
-    PWSTR           *Context
+    PWSTR               *Context
     )
 {
-    PWSTR           Token;
-    PWSTR           End;
+    PWSTR               Token;
+    PWSTR               End;
=20
     if (Buffer !=3D NULL)
         *Context =3D Buffer;
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.63c.32d088848a09685f.1a10bf6b181.9c67e17e1bea960f=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 05 12:08:04 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 05 Oct 2026 12:08:04 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1440786.1658248 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDhUC-00030p-DV; Mon, 05 Oct 2026 12:08:04 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1440786.1658248; Mon, 05 Oct 2026 12:08:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDhUC-00030J-12; Mon, 05 Oct 2026 12:08:04 +0000
Received: by outflank-mailman (input) for mailman id 1440786;
 Mon, 05 Oct 2026 12:08:03 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10bf6b89c0003f66@swg.vates.tech>)
 id 1xDhUB-0002yg-5Z
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 12:08:03 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xDhUA-00AyfZ-IL
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 14:08:02 +0200
Received: from [10.42.69.12] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10bf6b89c0003f66@swg.vates.tech>)
 id 6ac39318-bab6-0a2a0a5309dd-0a2a450c8424-38
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 14:08:02 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-d25034.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10bf6b89c0003f66@swg.vates.tech>)
 id 6ac39321-f479-0a2a450c0019-b9ff1c2296bf-4
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 14:08:02 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a10bf6b89c0003f66.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 05 Oct 2026 12:08:00 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 67B56827E7;
 Mon,  5 Oct 2026 14:08:00 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=7zZS6LPGhB4RAvWJPb9XmR5T70KP5sT9CkZB1p5F3sg=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=GnhttWKXGtsNmZD9tCn+haO3OojXCnmfo7iNwVRtmL1m4A3I6G5B8Ut5Bw/69mxYmSslDHGIF
 l8deuFk1AdPaBaWElU/y9tXG4kGfdgumbEa0hghQ8OdzwInR8WiEYRByxbefEnGb9pSi8bdO/en
 F64n97Y/MUNvOUL+5fUEriDsgtA3OFW8qX+d5L6/IP9vUzLPC49y5OvDvPAPo8YuWV/v2PGR0PB
 g+NeHNQsDYCNMZ8tGl+NL+4k3AhFENi0VG+yP+3UIven7zHRic8P7ienak2RG+SAMT6VDNIpf/f
 RrFGtTG7fVuPB7azdr6Z8joo6Nlipk+YKcmCQOSQjSMg==
X-Zone-Loop: 3f8c830726cbb6c1d935cf8ce64706725b0d495ddc2c
x-campaign-type: default
x-transaction-id: 47404508-df59-4ec0-8ecc-8f222f952843
x-swg-uid: 01-ec496274-01b9-4b46-9a56-4c10622cf45a
X-Mailer: Sweego
Message-ID:
 <1791202080.8631fc262581453bbf619ec5b2062170.1a10bf6b89c0003f66@vates.tech>
x-swg-bid: 1791202080.8631fc262581453bbf619ec5b2062170.1a10bf6b89c0003f66
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 08/17] wmi: fix annotation of AccessWmiBuffer
Date: Mon,  5 Oct 2026 14:07:49 +0200
In-Reply-To: <1791201881.8631fc262581453bbf619ec5b2062170.1a10bf3abba0003f66@vates.tech>
References: <1791201881.8631fc262581453bbf619ec5b2062170.1a10bf3abba0003f66@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.641.c5b334878f3a182.1a10bf6b701.963a5ee051979bdd=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791202080513
X-purgate-ID: tlsNG-d25034/1791202082-768DDA5B-61C715BF/0/0
X-purgate-type: clean
X-purgate-size: 1903

---=Part.641.c5b334878f3a182.1a10bf6b701.963a5ee051979bdd=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

AccessWmiBuffer can be called with Buffer set to null, and reading it
should be protected, so we change its annotation to _In_reads_opt_=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xeniface/wmi=2Ec | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/src/xeniface/wmi=2Ec b/src/xeniface/wmi=2Ec
index c2488f8=2E=2E8e3f002 100644
--- a/src/xeniface/wmi=2Ec
+++ b/src/xeniface/wmi=2Ec
@@ -658,19 +658,19 @@ CompareUnicodeStrings(
=20
 static int
 AccessWmiBuffer(
-    _In_ PUCHAR Buffer,
-    _In_ int    readbuffer,
-    _Out_ ULONG *RequiredSize,
-    _In_ size_t BufferSize,
+    _In_reads_opt_(BufferSize) PUCHAR   Buffer,
+    _In_ int                            readbuffer,
+    _Out_ ULONG                         *RequiredSize,
+    _In_ size_t                         BufferSize,
     =2E=2E=2E
     )
 {
-    va_list     vl;
-    ULONG_PTR   offset;
-    ULONG_PTR   offby;
-    PUCHAR      position =3D Buffer;
-    PUCHAR      endbuffer =3D Buffer + BufferSize;
-    int         overflow =3D 0;
+    va_list                             vl;
+    ULONG_PTR                           offset;
+    ULONG_PTR                           offby;
+    PUCHAR                              position =3D Buffer;
+    PUCHAR                              endbuffer =3D Buffer + BufferSize=
;
+    int                                 overflow =3D 0;
=20
     va_start(vl, BufferSize);
     for (;;) {
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.641.c5b334878f3a182.1a10bf6b701.963a5ee051979bdd=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 05 12:08:04 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 05 Oct 2026 12:08:04 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1440787.1658249 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDhUC-00031X-EV; Mon, 05 Oct 2026 12:08:04 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1440787.1658249; Mon, 05 Oct 2026 12:08:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDhUC-00030b-3b; Mon, 05 Oct 2026 12:08:04 +0000
Received: by outflank-mailman (input) for mailman id 1440787;
 Mon, 05 Oct 2026 12:08:03 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10bf6b7a40003f66@swg.vates.tech>)
 id 1xDhUB-0002yb-3v
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 12:08:03 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xDhUA-00AyfZ-Gs
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 14:08:02 +0200
Received: from [10.42.69.12] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10bf6b7a40003f66@swg.vates.tech>)
 id 6ac39318-bab6-0a2a0a5309dd-0a2a450c8424-36
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 14:08:02 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-d25034.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10bf6b7a40003f66@swg.vates.tech>)
 id 6ac39321-f479-0a2a450c0019-b9ff1c22b387-4
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 14:08:02 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a10bf6b7a40003f66.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 05 Oct 2026 12:08:00 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 2CCCE827DA;
 Mon,  5 Oct 2026 14:08:00 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=sF+HHqVyf9AyssN+RpxndBmFzWvteH1t8T7Ax/+9eNA=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=VR9FedCSRxT/3bBRYkth9vx9olvx0CvI3bqTM3bW300Vfue4XCa3ixE6dFcSdobwo8nbcBw2x
 4oqly3z2eZrTkVhthB+9Do3jkn2RkASboRjN7fAapMY1qh3wiiIH6oPnzS4pt1YXXjyyntnR4ga
 nny8c1XaPChps+BQ8aMIb2QUan4iOhjCnHRKk7na3A+3+z2+Af6krI3FtOmTakdaPuDmWFrEJb8
 hS3njRCEu8kxFMDkMo9m6DtilfY7yyLjtaT9utvRHnm9VZklFdd+Z7P3u3f5r8JgDXuyuGCkexV
 Uw/eWj8RBQXLMf6odvsX5BJ7WotiDi43ALlBWxPaPv+A==
X-Zone-Loop: 4c69fd08daa3af48b5b2c9b08b13b977b9e8bdd8ef11
x-campaign-type: default
x-transaction-id: 620b134c-e807-4639-8048-8a8cf9df6e92
x-swg-uid: 01-13253caa-5830-4e54-bb2f-a4c63f44fefe
X-Mailer: Sweego
Message-ID:
 <1791202080.8631fc262581453bbf619ec5b2062170.1a10bf6b7a40003f66@vates.tech>
x-swg-bid: 1791202080.8631fc262581453bbf619ec5b2062170.1a10bf6b7a40003f66
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 07/17] update string typedefs in all include files
Date: Mon,  5 Oct 2026 14:07:48 +0200
In-Reply-To: <1791201881.8631fc262581453bbf619ec5b2062170.1a10bf3abba0003f66@vates.tech>
References: <1791201881.8631fc262581453bbf619ec5b2062170.1a10bf3abba0003f66@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.640.5c83f6505cc9797.1a10bf6b610.836c47269a696ee9=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791202080272
X-purgate-ID: tlsNG-d25034/1791202082-016C6A5B-646D2DAD/0/0
X-purgate-type: clean
X-purgate-size: 8055

---=Part.640.5c83f6505cc9797.1a10bf6b610.836c47269a696ee9=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Update string typedef in include files to STR as STR is already
correctly annotated for string handling=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 include/cache_interface=2Eh  |  4 ++--
 include/gnttab_interface=2Eh |  4 ++--
 include/store_interface=2Eh  | 28 ++++++++++++++--------------
 include/xencontrol=2Eh       | 20 ++++++++++----------
 4 files changed, 28 insertions(+), 28 deletions(-)

diff --git a/include/cache_interface=2Eh b/include/cache_interface=2Eh
index 186af5b=2E=2Ee5f4ce9 100644
--- a/include/cache_interface=2Eh
+++ b/include/cache_interface=2Eh
@@ -127,7 +127,7 @@ typedef VOID
 typedef NTSTATUS
 (*XENBUS_CACHE_CREATE_V1)(
     _In_ PINTERFACE                 Interface,
-    _In_ const CHAR                 *Name,
+    _In_ PCSTR                      Name,
     _In_ ULONG                      Size,
     _In_ ULONG                      Reservation,
     _In_ XENBUS_CACHE_CTOR          Ctor,
@@ -159,7 +159,7 @@ typedef NTSTATUS
 typedef NTSTATUS
 (*XENBUS_CACHE_CREATE)(
     _In_ PINTERFACE                 Interface,
-    _In_ const CHAR                 *Name,
+    _In_ PCSTR                      Name,
     _In_ ULONG                      Size,
     _In_ ULONG                      Reservation,
     _In_ ULONG                      Cap,
diff --git a/include/gnttab_interface=2Eh b/include/gnttab_interface=2Eh
index c3c9874=2E=2E7d930e1 100644
--- a/include/gnttab_interface=2Eh
+++ b/include/gnttab_interface=2Eh
@@ -76,7 +76,7 @@ typedef VOID
 typedef NTSTATUS
 (*XENBUS_GNTTAB_CREATE_CACHE_V1)(
     _In_ PINTERFACE                 Interface,
-    _In_ const CHAR                 *Name,
+    _In_ PCSTR                      Name,
     _In_ ULONG                      Reservation,
     _In_ XENBUS_CACHE_ACQUIRE_LOCK  AcquireLock,
     _In_ XENBUS_CACHE_RELEASE_LOCK  ReleaseLock,
@@ -99,7 +99,7 @@ typedef NTSTATUS
 typedef NTSTATUS
 (*XENBUS_GNTTAB_CREATE_CACHE)(
     _In_ PINTERFACE                 Interface,
-    _In_ const CHAR                 *Name,
+    _In_ PCSTR                      Name,
     _In_ ULONG                      Reservation,
     _In_ ULONG                      Cap,
     _In_ XENBUS_CACHE_ACQUIRE_LOCK  AcquireLock,
diff --git a/include/store_interface=2Eh b/include/store_interface=2Eh
index f633b02=2E=2E2f01674 100644
--- a/include/store_interface=2Eh
+++ b/include/store_interface=2Eh
@@ -97,7 +97,7 @@ typedef VOID
 typedef VOID
 (*XENBUS_STORE_FREE)(
     _In_ PINTERFACE Interface,
-    _In_ PCHAR      Buffer
+    _In_ PSTR       Buffer
     );
=20
 /*! \typedef XENBUS_STORE_READ
@@ -118,8 +118,8 @@ typedef NTSTATUS
 (*XENBUS_STORE_READ)(
     _In_ PINTERFACE                     Interface,
     _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
-    _In_opt_ PCHAR                      Prefix,
-    _In_ PCHAR                          Node,
+    _In_opt_ PSTR                       Prefix,
+    _In_ PSTR                           Node,
     _Outptr_ PCHAR                      *Buffer
     );
=20
@@ -141,9 +141,9 @@ typedef NTSTATUS
 (*XENBUS_STORE_PRINTF)(
     _In_ PINTERFACE                     Interface,
     _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
-    _In_opt_ PCHAR                      Prefix,
-    _In_ PCHAR                          Node,
-    _In_ const CHAR                     *Format,
+    _In_opt_ PSTR                       Prefix,
+    _In_ PSTR                           Node,
+    _In_ PCSTR                          Format,
     =2E=2E=2E
     );
=20
@@ -161,8 +161,8 @@ typedef NTSTATUS
 (*XENBUS_STORE_REMOVE)(
     _In_ PINTERFACE                     Interface,
     _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
-    _In_opt_ PCHAR                      Prefix,
-    _In_ PCHAR                          Node
+    _In_opt_ PSTR                       Prefix,
+    _In_ PSTR                           Node
     );
=20
 /*! \typedef XENBUS_STORE_DIRECTORY
@@ -183,8 +183,8 @@ typedef NTSTATUS
 (*XENBUS_STORE_DIRECTORY)(
     _In_ PINTERFACE                     Interface,
     _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
-    _In_opt_ PCHAR                      Prefix,
-    _In_ PCHAR                          Node,
+    _In_opt_ PSTR                       Prefix,
+    _In_ PSTR                           Node,
     _Outptr_ PCHAR                      *Buffer
     );
=20
@@ -232,8 +232,8 @@ typedef NTSTATUS
 typedef NTSTATUS
 (*XENBUS_STORE_WATCH_ADD)(
     _In_ PINTERFACE                 Interface,
-    _In_opt_ PCHAR                  Prefix,
-    _In_ PCHAR                      Node,
+    _In_opt_ PSTR                   Prefix,
+    _In_ PSTR                       Node,
     _In_ PKEVENT                    Event,
     _Outptr_ PXENBUS_STORE_WATCH    *Watch
     );
@@ -281,8 +281,8 @@ typedef NTSTATUS
 (*XENBUS_STORE_PERMISSIONS_SET)(
     _In_ PINTERFACE                     Interface,
     _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
-    _In_opt_ PCHAR                      Prefix,
-    _In_ PCHAR                          Node,
+    _In_opt_ PSTR                       Prefix,
+    _In_ PSTR                           Node,
     _In_ PXENBUS_STORE_PERMISSION       Permissions,
     _In_ ULONG                          NumberPermissions
     );
diff --git a/include/xencontrol=2Eh b/include/xencontrol=2Eh
index efd790f=2E=2Ef9f0570 100644
--- a/include/xencontrol=2Eh
+++ b/include/xencontrol=2Eh
@@ -39,8 +39,8 @@ _XENCONTROL_LOG_LEVEL {
 typedef void
 XENCONTROL_LOGGER(
     _In_ XENCONTROL_LOG_LEVEL   LogLevel,
-    _In_ const CHAR             *Function,
-    _In_ const WCHAR            *Message,
+    _In_ PCSTR                  Function,
+    _In_ PCWSTR                 Message,
     _In_ va_list                Args
     );
=20
@@ -272,7 +272,7 @@ XcStoreRead(
     _In_ PXENCONTROL_CONTEXT    Xc,
     _In_ PSTR                   Path,
     _In_ DWORD                  cbValue,
-    _Out_ CHAR                  *Value
+    _Out_ PSTR                  Value
     );
=20
 /*! \brief Write a value to a XenStore key
@@ -285,8 +285,8 @@ XENCONTROL_API
 DWORD
 XcStoreWrite(
     _In_ PXENCONTROL_CONTEXT    Xc,
-    _In_ PCHAR                  Path,
-    _In_ PCHAR                  Value
+    _In_ PSTR                   Path,
+    _In_ PSTR                   Value
     );
=20
 /*! \brief Enumerate all immediate child keys of a XenStore key
@@ -300,9 +300,9 @@ XENCONTROL_API
 DWORD
 XcStoreDirectory(
     _In_ PXENCONTROL_CONTEXT    Xc,
-    _In_ PCHAR                  Path,
+    _In_ PSTR                   Path,
     _In_ DWORD                  cbOutput,
-    _Out_ CHAR                  *Output
+    _Out_ PSTR                  Output
     );
=20
 /*! \brief Remove a XenStore key
@@ -314,7 +314,7 @@ XENCONTROL_API
 DWORD
 XcStoreRemove(
     _In_ PXENCONTROL_CONTEXT    Xc,
-    _In_ PCHAR                  Path
+    _In_ PSTR                   Path
     );
=20
 /*! \brief Set permissions of a XenStore key
@@ -328,7 +328,7 @@ XENCONTROL_API
 DWORD
 XcStoreSetPermissions(
     _In_ PXENCONTROL_CONTEXT        Xc,
-    _In_ PCHAR                      Path,
+    _In_ PSTR                       Path,
     _In_ ULONG                      Count,
     _In_ PXENIFACE_STORE_PERMISSION Permissions
     );
@@ -344,7 +344,7 @@ XENCONTROL_API
 DWORD
 XcStoreAddWatch(
     _In_ PXENCONTROL_CONTEXT    Xc,
-    _In_ PCHAR                  Path,
+    _In_ PSTR                   Path,
     _In_ HANDLE                 Event,
     _Outptr_ PVOID              *Handle
     );
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.640.5c83f6505cc9797.1a10bf6b610.836c47269a696ee9=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 05 12:08:04 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 05 Oct 2026 12:08:04 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1440788.1658251 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDhUC-00032o-K2; Mon, 05 Oct 2026 12:08:04 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1440788.1658251; Mon, 05 Oct 2026 12:08:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDhUC-00031T-6n; Mon, 05 Oct 2026 12:08:04 +0000
Received: by outflank-mailman (input) for mailman id 1440788;
 Mon, 05 Oct 2026 12:08:03 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10bf6b1f20003f66@swg.vates.tech>)
 id 1xDhUA-0002yY-RU
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 12:08:03 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xDhUA-00AyfZ-87
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 14:08:02 +0200
Received: from [10.42.69.12] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10bf6b1f20003f66@swg.vates.tech>)
 id 6ac39318-bab6-0a2a0a5309dd-0a2a450c8424-32
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 14:08:02 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-d25034.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10bf6b1f20003f66@swg.vates.tech>)
 id 6ac39321-f479-0a2a450c0019-b9ff1c22b387-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 14:08:02 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a10bf6b1f20003f66.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 05 Oct 2026 12:07:59 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 6E9F8823E8;
 Mon,  5 Oct 2026 14:07:58 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=D3QlNU9F23qaKDmksL75HJ8E9c2d1CY3iMtg4v5mBgM=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=EQkRuQjpj4y9J+oAqEQVgmaJKPR5bVST88a30bycxIF45v2FH6f70+KnidX8jfQFq91W7SBgg
 OtlpMcJmDfITBpwyXXBTd1f6RDfXUwacjEV41d7BwU2Q6avSpGWvzXkR60BlBCBngZw1V3aLBL5
 pby+SvrzngzhOsxzSxhPs6xbkZDZT7JtHVWwMON7M9MsEQQrzCImd1N0CS6bYCvzCIxyUftq8Ws
 F/RLrRwCvzC0v3tugCpGFYqQbJ+CPRH8vdzQ1UN3rTnPCjGHQGxpPTACPWo8YT6ZnxZ78cm7orT
 YxEe2HgSSWozuf/1u5vUYGhat6yL6M81L8ww0W/AUUcA==
X-Zone-Loop: 512745c21357be353e5d3292db725c19e8a1846a95c5
x-campaign-type: default
x-transaction-id: 219d2032-00e5-46d9-9e09-29f8d2fb633b
x-swg-uid: 01-57f71ff3-d1fc-450d-8536-21bf705dd416
X-Mailer: Sweego
Message-ID:
 <1791202079.8631fc262581453bbf619ec5b2062170.1a10bf6b1f20003f66@vates.tech>
x-swg-bid: 1791202079.8631fc262581453bbf619ec5b2062170.1a10bf6b1f20003f66
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 02/17] Convert to SAL 2.0 annotations
Date: Mon,  5 Oct 2026 14:07:43 +0200
In-Reply-To: <1791201881.8631fc262581453bbf619ec5b2062170.1a10bf3abba0003f66@vates.tech>
References: <1791201881.8631fc262581453bbf619ec5b2062170.1a10bf3abba0003f66@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.63b.cb540c06152299a9.1a10bf6b073.af9cc41220790088=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791202078835
X-purgate-ID: tlsNG-d25034/1791202082-778D59FB-D5736802/0/0
X-purgate-type: clean
X-purgate-size: 178615

---=Part.63b.cb540c06152299a9.1a10bf6b073.af9cc41220790088=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Mechanical pass, no functional change=2E

Annotations:
  IN/OUT/IN OUT        -> _In_/_Out_/_Inout_
  __in/__out/__inout   -> same, _opt_ variants preserved
  trailing OPTIONAL    -> folded into the annotation (_In_opt_ &c)
  _Out_ on a T **      -> _Outptr_
  __drv_*/__checkReturn-> _IRQL_requires_*/_Dispatch_type_/_Check_return_

The old macros expand to nothing, so these parameters carried no
information to the analyser=2E  OPTIONAL as a trailing keyword is not
understood either, whereas _opt_ tells it NULL must be tested before
dereference=2E  _Outptr_ states that the callee writes the pointer,
which bare _Out_ does not=2E

Assisted-by: Claude/Opus-4
Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 include/cache_interface=2Eh       |  76 ++--
 include/evtchn_interface=2Eh      |  72 ++--
 include/gnttab_interface=2Eh      |  88 ++---
 include/shared_info_interface=2Eh |  44 +--
 include/store_interface=2Eh       |  84 ++---
 include/suspend_interface=2Eh     |  24 +-
 include/xencontrol=2Eh            | 160 ++++-----
 src/xencontrol/xencontrol=2Ec     | 330 ++++++++---------
 src/xeniface/driver=2Ec           |  28 +-
 src/xeniface/fdo=2Ec              | 346 +++++++++---------
 src/xeniface/fdo=2Eh              |  26 +-
 src/xeniface/ioctl_evtchn=2Ec     | 144 ++++----
 src/xeniface/ioctl_gnttab=2Ec     | 132 +++----
 src/xeniface/ioctl_sharedinfo=2Ec |  10 +-
 src/xeniface/ioctl_store=2Ec      | 162 ++++-----
 src/xeniface/ioctl_suspend=2Ec    |  66 ++--
 src/xeniface/ioctls=2Ec           |  48 +--
 src/xeniface/ioctls=2Eh           | 270 +++++++-------
 src/xeniface/irp_queue=2Ec        |  46 +--
 src/xeniface/irp_queue=2Eh        |  28 +-
 src/xeniface/log=2Eh              |  16 +-
 src/xeniface/mutex=2Eh            |  10 +-
 src/xeniface/names=2Eh            |  18 +-
 src/xeniface/thread=2Ec           |  38 +-
 src/xeniface/thread=2Eh           |  18 +-
 src/xeniface/wmi=2Ec              | 614 ++++++++++++++++----------------
 src/xeniface/wmi=2Eh              |  18 +-
 27 files changed, 1458 insertions(+), 1458 deletions(-)

diff --git a/include/cache_interface=2Eh b/include/cache_interface=2Eh
index c45777c=2E=2E186af5b 100644
--- a/include/cache_interface=2Eh
+++ b/include/cache_interface=2Eh
@@ -54,7 +54,7 @@ typedef struct _XENBUS_CACHE    XENBUS_CACHE, *PXENBUS_C=
ACHE;
 */
 typedef NTSTATUS
 (*XENBUS_CACHE_ACQUIRE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_CACHE_RELEASE
@@ -64,7 +64,7 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENBUS_CACHE_RELEASE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_CACHE_CTOR
@@ -79,8 +79,8 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENBUS_CACHE_CTOR)(
-    IN  PVOID   Argument,
-    IN  PVOID   Object
+    _In_ PVOID  Argument,
+    _In_ PVOID  Object
     );
=20
 /*! \typedef XENBUS_CACHE_DTOR
@@ -94,8 +94,8 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENBUS_CACHE_DTOR)(
-    IN  PVOID   Argument,
-    IN  PVOID   Object
+    _In_ PVOID  Argument,
+    _In_ PVOID  Object
     );
=20
 /*! \typedef XENBUS_CACHE_ACQUIRE_LOCK
@@ -108,7 +108,7 @@ typedef VOID
 */
 typedef VOID
 (*XENBUS_CACHE_ACQUIRE_LOCK)(
-    IN  PVOID   Argument
+    _In_ PVOID  Argument
     );
=20
 /*! \typedef XENBUS_CACHE_RELEASE_LOCK
@@ -121,21 +121,21 @@ typedef VOID
 */
 typedef VOID
 (*XENBUS_CACHE_RELEASE_LOCK)(
-    IN  PVOID   Argument
+    _In_ PVOID  Argument
     );
=20
 typedef NTSTATUS
 (*XENBUS_CACHE_CREATE_V1)(
-    IN  PINTERFACE                  Interface,
-    IN  const CHAR                  *Name,
-    IN  ULONG                       Size,
-    IN  ULONG                       Reservation,
-    IN  XENBUS_CACHE_CTOR           Ctor,
-    IN  XENBUS_CACHE_DTOR           Dtor,
-    IN  XENBUS_CACHE_ACQUIRE_LOCK   AcquireLock,
-    IN  XENBUS_CACHE_RELEASE_LOCK   ReleaseLock,
-    IN  PVOID                       Argument OPTIONAL,
-    OUT PXENBUS_CACHE               *Cache
+    _In_ PINTERFACE                 Interface,
+    _In_ const CHAR                 *Name,
+    _In_ ULONG                      Size,
+    _In_ ULONG                      Reservation,
+    _In_ XENBUS_CACHE_CTOR          Ctor,
+    _In_ XENBUS_CACHE_DTOR          Dtor,
+    _In_ XENBUS_CACHE_ACQUIRE_LOCK  AcquireLock,
+    _In_ XENBUS_CACHE_RELEASE_LOCK  ReleaseLock,
+    _In_opt_ PVOID                  Argument,
+    _Outptr_ PXENBUS_CACHE          *Cache
     );
=20
 /*! \typedef XENBUS_CACHE_CREATE
@@ -158,17 +158,17 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENBUS_CACHE_CREATE)(
-    IN  PINTERFACE                  Interface,
-    IN  const CHAR                  *Name,
-    IN  ULONG                       Size,
-    IN  ULONG                       Reservation,
-    IN  ULONG                       Cap,
-    IN  XENBUS_CACHE_CTOR           Ctor,
-    IN  XENBUS_CACHE_DTOR           Dtor,
-    IN  XENBUS_CACHE_ACQUIRE_LOCK   AcquireLock,
-    IN  XENBUS_CACHE_RELEASE_LOCK   ReleaseLock,
-    IN  PVOID                       Argument OPTIONAL,
-    OUT PXENBUS_CACHE               *Cache
+    _In_ PINTERFACE                 Interface,
+    _In_ const CHAR                 *Name,
+    _In_ ULONG                      Size,
+    _In_ ULONG                      Reservation,
+    _In_ ULONG                      Cap,
+    _In_ XENBUS_CACHE_CTOR          Ctor,
+    _In_ XENBUS_CACHE_DTOR          Dtor,
+    _In_ XENBUS_CACHE_ACQUIRE_LOCK  AcquireLock,
+    _In_ XENBUS_CACHE_RELEASE_LOCK  ReleaseLock,
+    _In_opt_ PVOID                  Argument,
+    _Outptr_ PXENBUS_CACHE          *Cache
     );
=20
 /*! \typedef XENBUS_CACHE_GET
@@ -181,9 +181,9 @@ typedef NTSTATUS
 */
 typedef PVOID
 (*XENBUS_CACHE_GET)(
-    IN  PINTERFACE      Interface,
-    IN  PXENBUS_CACHE   Cache,
-    IN  BOOLEAN         Locked
+    _In_ PINTERFACE     Interface,
+    _In_ PXENBUS_CACHE  Cache,
+    _In_ BOOLEAN        Locked
     );
=20
 /*! \typedef XENBUS_CACHE_PUT
@@ -196,10 +196,10 @@ typedef PVOID
 */
 typedef VOID
 (*XENBUS_CACHE_PUT)(
-    IN  PINTERFACE      Interface,
-    IN  PXENBUS_CACHE   Cache,
-    IN  PVOID           Object,
-    IN  BOOLEAN         Locked
+    _In_ PINTERFACE     Interface,
+    _In_ PXENBUS_CACHE  Cache,
+    _In_ PVOID          Object,
+    _In_ BOOLEAN        Locked
     );
=20
 /*! \typedef XENBUS_CACHE_DESTROY
@@ -212,8 +212,8 @@ typedef VOID
 */
 typedef VOID
 (*XENBUS_CACHE_DESTROY)(
-    IN  PINTERFACE      Interface,
-    IN  PXENBUS_CACHE   Cache
+    _In_ PINTERFACE     Interface,
+    _In_ PXENBUS_CACHE  Cache
     );
=20
 // {A98DFD78-416A-4949-92A5-E084F2F4B44E}
diff --git a/include/evtchn_interface=2Eh b/include/evtchn_interface=2Eh
index cfc8d2b=2E=2E5c46f97 100644
--- a/include/evtchn_interface=2Eh
+++ b/include/evtchn_interface=2Eh
@@ -64,7 +64,7 @@ typedef struct _XENBUS_EVTCHN_CHANNEL XENBUS_EVTCHN_CHAN=
NEL, *PXENBUS_EVTCHN_CHA
 */
 typedef NTSTATUS
 (*XENBUS_EVTCHN_ACQUIRE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_EVTCHN_RELEASE
@@ -74,7 +74,7 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENBUS_EVTCHN_RELEASE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_EVTCHN_OPEN
@@ -108,10 +108,10 @@ typedef VOID
 */
 typedef PXENBUS_EVTCHN_CHANNEL
 (*XENBUS_EVTCHN_OPEN)(
-    IN  PINTERFACE          Interface,
-    IN  XENBUS_EVTCHN_TYPE  Type,
-    IN  PKSERVICE_ROUTINE   Function,
-    IN  PVOID               Argument OPTIONAL,
+    _In_ PINTERFACE         Interface,
+    _In_ XENBUS_EVTCHN_TYPE Type,
+    _In_ PKSERVICE_ROUTINE  Function,
+    _In_opt_ PVOID          Argument,
     =2E=2E=2E
     );
=20
@@ -125,17 +125,17 @@ typedef PXENBUS_EVTCHN_CHANNEL
 */
 typedef NTSTATUS
 (*XENBUS_EVTCHN_BIND)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_EVTCHN_CHANNEL  Channel,
-    IN  USHORT                  Group,
-    IN  UCHAR                   Number
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_EVTCHN_CHANNEL Channel,
+    _In_ USHORT                 Group,
+    _In_ UCHAR                  Number
     );
=20
 typedef VOID
 (*XENBUS_EVTCHN_UNMASK_V4)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_EVTCHN_CHANNEL  Channel,
-    IN  BOOLEAN                 InCallback
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_EVTCHN_CHANNEL Channel,
+    _In_ BOOLEAN                InCallback
     );
=20
 /*! \typedef XENBUS_EVTCHN_UNMASK
@@ -148,16 +148,16 @@ typedef VOID
 */
 typedef BOOLEAN
 (*XENBUS_EVTCHN_UNMASK)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_EVTCHN_CHANNEL  Channel,
-    IN  BOOLEAN                 InCallback,
-    IN  BOOLEAN                 Force
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_EVTCHN_CHANNEL Channel,
+    _In_ BOOLEAN                InCallback,
+    _In_ BOOLEAN                Force
     );
=20
 typedef VOID
 (*XENBUS_EVTCHN_SEND_V1)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_EVTCHN_CHANNEL  Channel
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_EVTCHN_CHANNEL Channel
     );
=20
 /*! \typedef XENBUS_EVTCHN_SEND
@@ -171,8 +171,8 @@ typedef VOID
 */
 typedef VOID
 (*XENBUS_EVTCHN_SEND)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_EVTCHN_CHANNEL  Channel
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_EVTCHN_CHANNEL Channel
     );
=20
 /*! \typedef XENBUS_EVTCHN_TRIGGER
@@ -183,8 +183,8 @@ typedef VOID
 */
 typedef VOID
 (*XENBUS_EVTCHN_TRIGGER)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_EVTCHN_CHANNEL  Channel
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_EVTCHN_CHANNEL Channel
     );
=20
 /*! \typedef XENBUS_EVTCHN_GET_COUNT
@@ -196,15 +196,15 @@ typedef VOID
 */
 typedef ULONG
 (*XENBUS_EVTCHN_GET_COUNT)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_EVTCHN_CHANNEL  Channel
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_EVTCHN_CHANNEL Channel
     );
=20
 typedef NTSTATUS
 (*XENBUS_EVTCHN_WAIT_V5)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_EVTCHN_CHANNEL  Channel,
-    IN  PLARGE_INTEGER          Timeout OPTIONAL
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_EVTCHN_CHANNEL Channel,
+    _In_opt_ PLARGE_INTEGER     Timeout
     );
=20
 /*! \typedef XENBUS_EVTCHN_WAIT
@@ -217,10 +217,10 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENBUS_EVTCHN_WAIT)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_EVTCHN_CHANNEL  Channel,
-    IN  ULONG                   Count,
-    IN  PLARGE_INTEGER          Timeout OPTIONAL
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_EVTCHN_CHANNEL Channel,
+    _In_ ULONG                  Count,
+    _In_opt_ PLARGE_INTEGER     Timeout
     );
=20
 /*! \typedef XENBUS_EVTCHN_GET_PORT
@@ -232,8 +232,8 @@ typedef NTSTATUS
 */
 typedef ULONG
 (*XENBUS_EVTCHN_GET_PORT)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_EVTCHN_CHANNEL  Channel
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_EVTCHN_CHANNEL Channel
     );
=20
 /*! \typedef XENBUS_EVTCHN_CLOSE
@@ -244,8 +244,8 @@ typedef ULONG
 */
 typedef VOID
 (*XENBUS_EVTCHN_CLOSE)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_EVTCHN_CHANNEL  Channel
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_EVTCHN_CHANNEL Channel
     );
=20
 // {BE2440AC-1098-4150-AF4D-452FADCEF923}
diff --git a/include/gnttab_interface=2Eh b/include/gnttab_interface=2Eh
index 87303e2=2E=2Ec3c9874 100644
--- a/include/gnttab_interface=2Eh
+++ b/include/gnttab_interface=2Eh
@@ -60,7 +60,7 @@ typedef struct _XENBUS_GNTTAB_CACHE XENBUS_GNTTAB_CACHE,=
 *PXENBUS_GNTTAB_CACHE;
 */
 typedef NTSTATUS
 (*XENBUS_GNTTAB_ACQUIRE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_GNTTAB_RELEASE
@@ -70,18 +70,18 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENBUS_GNTTAB_RELEASE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 typedef NTSTATUS
 (*XENBUS_GNTTAB_CREATE_CACHE_V1)(
-    IN  PINTERFACE                  Interface,
-    IN  const CHAR                  *Name,
-    IN  ULONG                       Reservation,
-    IN  XENBUS_CACHE_ACQUIRE_LOCK   AcquireLock,
-    IN  XENBUS_CACHE_RELEASE_LOCK   ReleaseLock,
-    IN  PVOID                       Argument OPTIONAL,
-    OUT PXENBUS_GNTTAB_CACHE        *Cache
+    _In_ PINTERFACE                 Interface,
+    _In_ const CHAR                 *Name,
+    _In_ ULONG                      Reservation,
+    _In_ XENBUS_CACHE_ACQUIRE_LOCK  AcquireLock,
+    _In_ XENBUS_CACHE_RELEASE_LOCK  ReleaseLock,
+    _In_opt_ PVOID                  Argument,
+    _Outptr_ PXENBUS_GNTTAB_CACHE   *Cache
     );
=20
 /*! \typedef XENBUS_GNTTAB_CREATE_CACHE
@@ -98,14 +98,14 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENBUS_GNTTAB_CREATE_CACHE)(
-    IN  PINTERFACE                  Interface,
-    IN  const CHAR                  *Name,
-    IN  ULONG                       Reservation,
-    IN  ULONG                       Cap,
-    IN  XENBUS_CACHE_ACQUIRE_LOCK   AcquireLock,
-    IN  XENBUS_CACHE_RELEASE_LOCK   ReleaseLock,
-    IN  PVOID                       Argument OPTIONAL,
-    OUT PXENBUS_GNTTAB_CACHE        *Cache
+    _In_ PINTERFACE                 Interface,
+    _In_ const CHAR                 *Name,
+    _In_ ULONG                      Reservation,
+    _In_ ULONG                      Cap,
+    _In_ XENBUS_CACHE_ACQUIRE_LOCK  AcquireLock,
+    _In_ XENBUS_CACHE_RELEASE_LOCK  ReleaseLock,
+    _In_opt_ PVOID                  Argument,
+    _Outptr_ PXENBUS_GNTTAB_CACHE   *Cache
     );
=20
 /*! \typedef XENBUS_GNTTAB_PERMIT_FOREIGN_ACCESS
@@ -123,13 +123,13 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENBUS_GNTTAB_PERMIT_FOREIGN_ACCESS)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_GNTTAB_CACHE        Cache,
-    IN  BOOLEAN                     Locked,
-    IN  USHORT                      Domain,
-    IN  PFN_NUMBER                  Pfn,
-    IN  BOOLEAN                     ReadOnly,
-    OUT PXENBUS_GNTTAB_ENTRY        *Entry
+    _In_ PINTERFACE                 Interface,
+    _In_ PXENBUS_GNTTAB_CACHE       Cache,
+    _In_ BOOLEAN                    Locked,
+    _In_ USHORT                     Domain,
+    _In_ PFN_NUMBER                 Pfn,
+    _In_ BOOLEAN                    ReadOnly,
+    _Outptr_ PXENBUS_GNTTAB_ENTRY   *Entry
     );
=20
 /*! \typedef XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS
@@ -143,10 +143,10 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_GNTTAB_CACHE        Cache,
-    IN  BOOLEAN                     Locked,
-    IN  PXENBUS_GNTTAB_ENTRY        Entry
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_GNTTAB_CACHE   Cache,
+    _In_ BOOLEAN                Locked,
+    _In_ PXENBUS_GNTTAB_ENTRY   Entry
     );
=20
 /*! \typedef XENBUS_GNTTAB_GET_REFERENCE
@@ -158,8 +158,8 @@ typedef NTSTATUS
 */
 typedef ULONG
 (*XENBUS_GNTTAB_GET_REFERENCE)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_GNTTAB_ENTRY        Entry
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_GNTTAB_ENTRY   Entry
     );
=20
 /*! \typedef XENBUS_GNTTAB_QUERY_REFERENCE
@@ -172,10 +172,10 @@ typedef ULONG
 */
 typedef NTSTATUS
 (*XENBUS_GNTTAB_QUERY_REFERENCE)(
-    IN  PINTERFACE  Interface,
-    IN  ULONG       Reference,
-    OUT PPFN_NUMBER Pfn OPTIONAL,
-    OUT PBOOLEAN    ReadOnly OPTIONAL
+    _In_ PINTERFACE             Interface,
+    _In_ ULONG                  Reference,
+    _Outptr_opt_ PPFN_NUMBER    Pfn,
+    _Out_opt_ PBOOLEAN          ReadOnly
     );
=20
 #define XENBUS_GNTTAB_CONSOLE_REFERENCE 0
@@ -193,8 +193,8 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENBUS_GNTTAB_DESTROY_CACHE)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_GNTTAB_CACHE    Cache
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_GNTTAB_CACHE   Cache
     );
=20
 /*! \typedef XENBUS_GNTTAB_MAP_FOREIGN_PAGES
@@ -210,12 +210,12 @@ typedef VOID
=20
 typedef NTSTATUS
 (*XENBUS_GNTTAB_MAP_FOREIGN_PAGES)(
-    IN  PINTERFACE              Interface,
-    IN  USHORT                  Domain,
-    IN  ULONG                   NumberPages,
-    IN  PULONG                  References,
-    IN  BOOLEAN                 ReadOnly,
-    OUT PHYSICAL_ADDRESS        *Address
+    _In_ PINTERFACE         Interface,
+    _In_ USHORT             Domain,
+    _In_ ULONG              NumberPages,
+    _In_ PULONG             References,
+    _In_ BOOLEAN            ReadOnly,
+    _Out_ PHYSICAL_ADDRESS  *Address
     );
=20
 /*! \typedef XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES
@@ -226,8 +226,8 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES)(
-    IN  PINTERFACE              Interface,
-    IN  PHYSICAL_ADDRESS        Address
+    _In_ PINTERFACE         Interface,
+    _In_ PHYSICAL_ADDRESS   Address
     );
=20
 // {763679C5-E5C2-4A6D-8B88-6BB02EC42D8E}
diff --git a/include/shared_info_interface=2Eh b/include/shared_info_inter=
face=2Eh
index 7aaf4f5=2E=2Eb9b7874 100644
--- a/include/shared_info_interface=2Eh
+++ b/include/shared_info_interface=2Eh
@@ -48,7 +48,7 @@
 */ =20
 typedef NTSTATUS
 (*XENBUS_SHARED_INFO_ACQUIRE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_SHARED_INFO_RELEASE
@@ -58,7 +58,7 @@ typedef NTSTATUS
 */ =20
 typedef VOID
 (*XENBUS_SHARED_INFO_RELEASE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_SHARED_INFO_UPCALL_SUPPORTED
@@ -66,8 +66,8 @@ typedef VOID
 */
 typedef BOOLEAN
 (*XENBUS_SHARED_INFO_UPCALL_SUPPORTED)(
-    IN  PINTERFACE  Interface,
-    IN  ULONG       Index
+    _In_ PINTERFACE Interface,
+    _In_ ULONG      Index
     );
=20
 /*! \typedef XENBUS_SHARED_INFO_UPCALL_PENDING
@@ -75,14 +75,14 @@ typedef BOOLEAN
 */
 typedef BOOLEAN
 (*XENBUS_SHARED_INFO_UPCALL_PENDING)(
-    IN  PINTERFACE  Interface,
-    IN  ULONG       Index
+    _In_ PINTERFACE Interface,
+    _In_ ULONG      Index
     );
=20
 typedef BOOLEAN
 (*XENBUS_SHARED_INFO_EVENT)(
-    IN  PVOID   Argument,
-    IN  ULONG   Port
+    _In_ PVOID  Argument,
+    _In_ ULONG  Port
     );
=20
 /*! \typedef XENBUS_SHARED_INFO_EVTCHN_POLL
@@ -90,10 +90,10 @@ typedef BOOLEAN
 */ =20
 typedef BOOLEAN
 (*XENBUS_SHARED_INFO_EVTCHN_POLL)(
-    IN  PINTERFACE                  Interface,
-    IN  ULONG                       Index,
-    IN  XENBUS_SHARED_INFO_EVENT    Event,
-    IN  PVOID                       Argument
+    _In_ PINTERFACE                 Interface,
+    _In_ ULONG                      Index,
+    _In_ XENBUS_SHARED_INFO_EVENT   Event,
+    _In_ PVOID                      Argument
     );
=20
 /*! \typedef XENBUS_SHARED_INFO_EVTCHN_ACK
@@ -101,8 +101,8 @@ typedef BOOLEAN
 */ =20
 typedef VOID
 (*XENBUS_SHARED_INFO_EVTCHN_ACK)(
-    IN  PINTERFACE  Interface,
-    IN  ULONG       Port
+    _In_ PINTERFACE Interface,
+    _In_ ULONG      Port
     );
=20
 /*! \typedef XENBUS_SHARED_INFO_EVTCHN_MASK
@@ -110,8 +110,8 @@ typedef VOID
 */ =20
 typedef VOID
 (*XENBUS_SHARED_INFO_EVTCHN_MASK)(
-    IN  PINTERFACE  Interface,
-    IN  ULONG       Port
+    _In_ PINTERFACE Interface,
+    _In_ ULONG      Port
     );
=20
 /*! \typedef XENBUS_SHARED_INFO_EVTCHN_UNMASK
@@ -119,13 +119,13 @@ typedef VOID
 */ =20
 typedef BOOLEAN
 (*XENBUS_SHARED_INFO_EVTCHN_UNMASK)(
-    IN  PINTERFACE  Interface,
-    IN  ULONG       Port
+    _In_ PINTERFACE Interface,
+    _In_ ULONG      Port
     );
=20
 typedef LARGE_INTEGER
 (*XENBUS_SHARED_INFO_GET_TIME_V2)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_SHARED_INFO_GET_TIME
@@ -137,9 +137,9 @@ typedef LARGE_INTEGER
 */ =20
 typedef VOID
 (*XENBUS_SHARED_INFO_GET_TIME)(
-    IN  PINTERFACE      Interface,
-    OUT PLARGE_INTEGER  Time,
-    OUT PBOOLEAN        Local
+    _In_ PINTERFACE         Interface,
+    _Out_ PLARGE_INTEGER    Time,
+    _Out_ PBOOLEAN          Local
     );
=20
 // {7E73C34F-1640-4649-A8F3-263BC930A004}
diff --git a/include/store_interface=2Eh b/include/store_interface=2Eh
index ca883bd=2E=2Ef633b02 100644
--- a/include/store_interface=2Eh
+++ b/include/store_interface=2Eh
@@ -75,7 +75,7 @@ typedef struct _XENBUS_STORE_PERMISSION {
 */ =20
 typedef NTSTATUS
 (*XENBUS_STORE_ACQUIRE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_STORE_RELEASE
@@ -85,7 +85,7 @@ typedef NTSTATUS
 */ =20
 typedef VOID
 (*XENBUS_STORE_RELEASE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_STORE_FREE
@@ -96,8 +96,8 @@ typedef VOID
 */ =20
 typedef VOID
 (*XENBUS_STORE_FREE)(
-    IN  PINTERFACE  Interface,
-    IN  PCHAR       Buffer
+    _In_ PINTERFACE Interface,
+    _In_ PCHAR      Buffer
     );
=20
 /*! \typedef XENBUS_STORE_READ
@@ -116,11 +116,11 @@ typedef VOID
 */ =20
 typedef NTSTATUS
 (*XENBUS_STORE_READ)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node,
-    OUT PCHAR                       *Buffer
+    _In_ PINTERFACE                     Interface,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PCHAR                      Prefix,
+    _In_ PCHAR                          Node,
+    _Outptr_ PCHAR                      *Buffer
     );
=20
 /*! \typedef XENBUS_STORE_PRINTF
@@ -139,11 +139,11 @@ typedef NTSTATUS
 */ =20
 typedef NTSTATUS
 (*XENBUS_STORE_PRINTF)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node,
-    IN  const CHAR                  *Format,
+    _In_ PINTERFACE                     Interface,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PCHAR                      Prefix,
+    _In_ PCHAR                          Node,
+    _In_ const CHAR                     *Format,
     =2E=2E=2E
     );
=20
@@ -159,10 +159,10 @@ typedef NTSTATUS
 */ =20
 typedef NTSTATUS
 (*XENBUS_STORE_REMOVE)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node
+    _In_ PINTERFACE                     Interface,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PCHAR                      Prefix,
+    _In_ PCHAR                          Node
     );
=20
 /*! \typedef XENBUS_STORE_DIRECTORY
@@ -181,11 +181,11 @@ typedef NTSTATUS
 */ =20
 typedef NTSTATUS
 (*XENBUS_STORE_DIRECTORY)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node,
-    OUT PCHAR                       *Buffer
+    _In_ PINTERFACE                     Interface,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PCHAR                      Prefix,
+    _In_ PCHAR                          Node,
+    _Outptr_ PCHAR                      *Buffer
     );
=20
 /*! \typedef XENBUS_STORE_TRANSACTION_START
@@ -196,8 +196,8 @@ typedef NTSTATUS
 */ =20
 typedef NTSTATUS
 (*XENBUS_STORE_TRANSACTION_START)(
-    IN  PINTERFACE                  Interface,
-    OUT PXENBUS_STORE_TRANSACTION   *Transaction
+    _In_ PINTERFACE                     Interface,
+    _Outptr_ PXENBUS_STORE_TRANSACTION  *Transaction
     );
=20
 /*! \typedef XENBUS_STORE_TRANSACTION_END
@@ -213,9 +213,9 @@ typedef NTSTATUS
 */ =20
 typedef NTSTATUS
 (*XENBUS_STORE_TRANSACTION_END)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction,
-    IN  BOOLEAN                     Commit
+    _In_ PINTERFACE                 Interface,
+    _In_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_ BOOLEAN                    Commit
     );
=20
 /*! \typedef XENBUS_STORE_WATCH_ADD
@@ -231,11 +231,11 @@ typedef NTSTATUS
 */ =20
 typedef NTSTATUS
 (*XENBUS_STORE_WATCH_ADD)(
-    IN  PINTERFACE          Interface,
-    IN  PCHAR               Prefix OPTIONAL,
-    IN  PCHAR               Node,
-    IN  PKEVENT             Event,
-    OUT PXENBUS_STORE_WATCH *Watch
+    _In_ PINTERFACE                 Interface,
+    _In_opt_ PCHAR                  Prefix,
+    _In_ PCHAR                      Node,
+    _In_ PKEVENT                    Event,
+    _Outptr_ PXENBUS_STORE_WATCH    *Watch
     );
=20
 /*! \typedef XENBUS_STORE_WATCH_REMOVE
@@ -246,8 +246,8 @@ typedef NTSTATUS
 */ =20
 typedef NTSTATUS
 (*XENBUS_STORE_WATCH_REMOVE)(
-    IN  PINTERFACE          Interface,
-    IN  PXENBUS_STORE_WATCH Watch
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_STORE_WATCH    Watch
     );
=20
 /*! \typedef XENBUS_STORE_POLL
@@ -262,7 +262,7 @@ typedef NTSTATUS
 */ =20
 typedef VOID
 (*XENBUS_STORE_POLL)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_STORE_PERMISSIONS_SET
@@ -279,12 +279,12 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENBUS_STORE_PERMISSIONS_SET)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node,
-    IN  PXENBUS_STORE_PERMISSION    Permissions,
-    IN  ULONG                       NumberPermissions
+    _In_ PINTERFACE                     Interface,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PCHAR                      Prefix,
+    _In_ PCHAR                          Node,
+    _In_ PXENBUS_STORE_PERMISSION       Permissions,
+    _In_ ULONG                          NumberPermissions
     );
=20
 // {86824C3B-D34E-4753-B281-2F1E3AD214D7}
diff --git a/include/suspend_interface=2Eh b/include/suspend_interface=2Eh
index 4176dc3=2E=2E414bca5 100644
--- a/include/suspend_interface=2Eh
+++ b/include/suspend_interface=2Eh
@@ -62,7 +62,7 @@ typedef struct _XENBUS_SUSPEND_CALLBACK   XENBUS_SUSPEND=
_CALLBACK, *PXENBUS_SUSP
 */ =20
 typedef NTSTATUS
 (*XENBUS_SUSPEND_ACQUIRE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_SUSPEND_RELEASE
@@ -72,7 +72,7 @@ typedef NTSTATUS
 */ =20
 typedef VOID
 (*XENBUS_SUSPEND_RELEASE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_SUSPEND_FUNCTION
@@ -87,7 +87,7 @@ typedef VOID
 */ =20
 typedef VOID
 (*XENBUS_SUSPEND_FUNCTION)(
-    IN  PVOID   Argument
+    _In_ PVOID  Argument
     );
=20
 /*! \typedef XENBUS_SUSPEND_REGISTER
@@ -101,11 +101,11 @@ typedef VOID
 */ =20
 typedef NTSTATUS
 (*XENBUS_SUSPEND_REGISTER)(
-    IN  PINTERFACE                      Interface,
-    IN  XENBUS_SUSPEND_CALLBACK_TYPE    Type,
-    IN  XENBUS_SUSPEND_FUNCTION         Function,
-    IN  PVOID                           Argument OPTIONAL,
-    OUT PXENBUS_SUSPEND_CALLBACK        *Callback
+    _In_ PINTERFACE                     Interface,
+    _In_ XENBUS_SUSPEND_CALLBACK_TYPE   Type,
+    _In_ XENBUS_SUSPEND_FUNCTION        Function,
+    _In_opt_ PVOID                      Argument,
+    _Outptr_ PXENBUS_SUSPEND_CALLBACK   *Callback
     );
=20
 /*! \typedef XENBUS_SUSPEND_DEREGISTER
@@ -116,8 +116,8 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENBUS_SUSPEND_DEREGISTER)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_SUSPEND_CALLBACK    Callback
+    _In_ PINTERFACE                 Interface,
+    _In_ PXENBUS_SUSPEND_CALLBACK   Callback
     );
=20
 /*! \typedef XENBUS_SUSPEND_TRIGGER
@@ -129,7 +129,7 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENBUS_SUSPEND_TRIGGER)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_SUSPEND_GET_COUNT
@@ -140,7 +140,7 @@ typedef NTSTATUS
 */
 typedef ULONG
 (*XENBUS_SUSPEND_GET_COUNT)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 // {0554F2AF-B510-4C71-AC03-1C503E394238}
diff --git a/include/xencontrol=2Eh b/include/xencontrol=2Eh
index 04ef858=2E=2Eefd790f 100644
--- a/include/xencontrol=2Eh
+++ b/include/xencontrol=2Eh
@@ -38,10 +38,10 @@ _XENCONTROL_LOG_LEVEL {
 */
 typedef void
 XENCONTROL_LOGGER(
-    IN  XENCONTROL_LOG_LEVEL LogLevel,
-    IN  const CHAR *Function,
-    IN  const WCHAR *Message,
-    IN  va_list Args
+    _In_ XENCONTROL_LOG_LEVEL   LogLevel,
+    _In_ const CHAR             *Function,
+    _In_ const WCHAR            *Message,
+    _In_ va_list                Args
     );
=20
 /*! \brief Register a callback for receiving library's diagnostic message=
s
@@ -51,8 +51,8 @@ XENCONTROL_LOGGER(
 XENCONTROL_API
 void
 XcRegisterLogger(
-    IN  PXENCONTROL_CONTEXT Xc,
-    IN  XENCONTROL_LOGGER *Logger
+    _In_ PXENCONTROL_CONTEXT    Xc,
+    _In_ XENCONTROL_LOGGER      *Logger
     );
=20
 /*! \brief Set log level threshold for library's diagnostic messages
@@ -62,8 +62,8 @@ XcRegisterLogger(
 XENCONTROL_API
 void
 XcSetLogLevel(
-    IN  PXENCONTROL_CONTEXT Xc,
-    IN  XENCONTROL_LOG_LEVEL LogLevel
+    _In_ PXENCONTROL_CONTEXT    Xc,
+    _In_ XENCONTROL_LOG_LEVEL   LogLevel
     );
=20
 /*! \brief Open the Xen Interface device
@@ -74,8 +74,8 @@ XcSetLogLevel(
 XENCONTROL_API
 DWORD
 XcOpen(
-    IN  XENCONTROL_LOGGER *Logger,
-    OUT PXENCONTROL_CONTEXT *Xc
+    _In_ XENCONTROL_LOGGER          *Logger,
+    _Outptr_ PXENCONTROL_CONTEXT    *Xc
     );
=20
 /*! \brief Close the Xen Interface device
@@ -84,7 +84,7 @@ XcOpen(
 XENCONTROL_API
 void
 XcClose(
-    IN  PXENCONTROL_CONTEXT Xc
+    _In_ PXENCONTROL_CONTEXT    Xc
     );
=20
 /*! \brief Open an unbound event channel
@@ -98,11 +98,11 @@ XcClose(
 XENCONTROL_API
 DWORD
 XcEvtchnOpenUnbound(
-    IN  PXENCONTROL_CONTEXT Xc,
-    IN  USHORT RemoteDomain,
-    IN  HANDLE Event,
-    IN  BOOL Mask,
-    OUT ULONG *LocalPort
+    _In_ PXENCONTROL_CONTEXT    Xc,
+    _In_ USHORT                 RemoteDomain,
+    _In_ HANDLE                 Event,
+    _In_ BOOL                   Mask,
+    _Out_ ULONG                 *LocalPort
     );
=20
 /*! \brief Open an event channel that was already bound by a remote domai=
n
@@ -117,12 +117,12 @@ XcEvtchnOpenUnbound(
 XENCONTROL_API
 DWORD
 XcEvtchnBindInterdomain(
-    IN  PXENCONTROL_CONTEXT Xc,
-    IN  USHORT RemoteDomain,
-    IN  ULONG RemotePort,
-    IN  HANDLE Event,
-    IN  BOOL Mask,
-    OUT ULONG *LocalPort
+    _In_ PXENCONTROL_CONTEXT    Xc,
+    _In_ USHORT                 RemoteDomain,
+    _In_ ULONG                  RemotePort,
+    _In_ HANDLE                 Event,
+    _In_ BOOL                   Mask,
+    _Out_ ULONG                 *LocalPort
     );
=20
 /*! \brief Close an event channel
@@ -133,8 +133,8 @@ XcEvtchnBindInterdomain(
 XENCONTROL_API
 DWORD
 XcEvtchnClose(
-    IN  PXENCONTROL_CONTEXT Xc,
-    IN  ULONG LocalPort
+    _In_ PXENCONTROL_CONTEXT    Xc,
+    _In_ ULONG                  LocalPort
     );
=20
 /*! \brief Notify the remote end of an event channel
@@ -145,8 +145,8 @@ XcEvtchnClose(
 XENCONTROL_API
 DWORD
 XcEvtchnNotify(
-    IN  PXENCONTROL_CONTEXT Xc,
-    IN  ULONG LocalPort
+    _In_ PXENCONTROL_CONTEXT    Xc,
+    _In_ ULONG                  LocalPort
     );
=20
 /*! \brief Unmask an event channel
@@ -157,8 +157,8 @@ XcEvtchnNotify(
 XENCONTROL_API
 DWORD
 XcEvtchnUnmask(
-    IN  PXENCONTROL_CONTEXT Xc,
-    IN  ULONG LocalPort
+    _In_ PXENCONTROL_CONTEXT    Xc,
+    _In_ ULONG                  LocalPort
     );
=20
 /*! \brief Grant a \a RemoteDomain permission to access local newly alloc=
ated memory pages
@@ -175,14 +175,14 @@ XcEvtchnUnmask(
 XENCONTROL_API
 DWORD
 XcGnttabPermitForeignAccess(
-    IN  PXENCONTROL_CONTEXT Xc,
-    IN  USHORT RemoteDomain,
-    IN  ULONG NumberPages,
-    IN  ULONG NotifyOffset,
-    IN  ULONG NotifyPort,
-    IN  XENIFACE_GNTTAB_PAGE_FLAGS Flags,
-    OUT PVOID *Address,
-    OUT ULONG *References
+    _In_ PXENCONTROL_CONTEXT        Xc,
+    _In_ USHORT                     RemoteDomain,
+    _In_ ULONG                      NumberPages,
+    _In_ ULONG                      NotifyOffset,
+    _In_ ULONG                      NotifyPort,
+    _In_ XENIFACE_GNTTAB_PAGE_FLAGS Flags,
+    _Outptr_ PVOID                  *Address,
+    _Out_ ULONG                     *References
     );
=20
 /*! \brief Grant a \a RemoteDomain permission to access local memory page=
s
@@ -200,15 +200,15 @@ XcGnttabPermitForeignAccess(
 XENCONTROL_API
 DWORD
 XcGnttabPermitForeignAccess2(
-    IN  PXENCONTROL_CONTEXT Xc,
-    IN  USHORT RemoteDomain,
-    IN  PVOID Address,
-    IN  ULONG NumberPages,
-    IN  ULONG NotifyOffset,
-    IN  ULONG NotifyPort,
-    IN  XENIFACE_GNTTAB_PAGE_FLAGS Flags,
-    OUT PVOID* SharedAddress,
-    OUT ULONG* References
+    _In_ PXENCONTROL_CONTEXT        Xc,
+    _In_ USHORT                     RemoteDomain,
+    _In_ PVOID                      Address,
+    _In_ ULONG                      NumberPages,
+    _In_ ULONG                      NotifyOffset,
+    _In_ ULONG                      NotifyPort,
+    _In_ XENIFACE_GNTTAB_PAGE_FLAGS Flags,
+    _Outptr_ PVOID                  *SharedAddress,
+    _Out_ ULONG                     *References
 );
=20
 /*! \brief Revoke a foreign domain access to previously granted memory re=
gion
@@ -219,8 +219,8 @@ XcGnttabPermitForeignAccess2(
 XENCONTROL_API
 DWORD
 XcGnttabRevokeForeignAccess(
-    IN  PXENCONTROL_CONTEXT Xc,
-    IN  PVOID Address
+    _In_ PXENCONTROL_CONTEXT    Xc,
+    _In_ PVOID                  Address
     );
=20
 /*! \brief Map a foreign memory region into the current address space
@@ -237,14 +237,14 @@ XcGnttabRevokeForeignAccess(
 XENCONTROL_API
 DWORD
 XcGnttabMapForeignPages(
-    IN  PXENCONTROL_CONTEXT Xc,
-    IN  USHORT RemoteDomain,
-    IN  ULONG NumberPages,
-    IN  PULONG References,
-    IN  ULONG NotifyOffset,
-    IN  ULONG NotifyPort,
-    IN  XENIFACE_GNTTAB_PAGE_FLAGS Flags,
-    OUT PVOID *Address
+    _In_ PXENCONTROL_CONTEXT        Xc,
+    _In_ USHORT                     RemoteDomain,
+    _In_ ULONG                      NumberPages,
+    _In_ PULONG                     References,
+    _In_ ULONG                      NotifyOffset,
+    _In_ ULONG                      NotifyPort,
+    _In_ XENIFACE_GNTTAB_PAGE_FLAGS Flags,
+    _Outptr_ PVOID                  *Address
     );
=20
 /*! \brief Unmap a foreign memory region from the current address space
@@ -255,8 +255,8 @@ XcGnttabMapForeignPages(
 XENCONTROL_API
 DWORD
 XcGnttabUnmapForeignPages(
-    IN  PXENCONTROL_CONTEXT Xc,
-    IN  PVOID Address
+    _In_ PXENCONTROL_CONTEXT    Xc,
+    _In_ PVOID                  Address
     );
=20
 /*! \brief Read a XenStore key
@@ -269,10 +269,10 @@ XcGnttabUnmapForeignPages(
 XENCONTROL_API
 DWORD
 XcStoreRead(
-    IN  PXENCONTROL_CONTEXT Xc,
-    IN  PSTR Path,
-    IN  DWORD cbValue,
-    OUT CHAR *Value
+    _In_ PXENCONTROL_CONTEXT    Xc,
+    _In_ PSTR                   Path,
+    _In_ DWORD                  cbValue,
+    _Out_ CHAR                  *Value
     );
=20
 /*! \brief Write a value to a XenStore key
@@ -284,9 +284,9 @@ XcStoreRead(
 XENCONTROL_API
 DWORD
 XcStoreWrite(
-    IN  PXENCONTROL_CONTEXT Xc,
-    IN  PCHAR Path,
-    IN  PCHAR Value
+    _In_ PXENCONTROL_CONTEXT    Xc,
+    _In_ PCHAR                  Path,
+    _In_ PCHAR                  Value
     );
=20
 /*! \brief Enumerate all immediate child keys of a XenStore key
@@ -299,10 +299,10 @@ XcStoreWrite(
 XENCONTROL_API
 DWORD
 XcStoreDirectory(
-    IN  PXENCONTROL_CONTEXT Xc,
-    IN  PCHAR Path,
-    IN  DWORD cbOutput,
-    OUT CHAR *Output
+    _In_ PXENCONTROL_CONTEXT    Xc,
+    _In_ PCHAR                  Path,
+    _In_ DWORD                  cbOutput,
+    _Out_ CHAR                  *Output
     );
=20
 /*! \brief Remove a XenStore key
@@ -313,8 +313,8 @@ XcStoreDirectory(
 XENCONTROL_API
 DWORD
 XcStoreRemove(
-    IN  PXENCONTROL_CONTEXT Xc,
-    IN  PCHAR Path
+    _In_ PXENCONTROL_CONTEXT    Xc,
+    _In_ PCHAR                  Path
     );
=20
 /*! \brief Set permissions of a XenStore key
@@ -327,10 +327,10 @@ XcStoreRemove(
 XENCONTROL_API
 DWORD
 XcStoreSetPermissions(
-    IN  PXENCONTROL_CONTEXT Xc,
-    IN  PCHAR Path,
-    IN  ULONG Count,
-    IN  PXENIFACE_STORE_PERMISSION Permissions
+    _In_ PXENCONTROL_CONTEXT        Xc,
+    _In_ PCHAR                      Path,
+    _In_ ULONG                      Count,
+    _In_ PXENIFACE_STORE_PERMISSION Permissions
     );
=20
 /*! \brief Add a XenStore key watch
@@ -343,10 +343,10 @@ XcStoreSetPermissions(
 XENCONTROL_API
 DWORD
 XcStoreAddWatch(
-    IN  PXENCONTROL_CONTEXT Xc,
-    IN  PCHAR Path,
-    IN  HANDLE Event,
-    OUT PVOID *Handle
+    _In_ PXENCONTROL_CONTEXT    Xc,
+    _In_ PCHAR                  Path,
+    _In_ HANDLE                 Event,
+    _Outptr_ PVOID              *Handle
     );
=20
 /*! \brief Remove a XenStore watch
@@ -357,8 +357,8 @@ XcStoreAddWatch(
 XENCONTROL_API
 DWORD
 XcStoreRemoveWatch(
-    IN  PXENCONTROL_CONTEXT Xc,
-    IN  PVOID Handle
+    _In_ PXENCONTROL_CONTEXT    Xc,
+    _In_ PVOID                  Handle
     );
=20
 #ifdef __cplusplus
diff --git a/src/xencontrol/xencontrol=2Ec b/src/xencontrol/xencontrol=2Ec
index c8a954c=2E=2E9ab760b 100644
--- a/src/xencontrol/xencontrol=2Ec
+++ b/src/xencontrol/xencontrol=2Ec
@@ -10,9 +10,9 @@
=20
 BOOL APIENTRY
 DllMain(
-    IN  HMODULE Module,
-    IN  DWORD ReasonForCall,
-    IN  LPVOID Reserved
+    _In_ HMODULE    Module,
+    _In_ DWORD      ReasonForCall,
+    _In_ LPVOID     Reserved
 )
 {
     UNREFERENCED_PARAMETER(Module);
@@ -23,16 +23,16 @@ DllMain(
=20
 static void
 _Log(
-    IN  XENCONTROL_LOGGER *Logger,
-    IN  XENCONTROL_LOG_LEVEL LogLevel,
-    IN  XENCONTROL_LOG_LEVEL CurrentLogLevel,
-    IN  PCHAR Function,
-    IN  PWCHAR Format,
+    _In_ XENCONTROL_LOGGER      *Logger,
+    _In_ XENCONTROL_LOG_LEVEL   LogLevel,
+    _In_ XENCONTROL_LOG_LEVEL   CurrentLogLevel,
+    _In_ PCHAR                  Function,
+    _In_ PWCHAR                 Format,
     =2E=2E=2E
     )
 {
-    va_list Args;
-    DWORD LastError;
+    va_list                     Args;
+    DWORD                       LastError;
=20
     if (Logger =3D=3D NULL)
         return;
@@ -49,14 +49,14 @@ _Log(
=20
 static void
 _LogMultiSz(
-    IN  PXENCONTROL_CONTEXT Xc,
-    IN  PCHAR Caller,
-    IN  XENCONTROL_LOG_LEVEL Level,
-    IN  PCHAR MultiSz
+    _In_ PXENCONTROL_CONTEXT    Xc,
+    _In_ PCHAR                  Caller,
+    _In_ XENCONTROL_LOG_LEVEL   Level,
+    _In_ PCHAR                  MultiSz
     )
 {
-    PCHAR Ptr;
-    ULONG Len;
+    PCHAR                       Ptr;
+    ULONG                       Len;
=20
     for (Ptr =3D MultiSz; *Ptr;) {
         Len =3D (ULONG)strlen(Ptr);
@@ -67,8 +67,8 @@ _LogMultiSz(
=20
 void
 XcRegisterLogger(
-    IN  PXENCONTROL_CONTEXT Xc,
-    IN  XENCONTROL_LOGGER *Logger
+    _In_ PXENCONTROL_CONTEXT    Xc,
+    _In_ XENCONTROL_LOGGER      *Logger
     )
 {
     Xc->Logger =3D Logger;
@@ -76,8 +76,8 @@ XcRegisterLogger(
=20
 void
 XcSetLogLevel(
-    IN  PXENCONTROL_CONTEXT Xc,
-    IN  XENCONTROL_LOG_LEVEL LogLevel
+    _In_ PXENCONTROL_CONTEXT    Xc,
+    _In_ XENCONTROL_LOG_LEVEL   LogLevel
     )
 {
     Xc->LogLevel =3D LogLevel;
@@ -85,16 +85,16 @@ XcSetLogLevel(
=20
 DWORD
 XcOpen(
-    IN  XENCONTROL_LOGGER *Logger,
-    OUT PXENCONTROL_CONTEXT *Xc
+    _In_ XENCONTROL_LOGGER          *Logger,
+    _Outptr_ PXENCONTROL_CONTEXT    *Xc
     )
 {
-    HDEVINFO DevInfo;
-    SP_DEVICE_INTERFACE_DATA InterfaceData;
+    HDEVINFO                        DevInfo;
+    SP_DEVICE_INTERFACE_DATA        InterfaceData;
     SP_DEVICE_INTERFACE_DETAIL_DATA *DetailData =3D NULL;
-    DWORD BufferSize;
-    PXENCONTROL_CONTEXT Context;
-    DWORD Status =3D ERROR_OUTOFMEMORY;
+    DWORD                           BufferSize;
+    PXENCONTROL_CONTEXT             Context;
+    DWORD                           Status =3D ERROR_OUTOFMEMORY;
=20
     Context =3D malloc(sizeof(*Context));
     if (Context =3D=3D NULL)
@@ -178,7 +178,7 @@ end:
=20
 void
 XcClose(
-    IN  PXENCONTROL_CONTEXT Xc
+    _In_ PXENCONTROL_CONTEXT    Xc
     )
 {
     CloseHandle(Xc->XenIface);
@@ -187,18 +187,18 @@ XcClose(
=20
 DWORD
 XcEvtchnOpenUnbound(
-    IN  PXENCONTROL_CONTEXT Xc,
-    IN  USHORT RemoteDomain,
-    IN  HANDLE Event,
-    IN  BOOL Mask,
-    OUT ULONG *LocalPort
+    _In_ PXENCONTROL_CONTEXT            Xc,
+    _In_ USHORT                         RemoteDomain,
+    _In_ HANDLE                         Event,
+    _In_ BOOL                           Mask,
+    _Out_ ULONG                         *LocalPort
     )
 {
-    XENIFACE_EVTCHN_BIND_UNBOUND_IN In;
-    XENIFACE_EVTCHN_BIND_UNBOUND_OUT Out;
-    DWORD Returned;
-    BOOL Success;
-    DWORD Status =3D ERROR_SUCCESS;
+    XENIFACE_EVTCHN_BIND_UNBOUND_IN     In;
+    XENIFACE_EVTCHN_BIND_UNBOUND_OUT    Out;
+    DWORD                               Returned;
+    BOOL                                Success;
+    DWORD                               Status =3D ERROR_SUCCESS;
=20
     In=2ERemoteDomain =3D RemoteDomain;
     In=2EEvent =3D Event;
@@ -227,19 +227,19 @@ end:
=20
 DWORD
 XcEvtchnBindInterdomain(
-    IN  PXENCONTROL_CONTEXT Xc,
-    IN  USHORT RemoteDomain,
-    IN  ULONG RemotePort,
-    IN  HANDLE Event,
-    IN  BOOL Mask,
-    OUT ULONG *LocalPort
+    _In_ PXENCONTROL_CONTEXT                Xc,
+    _In_ USHORT                             RemoteDomain,
+    _In_ ULONG                              RemotePort,
+    _In_ HANDLE                             Event,
+    _In_ BOOL                               Mask,
+    _Out_ ULONG                             *LocalPort
     )
 {
-    XENIFACE_EVTCHN_BIND_INTERDOMAIN_IN In;
-    XENIFACE_EVTCHN_BIND_INTERDOMAIN_OUT Out;
-    DWORD Returned;
-    BOOL Success;
-    DWORD Status =3D ERROR_SUCCESS;
+    XENIFACE_EVTCHN_BIND_INTERDOMAIN_IN     In;
+    XENIFACE_EVTCHN_BIND_INTERDOMAIN_OUT    Out;
+    DWORD                                   Returned;
+    BOOL                                    Success;
+    DWORD                                   Status =3D ERROR_SUCCESS;
=20
     In=2ERemoteDomain =3D RemoteDomain;
     In=2ERemotePort =3D RemotePort;
@@ -270,14 +270,14 @@ end:
=20
 DWORD
 XcEvtchnClose(
-    IN  PXENCONTROL_CONTEXT Xc,
-    IN  ULONG LocalPort
+    _In_ PXENCONTROL_CONTEXT    Xc,
+    _In_ ULONG                  LocalPort
     )
 {
-    XENIFACE_EVTCHN_CLOSE_IN In;
-    DWORD Returned;
-    BOOL Success;
-    DWORD Status =3D ERROR_SUCCESS;
+    XENIFACE_EVTCHN_CLOSE_IN    In;
+    DWORD                       Returned;
+    BOOL                        Success;
+    DWORD                       Status =3D ERROR_SUCCESS;
=20
     In=2ELocalPort =3D LocalPort;
=20
@@ -299,14 +299,14 @@ XcEvtchnClose(
=20
 DWORD
 XcEvtchnNotify(
-    IN  PXENCONTROL_CONTEXT Xc,
-    IN  ULONG LocalPort
+    _In_ PXENCONTROL_CONTEXT    Xc,
+    _In_ ULONG                  LocalPort
     )
 {
-    XENIFACE_EVTCHN_NOTIFY_IN In;
-    DWORD Returned;
-    BOOL Success;
-    DWORD Status =3D ERROR_SUCCESS;
+    XENIFACE_EVTCHN_NOTIFY_IN   In;
+    DWORD                       Returned;
+    BOOL                        Success;
+    DWORD                       Status =3D ERROR_SUCCESS;
=20
     In=2ELocalPort =3D LocalPort;
=20
@@ -328,14 +328,14 @@ XcEvtchnNotify(
=20
 DWORD
 XcEvtchnUnmask(
-    IN  PXENCONTROL_CONTEXT Xc,
-    IN  ULONG LocalPort
+    _In_ PXENCONTROL_CONTEXT    Xc,
+    _In_ ULONG                  LocalPort
     )
 {
-    XENIFACE_EVTCHN_UNMASK_IN In;
-    DWORD Returned;
-    BOOL Success;
-    DWORD Status =3D ERROR_SUCCESS;
+    XENIFACE_EVTCHN_UNMASK_IN   In;
+    DWORD                       Returned;
+    BOOL                        Success;
+    DWORD                       Status =3D ERROR_SUCCESS;
=20
     In=2ELocalPort =3D LocalPort;
=20
@@ -357,14 +357,14 @@ XcEvtchnUnmask(
=20
 DWORD
 XcGnttabPermitForeignAccess(
-    IN  PXENCONTROL_CONTEXT Xc,
-    IN  USHORT RemoteDomain,
-    IN  ULONG NumberPages,
-    IN  ULONG NotifyOffset,
-    IN  ULONG NotifyPort,
-    IN  XENIFACE_GNTTAB_PAGE_FLAGS Flags,
-    OUT PVOID* SharedAddress,
-    OUT ULONG* References
+    _In_ PXENCONTROL_CONTEXT        Xc,
+    _In_ USHORT                     RemoteDomain,
+    _In_ ULONG                      NumberPages,
+    _In_ ULONG                      NotifyOffset,
+    _In_ ULONG                      NotifyPort,
+    _In_ XENIFACE_GNTTAB_PAGE_FLAGS Flags,
+    _Outptr_ PVOID                  *SharedAddress,
+    _Out_ ULONG                     *References
 )
 {
     Log(XLL_DEBUG, L"RemoteDomain: %d, NumberPages: %lu, NotifyOffset: 0x=
%x, NotifyPort: %lu, Flags: 0x%x",
@@ -383,23 +383,23 @@ XcGnttabPermitForeignAccess(
=20
 DWORD
 XcGnttabPermitForeignAccess2(
-    IN  PXENCONTROL_CONTEXT Xc,
-    IN  USHORT RemoteDomain,
-    IN  PVOID Address,
-    IN  ULONG NumberPages,
-    IN  ULONG NotifyOffset,
-    IN  ULONG NotifyPort,
-    IN  XENIFACE_GNTTAB_PAGE_FLAGS Flags,
-    OUT PVOID *SharedAddress,
-    OUT ULONG *References
+    _In_ PXENCONTROL_CONTEXT                        Xc,
+    _In_ USHORT                                     RemoteDomain,
+    _In_ PVOID                                      Address,
+    _In_ ULONG                                      NumberPages,
+    _In_ ULONG                                      NotifyOffset,
+    _In_ ULONG                                      NotifyPort,
+    _In_ XENIFACE_GNTTAB_PAGE_FLAGS                 Flags,
+    _Outptr_ PVOID                                  *SharedAddress,
+    _Out_ ULONG                                     *References
     )
 {
-    XENIFACE_GNTTAB_PERMIT_FOREIGN_ACCESS_IN_V2 In;
-    XENIFACE_GNTTAB_PERMIT_FOREIGN_ACCESS_OUT_V2 *Out;
-    DWORD Returned, Size;
-    OVERLAPPED Overlapped;
-    BOOL Success;
-    DWORD Status;
+    XENIFACE_GNTTAB_PERMIT_FOREIGN_ACCESS_IN_V2     In;
+    XENIFACE_GNTTAB_PERMIT_FOREIGN_ACCESS_OUT_V2    *Out;
+    DWORD                                           Returned, Size;
+    OVERLAPPED                                      Overlapped;
+    BOOL                                            Success;
+    DWORD                                           Status;
=20
     In=2ERemoteDomain =3D RemoteDomain;
     In=2EAddress =3D Address;
@@ -455,14 +455,14 @@ end:
=20
 DWORD
 XcGnttabRevokeForeignAccess(
-    IN  PXENCONTROL_CONTEXT Xc,
-    IN  PVOID Address
+    _In_ PXENCONTROL_CONTEXT                    Xc,
+    _In_ PVOID                                  Address
     )
 {
     XENIFACE_GNTTAB_REVOKE_FOREIGN_ACCESS_IN_V2 In;
-    DWORD Returned;
-    BOOL Success;
-    DWORD Status =3D ERROR_SUCCESS;
+    DWORD                                       Returned;
+    BOOL                                        Success;
+    DWORD                                       Status =3D ERROR_SUCCESS;
=20
     Log(XLL_DEBUG, L"Address: %p", Address);
     In=2EAddress =3D Address;
@@ -484,22 +484,22 @@ XcGnttabRevokeForeignAccess(
=20
 DWORD
 XcGnttabMapForeignPages(
-    IN  PXENCONTROL_CONTEXT Xc,
-    IN  USHORT RemoteDomain,
-    IN  ULONG NumberPages,
-    IN  PULONG References,
-    IN  ULONG NotifyOffset,
-    IN  ULONG NotifyPort,
-    IN  XENIFACE_GNTTAB_PAGE_FLAGS Flags,
-    OUT PVOID *Address
+    _In_ PXENCONTROL_CONTEXT                    Xc,
+    _In_ USHORT                                 RemoteDomain,
+    _In_ ULONG                                  NumberPages,
+    _In_ PULONG                                 References,
+    _In_ ULONG                                  NotifyOffset,
+    _In_ ULONG                                  NotifyPort,
+    _In_ XENIFACE_GNTTAB_PAGE_FLAGS             Flags,
+    _Outptr_ PVOID                              *Address
     )
 {
-    XENIFACE_GNTTAB_MAP_FOREIGN_PAGES_IN_V2 *In;
-    XENIFACE_GNTTAB_MAP_FOREIGN_PAGES_OUT_V2 Out;
-    DWORD Returned, Size;
-    OVERLAPPED Overlapped;
-    BOOL Success;
-    DWORD Status =3D ERROR_OUTOFMEMORY;
+    XENIFACE_GNTTAB_MAP_FOREIGN_PAGES_IN_V2     *In;
+    XENIFACE_GNTTAB_MAP_FOREIGN_PAGES_OUT_V2    Out;
+    DWORD                                       Returned, Size;
+    OVERLAPPED                                  Overlapped;
+    BOOL                                        Success;
+    DWORD                                       Status =3D ERROR_OUTOFMEM=
ORY;
=20
     Size =3D (ULONG)FIELD_OFFSET(XENIFACE_GNTTAB_MAP_FOREIGN_PAGES_IN_V2,=
 References[NumberPages]);
     In =3D malloc(Size);
@@ -554,14 +554,14 @@ end:
=20
 DWORD
 XcGnttabUnmapForeignPages(
-    IN  PXENCONTROL_CONTEXT Xc,
-    IN  PVOID Address
+    _In_ PXENCONTROL_CONTEXT                    Xc,
+    _In_ PVOID                                  Address
     )
 {
-    XENIFACE_GNTTAB_UNMAP_FOREIGN_PAGES_IN_V2 In;
-    DWORD Returned;
-    BOOL Success;
-    DWORD Status =3D ERROR_SUCCESS;
+    XENIFACE_GNTTAB_UNMAP_FOREIGN_PAGES_IN_V2   In;
+    DWORD                                       Returned;
+    BOOL                                        Success;
+    DWORD                                       Status =3D ERROR_SUCCESS;
=20
     Log(XLL_DEBUG, L"Address: %p", Address);
=20
@@ -584,15 +584,15 @@ XcGnttabUnmapForeignPages(
=20
 DWORD
 XcStoreRead(
-    IN  PXENCONTROL_CONTEXT Xc,
-    IN  PSTR Path,
-    IN  DWORD cbValue,
-    OUT CHAR *Value
+    _In_ PXENCONTROL_CONTEXT    Xc,
+    _In_ PSTR                   Path,
+    _In_ DWORD                  cbValue,
+    _Out_ CHAR                  *Value
     )
 {
-    DWORD Returned;
-    BOOL Success;
-    DWORD Status =3D ERROR_SUCCESS;
+    DWORD                       Returned;
+    BOOL                        Success;
+    DWORD                       Status =3D ERROR_SUCCESS;
=20
     Log(XLL_DEBUG, L"Path: '%S'", Path);
     Success =3D DeviceIoControl(Xc->XenIface,
@@ -616,16 +616,16 @@ end:
=20
 DWORD
 XcStoreWrite(
-    IN  PXENCONTROL_CONTEXT Xc,
-    IN  PCHAR Path,
-    IN  PCHAR Value
+    _In_ PXENCONTROL_CONTEXT    Xc,
+    _In_ PCHAR                  Path,
+    _In_ PCHAR                  Value
     )
 {
-    PCHAR Buffer;
-    DWORD cbBuffer;
-    DWORD Returned;
-    BOOL Success;
-    DWORD Status =3D ERROR_SUCCESS;
+    PCHAR                       Buffer;
+    DWORD                       cbBuffer;
+    DWORD                       Returned;
+    BOOL                        Success;
+    DWORD                       Status =3D ERROR_SUCCESS;
=20
     cbBuffer =3D (DWORD)(strlen(Path) + 1 + strlen(Value) + 1 + 1);
     Buffer =3D malloc(cbBuffer);
@@ -659,15 +659,15 @@ end:
=20
 DWORD
 XcStoreDirectory(
-    IN  PXENCONTROL_CONTEXT Xc,
-    IN  PCHAR Path,
-    IN  DWORD cbOutput,
-    OUT CHAR *Output
+    _In_ PXENCONTROL_CONTEXT    Xc,
+    _In_ PCHAR                  Path,
+    _In_ DWORD                  cbOutput,
+    _Out_ CHAR                  *Output
     )
 {
-    DWORD Returned;
-    BOOL Success;
-    DWORD Status =3D ERROR_SUCCESS;
+    DWORD                       Returned;
+    BOOL                        Success;
+    DWORD                       Status =3D ERROR_SUCCESS;
=20
     Log(XLL_DEBUG, L"Path: '%S'", Path);
     Success =3D DeviceIoControl(Xc->XenIface,
@@ -691,13 +691,13 @@ end:
=20
 DWORD
 XcStoreRemove(
-    IN  PXENCONTROL_CONTEXT Xc,
-    IN  PCHAR Path
+    _In_ PXENCONTROL_CONTEXT    Xc,
+    _In_ PCHAR                  Path
     )
 {
-    DWORD Returned;
-    BOOL Success;
-    DWORD Status =3D ERROR_SUCCESS;
+    DWORD                       Returned;
+    BOOL                        Success;
+    DWORD                       Status =3D ERROR_SUCCESS;
=20
     Log(XLL_DEBUG, L"Path: '%S'", Path);
     Success =3D DeviceIoControl(Xc->XenIface,
@@ -717,16 +717,16 @@ XcStoreRemove(
=20
 DWORD
 XcStoreSetPermissions(
-    IN  PXENCONTROL_CONTEXT Xc,
-    IN  PCHAR Path,
-    IN  ULONG Count,
-    IN  PXENIFACE_STORE_PERMISSION Permissions
+    _In_ PXENCONTROL_CONTEXT            Xc,
+    _In_ PCHAR                          Path,
+    _In_ ULONG                          Count,
+    _In_ PXENIFACE_STORE_PERMISSION     Permissions
     )
 {
-    DWORD Returned, Size;
-    BOOL Success;
-    DWORD Status =3D ERROR_SUCCESS;
-    XENIFACE_STORE_SET_PERMISSIONS_IN *In =3D NULL;
+    DWORD                               Returned, Size;
+    BOOL                                Success;
+    DWORD                               Status =3D ERROR_SUCCESS;
+    XENIFACE_STORE_SET_PERMISSIONS_IN   *In =3D NULL;
=20
     Log(XLL_DEBUG, L"Path: '%S', Count: %lu", Path, Count);
     for (ULONG i =3D 0; i < Count; i++)
@@ -763,17 +763,17 @@ end:
=20
 DWORD
 XcStoreAddWatch(
-    IN  PXENCONTROL_CONTEXT Xc,
-    IN  PCHAR Path,
-    IN  HANDLE Event,
-    OUT PVOID *Handle
+    _In_ PXENCONTROL_CONTEXT        Xc,
+    _In_ PCHAR                      Path,
+    _In_ HANDLE                     Event,
+    _Outptr_ PVOID                  *Handle
     )
 {
-    DWORD Returned;
-    BOOL Success;
-    DWORD Status =3D ERROR_SUCCESS;
-    XENIFACE_STORE_ADD_WATCH_IN In;
-    XENIFACE_STORE_ADD_WATCH_OUT Out;
+    DWORD                           Returned;
+    BOOL                            Success;
+    DWORD                           Status =3D ERROR_SUCCESS;
+    XENIFACE_STORE_ADD_WATCH_IN     In;
+    XENIFACE_STORE_ADD_WATCH_OUT    Out;
=20
     Log(XLL_DEBUG, L"Path: '%S', Event: %p", Path, Event);
=20
@@ -803,14 +803,14 @@ end:
=20
 DWORD
 XcStoreRemoveWatch(
-    IN  PXENCONTROL_CONTEXT Xc,
-    IN  PVOID Handle
+    _In_ PXENCONTROL_CONTEXT        Xc,
+    _In_ PVOID                      Handle
     )
 {
-    DWORD Returned;
-    BOOL Success;
-    DWORD Status =3D ERROR_SUCCESS;
-    XENIFACE_STORE_REMOVE_WATCH_IN In;
+    DWORD                           Returned;
+    BOOL                            Success;
+    DWORD                           Status =3D ERROR_SUCCESS;
+    XENIFACE_STORE_REMOVE_WATCH_IN  In;
=20
     Log(XLL_DEBUG, L"Handle: %p", Handle);
=20
diff --git a/src/xeniface/driver=2Ec b/src/xeniface/driver=2Ec
index 3b5b16d=2E=2E74192cf 100644
--- a/src/xeniface/driver=2Ec
+++ b/src/xeniface/driver=2Ec
@@ -51,7 +51,7 @@ static XENIFACE_DRIVER  Driver;
=20
 static FORCEINLINE VOID
 __DriverSetDriverObject(
-    IN  PDRIVER_OBJECT  DriverObject
+    _In_ PDRIVER_OBJECT DriverObject
     )
 {
     Driver=2EDriverObject =3D DriverObject;
@@ -75,7 +75,7 @@ DriverGetDriverObject(
=20
 static FORCEINLINE VOID
 __DriverSetParametersKey(
-    IN  HANDLE  Key
+    _In_ HANDLE Key
     )
 {
     Driver=2EParametersKey =3D Key;
@@ -101,7 +101,7 @@ DRIVER_UNLOAD       DriverUnload;
=20
 VOID
 DriverUnload(
-    IN  PDRIVER_OBJECT  DriverObject
+    _In_ PDRIVER_OBJECT DriverObject
     )
 {
     HANDLE              ParametersKey;
@@ -137,8 +137,8 @@ DRIVER_ADD_DEVICE   AddDevice;
=20
 NTSTATUS
 AddDevice(
-    IN  PDRIVER_OBJECT  DriverObject,
-    IN  PDEVICE_OBJECT  DeviceObject
+    _In_ PDRIVER_OBJECT DriverObject,
+    _In_ PDEVICE_OBJECT DeviceObject
     )
 {
     NTSTATUS            status;
@@ -165,8 +165,8 @@ DRIVER_DISPATCH Dispatch;
=20
 NTSTATUS=20
 Dispatch(
-    IN PDEVICE_OBJECT   DeviceObject,
-    IN PIRP             Irp
+    _In_ PDEVICE_OBJECT DeviceObject,
+    _In_ PIRP           Irp
     )
 {
     PXENIFACE_DX        Dx;
@@ -216,13 +216,13 @@ DRIVER_INITIALIZE   DriverEntry;
=20
 NTSTATUS
 DriverEntry(
-    IN  PDRIVER_OBJECT  DriverObject,
-    IN  PUNICODE_STRING RegistryPath
+    _In_ PDRIVER_OBJECT     DriverObject,
+    _In_ PUNICODE_STRING    RegistryPath
     )
 {
-    HANDLE              ParametersKey;
-    ULONG               Index;
-    NTSTATUS            status;
+    HANDLE                  ParametersKey;
+    ULONG                   Index;
+    NTSTATUS                status;
=20
     ASSERT3P(__DriverGetDriverObject(), =3D=3D, NULL);
=20
@@ -257,8 +257,8 @@ DriverEntry(
     DriverObject->DriverExtension->AddDevice =3D AddDevice;
=20
     for (Index =3D 0; Index <=3D IRP_MJ_MAXIMUM_FUNCTION; Index++) {
-#pragma prefast(suppress:28169) // No __drv_dispatchType annotation
-#pragma prefast(suppress:28168) // No matching __drv_dispatchType annotat=
ion for IRP_MJ_CREATE
+#pragma prefast(suppress:28169) // No _Dispatch_type_ annotation
+#pragma prefast(suppress:28168) // No matching _Dispatch_type_ annotation=
 for IRP_MJ_CREATE
         DriverObject->MajorFunction[Index] =3D Dispatch;
     }
=20
diff --git a/src/xeniface/fdo=2Ec b/src/xeniface/fdo=2Ec
index ec56e42=2E=2Ee3f9b4f 100644
--- a/src/xeniface/fdo=2Ec
+++ b/src/xeniface/fdo=2Ec
@@ -63,7 +63,7 @@
=20
 static FORCEINLINE PVOID
 __FdoAllocate(
-    IN  ULONG   Length
+    _In_ ULONG  Length
     )
 {
     return __AllocatePoolWithTag(NonPagedPool, Length, FDO_POOL);
@@ -71,7 +71,7 @@ __FdoAllocate(
=20
 static FORCEINLINE VOID
 __FdoFree(
-    IN  PVOID   Buffer
+    _In_ PVOID  Buffer
     )
 {
     __FreePoolWithTag(Buffer, FDO_POOL);
@@ -79,11 +79,11 @@ __FdoFree(
=20
 static FORCEINLINE VOID
 __FdoSetDevicePnpState(
-    IN  PXENIFACE_FDO         Fdo,
-    IN  DEVICE_PNP_STATE    State
+    _In_ PXENIFACE_FDO      Fdo,
+    _In_ DEVICE_PNP_STATE   State
     )
 {
-    PXENIFACE_DX              Dx =3D Fdo->Dx;
+    PXENIFACE_DX            Dx =3D Fdo->Dx;
=20
     // We can never transition out of the deleted state
     ASSERT(Dx->DevicePnpState !=3D Deleted || State =3D=3D Deleted);
@@ -94,11 +94,11 @@ __FdoSetDevicePnpState(
=20
 static FORCEINLINE VOID
 __FdoRestoreDevicePnpState(
-    IN  PXENIFACE_FDO         Fdo,
-    IN  DEVICE_PNP_STATE    State
+    _In_ PXENIFACE_FDO      Fdo,
+    _In_ DEVICE_PNP_STATE   State
     )
 {
-    PXENIFACE_DX               Dx =3D Fdo->Dx;
+    PXENIFACE_DX            Dx =3D Fdo->Dx;
=20
     if (Dx->DevicePnpState =3D=3D State)
         Dx->DevicePnpState =3D Dx->PreviousDevicePnpState;
@@ -106,59 +106,59 @@ __FdoRestoreDevicePnpState(
=20
 static FORCEINLINE DEVICE_PNP_STATE
 __FdoGetDevicePnpState(
-    IN  PXENIFACE_FDO     Fdo
+    _In_ PXENIFACE_FDO  Fdo
     )
 {
-    PXENIFACE_DX          Dx =3D Fdo->Dx;
+    PXENIFACE_DX        Dx =3D Fdo->Dx;
=20
     return Dx->DevicePnpState;
 }
=20
 static FORCEINLINE VOID
 __FdoSetDevicePowerState(
-    IN  PXENIFACE_FDO         Fdo,
-    IN  DEVICE_POWER_STATE  State
+    _In_ PXENIFACE_FDO      Fdo,
+    _In_ DEVICE_POWER_STATE State
     )
 {
-    PXENIFACE_DX              Dx =3D Fdo->Dx;
+    PXENIFACE_DX            Dx =3D Fdo->Dx;
=20
     Dx->DevicePowerState =3D State;
 }
=20
 static FORCEINLINE DEVICE_POWER_STATE
 __FdoGetDevicePowerState(
-    IN  PXENIFACE_FDO     Fdo
+    _In_ PXENIFACE_FDO  Fdo
     )
 {
-    PXENIFACE_DX          Dx =3D Fdo->Dx;
+    PXENIFACE_DX        Dx =3D Fdo->Dx;
=20
     return Dx->DevicePowerState;
 }
=20
 static FORCEINLINE VOID
 __FdoSetSystemPowerState(
-    IN  PXENIFACE_FDO         Fdo,
-    IN  SYSTEM_POWER_STATE  State
+    _In_ PXENIFACE_FDO      Fdo,
+    _In_ SYSTEM_POWER_STATE State
     )
 {
-    PXENIFACE_DX              Dx =3D Fdo->Dx;
+    PXENIFACE_DX            Dx =3D Fdo->Dx;
=20
     Dx->SystemPowerState =3D State;
 }
=20
 static FORCEINLINE SYSTEM_POWER_STATE
 __FdoGetSystemPowerState(
-    IN  PXENIFACE_FDO     Fdo
+    _In_ PXENIFACE_FDO  Fdo
     )
 {
-    PXENIFACE_DX          Dx =3D Fdo->Dx;
+    PXENIFACE_DX        Dx =3D Fdo->Dx;
=20
     return Dx->SystemPowerState;
 }
=20
 static FORCEINLINE PDEVICE_OBJECT
 __FdoGetPhysicalDeviceObject(
-    IN  PXENIFACE_FDO Fdo
+    _In_ PXENIFACE_FDO  Fdo
     )
 {
     return Fdo->PhysicalDeviceObject;
@@ -166,7 +166,7 @@ __FdoGetPhysicalDeviceObject(
=20
 PDEVICE_OBJECT
 FdoGetPhysicalDeviceObject(
-    IN  PXENIFACE_FDO Fdo
+    _In_ PXENIFACE_FDO  Fdo
     )
 {
     return __FdoGetPhysicalDeviceObject(Fdo);
@@ -174,15 +174,15 @@ FdoGetPhysicalDeviceObject(
=20
 static FORCEINLINE NTSTATUS
 __FdoSetName(
-    IN  PXENIFACE_FDO Fdo,
-    IN  PWCHAR      Name
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PWCHAR         Name
     )
 {
-    PXENIFACE_DX      Dx =3D Fdo->Dx;
-    UNICODE_STRING  Unicode;
-    ANSI_STRING     Ansi;
-    ULONG           Index;
-    NTSTATUS        status;
+    PXENIFACE_DX        Dx =3D Fdo->Dx;
+    UNICODE_STRING      Unicode;
+    ANSI_STRING         Ansi;
+    ULONG               Index;
+    NTSTATUS            status;
=20
     RtlInitUnicodeString(&Unicode, Name);
=20
@@ -209,29 +209,29 @@ fail1:
=20
 static FORCEINLINE PCHAR
 __FdoGetName(
-    IN  PXENIFACE_FDO Fdo
+    _In_ PXENIFACE_FDO  Fdo
     )
 {
-    PXENIFACE_DX      Dx =3D Fdo->Dx;
+    PXENIFACE_DX        Dx =3D Fdo->Dx;
=20
     return Dx->Name;
 }
=20
 PCHAR
 FdoGetName(
-    IN  PXENIFACE_FDO Fdo
+    _In_ PXENIFACE_FDO  Fdo
     )
 {
     return __FdoGetName(Fdo);
 }
=20
-__drv_functionClass(IO_COMPLETION_ROUTINE)
-__drv_sameIRQL
+_Function_class_(IO_COMPLETION_ROUTINE)
+_IRQL_requires_same_
 static NTSTATUS
 __FdoDelegateIrp(
-    IN  PDEVICE_OBJECT  DeviceObject,
-    IN  PIRP            Irp,
-    IN  PVOID           Context
+    _In_ PDEVICE_OBJECT DeviceObject,
+    _In_ PIRP           Irp,
+    _In_ PVOID          Context
     )
 {
     PKEVENT             Event =3D (PKEVENT)Context;
@@ -246,8 +246,8 @@ __FdoDelegateIrp(
=20
 NTSTATUS
 FdoDelegateIrp(
-    IN  PXENIFACE_FDO     Fdo,
-    IN  PIRP            Irp
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PIRP           Irp
     )
 {
     PDEVICE_OBJECT      DeviceObject;
@@ -310,13 +310,13 @@ done:
     return status;
 }
=20
-__drv_functionClass(IO_COMPLETION_ROUTINE)
-__drv_sameIRQL
+_Function_class_(IO_COMPLETION_ROUTINE)
+_IRQL_requires_same_
 static NTSTATUS
 __FdoForwardIrpSynchronously(
-    IN  PDEVICE_OBJECT  DeviceObject,
-    IN  PIRP            Irp,
-    IN  PVOID           Context
+    _In_ PDEVICE_OBJECT DeviceObject,
+    _In_ PIRP           Irp,
+    _In_ PVOID          Context
     )
 {
     PKEVENT             Event =3D (PKEVENT)Context;
@@ -331,8 +331,8 @@ __FdoForwardIrpSynchronously(
=20
 static NTSTATUS
 FdoForwardIrpSynchronously(
-    IN  PXENIFACE_FDO     Fdo,
-    IN  PIRP            Irp
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PIRP           Irp
     )
 {
     KEVENT              Event;
@@ -369,7 +369,7 @@ FdoForwardIrpSynchronously(
=20
 static FORCEINLINE VOID
 __FdoAcquireMutex(
-    IN  PXENIFACE_FDO     Fdo
+    _In_ PXENIFACE_FDO  Fdo
     )
 {
     AcquireMutex(&Fdo->Mutex);
@@ -377,7 +377,7 @@ __FdoAcquireMutex(
=20
 VOID
 FdoAcquireMutex(
-    IN  PXENIFACE_FDO     Fdo
+    _In_ PXENIFACE_FDO  Fdo
     )
 {
     __FdoAcquireMutex(Fdo);
@@ -385,7 +385,7 @@ FdoAcquireMutex(
=20
 static FORCEINLINE VOID
 __FdoReleaseMutex(
-    IN  PXENIFACE_FDO     Fdo
+    _In_ PXENIFACE_FDO  Fdo
     )
 {
     ReleaseMutex(&Fdo->Mutex);
@@ -393,7 +393,7 @@ __FdoReleaseMutex(
=20
 VOID
 FdoReleaseMutex(
-    IN  PXENIFACE_FDO     Fdo
+    _In_ PXENIFACE_FDO  Fdo
     )
 {
     __FdoReleaseMutex(Fdo);
@@ -404,9 +404,9 @@ FdoReleaseMutex(
=20
 static DECLSPEC_NOINLINE VOID
 FdoParseResources(
-    IN  PXENIFACE_FDO             Fdo,
-    IN  PCM_RESOURCE_LIST       RawResourceList,
-    IN  PCM_RESOURCE_LIST       TranslatedResourceList
+    _In_ PXENIFACE_FDO          Fdo,
+    _In_ PCM_RESOURCE_LIST      RawResourceList,
+    _In_ PCM_RESOURCE_LIST      TranslatedResourceList
     )
 {
     PCM_PARTIAL_RESOURCE_LIST   RawPartialList;
@@ -451,7 +451,7 @@ FdoParseResources(
=20
 static FORCEINLINE PANSI_STRING
 __FdoMultiSzToUpcaseAnsi(
-    IN  PCHAR       Buffer
+    _In_ PCHAR      Buffer
     )
 {
     PANSI_STRING    Ansi;
@@ -516,7 +516,7 @@ fail1:
=20
 static FORCEINLINE VOID
 __FdoFreeAnsi(
-    IN  PANSI_STRING    Ansi
+    _In_ PANSI_STRING   Ansi
     )
 {
     ULONG               Index;
@@ -529,8 +529,8 @@ __FdoFreeAnsi(
=20
 static FORCEINLINE BOOLEAN
 __FdoMatchDistribution(
-    IN  PXENIFACE_FDO   Fdo,
-    IN  PCHAR           Buffer
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PCHAR          Buffer
     )
 {
     PCHAR               Vendor;
@@ -589,7 +589,7 @@ fail1:
=20
 static VOID
 FdoClearDistribution(
-    IN  PXENIFACE_FDO   Fdo
+    _In_ PXENIFACE_FDO  Fdo
     )
 {
     PCHAR               Buffer;
@@ -652,7 +652,7 @@ done:
=20
 static NTSTATUS
 FdoSetDistribution(
-    IN  PXENIFACE_FDO   Fdo
+    _In_ PXENIFACE_FDO  Fdo
     )
 {
     ULONG               Index;
@@ -746,7 +746,7 @@ fail1:
=20
 static FORCEINLINE NTSTATUS
 __FdoD3ToD0(
-    IN  PXENIFACE_FDO   Fdo
+    _In_ PXENIFACE_FDO  Fdo
     )
 {
     Trace("=3D=3D=3D=3D>\n");
@@ -762,7 +762,7 @@ __FdoD3ToD0(
=20
 static FORCEINLINE VOID
 __FdoD0ToD3(
-    IN  PXENIFACE_FDO   Fdo
+    _In_ PXENIFACE_FDO  Fdo
     )
 {
     Trace("=3D=3D=3D=3D>\n");
@@ -776,7 +776,7 @@ __FdoD0ToD3(
=20
 static DECLSPEC_NOINLINE VOID
 FdoSuspendCallbackLate(
-    IN  PVOID       Argument
+    _In_ PVOID      Argument
     )
 {
     PXENIFACE_FDO   Fdo =3D Argument;
@@ -793,7 +793,7 @@ FdoSuspendCallbackLate(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoD3ToD0(
-    IN  PXENIFACE_FDO   Fdo
+    _In_ PXENIFACE_FDO  Fdo
     )
 {
     KIRQL               Irql;
@@ -917,10 +917,10 @@ fail1:
     return status;
 }
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 static DECLSPEC_NOINLINE VOID
 FdoD0ToD3(
-    IN  PXENIFACE_FDO   Fdo
+    _In_ PXENIFACE_FDO  Fdo
     )
 {
     KIRQL               Irql;
@@ -974,7 +974,7 @@ FdoD0ToD3(
=20
 static DECLSPEC_NOINLINE VOID
 FdoS4ToS3(
-    IN  PXENIFACE_FDO         Fdo
+    _In_ PXENIFACE_FDO  Fdo
     )
 {
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, PASSIVE_LEVEL);
@@ -985,7 +985,7 @@ FdoS4ToS3(
=20
 static DECLSPEC_NOINLINE VOID
 FdoS3ToS4(
-    IN  PXENIFACE_FDO Fdo
+    _In_ PXENIFACE_FDO  Fdo
     )
 {
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, PASSIVE_LEVEL);
@@ -996,8 +996,8 @@ FdoS3ToS4(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoStartDevice(
-    IN  PXENIFACE_FDO     Fdo,
-    IN  PIRP            Irp
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -1065,11 +1065,11 @@ fail1:
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoQueryStopDevice(
-    IN  PXENIFACE_FDO Fdo,
-    IN  PIRP        Irp
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PIRP           Irp
     )
 {
-    NTSTATUS        status;
+    NTSTATUS            status;
=20
     __FdoSetDevicePnpState(Fdo, StopPending);
     Irp->IoStatus=2EStatus =3D STATUS_SUCCESS;
@@ -1082,11 +1082,11 @@ FdoQueryStopDevice(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoCancelStopDevice(
-    IN  PXENIFACE_FDO Fdo,
-    IN  PIRP        Irp
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PIRP           Irp
     )
 {
-    NTSTATUS        status;
+    NTSTATUS            status;
=20
     Irp->IoStatus=2EStatus =3D STATUS_SUCCESS;
=20
@@ -1100,11 +1100,11 @@ FdoCancelStopDevice(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoStopDevice(
-    IN  PXENIFACE_FDO Fdo,
-    IN  PIRP        Irp
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PIRP           Irp
     )
 {
-    NTSTATUS        status;
+    NTSTATUS            status;
=20
     FdoD0ToD3(Fdo);
     WmiDeregister(Fdo);
@@ -1127,11 +1127,11 @@ FdoStopDevice(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoQueryRemoveDevice(
-    IN  PXENIFACE_FDO Fdo,
-    IN  PIRP        Irp
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PIRP           Irp
     )
 {
-    NTSTATUS        status;
+    NTSTATUS            status;
=20
     __FdoSetDevicePnpState(Fdo, RemovePending);
     Irp->IoStatus=2EStatus =3D STATUS_SUCCESS;
@@ -1144,11 +1144,11 @@ FdoQueryRemoveDevice(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoCancelRemoveDevice(
-    IN  PXENIFACE_FDO Fdo,
-    IN  PIRP        Irp
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PIRP           Irp
     )
 {
-    NTSTATUS        status;
+    NTSTATUS            status;
=20
     __FdoRestoreDevicePnpState(Fdo, RemovePending);
=20
@@ -1162,11 +1162,11 @@ FdoCancelRemoveDevice(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoSurpriseRemoval(
-    IN  PXENIFACE_FDO Fdo,
-    IN  PIRP        Irp
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PIRP           Irp
     )
 {
-    NTSTATUS        status;
+    NTSTATUS            status;
=20
     __FdoSetDevicePnpState(Fdo, SurpriseRemovePending);
=20
@@ -1181,14 +1181,14 @@ FdoSurpriseRemoval(
     return status;
 }
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 static DECLSPEC_NOINLINE NTSTATUS
 FdoRemoveDevice(
-    IN  PXENIFACE_FDO Fdo,
-    IN  PIRP        Irp
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PIRP           Irp
     )
 {
-    NTSTATUS        status;
+    NTSTATUS            status;
=20
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, PASSIVE_LEVEL);
=20
@@ -1228,8 +1228,8 @@ done:
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoQueryCapabilities(
-    IN  PXENIFACE_FDO         Fdo,
-    IN  PIRP                Irp
+    _In_ PXENIFACE_FDO      Fdo,
+    _In_ PIRP               Irp
     )
 {
     PIO_STACK_LOCATION      StackLocation;
@@ -1271,8 +1271,8 @@ fail1:
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoDeviceUsageNotification(
-    IN  PXENIFACE_FDO                 Fdo,
-    IN  PIRP                        Irp
+    _In_ PXENIFACE_FDO              Fdo,
+    _In_ PIRP                       Irp
     )
 {
     PIO_STACK_LOCATION              StackLocation;
@@ -1331,8 +1331,8 @@ fail1:
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoQueryPnpDeviceState(
-    IN  PXENIFACE_FDO                 Fdo,
-    IN  PIRP                        Irp
+    _In_ PXENIFACE_FDO              Fdo,
+    _In_ PIRP                       Irp
     )
 {
     ULONG_PTR                       State;
@@ -1362,8 +1362,8 @@ done:
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoDispatchPnp(
-    IN  PXENIFACE_FDO   Fdo,
-    IN  PIRP            Irp
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -1438,8 +1438,8 @@ FdoDispatchPnp(
=20
 static FORCEINLINE NTSTATUS
 __FdoSetDevicePowerUp(
-    IN  PXENIFACE_FDO     Fdo,
-    IN  PIRP            Irp
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -1475,8 +1475,8 @@ done:
=20
 static FORCEINLINE NTSTATUS
 __FdoSetDevicePowerDown(
-    IN  PXENIFACE_FDO     Fdo,
-    IN  PIRP            Irp
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -1505,8 +1505,8 @@ __FdoSetDevicePowerDown(
=20
 static FORCEINLINE NTSTATUS
 __FdoSetDevicePower(
-    IN  PXENIFACE_FDO     Fdo,
-    IN  PIRP            Irp
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -1543,15 +1543,15 @@ done:
     return status;
 }
=20
-__drv_functionClass(REQUEST_POWER_COMPLETE)
-__drv_sameIRQL
+_Function_class_(REQUEST_POWER_COMPLETE)
+_IRQL_requires_same_
 VOID
 __FdoRequestSetDevicePower(
-    IN  PDEVICE_OBJECT      DeviceObject,
-    IN  UCHAR               MinorFunction,
-    IN  POWER_STATE         PowerState,
-    IN  PVOID               Context,
-    IN  PIO_STATUS_BLOCK    IoStatus
+    _In_ PDEVICE_OBJECT     DeviceObject,
+    _In_ UCHAR              MinorFunction,
+    _In_ POWER_STATE        PowerState,
+    _In_ PVOID              Context,
+    _In_ PIO_STATUS_BLOCK   IoStatus
     )
 {
     PKEVENT                 Event =3D (PKEVENT)Context;
@@ -1567,8 +1567,8 @@ __FdoRequestSetDevicePower(
=20
 static VOID
 FdoRequestSetDevicePower(
-    IN  PXENIFACE_FDO         Fdo,
-    IN  DEVICE_POWER_STATE  DeviceState
+    _In_ PXENIFACE_FDO      Fdo,
+    _In_ DEVICE_POWER_STATE DeviceState
     )
 {
     POWER_STATE             PowerState;
@@ -1599,8 +1599,8 @@ FdoRequestSetDevicePower(
=20
 static FORCEINLINE NTSTATUS
 __FdoSetSystemPowerUp(
-    IN  PXENIFACE_FDO     Fdo,
-    IN  PIRP            Irp
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PIRP           Irp
     )
 {
=20
@@ -1642,8 +1642,8 @@ done:
=20
 static FORCEINLINE NTSTATUS
 __FdoSetSystemPowerDown(
-    IN  PXENIFACE_FDO     Fdo,
-    IN  PIRP            Irp
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -1680,8 +1680,8 @@ __FdoSetSystemPowerDown(
=20
 static FORCEINLINE NTSTATUS
 __FdoSetSystemPower(
-    IN  PXENIFACE_FDO     Fdo,
-    IN  PIRP            Irp
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -1720,8 +1720,8 @@ done:
=20
 static FORCEINLINE NTSTATUS
 __FdoQueryDevicePowerUp(
-    IN  PXENIFACE_FDO     Fdo,
-    IN  PIRP            Irp
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -1743,8 +1743,8 @@ __FdoQueryDevicePowerUp(
=20
 static FORCEINLINE NTSTATUS
 __FdoQueryDevicePowerDown(
-    IN  PXENIFACE_FDO     Fdo,
-    IN  PIRP            Irp
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -1764,8 +1764,8 @@ __FdoQueryDevicePowerDown(
=20
 static FORCEINLINE NTSTATUS
 __FdoQueryDevicePower(
-    IN  PXENIFACE_FDO     Fdo,
-    IN  PIRP            Irp
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -1802,15 +1802,15 @@ done:
     return status;
 }
=20
-__drv_functionClass(REQUEST_POWER_COMPLETE)
-__drv_sameIRQL
+_Function_class_(REQUEST_POWER_COMPLETE)
+_IRQL_requires_same_
 VOID
 __FdoRequestQueryDevicePower(
-    IN  PDEVICE_OBJECT      DeviceObject,
-    IN  UCHAR               MinorFunction,
-    IN  POWER_STATE         PowerState,
-    IN  PVOID               Context,
-    IN  PIO_STATUS_BLOCK    IoStatus
+    _In_ PDEVICE_OBJECT     DeviceObject,
+    _In_ UCHAR              MinorFunction,
+    _In_ POWER_STATE        PowerState,
+    _In_ PVOID              Context,
+    _In_ PIO_STATUS_BLOCK   IoStatus
     )
 {
     PKEVENT                 Event =3D (PKEVENT)Context;
@@ -1826,8 +1826,8 @@ __FdoRequestQueryDevicePower(
=20
 static VOID
 FdoRequestQueryDevicePower(
-    IN  PXENIFACE_FDO         Fdo,
-    IN  DEVICE_POWER_STATE  DeviceState
+    _In_ PXENIFACE_FDO      Fdo,
+    _In_ DEVICE_POWER_STATE DeviceState
     )
 {
     POWER_STATE             PowerState;
@@ -1858,8 +1858,8 @@ FdoRequestQueryDevicePower(
=20
 static FORCEINLINE NTSTATUS
 __FdoQuerySystemPowerUp(
-    IN  PXENIFACE_FDO     Fdo,
-    IN  PIRP            Irp
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PIRP           Irp
     )
 {
=20
@@ -1890,8 +1890,8 @@ done:
=20
 static FORCEINLINE NTSTATUS
 __FdoQuerySystemPowerDown(
-    IN  PXENIFACE_FDO     Fdo,
-    IN  PIRP            Irp
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -1916,8 +1916,8 @@ __FdoQuerySystemPowerDown(
=20
 static FORCEINLINE NTSTATUS
 __FdoQuerySystemPower(
-    IN  PXENIFACE_FDO     Fdo,
-    IN  PIRP            Irp
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -1957,12 +1957,12 @@ done:
=20
 static NTSTATUS
 FdoDevicePower(
-    IN  PXENIFACE_THREAD  Self,
-    IN  PVOID           Context
+    _In_ PXENIFACE_THREAD   Self,
+    _In_ PVOID              Context
     )
 {
-    PXENIFACE_FDO         Fdo =3D (PXENIFACE_FDO)Context;
-    PKEVENT             Event;
+    PXENIFACE_FDO           Fdo =3D (PXENIFACE_FDO)Context;
+    PKEVENT                 Event;
=20
     Event =3D ThreadGetEvent(Self);
=20
@@ -2014,12 +2014,12 @@ FdoDevicePower(
=20
 static NTSTATUS
 FdoSystemPower(
-    IN  PXENIFACE_THREAD  Self,
-    IN  PVOID           Context
+    _In_ PXENIFACE_THREAD   Self,
+    _In_ PVOID              Context
     )
 {
-    PXENIFACE_FDO         Fdo =3D (PXENIFACE_FDO)Context;
-    PKEVENT             Event;
+    PXENIFACE_FDO           Fdo =3D (PXENIFACE_FDO)Context;
+    PKEVENT                 Event;
=20
     Event =3D ThreadGetEvent(Self);
=20
@@ -2071,8 +2071,8 @@ FdoSystemPower(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoDispatchPower(
-    IN  PXENIFACE_FDO   Fdo,
-    IN  PIRP            Irp
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -2139,8 +2139,8 @@ done:
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoDispatchDefault(
-    IN  PXENIFACE_FDO   Fdo,
-    IN  PIRP            Irp
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PIRP           Irp
     )
 {
     NTSTATUS            status;
@@ -2153,8 +2153,8 @@ FdoDispatchDefault(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoDispatchComplete(
-    IN  PXENIFACE_FDO   Fdo,
-    IN  PIRP            Irp
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PIRP           Irp
     )
 {
     UNREFERENCED_PARAMETER(Fdo);
@@ -2168,8 +2168,8 @@ FdoDispatchComplete(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoDispatchSystemControl(
-    IN  PXENIFACE_FDO   Fdo,
-    IN  PIRP            Irp
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PIRP           Irp
     )
 {
     NTSTATUS            status;
@@ -2186,11 +2186,11 @@ FdoDispatchSystemControl(
     return status;
 }
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 static DECLSPEC_NOINLINE NTSTATUS
 FdoDispatchCleanup(
-    IN  PXENIFACE_FDO   Fdo,
-    IN  PIRP            Irp
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -2208,8 +2208,8 @@ FdoDispatchCleanup(
=20
 NTSTATUS
 FdoDispatch(
-    IN  PXENIFACE_FDO   Fdo,
-    IN  PIRP            Irp
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -2253,15 +2253,15 @@ FdoDispatch(
     return status;
 }
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 static NTSTATUS
 FdoQueryInterface(
-    IN  PXENIFACE_FDO   Fdo,
-    IN  const GUID      *Guid,
-    IN  ULONG           Version,
-    OUT PINTERFACE      Interface,
-    IN  ULONG           Size,
-    IN  BOOLEAN         Optional
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ const GUID     *Guid,
+    _In_ ULONG          Version,
+    _Out_ PINTERFACE    Interface,
+    _In_ ULONG          Size,
+    _In_ BOOLEAN        Optional
     )
 {
     KEVENT              Event;
@@ -2342,7 +2342,7 @@ fail1:
=20
 NTSTATUS
 FdoCreate(
-    IN  PDEVICE_OBJECT  PhysicalDeviceObject
+    _In_ PDEVICE_OBJECT PhysicalDeviceObject
     )
 {
     PDEVICE_OBJECT      FunctionDeviceObject;
@@ -2607,11 +2607,11 @@ fail1:
=20
 VOID
 FdoDestroy(
-    IN  PXENIFACE_FDO     Fdo
+    _In_ PXENIFACE_FDO  Fdo
     )
 {
-    PXENIFACE_DX          Dx =3D Fdo->Dx;
-    PDEVICE_OBJECT        FunctionDeviceObject =3D Dx->DeviceObject;
+    PXENIFACE_DX        Dx =3D Fdo->Dx;
+    PDEVICE_OBJECT      FunctionDeviceObject =3D Dx->DeviceObject;
=20
     ASSERT(IsListEmpty(&Dx->ListEntry));
     ASSERT3U(Fdo->References, =3D=3D, 0);
diff --git a/src/xeniface/fdo=2Eh b/src/xeniface/fdo=2Eh
index 9867756=2E=2E69070cb 100644
--- a/src/xeniface/fdo=2Eh
+++ b/src/xeniface/fdo=2Eh
@@ -119,62 +119,62 @@ typedef struct _XENIFACE_FDO {
=20
 extern PCHAR
 FdoGetName(
-    IN  PXENIFACE_FDO Fdo
+    _In_ PXENIFACE_FDO  Fdo
     );
=20
 extern NTSTATUS
 FdoCreate(
-    IN  PDEVICE_OBJECT  PhysicalDeviceObject
+    _In_ PDEVICE_OBJECT PhysicalDeviceObject
     );
=20
 extern VOID
 FdoDestroy(
-    IN  PXENIFACE_FDO    Fdo
+    _In_ PXENIFACE_FDO  Fdo
     );
=20
 extern VOID
 FdoAcquireMutex(
-    IN  PXENIFACE_FDO     Fdo
+    _In_ PXENIFACE_FDO  Fdo
     );
=20
 extern VOID
 FdoReleaseMutex(
-    IN  PXENIFACE_FDO     Fdo
+    _In_ PXENIFACE_FDO  Fdo
     );
=20
 extern PDEVICE_OBJECT
 FdoGetPhysicalDeviceObject(
-    IN  PXENIFACE_FDO Fdo
+    _In_ PXENIFACE_FDO  Fdo
     );
=20
 extern VOID
 FdoReap(
-    IN  PXENIFACE_FDO Fdo
+    _In_ PXENIFACE_FDO  Fdo
     );
=20
 extern NTSTATUS
 FdoDelegateIrp(
-    IN  PXENIFACE_FDO    Fdo,
-    IN  PIRP            Irp
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PIRP           Irp
     );
=20
=20
 extern PXENBUS_STORE_INTERFACE
 FdoGetStoreInterface(
-    IN  PXENIFACE_FDO     Fdo
+    _In_ PXENIFACE_FDO  Fdo
     );
=20
=20
 extern PXENBUS_SUSPEND_INTERFACE
 FdoGetSuspendInterface(
-    IN  PXENIFACE_FDO     Fdo
+    _In_ PXENIFACE_FDO  Fdo
     );
=20
=20
 extern NTSTATUS
 FdoDispatch(
-    IN  PXENIFACE_FDO    Fdo,
-    IN  PIRP            Irp
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PIRP           Irp
     );
=20
 #endif  // _XENIFACE_FDO_H
diff --git a/src/xeniface/ioctl_evtchn=2Ec b/src/xeniface/ioctl_evtchn=2Ec
index fa63d7f=2E=2E0163ba1 100644
--- a/src/xeniface/ioctl_evtchn=2Ec
+++ b/src/xeniface/ioctl_evtchn=2Ec
@@ -42,14 +42,14 @@ _IRQL_requires_(DISPATCH_LEVEL)
 _IRQL_requires_same_
 VOID
 EvtchnNotificationDpc(
-    __in      PKDPC Dpc,
-    __in_opt  PVOID _Context,
-    __in_opt  PVOID Argument1,
-    __in_opt  PVOID Argument2
+    _In_ PKDPC                  Dpc,
+    _In_opt_ PVOID              _Context,
+    _In_opt_ PVOID              Argument1,
+    _In_opt_ PVOID              Argument2
     )
 {
-    PXENIFACE_EVTCHN_CONTEXT Context =3D _Context;
-    PXENBUS_EVTCHN_CHANNEL   Channel;
+    PXENIFACE_EVTCHN_CONTEXT    Context =3D _Context;
+    PXENBUS_EVTCHN_CHANNEL      Channel;
=20
     UNREFERENCED_PARAMETER(Dpc);
     UNREFERENCED_PARAMETER(Argument1);
@@ -77,13 +77,13 @@ _IRQL_requires_same_
 static DECLSPEC_NOINLINE
 BOOLEAN
 EvtchnInterruptHandler(
-    __in      PKINTERRUPT Interrupt,
-    __in_opt  PVOID Argument
+    _In_ PKINTERRUPT            Interrupt,
+    _In_opt_ PVOID              Argument
     )
 {
-    PXENIFACE_EVTCHN_CONTEXT Context =3D Argument;
-    PROCESSOR_NUMBER ProcNumber;
-    ULONG ProcIndex;
+    PXENIFACE_EVTCHN_CONTEXT    Context =3D Argument;
+    PROCESSOR_NUMBER            ProcNumber;
+    ULONG                       ProcIndex;
=20
     UNREFERENCED_PARAMETER(Interrupt);
=20
@@ -100,11 +100,11 @@ EvtchnInterruptHandler(
 _IRQL_requires_(PASSIVE_LEVEL) // needed for KeFlushQueuedDpcs
 VOID
 EvtchnFree(
-    __in     PXENIFACE_FDO Fdo,
-    __inout  PXENIFACE_EVTCHN_CONTEXT Context
+    _In_ PXENIFACE_FDO                  Fdo,
+    _Inout_ PXENIFACE_EVTCHN_CONTEXT    Context
     )
 {
-    PXENBUS_EVTCHN_CHANNEL Channel;
+    PXENBUS_EVTCHN_CHANNEL              Channel;
=20
     ASSERT(KeGetCurrentIrql() =3D=3D PASSIVE_LEVEL);
=20
@@ -133,13 +133,13 @@ _Requires_exclusive_lock_held_(Fdo->EvtchnLock)
 static
 PXENIFACE_EVTCHN_CONTEXT
 EvtchnFindChannel(
-    __in      PXENIFACE_FDO Fdo,
-    __in      ULONG         LocalPort,
-    __in_opt  PFILE_OBJECT  FileObject
+    _In_ PXENIFACE_FDO          Fdo,
+    _In_ ULONG                  LocalPort,
+    _In_opt_ PFILE_OBJECT       FileObject
     )
 {
-    PXENIFACE_EVTCHN_CONTEXT Context, Found =3D NULL;
-    PLIST_ENTRY Node;
+    PXENIFACE_EVTCHN_CONTEXT    Context, Found =3D NULL;
+    PLIST_ENTRY                 Node;
=20
     Node =3D Fdo->EvtchnList=2EFlink;
     while (Node->Flink !=3D Fdo->EvtchnList=2EFlink) {
@@ -164,19 +164,19 @@ EvtchnFindChannel(
 DECLSPEC_NOINLINE
 NTSTATUS
 IoctlEvtchnBindUnbound(
-    __in  PXENIFACE_FDO     Fdo,
-    __in  PVOID             Buffer,
-    __in  ULONG             InLen,
-    __in  ULONG             OutLen,
-    __in  PFILE_OBJECT      FileObject,
-    __out PULONG_PTR        Info
+    _In_ PXENIFACE_FDO                  Fdo,
+    _In_ PVOID                          Buffer,
+    _In_ ULONG                          InLen,
+    _In_ ULONG                          OutLen,
+    _In_ PFILE_OBJECT                   FileObject,
+    _Out_ PULONG_PTR                    Info
     )
 {
-    NTSTATUS status;
-    PXENIFACE_EVTCHN_BIND_UNBOUND_IN In =3D Buffer;
-    PXENIFACE_EVTCHN_BIND_UNBOUND_OUT Out =3D Buffer;
-    PXENIFACE_EVTCHN_CONTEXT Context;
-    PXENBUS_EVTCHN_CHANNEL Channel;
+    NTSTATUS                            status;
+    PXENIFACE_EVTCHN_BIND_UNBOUND_IN    In =3D Buffer;
+    PXENIFACE_EVTCHN_BIND_UNBOUND_OUT   Out =3D Buffer;
+    PXENIFACE_EVTCHN_CONTEXT            Context;
+    PXENBUS_EVTCHN_CHANNEL              Channel;
=20
     status =3D STATUS_INVALID_BUFFER_SIZE;
     if (InLen !=3D sizeof(XENIFACE_EVTCHN_BIND_UNBOUND_IN) ||
@@ -259,19 +259,19 @@ fail1:
 DECLSPEC_NOINLINE
 NTSTATUS
 IoctlEvtchnBindInterdomain(
-    __in  PXENIFACE_FDO     Fdo,
-    __in  PVOID             Buffer,
-    __in  ULONG             InLen,
-    __in  ULONG             OutLen,
-    __in  PFILE_OBJECT      FileObject,
-    __out PULONG_PTR        Info
+    _In_ PXENIFACE_FDO                      Fdo,
+    _In_ PVOID                              Buffer,
+    _In_ ULONG                              InLen,
+    _In_ ULONG                              OutLen,
+    _In_ PFILE_OBJECT                       FileObject,
+    _Out_ PULONG_PTR                        Info
     )
 {
-    NTSTATUS status;
-    PXENIFACE_EVTCHN_BIND_INTERDOMAIN_IN In =3D Buffer;
-    PXENIFACE_EVTCHN_BIND_INTERDOMAIN_OUT Out =3D Buffer;
-    PXENIFACE_EVTCHN_CONTEXT Context;
-    PXENBUS_EVTCHN_CHANNEL Channel;
+    NTSTATUS                                status;
+    PXENIFACE_EVTCHN_BIND_INTERDOMAIN_IN    In =3D Buffer;
+    PXENIFACE_EVTCHN_BIND_INTERDOMAIN_OUT   Out =3D Buffer;
+    PXENIFACE_EVTCHN_CONTEXT                Context;
+    PXENBUS_EVTCHN_CHANNEL                  Channel;
=20
     status =3D STATUS_INVALID_BUFFER_SIZE;
     if (InLen !=3D sizeof(XENIFACE_EVTCHN_BIND_INTERDOMAIN_IN) ||
@@ -356,17 +356,17 @@ fail1:
 DECLSPEC_NOINLINE
 NTSTATUS
 IoctlEvtchnClose(
-    __in  PXENIFACE_FDO     Fdo,
-    __in  PVOID             Buffer,
-    __in  ULONG             InLen,
-    __in  ULONG             OutLen,
-    __in  PFILE_OBJECT      FileObject
+    _In_ PXENIFACE_FDO          Fdo,
+    _In_ PVOID                  Buffer,
+    _In_ ULONG                  InLen,
+    _In_ ULONG                  OutLen,
+    _In_ PFILE_OBJECT           FileObject
     )
 {
-    NTSTATUS status;
-    PXENIFACE_EVTCHN_CLOSE_IN In =3D Buffer;
-    PXENIFACE_EVTCHN_CONTEXT Context;
-    KIRQL Irql;
+    NTSTATUS                    status;
+    PXENIFACE_EVTCHN_CLOSE_IN   In =3D Buffer;
+    PXENIFACE_EVTCHN_CONTEXT    Context;
+    KIRQL                       Irql;
=20
     status =3D STATUS_INVALID_BUFFER_SIZE;
     if (InLen !=3D sizeof(XENIFACE_EVTCHN_CLOSE_IN) ||
@@ -401,14 +401,14 @@ _Requires_lock_not_held_(Fdo->EvtchnLock)
 DECLSPEC_NOINLINE
 NTSTATUS
 EvtchnNotify(
-    __in      PXENIFACE_FDO Fdo,
-    __in      ULONG         LocalPort,
-    __in_opt  PFILE_OBJECT  FileObject
+    _In_ PXENIFACE_FDO          Fdo,
+    _In_ ULONG                  LocalPort,
+    _In_opt_ PFILE_OBJECT       FileObject
     )
 {
-    NTSTATUS status;
-    PXENIFACE_EVTCHN_CONTEXT Context;
-    KIRQL Irql;
+    NTSTATUS                    status;
+    PXENIFACE_EVTCHN_CONTEXT    Context;
+    KIRQL                       Irql;
=20
     KeAcquireSpinLock(&Fdo->EvtchnLock, &Irql);
=20
@@ -435,15 +435,15 @@ fail1:
 DECLSPEC_NOINLINE
 NTSTATUS
 IoctlEvtchnNotify(
-    __in  PXENIFACE_FDO     Fdo,
-    __in  PVOID             Buffer,
-    __in  ULONG             InLen,
-    __in  ULONG             OutLen,
-    __in  PFILE_OBJECT      FileObject
+    _In_ PXENIFACE_FDO          Fdo,
+    _In_ PVOID                  Buffer,
+    _In_ ULONG                  InLen,
+    _In_ ULONG                  OutLen,
+    _In_ PFILE_OBJECT           FileObject
     )
 {
-    NTSTATUS status;
-    PXENIFACE_EVTCHN_NOTIFY_IN In =3D Buffer;
+    NTSTATUS                    status;
+    PXENIFACE_EVTCHN_NOTIFY_IN  In =3D Buffer;
=20
     status =3D STATUS_INVALID_BUFFER_SIZE;
     if (InLen !=3D sizeof(XENIFACE_EVTCHN_NOTIFY_IN) ||
@@ -465,17 +465,17 @@ fail1:
 DECLSPEC_NOINLINE
 NTSTATUS
 IoctlEvtchnUnmask(
-    __in  PXENIFACE_FDO     Fdo,
-    __in  PVOID             Buffer,
-    __in  ULONG             InLen,
-    __in  ULONG             OutLen,
-    __in  PFILE_OBJECT      FileObject
+    _In_ PXENIFACE_FDO          Fdo,
+    _In_ PVOID                  Buffer,
+    _In_ ULONG                  InLen,
+    _In_ ULONG                  OutLen,
+    _In_ PFILE_OBJECT           FileObject
     )
 {
-    NTSTATUS status;
-    PXENIFACE_EVTCHN_UNMASK_IN In =3D Buffer;
-    PXENIFACE_EVTCHN_CONTEXT Context;
-    KIRQL Irql;
+    NTSTATUS                    status;
+    PXENIFACE_EVTCHN_UNMASK_IN  In =3D Buffer;
+    PXENIFACE_EVTCHN_CONTEXT    Context;
+    KIRQL                       Irql;
=20
     status =3D STATUS_INVALID_BUFFER_SIZE;
     if (InLen !=3D sizeof(XENIFACE_EVTCHN_UNMASK_IN) ||
diff --git a/src/xeniface/ioctl_gnttab=2Ec b/src/xeniface/ioctl_gnttab=2Ec
index ee319cb=2E=2E770f0dc 100644
--- a/src/xeniface/ioctl_gnttab=2Ec
+++ b/src/xeniface/ioctl_gnttab=2Ec
@@ -40,17 +40,17 @@
 _Function_class_(IO_WORKITEM_ROUTINE)
 VOID
 CompleteGnttabIrp(
-    __in      PDEVICE_OBJECT DeviceObject,
-    __in_opt  PVOID          Context
+    _In_ PDEVICE_OBJECT         DeviceObject,
+    _In_opt_ PVOID              Context
     )
 {
-    PXENIFACE_DX Dx =3D (PXENIFACE_DX)DeviceObject->DeviceExtension;
-    PXENIFACE_FDO Fdo =3D Dx->Fdo;
-    PIRP Irp =3D Context;
-    PXENIFACE_GNTTAB_CONTEXT GnttabContext;
-    PIO_WORKITEM WorkItem;
-    KAPC_STATE ApcState;
-    BOOLEAN ChangeProcess;
+    PXENIFACE_DX                Dx =3D (PXENIFACE_DX)DeviceObject->Device=
Extension;
+    PXENIFACE_FDO               Fdo =3D Dx->Fdo;
+    PIRP                        Irp =3D Context;
+    PXENIFACE_GNTTAB_CONTEXT    GnttabContext;
+    PIO_WORKITEM                WorkItem;
+    KAPC_STATE                  ApcState;
+    BOOLEAN                     ChangeProcess;
=20
     ASSERT(Context !=3D NULL);
=20
@@ -96,10 +96,10 @@ _Acquires_exclusive_lock_(((PXENIFACE_FDO)Argument)->G=
nttabCacheLock)
 _IRQL_requires_(DISPATCH_LEVEL)
 VOID
 GnttabAcquireLock(
-    __in  PVOID Argument
+    _In_ PVOID      Argument
     )
 {
-    PXENIFACE_FDO Fdo =3D Argument;
+    PXENIFACE_FDO   Fdo =3D Argument;
=20
     ASSERT(KeGetCurrentIrql() =3D=3D DISPATCH_LEVEL);
=20
@@ -110,10 +110,10 @@ _Releases_exclusive_lock_(((PXENIFACE_FDO)Argument)-=
>GnttabCacheLock)
 _IRQL_requires_(DISPATCH_LEVEL)
 VOID
 GnttabReleaseLock(
-    __in  PVOID Argument
+    _In_ PVOID      Argument
     )
 {
-    PXENIFACE_FDO Fdo =3D Argument;
+    PXENIFACE_FDO   Fdo =3D Argument;
=20
     ASSERT(KeGetCurrentIrql() =3D=3D DISPATCH_LEVEL);
=20
@@ -124,12 +124,12 @@ _Requires_lock_not_held_(Fdo->IrpQueueLock)
 static
 PIRP
 FindGnttabIrp(
-    __in  PXENIFACE_FDO Fdo,
-    __in  PXENIFACE_GNTTAB_CONTEXT Context
+    _In_ PXENIFACE_FDO              Fdo,
+    _In_ PXENIFACE_GNTTAB_CONTEXT   Context
     )
 {
-    KIRQL Irql;
-    PIRP Irp;
+    KIRQL                           Irql;
+    PIRP                            Irp;
=20
     CsqAcquireLock(&Fdo->IrpQueue, &Irql);
     Irp =3D CsqPeekNextIrp(&Fdo->IrpQueue, NULL, Context);
@@ -142,9 +142,9 @@ FindGnttabIrp(
 static
 void
 GnttabStopSharing(
-    __in     PXENIFACE_FDO             Fdo,
-    __inout  PXENIFACE_GNTTAB_CONTEXT  Context,
-    __in     ULONG                     NumberPages
+    _In_ PXENIFACE_FDO                  Fdo,
+    _Inout_ PXENIFACE_GNTTAB_CONTEXT    Context,
+    _In_ ULONG                          NumberPages
 )
 {
     if (Context->Grants !=3D NULL) {
@@ -188,14 +188,14 @@ GnttabStopSharing(
 static
 NTSTATUS
 GnttabPermitForeignAccess(
-    __in     PXENIFACE_FDO             Fdo,
-    __inout  PXENIFACE_GNTTAB_CONTEXT  Context
+    _In_ PXENIFACE_FDO                  Fdo,
+    _Inout_ PXENIFACE_GNTTAB_CONTEXT    Context
     )
 {
-    NTSTATUS Status;
-    ULONG Page =3D 0;
-    size_t GrantsSize =3D 0;
-    ULONG SharedSize =3D 0;
+    NTSTATUS                            Status;
+    ULONG                               Page =3D 0;
+    size_t                              GrantsSize =3D 0;
+    ULONG                               SharedSize =3D 0;
=20
     Trace("> RemoteDomain %d, UserVa %p, NumberPages %lu, Flags 0x%x, Off=
set 0x%x, Port %d, Process %p, Id %lu\n",
           Context->RemoteDomain, Context->UserVa, Context->NumberPages, C=
ontext->Flags,
@@ -310,16 +310,16 @@ fail1:
 DECLSPEC_NOINLINE
 NTSTATUS
 IoctlGnttabPermitForeignAccess(
-    __in     PXENIFACE_FDO  Fdo,
-    __in     PVOID          Buffer,
-    __in     ULONG          InLen,
-    __in     ULONG          OutLen,
-    __inout  PIRP           Irp
+    _In_ PXENIFACE_FDO                              Fdo,
+    _In_ PVOID                                      Buffer,
+    _In_ ULONG                                      InLen,
+    _In_ ULONG                                      OutLen,
+    _Inout_ PIRP                                    Irp
     )
 {
-    NTSTATUS Status;
-    PXENIFACE_GNTTAB_PERMIT_FOREIGN_ACCESS_IN In1 =3D NULL;
-    PXENIFACE_GNTTAB_PERMIT_FOREIGN_ACCESS_IN_V2 In =3D NULL;
+    NTSTATUS                                        Status;
+    PXENIFACE_GNTTAB_PERMIT_FOREIGN_ACCESS_IN       In1 =3D NULL;
+    PXENIFACE_GNTTAB_PERMIT_FOREIGN_ACCESS_IN_V2    In =3D NULL;
     // XENIFACE_GNTTAB_PERMIT_FOREIGN_ACCESS_OUT_V2 is the same as XENIFA=
CE_GNTTAB_PERMIT_FOREIGN_ACCESS_OUT
     PXENIFACE_GNTTAB_PERMIT_FOREIGN_ACCESS_OUT Out =3D Irp->UserBuffer;
     PXENIFACE_GNTTAB_CONTEXT Context;
@@ -470,11 +470,11 @@ fail1:
 _IRQL_requires_max_(APC_LEVEL)
 VOID
 GnttabFreeGrant(
-    __in     PXENIFACE_FDO             Fdo,
-    __inout  PXENIFACE_GNTTAB_CONTEXT  Context
+    _In_ PXENIFACE_FDO                  Fdo,
+    _Inout_ PXENIFACE_GNTTAB_CONTEXT    Context
 )
 {
-    NTSTATUS status;
+    NTSTATUS                            status;
=20
     Trace("Context %p\n", Context);
=20
@@ -501,17 +501,17 @@ GnttabFreeGrant(
 DECLSPEC_NOINLINE
 NTSTATUS
 IoctlGnttabRevokeForeignAccess(
-    __in  PXENIFACE_FDO  Fdo,
-    __in  PVOID          Buffer,
-    __in  ULONG          InLen,
-    __in  ULONG          OutLen,
-    __in  ULONG          ControlCode
+    _In_ PXENIFACE_FDO          Fdo,
+    _In_ PVOID                  Buffer,
+    _In_ ULONG                  InLen,
+    _In_ ULONG                  OutLen,
+    _In_ ULONG                  ControlCode
     )
 {
-    NTSTATUS Status;
-    XENIFACE_GNTTAB_CONTEXT SeekContext;
-    PIRP PendingIrp;
-    PXENIFACE_GNTTAB_CONTEXT Context =3D NULL;
+    NTSTATUS                    Status;
+    XENIFACE_GNTTAB_CONTEXT     SeekContext;
+    PIRP                        PendingIrp;
+    PXENIFACE_GNTTAB_CONTEXT    Context =3D NULL;
=20
     UNREFERENCED_PARAMETER(OutLen);
=20
@@ -561,16 +561,16 @@ fail1:
 DECLSPEC_NOINLINE
 NTSTATUS
 IoctlGnttabMapForeignPages(
-    __in     PXENIFACE_FDO  Fdo,
-    __in     PVOID          Buffer,
-    __in     ULONG          InLen,
-    __in     ULONG          OutLen,
-    __inout  PIRP           Irp
+    _In_ PXENIFACE_FDO                          Fdo,
+    _In_ PVOID                                  Buffer,
+    _In_ ULONG                                  InLen,
+    _In_ ULONG                                  OutLen,
+    _Inout_ PIRP                                Irp
     )
 {
-    NTSTATUS status;
-    PXENIFACE_GNTTAB_MAP_FOREIGN_PAGES_IN In1 =3D NULL;
-    PXENIFACE_GNTTAB_MAP_FOREIGN_PAGES_IN_V2 In =3D NULL;
+    NTSTATUS                                    status;
+    PXENIFACE_GNTTAB_MAP_FOREIGN_PAGES_IN       In1 =3D NULL;
+    PXENIFACE_GNTTAB_MAP_FOREIGN_PAGES_IN_V2    In =3D NULL;
     // XENIFACE_GNTTAB_MAP_FOREIGN_PAGES_OUT_V2 is the same as XENIFACE_G=
NTTAB_MAP_FOREIGN_PAGES_OUT
     PXENIFACE_GNTTAB_MAP_FOREIGN_PAGES_OUT Out =3D Irp->UserBuffer;
     ULONG NumberPages;
@@ -791,11 +791,11 @@ _IRQL_requires_max_(APC_LEVEL)
 DECLSPEC_NOINLINE
 VOID
 GnttabFreeMap(
-    __in     PXENIFACE_FDO             Fdo,
-    __inout  PXENIFACE_GNTTAB_CONTEXT  Context
+    _In_ PXENIFACE_FDO                  Fdo,
+    _Inout_ PXENIFACE_GNTTAB_CONTEXT    Context
     )
 {
-    NTSTATUS status;
+    NTSTATUS                            status;
=20
     ASSERT(Context->Type =3D=3D XENIFACE_GNTTAB_CONTEXT_MAP);
     ASSERT(KeGetCurrentIrql() <=3D APC_LEVEL);
@@ -837,17 +837,17 @@ GnttabFreeMap(
 DECLSPEC_NOINLINE
 NTSTATUS
 IoctlGnttabUnmapForeignPages(
-    __in  PXENIFACE_FDO  Fdo,
-    __in  PVOID          Buffer,
-    __in  ULONG          InLen,
-    __in  ULONG          OutLen,
-    __in  ULONG          ControlCode
+    _In_ PXENIFACE_FDO          Fdo,
+    _In_ PVOID                  Buffer,
+    _In_ ULONG                  InLen,
+    _In_ ULONG                  OutLen,
+    _In_ ULONG                  ControlCode
     )
 {
-    NTSTATUS status;
-    XENIFACE_GNTTAB_CONTEXT SeekContext;
-    PXENIFACE_GNTTAB_CONTEXT Context;
-    PIRP PendingIrp;
+    NTSTATUS                    status;
+    XENIFACE_GNTTAB_CONTEXT     SeekContext;
+    PXENIFACE_GNTTAB_CONTEXT    Context;
+    PIRP                        PendingIrp;
=20
     ASSERT(ControlCode =3D=3D IOCTL_XENIFACE_GNTTAB_UNMAP_FOREIGN_PAGES
         || ControlCode =3D=3D IOCTL_XENIFACE_GNTTAB_UNMAP_FOREIGN_PAGES_V=
2);
diff --git a/src/xeniface/ioctl_sharedinfo=2Ec b/src/xeniface/ioctl_shared=
info=2Ec
index 49203d3=2E=2E3512c73 100644
--- a/src/xeniface/ioctl_sharedinfo=2Ec
+++ b/src/xeniface/ioctl_sharedinfo=2Ec
@@ -38,11 +38,11 @@
 DECLSPEC_NOINLINE
 NTSTATUS
 IoctlSharedInfoGetTime(
-    __in  PXENIFACE_FDO                 Fdo,
-    __in  PCHAR                         Buffer,
-    __in  ULONG                         InLen,
-    __in  ULONG                         OutLen,
-    __out PULONG_PTR                    Info
+    _In_ PXENIFACE_FDO                  Fdo,
+    _In_ PCHAR                          Buffer,
+    _In_ ULONG                          InLen,
+    _In_ ULONG                          OutLen,
+    _Out_ PULONG_PTR                    Info
     )
 {
     PXENIFACE_SHAREDINFO_GET_TIME_OUT   Out;
diff --git a/src/xeniface/ioctl_store=2Ec b/src/xeniface/ioctl_store=2Ec
index bc27b8b=2E=2E796f55d 100644
--- a/src/xeniface/ioctl_store=2Ec
+++ b/src/xeniface/ioctl_store=2Ec
@@ -43,8 +43,8 @@
 static FORCEINLINE
 BOOLEAN
 __IsValidPath(
-    __in  PCHAR             Str,
-    __in  ULONG             Len
+    _In_ PCHAR  Str,
+    _In_ ULONG  Len
     )
 {
     for ( ; Len--; ++Str) {
@@ -62,8 +62,8 @@ __IsValidPath(
 static FORCEINLINE
 BOOLEAN
 __IsValidStr(
-    __in  PCHAR             Str,
-    __in  ULONG             Len
+    _In_ PCHAR  Str,
+    _In_ ULONG  Len
     )
 {
     for ( ; Len--; ++Str) {
@@ -78,11 +78,11 @@ __IsValidStr(
 static FORCEINLINE
 ULONG
 __MultiSzLen(
-    __in  PCHAR             Str,
-    __out PULONG            Count
+    _In_ PCHAR      Str,
+    _Out_ PULONG    Count
     )
 {
-    ULONG Length =3D 0;
+    ULONG           Length =3D 0;
     if (Count)  *Count =3D 0;
     do {
         for ( ; *Str; ++Str, ++Length) ;
@@ -95,12 +95,12 @@ __MultiSzLen(
 static FORCEINLINE
 VOID
 __DisplayMultiSz(
-    __in PCHAR              Str
+    _In_ PCHAR  Str
     )
 {
-    PCHAR   Ptr;
-    ULONG   Idx;
-    ULONG   Len;
+    PCHAR       Ptr;
+    ULONG       Idx;
+    ULONG       Len;
=20
     for (Ptr =3D Str, Idx =3D 0; *Ptr; ++Idx) {
         Len =3D (ULONG)strlen(Ptr);
@@ -112,17 +112,17 @@ __DisplayMultiSz(
 DECLSPEC_NOINLINE
 NTSTATUS
 IoctlStoreRead(
-    __in  PXENIFACE_FDO     Fdo,
-    __in  PCHAR             Buffer,
-    __in  ULONG             InLen,
-    __in  ULONG             OutLen,
-    __out PULONG_PTR        Info
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PCHAR          Buffer,
+    _In_ ULONG          InLen,
+    _In_ ULONG          OutLen,
+    _Out_ PULONG_PTR    Info
     )
 {
-    NTSTATUS    status;
-    PCHAR       Value;
-    ULONG       Length;
-    BOOLEAN     SquashError =3D FALSE;
+    NTSTATUS            status;
+    PCHAR               Value;
+    ULONG               Length;
+    BOOLEAN             SquashError =3D FALSE;
=20
     status =3D STATUS_INVALID_BUFFER_SIZE;
     if (InLen =3D=3D 0)
@@ -182,15 +182,15 @@ fail1:
 DECLSPEC_NOINLINE
 NTSTATUS
 IoctlStoreWrite(
-    __in  PXENIFACE_FDO     Fdo,
-    __in  PCHAR             Buffer,
-    __in  ULONG             InLen,
-    __in  ULONG             OutLen
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PCHAR          Buffer,
+    _In_ ULONG          InLen,
+    _In_ ULONG          OutLen
     )
 {
-    NTSTATUS    status;
-    PCHAR       Value;
-    ULONG       Length;
+    NTSTATUS            status;
+    PCHAR               Value;
+    ULONG               Length;
=20
     status =3D STATUS_INVALID_BUFFER_SIZE;
     if (InLen =3D=3D 0 || OutLen !=3D 0)
@@ -227,18 +227,18 @@ fail1:
 DECLSPEC_NOINLINE
 NTSTATUS
 IoctlStoreDirectory(
-    __in  PXENIFACE_FDO     Fdo,
-    __in  PCHAR             Buffer,
-    __in  ULONG             InLen,
-    __in  ULONG             OutLen,
-    __out PULONG_PTR        Info
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PCHAR          Buffer,
+    _In_ ULONG          InLen,
+    _In_ ULONG          OutLen,
+    _Out_ PULONG_PTR    Info
     )
 {
-    NTSTATUS    status;
-    PCHAR       Value;
-    ULONG       Length;
-    ULONG       Count;
-    BOOLEAN     SquashError =3D FALSE;
+    NTSTATUS            status;
+    PCHAR               Value;
+    ULONG               Length;
+    ULONG               Count;
+    BOOLEAN             SquashError =3D FALSE;
=20
     status =3D STATUS_INVALID_BUFFER_SIZE;
     if (InLen =3D=3D 0)
@@ -301,13 +301,13 @@ fail1:
 DECLSPEC_NOINLINE
 NTSTATUS
 IoctlStoreRemove(
-    __in  PXENIFACE_FDO     Fdo,
-    __in  PCHAR             Buffer,
-    __in  ULONG             InLen,
-    __in  ULONG             OutLen
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PCHAR          Buffer,
+    _In_ ULONG          InLen,
+    _In_ ULONG          OutLen
     )
 {
-    NTSTATUS    status;
+    NTSTATUS            status;
=20
     status =3D STATUS_INVALID_BUFFER_SIZE;
     if (InLen =3D=3D 0 || OutLen !=3D 0)
@@ -336,12 +336,12 @@ fail1:
 static
 PXENBUS_STORE_PERMISSION
 __ConvertPermissions(
-    __in  ULONG                       NumberPermissions,
-    __in  PXENIFACE_STORE_PERMISSION  XenifacePermissions
+    _In_ ULONG                      NumberPermissions,
+    _In_ PXENIFACE_STORE_PERMISSION XenifacePermissions
     )
 {
-    PXENBUS_STORE_PERMISSION          XenbusPermissions;
-    ULONG                             Index;
+    PXENBUS_STORE_PERMISSION        XenbusPermissions;
+    ULONG                           Index;
=20
     if (NumberPermissions > 255)
         goto fail1;
@@ -390,7 +390,7 @@ fail1:
 static
 VOID
 __FreePermissions(
-    __in  PXENBUS_STORE_PERMISSION    Permissions
+    _In_ PXENBUS_STORE_PERMISSION   Permissions
     )
 {
     __FreePoolWithTag(Permissions, XENIFACE_POOL_TAG);
@@ -399,17 +399,17 @@ __FreePermissions(
 DECLSPEC_NOINLINE
 NTSTATUS
 IoctlStoreSetPermissions(
-    __in  PXENIFACE_FDO     Fdo,
-    __in  PVOID             Buffer,
-    __in  ULONG             InLen,
-    __in  ULONG             OutLen
+    _In_ PXENIFACE_FDO                  Fdo,
+    _In_ PVOID                          Buffer,
+    _In_ ULONG                          InLen,
+    _In_ ULONG                          OutLen
     )
 {
-    NTSTATUS status;
-    PXENIFACE_STORE_SET_PERMISSIONS_IN In =3D Buffer;
-    PXENBUS_STORE_PERMISSION Permissions;
-    ULONG Index;
-    PCHAR Path;
+    NTSTATUS                            status;
+    PXENIFACE_STORE_SET_PERMISSIONS_IN  In =3D Buffer;
+    PXENBUS_STORE_PERMISSION            Permissions;
+    ULONG                               Index;
+    PCHAR                               Path;
=20
     status =3D STATUS_INVALID_BUFFER_SIZE;
     if (InLen < sizeof(XENIFACE_STORE_SET_PERMISSIONS_IN) ||
@@ -490,8 +490,8 @@ fail1:
=20
 static NTSTATUS
 StoreWatch(
-    IN  PXENIFACE_THREAD    Self,
-    IN  PVOID               _Context
+    _In_ PXENIFACE_THREAD   Self,
+    _In_ PVOID              _Context
     )
 {
     PXENIFACE_STORE_CONTEXT Context =3D _Context;
@@ -521,19 +521,19 @@ StoreWatch(
 DECLSPEC_NOINLINE
 NTSTATUS
 IoctlStoreAddWatch(
-    __in  PXENIFACE_FDO     Fdo,
-    __in  PVOID             Buffer,
-    __in  ULONG             InLen,
-    __in  ULONG             OutLen,
-    __in  PFILE_OBJECT      FileObject,
-    __out PULONG_PTR        Info
+    _In_ PXENIFACE_FDO              Fdo,
+    _In_ PVOID                      Buffer,
+    _In_ ULONG                      InLen,
+    _In_ ULONG                      OutLen,
+    _In_ PFILE_OBJECT               FileObject,
+    _Out_ PULONG_PTR                Info
     )
 {
-    NTSTATUS status;
-    PXENIFACE_STORE_ADD_WATCH_IN In =3D Buffer;
-    PXENIFACE_STORE_ADD_WATCH_OUT Out =3D Buffer;
-    PCHAR Path;
-    PXENIFACE_STORE_CONTEXT Context;
+    NTSTATUS                        status;
+    PXENIFACE_STORE_ADD_WATCH_IN    In =3D Buffer;
+    PXENIFACE_STORE_ADD_WATCH_OUT   Out =3D Buffer;
+    PCHAR                           Path;
+    PXENIFACE_STORE_CONTEXT         Context;
=20
     status =3D STATUS_INVALID_BUFFER_SIZE;
     if (InLen !=3D sizeof(XENIFACE_STORE_ADD_WATCH_IN) ||
@@ -638,11 +638,11 @@ fail1:
 _IRQL_requires_max_(DISPATCH_LEVEL)
 VOID
 StoreFreeWatch(
-    __in     PXENIFACE_FDO Fdo,
-    __inout  PXENIFACE_STORE_CONTEXT Context
+    _In_ PXENIFACE_FDO              Fdo,
+    _Inout_ PXENIFACE_STORE_CONTEXT Context
     )
 {
-    NTSTATUS status;
+    NTSTATUS                        status;
=20
     ASSERT(KeGetCurrentIrql() =3D=3D PASSIVE_LEVEL);
=20
@@ -668,18 +668,18 @@ StoreFreeWatch(
 DECLSPEC_NOINLINE
 NTSTATUS
 IoctlStoreRemoveWatch(
-    __in  PXENIFACE_FDO     Fdo,
-    __in  PVOID             Buffer,
-    __in  ULONG             InLen,
-    __in  ULONG             OutLen,
-    __in  PFILE_OBJECT      FileObject
+    _In_ PXENIFACE_FDO              Fdo,
+    _In_ PVOID                      Buffer,
+    _In_ ULONG                      InLen,
+    _In_ ULONG                      OutLen,
+    _In_ PFILE_OBJECT               FileObject
     )
 {
-    NTSTATUS status;
+    NTSTATUS                        status;
     PXENIFACE_STORE_REMOVE_WATCH_IN In =3D Buffer;
-    PXENIFACE_STORE_CONTEXT Context =3D NULL;
-    KIRQL Irql;
-    PLIST_ENTRY Node;
+    PXENIFACE_STORE_CONTEXT         Context =3D NULL;
+    KIRQL                           Irql;
+    PLIST_ENTRY                     Node;
=20
     status =3D STATUS_INVALID_BUFFER_SIZE;
     if (InLen !=3D sizeof(XENIFACE_STORE_REMOVE_WATCH_IN) ||
diff --git a/src/xeniface/ioctl_suspend=2Ec b/src/xeniface/ioctl_suspend=
=2Ec
index 1607e5a=2E=2E7831c1b 100644
--- a/src/xeniface/ioctl_suspend=2Ec
+++ b/src/xeniface/ioctl_suspend=2Ec
@@ -39,15 +39,15 @@
 DECLSPEC_NOINLINE
 NTSTATUS
 IoctlSuspendGetCount(
-    __in  PXENIFACE_FDO     Fdo,
-    __in  PCHAR             Buffer,
-    __in  ULONG             InLen,
-    __in  ULONG             OutLen,
-    __out PULONG_PTR        Info
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PCHAR          Buffer,
+    _In_ ULONG          InLen,
+    _In_ ULONG          OutLen,
+    _Out_ PULONG_PTR    Info
     )
 {
-    NTSTATUS    status;
-    PULONG      Value;
+    NTSTATUS            status;
+    PULONG              Value;
=20
     status =3D STATUS_INVALID_BUFFER_SIZE;
     if (InLen !=3D 0)
@@ -73,18 +73,18 @@ fail1:
 DECLSPEC_NOINLINE
 NTSTATUS
 IoctlSuspendRegister(
-    __in  PXENIFACE_FDO     Fdo,
-    __in  PVOID             Buffer,
-    __in  ULONG             InLen,
-    __in  ULONG             OutLen,
-    __in  PFILE_OBJECT      FileObject,
-    __out PULONG_PTR        Info
+    _In_ PXENIFACE_FDO              Fdo,
+    _In_ PVOID                      Buffer,
+    _In_ ULONG                      InLen,
+    _In_ ULONG                      OutLen,
+    _In_ PFILE_OBJECT               FileObject,
+    _Out_ PULONG_PTR                Info
     )
 {
-    NTSTATUS status;
-    PXENIFACE_SUSPEND_REGISTER_IN In =3D Buffer;
-    PXENIFACE_SUSPEND_REGISTER_OUT Out =3D Buffer;
-    PXENIFACE_SUSPEND_CONTEXT Context;
+    NTSTATUS                        status;
+    PXENIFACE_SUSPEND_REGISTER_IN   In =3D Buffer;
+    PXENIFACE_SUSPEND_REGISTER_OUT  Out =3D Buffer;
+    PXENIFACE_SUSPEND_CONTEXT       Context;
=20
     status =3D STATUS_INVALID_BUFFER_SIZE;
     if (InLen !=3D sizeof(XENIFACE_SUSPEND_REGISTER_IN) ||
@@ -134,8 +134,8 @@ fail1:
 _IRQL_requires_max_(DISPATCH_LEVEL)
 VOID
 SuspendFreeEvent(
-    __in     PXENIFACE_FDO Fdo,
-    __inout  PXENIFACE_SUSPEND_CONTEXT Context
+    _In_ PXENIFACE_FDO                  Fdo,
+    _Inout_ PXENIFACE_SUSPEND_CONTEXT   Context
     )
 {
     Trace("Context %p, FO %p\n",
@@ -151,18 +151,18 @@ SuspendFreeEvent(
 DECLSPEC_NOINLINE
 NTSTATUS
 IoctlSuspendDeregister(
-    __in  PXENIFACE_FDO     Fdo,
-    __in  PVOID             Buffer,
-    __in  ULONG             InLen,
-    __in  ULONG             OutLen,
-    __in  PFILE_OBJECT      FileObject
+    _In_ PXENIFACE_FDO              Fdo,
+    _In_ PVOID                      Buffer,
+    _In_ ULONG                      InLen,
+    _In_ ULONG                      OutLen,
+    _In_ PFILE_OBJECT               FileObject
     )
 {
-    NTSTATUS status;
-    PXENIFACE_SUSPEND_REGISTER_OUT In =3D Buffer;
-    PXENIFACE_SUSPEND_CONTEXT Context =3D NULL;
-    KIRQL Irql;
-    PLIST_ENTRY Node;
+    NTSTATUS                        status;
+    PXENIFACE_SUSPEND_REGISTER_OUT  In =3D Buffer;
+    PXENIFACE_SUSPEND_CONTEXT       Context =3D NULL;
+    KIRQL                           Irql;
+    PLIST_ENTRY                     Node;
=20
     status =3D STATUS_INVALID_BUFFER_SIZE;
     if (InLen !=3D sizeof(XENIFACE_SUSPEND_REGISTER_OUT) ||
@@ -206,12 +206,12 @@ fail1:
=20
 VOID
 SuspendEventFire(
-    __in    PXENIFACE_FDO   Fdo
+    _In_ PXENIFACE_FDO          Fdo
     )
 {
-    KIRQL       Irql;
-    PLIST_ENTRY Node;
-    PXENIFACE_SUSPEND_CONTEXT Context;
+    KIRQL                       Irql;
+    PLIST_ENTRY                 Node;
+    PXENIFACE_SUSPEND_CONTEXT   Context;
=20
     KeAcquireSpinLock(&Fdo->SuspendLock, &Irql);
     Node =3D Fdo->SuspendList=2EFlink;
diff --git a/src/xeniface/ioctls=2Ec b/src/xeniface/ioctls=2Ec
index 076750a=2E=2Ed7d0aed 100644
--- a/src/xeniface/ioctls=2Ec
+++ b/src/xeniface/ioctls=2Ec
@@ -42,13 +42,13 @@
=20
 NTSTATUS
 __CaptureUserBuffer(
-    __in  PVOID Buffer,
-    __in  ULONG Length,
-    __out PVOID *CapturedBuffer
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length,
+    _Outptr_ PVOID  *CapturedBuffer
     )
 {
-    NTSTATUS Status;
-    PVOID TempBuffer =3D NULL;
+    NTSTATUS        Status;
+    PVOID           TempBuffer =3D NULL;
=20
     if (Length =3D=3D 0) {
         *CapturedBuffer =3D NULL;
@@ -82,7 +82,7 @@ __CaptureUserBuffer(
=20
 VOID
 __FreeCapturedBuffer(
-    __in_opt  PVOID CapturedBuffer
+    _In_opt_ PVOID  CapturedBuffer
     )
 {
     if (CapturedBuffer !=3D NULL) {
@@ -93,8 +93,8 @@ __FreeCapturedBuffer(
 static FORCEINLINE
 BOOLEAN
 __IsValidStr(
-    __in  PCHAR             Str,
-    __in  ULONG             Len
+    _In_ PCHAR  Str,
+    _In_ ULONG  Len
     )
 {
     for ( ; Len--; ++Str) {
@@ -111,14 +111,14 @@ __IsValidStr(
 DECLSPEC_NOINLINE
 NTSTATUS
 IoctlLog(
-    __in  PXENIFACE_FDO     Fdo,
-    __in  PCHAR             Buffer,
-    __in  ULONG             InLen,
-    __in  ULONG             OutLen
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PCHAR          Buffer,
+    _In_ ULONG          InLen,
+    _In_ ULONG          OutLen
     )
 {
-    NTSTATUS    status;
-	PCHAR		ptr;
+    NTSTATUS            status;
+	PCHAR                  ptr;
=20
     UNREFERENCED_PARAMETER(Fdo);
=20
@@ -152,16 +152,16 @@ fail1:
 _IRQL_requires_(PASSIVE_LEVEL) // EvtchnFree calls KeFlushQueuedDpcs
 VOID
 XenIfaceCleanup(
-    __in      PXENIFACE_FDO Fdo,
-    __in_opt  PFILE_OBJECT  FileObject
+    _In_ PXENIFACE_FDO          Fdo,
+    _In_opt_ PFILE_OBJECT       FileObject
     )
 {
-    PLIST_ENTRY Node;
-    PXENIFACE_STORE_CONTEXT StoreContext;
-    PXENIFACE_EVTCHN_CONTEXT EvtchnContext;
-    PXENIFACE_SUSPEND_CONTEXT SuspendContext;
-    KIRQL Irql;
-    LIST_ENTRY ToFree;
+    PLIST_ENTRY                 Node;
+    PXENIFACE_STORE_CONTEXT     StoreContext;
+    PXENIFACE_EVTCHN_CONTEXT    EvtchnContext;
+    PXENIFACE_SUSPEND_CONTEXT   SuspendContext;
+    KIRQL                       Irql;
+    LIST_ENTRY                  ToFree;
=20
     // store watches
     InitializeListHead(&ToFree);
@@ -239,8 +239,8 @@ XenIfaceCleanup(
=20
 NTSTATUS
 XenIfaceIoctl(
-    __in     PXENIFACE_FDO     Fdo,
-    __inout  PIRP              Irp
+    _In_ PXENIFACE_FDO  Fdo,
+    _Inout_ PIRP        Irp
     )
 {
     NTSTATUS            status;
diff --git a/src/xeniface/ioctls=2Eh b/src/xeniface/ioctls=2Eh
index b4c8de2=2E=2Ebb5a2d3 100644
--- a/src/xeniface/ioctls=2Eh
+++ b/src/xeniface/ioctls=2Eh
@@ -91,163 +91,163 @@ typedef struct _XENIFACE_GNTTAB_CONTEXT {
=20
 NTSTATUS
 __CaptureUserBuffer(
-    __in  PVOID Buffer,
-    __in  ULONG Length,
-    __out PVOID *CapturedBuffer
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length,
+    _Outptr_ PVOID  *CapturedBuffer
     );
=20
 VOID
 __FreeCapturedBuffer(
-    __in_opt  PVOID CapturedBuffer
+    _In_opt_ PVOID  CapturedBuffer
     );
=20
 NTSTATUS
 XenIfaceIoctl(
-    __in     PXENIFACE_FDO     Fdo,
-    __inout  PIRP              Irp
+    _In_ PXENIFACE_FDO  Fdo,
+    _Inout_ PIRP        Irp
     );
=20
 _IRQL_requires_(PASSIVE_LEVEL)
 VOID
 XenIfaceCleanup(
-    __in  PXENIFACE_FDO Fdo,
-    __in_opt  PFILE_OBJECT  FileObject
+    _In_ PXENIFACE_FDO      Fdo,
+    _In_opt_ PFILE_OBJECT   FileObject
     );
=20
 DECLSPEC_NOINLINE
 NTSTATUS
 IoctlStoreRead(
-    __in  PXENIFACE_FDO     Fdo,
-    __in  PCHAR             Buffer,
-    __in  ULONG             InLen,
-    __in  ULONG             OutLen,
-    __out PULONG_PTR        Info
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PCHAR          Buffer,
+    _In_ ULONG          InLen,
+    _In_ ULONG          OutLen,
+    _Out_ PULONG_PTR    Info
     );
=20
 DECLSPEC_NOINLINE
 NTSTATUS
 IoctlStoreWrite(
-    __in  PXENIFACE_FDO     Fdo,
-    __in  PCHAR             Buffer,
-    __in  ULONG             InLen,
-    __in  ULONG             OutLen
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PCHAR          Buffer,
+    _In_ ULONG          InLen,
+    _In_ ULONG          OutLen
     );
=20
 DECLSPEC_NOINLINE
 NTSTATUS
 IoctlStoreDirectory(
-    __in  PXENIFACE_FDO     Fdo,
-    __in  PCHAR             Buffer,
-    __in  ULONG             InLen,
-    __in  ULONG             OutLen,
-    __out PULONG_PTR        Info
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PCHAR          Buffer,
+    _In_ ULONG          InLen,
+    _In_ ULONG          OutLen,
+    _Out_ PULONG_PTR    Info
     );
=20
 DECLSPEC_NOINLINE
 NTSTATUS
 IoctlStoreRemove(
-    __in  PXENIFACE_FDO     Fdo,
-    __in  PCHAR             Buffer,
-    __in  ULONG             InLen,
-    __in  ULONG             OutLen
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PCHAR          Buffer,
+    _In_ ULONG          InLen,
+    _In_ ULONG          OutLen
     );
=20
 DECLSPEC_NOINLINE
 NTSTATUS
 IoctlStoreSetPermissions(
-    __in  PXENIFACE_FDO     Fdo,
-    __in  PVOID             Buffer,
-    __in  ULONG             InLen,
-    __in  ULONG             OutLen
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PVOID          Buffer,
+    _In_ ULONG          InLen,
+    _In_ ULONG          OutLen
     );
=20
 DECLSPEC_NOINLINE
 NTSTATUS
 IoctlStoreAddWatch(
-    __in  PXENIFACE_FDO     Fdo,
-    __in  PVOID             Buffer,
-    __in  ULONG             InLen,
-    __in  ULONG             OutLen,
-    __in  PFILE_OBJECT      FileObject,
-    __out PULONG_PTR        Info
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PVOID          Buffer,
+    _In_ ULONG          InLen,
+    _In_ ULONG          OutLen,
+    _In_ PFILE_OBJECT   FileObject,
+    _Out_ PULONG_PTR    Info
     );
=20
 DECLSPEC_NOINLINE
 NTSTATUS
 IoctlStoreRemoveWatch(
-    __in  PXENIFACE_FDO     Fdo,
-    __in  PVOID             Buffer,
-    __in  ULONG             InLen,
-    __in  ULONG             OutLen,
-    __in  PFILE_OBJECT      FileObject
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PVOID          Buffer,
+    _In_ ULONG          InLen,
+    _In_ ULONG          OutLen,
+    _In_ PFILE_OBJECT   FileObject
     );
=20
 _IRQL_requires_max_(DISPATCH_LEVEL)
 VOID
 StoreFreeWatch(
-    __in     PXENIFACE_FDO Fdo,
-    __inout  PXENIFACE_STORE_CONTEXT Context
+    _In_ PXENIFACE_FDO              Fdo,
+    _Inout_ PXENIFACE_STORE_CONTEXT Context
     );
=20
 DECLSPEC_NOINLINE
 NTSTATUS
 IoctlEvtchnBindUnbound(
-    __in  PXENIFACE_FDO     Fdo,
-    __in  PVOID             Buffer,
-    __in  ULONG             InLen,
-    __in  ULONG             OutLen,
-    __in  PFILE_OBJECT      FileObject,
-    __out PULONG_PTR        Info
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PVOID          Buffer,
+    _In_ ULONG          InLen,
+    _In_ ULONG          OutLen,
+    _In_ PFILE_OBJECT   FileObject,
+    _Out_ PULONG_PTR    Info
     );
=20
 DECLSPEC_NOINLINE
 NTSTATUS
 IoctlEvtchnBindInterdomain(
-    __in  PXENIFACE_FDO     Fdo,
-    __in  PVOID             Buffer,
-    __in  ULONG             InLen,
-    __in  ULONG             OutLen,
-    __in  PFILE_OBJECT      FileObject,
-    __out PULONG_PTR        Info
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PVOID          Buffer,
+    _In_ ULONG          InLen,
+    _In_ ULONG          OutLen,
+    _In_ PFILE_OBJECT   FileObject,
+    _Out_ PULONG_PTR    Info
     );
=20
 DECLSPEC_NOINLINE
 NTSTATUS
 IoctlEvtchnClose(
-    __in  PXENIFACE_FDO     Fdo,
-    __in  PVOID             Buffer,
-    __in  ULONG             InLen,
-    __in  ULONG             OutLen,
-    __in  PFILE_OBJECT      FileObject
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PVOID          Buffer,
+    _In_ ULONG          InLen,
+    _In_ ULONG          OutLen,
+    _In_ PFILE_OBJECT   FileObject
     );
=20
 DECLSPEC_NOINLINE
 NTSTATUS
 IoctlEvtchnNotify(
-    __in  PXENIFACE_FDO     Fdo,
-    __in  PVOID             Buffer,
-    __in  ULONG             InLen,
-    __in  ULONG             OutLen,
-    __in  PFILE_OBJECT      FileObject
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PVOID          Buffer,
+    _In_ ULONG          InLen,
+    _In_ ULONG          OutLen,
+    _In_ PFILE_OBJECT   FileObject
     );
=20
 DECLSPEC_NOINLINE
 NTSTATUS
 IoctlEvtchnUnmask(
-    __in  PXENIFACE_FDO     Fdo,
-    __in  PVOID             Buffer,
-    __in  ULONG             InLen,
-    __in  ULONG             OutLen,
-    __in  PFILE_OBJECT      FileObject
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PVOID          Buffer,
+    _In_ ULONG          InLen,
+    _In_ ULONG          OutLen,
+    _In_ PFILE_OBJECT   FileObject
     );
=20
 _Requires_lock_not_held_(Fdo->EvtchnLock)
 DECLSPEC_NOINLINE
 NTSTATUS
 EvtchnNotify(
-    __in      PXENIFACE_FDO Fdo,
-    __in      ULONG         LocalPort,
-    __in_opt  PFILE_OBJECT  FileObject
+    _In_ PXENIFACE_FDO      Fdo,
+    _In_ ULONG              LocalPort,
+    _In_opt_ PFILE_OBJECT   FileObject
     );
=20
 _Function_class_(KDEFERRED_ROUTINE)
@@ -255,149 +255,149 @@ _IRQL_requires_(DISPATCH_LEVEL)
 _IRQL_requires_same_
 VOID
 EvtchnNotificationDpc(
-    __in      PKDPC Dpc,
-    __in_opt  PVOID Context,
-    __in_opt  PVOID Argument1,
-    __in_opt  PVOID Argument2
+    _In_ PKDPC      Dpc,
+    _In_opt_ PVOID  Context,
+    _In_opt_ PVOID  Argument1,
+    _In_opt_ PVOID  Argument2
     );
=20
 _IRQL_requires_(PASSIVE_LEVEL)
 VOID
 EvtchnFree(
-    __in     PXENIFACE_FDO Fdo,
-    __inout  PXENIFACE_EVTCHN_CONTEXT Context
+    _In_ PXENIFACE_FDO                  Fdo,
+    _Inout_ PXENIFACE_EVTCHN_CONTEXT    Context
     );
=20
 DECLSPEC_NOINLINE
 NTSTATUS
 IoctlGnttabPermitForeignAccess(
-    __in     PXENIFACE_FDO  Fdo,
-    __in     PVOID          Buffer,
-    __in     ULONG          InLen,
-    __in     ULONG          OutLen,
-    __inout  PIRP           Irp
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PVOID          Buffer,
+    _In_ ULONG          InLen,
+    _In_ ULONG          OutLen,
+    _Inout_ PIRP        Irp
     );
=20
 DECLSPEC_NOINLINE
 NTSTATUS
 IoctlGnttabRevokeForeignAccess(
-    __in  PXENIFACE_FDO     Fdo,
-    __in  PVOID             Buffer,
-    __in  ULONG             InLen,
-    __in  ULONG             OutLen,
-    __in  ULONG             ControlCode
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PVOID          Buffer,
+    _In_ ULONG          InLen,
+    _In_ ULONG          OutLen,
+    _In_ ULONG          ControlCode
     );
=20
 DECLSPEC_NOINLINE
 NTSTATUS
 IoctlGnttabMapForeignPages(
-    __in     PXENIFACE_FDO     Fdo,
-    __in     PVOID             Buffer,
-    __in     ULONG             InLen,
-    __in     ULONG             OutLen,
-    __inout  PIRP              Irp
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PVOID          Buffer,
+    _In_ ULONG          InLen,
+    _In_ ULONG          OutLen,
+    _Inout_ PIRP        Irp
     );
=20
 DECLSPEC_NOINLINE
 NTSTATUS
 IoctlGnttabUnmapForeignPages(
-    __in  PXENIFACE_FDO     Fdo,
-    __in  PVOID             Buffer,
-    __in  ULONG             InLen,
-    __in  ULONG             OutLen,
-    __in  ULONG             ControlCode
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PVOID          Buffer,
+    _In_ ULONG          InLen,
+    _In_ ULONG          OutLen,
+    _In_ ULONG          ControlCode
     );
=20
 _Acquires_exclusive_lock_(((PXENIFACE_FDO)Argument)->GnttabCacheLock)
 _IRQL_requires_(DISPATCH_LEVEL)
 VOID
 GnttabAcquireLock(
-    __in  PVOID Argument
+    _In_ PVOID  Argument
     );
=20
 _Releases_exclusive_lock_(((PXENIFACE_FDO)Argument)->GnttabCacheLock)
 _IRQL_requires_(DISPATCH_LEVEL)
 VOID
 GnttabReleaseLock(
-    __in  PVOID Argument
+    _In_ PVOID  Argument
     );
=20
 _Function_class_(IO_WORKITEM_ROUTINE)
 VOID
 CompleteGnttabIrp(
-    __in      PDEVICE_OBJECT DeviceObject,
-    __in_opt  PVOID          Context
+    _In_ PDEVICE_OBJECT DeviceObject,
+    _In_opt_ PVOID      Context
     );
=20
 _IRQL_requires_max_(APC_LEVEL)
 VOID
 GnttabFreeGrant(
-    __in     PXENIFACE_FDO Fdo,
-    __inout  PXENIFACE_GNTTAB_CONTEXT Context
+    _In_ PXENIFACE_FDO                  Fdo,
+    _Inout_ PXENIFACE_GNTTAB_CONTEXT    Context
     );
=20
 _IRQL_requires_max_(APC_LEVEL)
 VOID
 GnttabFreeMap(
-    __in     PXENIFACE_FDO Fdo,
-    __inout  PXENIFACE_GNTTAB_CONTEXT Context
+    _In_ PXENIFACE_FDO                  Fdo,
+    _Inout_ PXENIFACE_GNTTAB_CONTEXT    Context
     );
=20
 NTSTATUS
 IoctlSuspendGetCount(
-    __in  PXENIFACE_FDO     Fdo,
-    __in  PCHAR             Buffer,
-    __in  ULONG             InLen,
-    __in  ULONG             OutLen,
-    __out PULONG_PTR        Info
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PCHAR          Buffer,
+    _In_ ULONG          InLen,
+    _In_ ULONG          OutLen,
+    _Out_ PULONG_PTR    Info
     );
=20
 NTSTATUS
 IoctlSuspendRegister(
-    __in  PXENIFACE_FDO     Fdo,
-    __in  PVOID             Buffer,
-    __in  ULONG             InLen,
-    __in  ULONG             OutLen,
-    __in  PFILE_OBJECT      FileObject,
-    __out PULONG_PTR        Info
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PVOID          Buffer,
+    _In_ ULONG          InLen,
+    _In_ ULONG          OutLen,
+    _In_ PFILE_OBJECT   FileObject,
+    _Out_ PULONG_PTR    Info
     );
=20
 NTSTATUS
 IoctlSuspendDeregister(
-    __in  PXENIFACE_FDO     Fdo,
-    __in  PVOID             Buffer,
-    __in  ULONG             InLen,
-    __in  ULONG             OutLen,
-    __in  PFILE_OBJECT      FileObject
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PVOID          Buffer,
+    _In_ ULONG          InLen,
+    _In_ ULONG          OutLen,
+    _In_ PFILE_OBJECT   FileObject
     );
=20
 VOID
 SuspendEventFire(
-    __in    PXENIFACE_FDO   Fdo
+    _In_ PXENIFACE_FDO  Fdo
     );
=20
 _IRQL_requires_max_(DISPATCH_LEVEL)
 VOID
 SuspendFreeEvent(
-    __in     PXENIFACE_FDO Fdo,
-    __inout  PXENIFACE_SUSPEND_CONTEXT Context
+    _In_ PXENIFACE_FDO                  Fdo,
+    _Inout_ PXENIFACE_SUSPEND_CONTEXT   Context
     );
=20
 NTSTATUS
 IoctlSharedInfoGetTime(
-    __in  PXENIFACE_FDO     Fdo,
-    __in  PCHAR             Buffer,
-    __in  ULONG             InLen,
-    __in  ULONG             OutLen,
-    __out PULONG_PTR        Info
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PCHAR          Buffer,
+    _In_ ULONG          InLen,
+    _In_ ULONG          OutLen,
+    _Out_ PULONG_PTR    Info
     );
=20
 NTSTATUS
 IoctlLog(
-    __in  PXENIFACE_FDO     Fdo,
-    __in  PCHAR             Buffer,
-    __in  ULONG             InLen,
-    __in  ULONG             OutLen
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PCHAR          Buffer,
+    _In_ ULONG          InLen,
+    _In_ ULONG          OutLen
     );
=20
 #endif // _IOCTLS_H_
diff --git a/src/xeniface/irp_queue=2Ec b/src/xeniface/irp_queue=2Ec
index dcc5ba0=2E=2E7adf074 100644
--- a/src/xeniface/irp_queue=2Ec
+++ b/src/xeniface/irp_queue=2Ec
@@ -38,12 +38,12 @@
=20
 NTSTATUS
 CsqInsertIrpEx(
-    _In_  PIO_CSQ Csq,
-    _In_  PIRP    Irp,
-    _In_  PVOID   InsertContext // PXENIFACE_GNTTAB_CONTEXT
+    _In_ PIO_CSQ    Csq,
+    _In_ PIRP       Irp,
+    _In_ PVOID      InsertContext// PXENIFACE_GNTTAB_CONTEXT
     )
 {
-    PXENIFACE_FDO Fdo;
+    PXENIFACE_FDO   Fdo;
=20
     Fdo =3D CONTAINING_RECORD(Csq, XENIFACE_FDO, IrpQueue);
=20
@@ -57,8 +57,8 @@ CsqInsertIrpEx(
=20
 VOID
 CsqRemoveIrp(
-    _In_  PIO_CSQ Csq,
-    _In_  PIRP    Irp
+    _In_ PIO_CSQ    Csq,
+    _In_ PIRP       Irp
     )
 {
     UNREFERENCED_PARAMETER(Csq);
@@ -68,15 +68,15 @@ CsqRemoveIrp(
=20
 PIRP
 CsqPeekNextIrp(
-    _In_      PIO_CSQ Csq,
-    _In_opt_  PIRP    Irp,
-    _In_opt_  PVOID   PeekContext // PXENIFACE_GNTTAB_CONTEXT
+    _In_ PIO_CSQ                Csq,
+    _In_opt_ PIRP               Irp,
+    _In_opt_ PVOID              PeekContext// PXENIFACE_GNTTAB_CONTEXT
     )
 {
-    PXENIFACE_FDO            Fdo;
-    PIRP                     NextIrp =3D NULL;
-    PLIST_ENTRY              Head, NextEntry;
-    PXENIFACE_GNTTAB_CONTEXT Context, TargetContext;
+    PXENIFACE_FDO               Fdo;
+    PIRP                        NextIrp =3D NULL;
+    PLIST_ENTRY                 Head, NextEntry;
+    PXENIFACE_GNTTAB_CONTEXT    Context, TargetContext;
=20
     Fdo =3D CONTAINING_RECORD(Csq, XENIFACE_FDO, IrpQueue);
     TargetContext =3D PeekContext;
@@ -121,11 +121,11 @@ _IRQL_requires_max_(DISPATCH_LEVEL)
 _Acquires_lock_(CONTAINING_RECORD(Csq, XENIFACE_FDO, IrpQueue)->IrpQueueL=
ock)
 VOID
 CsqAcquireLock(
-    _In_                                       PIO_CSQ Csq,
-    _Out_ _At_(*Irql, _Post_ _IRQL_saves_)     PKIRQL  Irql
+    _In_ PIO_CSQ                                    Csq,
+    _Out_ _At_(*Irql, _Post_ _IRQL_saves_) PKIRQL   Irql
     )
 {
-    PXENIFACE_FDO Fdo;
+    PXENIFACE_FDO                                   Fdo;
=20
     Fdo =3D CONTAINING_RECORD(Csq, XENIFACE_FDO, IrpQueue);
=20
@@ -136,11 +136,11 @@ _IRQL_requires_(DISPATCH_LEVEL)
 _Releases_lock_(CONTAINING_RECORD(Csq, XENIFACE_FDO, IrpQueue)->IrpQueueL=
ock)
 VOID
 CsqReleaseLock(
-    _In_                    PIO_CSQ Csq,
-    _In_ _IRQL_restores_    KIRQL   Irql
+    _In_ PIO_CSQ                Csq,
+    _In_ _IRQL_restores_ KIRQL  Irql
     )
 {
-    PXENIFACE_FDO Fdo;
+    PXENIFACE_FDO               Fdo;
=20
     Fdo =3D CONTAINING_RECORD(Csq, XENIFACE_FDO, IrpQueue);
=20
@@ -150,12 +150,12 @@ CsqReleaseLock(
 _IRQL_requires_max_(DISPATCH_LEVEL)
 VOID
 CsqCompleteCanceledIrp(
-    _In_  PIO_CSQ Csq,
-    _In_  PIRP    Irp
+    _In_ PIO_CSQ    Csq,
+    _In_ PIRP       Irp
     )
 {
-    PXENIFACE_FDO Fdo =3D CONTAINING_RECORD(Csq, XENIFACE_FDO, IrpQueue);
-    PIO_WORKITEM WorkItem;
+    PXENIFACE_FDO   Fdo =3D CONTAINING_RECORD(Csq, XENIFACE_FDO, IrpQueue=
);
+    PIO_WORKITEM    WorkItem;
=20
     Trace("Irp %p, IRQL %d\n", Irp, KeGetCurrentIrql());
=20
diff --git a/src/xeniface/irp_queue=2Eh b/src/xeniface/irp_queue=2Eh
index 04b9877=2E=2E4693a78 100644
--- a/src/xeniface/irp_queue=2Eh
+++ b/src/xeniface/irp_queue=2Eh
@@ -36,22 +36,22 @@
=20
 NTSTATUS
 CsqInsertIrpEx(
-    _In_  PIO_CSQ Csq,
-    _In_  PIRP    Irp,
-    _In_  PVOID   InsertContext
+    _In_ PIO_CSQ    Csq,
+    _In_ PIRP       Irp,
+    _In_ PVOID      InsertContext
     );
=20
 VOID
 CsqRemoveIrp(
-    _In_  PIO_CSQ Csq,
-    _In_  PIRP    Irp
+    _In_ PIO_CSQ    Csq,
+    _In_ PIRP       Irp
     );
=20
 PIRP
 CsqPeekNextIrp(
-    _In_      PIO_CSQ Csq,
-    _In_opt_  PIRP    Irp,
-    _In_opt_  PVOID   PeekContext // PXENIFACE_GNTTAB_CONTEXT
+    _In_ PIO_CSQ    Csq,
+    _In_opt_ PIRP   Irp,
+    _In_opt_ PVOID  PeekContext// PXENIFACE_GNTTAB_CONTEXT
     );
=20
 _IRQL_raises_(DISPATCH_LEVEL)
@@ -59,23 +59,23 @@ _IRQL_requires_max_(DISPATCH_LEVEL)
 _Acquires_lock_(CONTAINING_RECORD(Csq, XENIFACE_FDO, IrpQueue)->IrpQueueL=
ock)
 VOID
 CsqAcquireLock(
-    _In_                                       PIO_CSQ Csq,
-    _Out_ _At_(*Irql, _Post_ _IRQL_saves_)     PKIRQL  Irql
+    _In_ PIO_CSQ                                    Csq,
+    _Out_ _At_(*Irql, _Post_ _IRQL_saves_) PKIRQL   Irql
     );
=20
 _IRQL_requires_(DISPATCH_LEVEL)
 _Releases_lock_(CONTAINING_RECORD(Csq, XENIFACE_FDO, IrpQueue)->IrpQueueL=
ock)
 VOID
 CsqReleaseLock(
-    _In_                    PIO_CSQ Csq,
-    _In_ _IRQL_restores_    KIRQL   Irql
+    _In_ PIO_CSQ                Csq,
+    _In_ _IRQL_restores_ KIRQL  Irql
     );
=20
 _IRQL_requires_max_(DISPATCH_LEVEL)
 VOID
 CsqCompleteCanceledIrp(
-    _In_  PIO_CSQ             Csq,
-    _In_  PIRP                Irp
+    _In_ PIO_CSQ    Csq,
+    _In_ PIRP       Irp
     );
=20
 #endif
diff --git a/src/xeniface/log=2Eh b/src/xeniface/log=2Eh
index 85eb63b=2E=2E523a4af 100644
--- a/src/xeniface/log=2Eh
+++ b/src/xeniface/log=2Eh
@@ -44,8 +44,8 @@
=20
 static __inline VOID
 __Error(
-    IN  const CHAR  *Prefix,
-    IN  const CHAR  *Format,
+    _In_ const CHAR *Prefix,
+    _In_ const CHAR *Format,
     =2E=2E=2E
     )
 {
@@ -67,8 +67,8 @@ __Error(
=20
 static __inline VOID
 __Warning(
-    IN  const CHAR  *Prefix,
-    IN  const CHAR  *Format,
+    _In_ const CHAR *Prefix,
+    _In_ const CHAR *Format,
     =2E=2E=2E
     )
 {
@@ -91,8 +91,8 @@ __Warning(
 #if DBG
 static __inline VOID
 __Trace(
-    IN  const CHAR  *Prefix,
-    IN  const CHAR  *Format,
+    _In_ const CHAR *Prefix,
+    _In_ const CHAR *Format,
     =2E=2E=2E
     )
 {
@@ -117,8 +117,8 @@ __Trace(
=20
 static __inline VOID
 __Info(
-    IN  const CHAR  *Prefix,
-    IN  const CHAR  *Format,
+    _In_ const CHAR *Prefix,
+    _In_ const CHAR *Format,
     =2E=2E=2E
     )
 {
diff --git a/src/xeniface/mutex=2Eh b/src/xeniface/mutex=2Eh
index a025137=2E=2E966206d 100644
--- a/src/xeniface/mutex=2Eh
+++ b/src/xeniface/mutex=2Eh
@@ -44,7 +44,7 @@ typedef struct _XENIFACE_MUTEX {
=20
 static FORCEINLINE VOID
 InitializeMutex(
-    IN  PXENIFACE_MUTEX   Mutex
+    _In_ PXENIFACE_MUTEX    Mutex
     )
 {
     RtlZeroMemory(Mutex, sizeof (XENIFACE_MUTEX));
@@ -53,9 +53,9 @@ InitializeMutex(
 }
=20
 static FORCEINLINE VOID
-__drv_maxIRQL(PASSIVE_LEVEL)
+_IRQL_requires_max_(PASSIVE_LEVEL)
 AcquireMutex(
-    IN  PXENIFACE_MUTEX   Mutex
+    _In_ PXENIFACE_MUTEX    Mutex
     )
 {
     (VOID) KeWaitForSingleObject(&Mutex->Event,
@@ -69,9 +69,9 @@ AcquireMutex(
 }
=20
 static FORCEINLINE VOID
-__drv_maxIRQL(PASSIVE_LEVEL)
+_IRQL_requires_max_(PASSIVE_LEVEL)
 ReleaseMutex(
-    IN  PXENIFACE_MUTEX   Mutex
+    _In_ PXENIFACE_MUTEX    Mutex
     )
 {
     ASSERT3P(Mutex->Owner, =3D=3D, KeGetCurrentThread());
diff --git a/src/xeniface/names=2Eh b/src/xeniface/names=2Eh
index d56f242=2E=2E37d196d 100644
--- a/src/xeniface/names=2Eh
+++ b/src/xeniface/names=2Eh
@@ -39,7 +39,7 @@
=20
 static FORCEINLINE const CHAR *
 PowerTypeName(
-    IN  POWER_STATE_TYPE    Type
+    _In_ POWER_STATE_TYPE   Type
     )
 {
 #define _POWER_TYPE_NAME(_Type) \
@@ -59,7 +59,7 @@ PowerTypeName(
=20
 static FORCEINLINE const CHAR *
 PowerSystemStateName(
-    IN  SYSTEM_POWER_STATE State
+    _In_ SYSTEM_POWER_STATE State
     )
 {
 #define _POWER_SYSTEM_STATE_NAME(_State)    \
@@ -85,7 +85,7 @@ PowerSystemStateName(
=20
 static FORCEINLINE const CHAR *
 PowerDeviceStateName(
-    IN  DEVICE_POWER_STATE State
+    _In_ DEVICE_POWER_STATE State
     )
 {
 #define _POWER_DEVICE_STATE_NAME(_State)    \
@@ -109,7 +109,7 @@ PowerDeviceStateName(
=20
 static FORCEINLINE const CHAR *
 PowerActionName(
-    IN  POWER_ACTION    Type
+    _In_ POWER_ACTION   Type
     )
 {
 #define _POWER_ACTION_NAME(_Type)   \
@@ -135,7 +135,7 @@ PowerActionName(
=20
 static FORCEINLINE const CHAR *
 PowerMinorFunctionName(
-    IN  ULONG   MinorFunction
+    _In_ ULONG  MinorFunction
     )
 {
 #define _POWER_MINOR_FUNCTION_NAME(_Function)   \
@@ -157,7 +157,7 @@ PowerMinorFunctionName(
=20
 static FORCEINLINE const CHAR *
 PnpDeviceStateName(
-    IN  DEVICE_PNP_STATE    State
+    _In_ DEVICE_PNP_STATE   State
     )
 {
 #define _PNP_DEVICE_STATE_NAME(_State) \
@@ -184,7 +184,7 @@ PnpDeviceStateName(
=20
 static FORCEINLINE const CHAR *
 PnpMinorFunctionName(
-    IN  ULONG   Function
+    _In_ ULONG  Function
     )
 {
 #define _PNP_MINOR_FUNCTION_NAME(_Function) \
@@ -227,7 +227,7 @@ PnpMinorFunctionName(
=20
 static FORCEINLINE const CHAR *
 PartialResourceDescriptorTypeName(
-    IN  UCHAR   Type
+    _In_ UCHAR  Type
     )
 {
 #define _PARTIAL_RESOURCE_DESCRIPTOR_TYPE_NAME(_Type)   \
@@ -256,7 +256,7 @@ PartialResourceDescriptorTypeName(
=20
 static FORCEINLINE const CHAR *
 DeviceUsageTypeName(
-    IN  DEVICE_USAGE_NOTIFICATION_TYPE  Type
+    _In_ DEVICE_USAGE_NOTIFICATION_TYPE Type
     )
 {
 #define _DEVICE_USAGE_TYPE_NAME(_Type)  \
diff --git a/src/xeniface/thread=2Ec b/src/xeniface/thread=2Ec
index 75de5b9=2E=2E6905d29 100644
--- a/src/xeniface/thread=2Ec
+++ b/src/xeniface/thread=2Ec
@@ -50,7 +50,7 @@ struct _XENIFACE_THREAD {
=20
 static FORCEINLINE PVOID
 __ThreadAllocate(
-    IN  ULONG   Length
+    _In_ ULONG  Length
     )
 {
     return __AllocatePoolWithTag(NonPagedPool, Length, THREAD_POOL);
@@ -58,7 +58,7 @@ __ThreadAllocate(
=20
 static FORCEINLINE VOID
 __ThreadFree(
-    IN  PVOID   Buffer
+    _In_ PVOID  Buffer
     )
 {
     __FreePoolWithTag(Buffer, THREAD_POOL);
@@ -66,7 +66,7 @@ __ThreadFree(
=20
 static FORCEINLINE VOID
 __ThreadWake(
-    IN  PXENIFACE_THREAD  Thread
+    _In_ PXENIFACE_THREAD   Thread
     )
 {
     KeSetEvent(&Thread->Event, IO_NO_INCREMENT, FALSE);
@@ -74,7 +74,7 @@ __ThreadWake(
=20
 VOID
 ThreadWake(
-    IN  PXENIFACE_THREAD  Thread
+    _In_ PXENIFACE_THREAD   Thread
     )
 {
     __ThreadWake(Thread);
@@ -82,7 +82,7 @@ ThreadWake(
=20
 static FORCEINLINE VOID
 __ThreadAlert(
-    IN  PXENIFACE_THREAD  Thread
+    _In_ PXENIFACE_THREAD   Thread
     )
 {
     Thread->Alerted =3D TRUE;
@@ -91,7 +91,7 @@ __ThreadAlert(
=20
 VOID
 ThreadAlert(
-    IN  PXENIFACE_THREAD  Thread
+    _In_ PXENIFACE_THREAD   Thread
     )
 {
     __ThreadAlert(Thread);
@@ -101,11 +101,11 @@ KSTART_ROUTINE  ThreadFunction;
=20
 VOID
 ThreadFunction(
-    IN  PVOID       Argument
+    _In_ PVOID          Argument
     )
 {
-    PXENIFACE_THREAD  Self =3D Argument;
-    NTSTATUS        status;
+    PXENIFACE_THREAD    Self =3D Argument;
+    NTSTATUS            status;
=20
     status =3D Self->Function(Self, Self->Context);
=20
@@ -116,16 +116,16 @@ ThreadFunction(
     // NOT REACHED
 }
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 ThreadCreate(
-    IN  XENIFACE_THREAD_FUNCTION  Function,
-    IN  PVOID                   Context,
-    OUT PXENIFACE_THREAD          *Thread
+    _In_ XENIFACE_THREAD_FUNCTION   Function,
+    _In_ PVOID                      Context,
+    _Outptr_ PXENIFACE_THREAD       *Thread
     )
 {
-    HANDLE                      Handle;
-    NTSTATUS                    status;
+    HANDLE                          Handle;
+    NTSTATUS                        status;
=20
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, PASSIVE_LEVEL);
=20
@@ -191,7 +191,7 @@ fail1:
=20
 PKEVENT
 ThreadGetEvent(
-    IN  PXENIFACE_THREAD  Thread
+    _In_ PXENIFACE_THREAD   Thread
     )
 {
     return &Thread->Event;
@@ -199,7 +199,7 @@ ThreadGetEvent(
=20
 BOOLEAN
 ThreadIsAlerted(
-    IN  PXENIFACE_THREAD  Thread
+    _In_ PXENIFACE_THREAD   Thread
     )
 {
     return Thread->Alerted;
@@ -207,10 +207,10 @@ ThreadIsAlerted(
=20
 VOID
 ThreadJoin(
-    IN  PXENIFACE_THREAD  Thread
+    _In_ PXENIFACE_THREAD   Thread
     )
 {
-    LONG                References;
+    LONG                    References;
=20
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, PASSIVE_LEVEL);
     ASSERT3P(KeGetCurrentThread(), !=3D, Thread->Thread);
diff --git a/src/xeniface/thread=2Eh b/src/xeniface/thread=2Eh
index 2cf8488=2E=2E5047d9f 100644
--- a/src/xeniface/thread=2Eh
+++ b/src/xeniface/thread=2Eh
@@ -39,37 +39,37 @@ typedef struct _XENIFACE_THREAD XENIFACE_THREAD, *PXEN=
IFACE_THREAD;
=20
 typedef NTSTATUS (*XENIFACE_THREAD_FUNCTION)(PXENIFACE_THREAD, PVOID);
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 ThreadCreate(
-    IN  XENIFACE_THREAD_FUNCTION  Function,
-    IN  PVOID                   Context,
-    OUT PXENIFACE_THREAD          *Thread
+    _In_ XENIFACE_THREAD_FUNCTION   Function,
+    _In_ PVOID                      Context,
+    _Outptr_ PXENIFACE_THREAD       *Thread
     );
=20
 extern PKEVENT
 ThreadGetEvent(
-    IN  PXENIFACE_THREAD  Self
+    _In_ PXENIFACE_THREAD   Self
     );
=20
 extern BOOLEAN
 ThreadIsAlerted(
-    IN  PXENIFACE_THREAD  Self
+    _In_ PXENIFACE_THREAD   Self
     );
=20
 extern VOID
 ThreadWake(
-    IN  PXENIFACE_THREAD  Thread
+    _In_ PXENIFACE_THREAD   Thread
     );
=20
 extern VOID
 ThreadAlert(
-    IN  PXENIFACE_THREAD  Thread
+    _In_ PXENIFACE_THREAD   Thread
     );
=20
 extern VOID
 ThreadJoin(
-    IN  PXENIFACE_THREAD  Thread
+    _In_ PXENIFACE_THREAD   Thread
     );
=20
 #endif  // _XENIFACE_THREAD_H
diff --git a/src/xeniface/wmi=2Ec b/src/xeniface/wmi=2Ec
index ccc2ab0=2E=2Efac86ee 100644
--- a/src/xeniface/wmi=2Ec
+++ b/src/xeniface/wmi=2Ec
@@ -105,7 +105,7 @@ typedef struct _XENSTORE_WATCH {
=20
 static FORCEINLINE PVOID
 WmiAllocate(
-    IN  ULONG   Length
+    _In_ ULONG  Length
     )
 {
     // Zeroes the allocation
@@ -114,7 +114,7 @@ WmiAllocate(
=20
 static FORCEINLINE VOID
 WmiFree(
-    IN  PVOID   Buffer
+    _In_ PVOID  Buffer
     )
 {
     __FreePoolWithTag(Buffer, WMI_POOL_TAG);
@@ -125,8 +125,8 @@ WmiFree(
 // prior to Windows 7=2E
 static USHORT
 Utf32FromUtf16(
-    OUT PULONG          utf32,
-    IN  const WCHAR*    utf16
+    _Out_ PULONG        utf32,
+    _In_ const WCHAR    *utf16
     )
 {
     ULONG               w;
@@ -151,8 +151,8 @@ Utf32FromUtf16(
=20
 static USHORT
 Utf32FromUtf8(
-    OUT PULONG      utf32,
-    IN  const CHAR* utf8
+    _Out_ PULONG    utf32,
+    _In_ const CHAR *utf8
     )
 {
     ULONG           y;
@@ -190,13 +190,13 @@ Utf32FromUtf8(
=20
 static USHORT
 Utf16FromUtf32(
-    OUT PWCHAR  utf16,
-    IN  ULONG   utf32
+    _Out_ PWCHAR    utf16,
+    _In_ ULONG      utf32
     )
 {
-    WCHAR       u;
-    WCHAR       w;
-    WCHAR       x;
+    WCHAR           u;
+    WCHAR           w;
+    WCHAR           x;
=20
     if ((utf32 > 0xFFFF)) {
         u =3D (utf32 & 0x1F0000) >> 16;
@@ -213,7 +213,7 @@ Utf16FromUtf32(
=20
 static USHORT
 CountUtf8FromUtf32(
-    IN  ULONG   utf32
+    _In_ ULONG  utf32
     )
 {
     if (utf32 & UTF8MASK4)
@@ -227,7 +227,7 @@ CountUtf8FromUtf32(
=20
 static USHORT
 CountUtf16FromUtf32(
-    IN  ULONG   utf32
+    _In_ ULONG  utf32
     )
 {
     if (utf32 & 0xFF0000)
@@ -237,8 +237,8 @@ CountUtf16FromUtf32(
=20
 static USHORT
 Utf8FromUtf32(
-    OUT PCHAR   dest,
-    IN  ULONG   utf32
+    _Out_ PCHAR dest,
+    _In_ ULONG  utf32
     )
 {
     CHAR        u;
@@ -279,7 +279,7 @@ Utf8FromUtf32(
=20
 static USHORT
 CountBytesUtf16FromUtf8String(
-    IN  PCOEM_STRING        utf8
+    _In_ PCOEM_STRING       utf8
     )
 {
     ULONG                   utf32;
@@ -296,7 +296,7 @@ CountBytesUtf16FromUtf8String(
=20
 static USHORT
 CountBytesUtf16FromUtf8(
-    IN  const CHAR*     utf8
+    _In_ const CHAR     *utf8
     )
 {
     ULONG               utf32;
@@ -313,13 +313,13 @@ CountBytesUtf16FromUtf8(
=20
 static VOID
 GetUnicodeString(
-    OUT PUNICODE_STRING unicode,
-    IN  USHORT          maxlength,
-    IN  LPWSTR          location
+    _Out_ PUNICODE_STRING   unicode,
+    _In_ USHORT             maxlength,
+    _In_ LPWSTR             location
     )
 {
-    USHORT              i;
-    USHORT              length =3D 0;
+    USHORT                  i;
+    USHORT                  length =3D 0;
=20
     unicode->MaximumLength =3D maxlength;
     unicode->Buffer =3D location;
@@ -336,9 +336,9 @@ GetUnicodeString(
=20
 static NTSTATUS
 GetAnsiString(
-    OUT PANSI_STRING    ansi,
-    IN  USHORT          maxlength,
-    IN  LPWSTR          location
+    _Out_ PANSI_STRING  ansi,
+    _In_ USHORT         maxlength,
+    _In_ LPWSTR         location
     )
 {
     UNICODE_STRING      unicode;
@@ -349,9 +349,9 @@ GetAnsiString(
=20
 static NTSTATUS
 GetUTF8String(
-    OUT POEM_STRING     utf8,
-    IN  USHORT          bufsize,
-    IN  LPWSTR          ustring
+    _Out_ POEM_STRING   utf8,
+    _In_ USHORT         bufsize,
+    _In_ LPWSTR         ustring
     )
 {
     ULONG               utf32;
@@ -384,7 +384,7 @@ GetUTF8String(
=20
 static FORCEINLINE VOID
 FreeUTF8String(
-    IN  POEM_STRING utf8
+    _In_ POEM_STRING    utf8
     )
 {
     if (utf8->Buffer)
@@ -396,40 +396,40 @@ FreeUTF8String(
=20
 static NTSTATUS
 GetCountedUTF8String(
-    OUT POEM_STRING     utf8,
-    IN  PUCHAR          location
+    _Out_ POEM_STRING   utf8,
+    _In_ PUCHAR         location
     )
 {
-    USHORT bufsize =3D *(USHORT*)location;
-    LPWSTR ustring =3D (LPWSTR)(location + sizeof(USHORT));
+    USHORT              bufsize =3D *(USHORT*)location;
+    LPWSTR              ustring =3D (LPWSTR)(location + sizeof(USHORT));
     return GetUTF8String(utf8, bufsize, ustring);
 }
=20
 static VOID
 GetCountedUnicodeString(
-    OUT PUNICODE_STRING unicode,
-    IN  PUCHAR          location
+    _Out_ PUNICODE_STRING   unicode,
+    _In_ PUCHAR             location
     )
 {
-    USHORT bufsize =3D *(USHORT*)location;
-    LPWSTR ustring =3D (LPWSTR)(location + sizeof(USHORT));
+    USHORT                  bufsize =3D *(USHORT*)location;
+    LPWSTR                  ustring =3D (LPWSTR)(location + sizeof(USHORT=
));
     GetUnicodeString(unicode, bufsize, ustring);
 }
=20
 static NTSTATUS
 GetCountedAnsiString(
-    OUT PANSI_STRING    ansi,
-    IN  PUCHAR          location
+    _Out_ PANSI_STRING  ansi,
+    _In_ PUCHAR         location
     )
 {
-    USHORT bufsize =3D *(USHORT*)location;
-    LPWSTR ustring =3D (LPWSTR)(location + sizeof(USHORT));
+    USHORT              bufsize =3D *(USHORT*)location;
+    LPWSTR              ustring =3D (LPWSTR)(location + sizeof(USHORT));
     return GetAnsiString(ansi, bufsize, ustring);
 }
=20
 static FORCEINLINE size_t
 GetCountedUtf8Size(
-    IN  const CHAR* utf8
+    _In_ const CHAR *utf8
     )
 {
     return sizeof(USHORT) + CountBytesUtf16FromUtf8(utf8);
@@ -437,7 +437,7 @@ GetCountedUtf8Size(
=20
 static FORCEINLINE size_t
 GetCountedUnicodeStringSize(
-    IN  PCUNICODE_STRING    string
+    _In_ PCUNICODE_STRING   string
     )
 {
     return sizeof(USHORT) + string->Length;
@@ -445,8 +445,8 @@ GetCountedUnicodeStringSize(
=20
 static VOID
 WriteCountedUnicodeString(
-    IN  PCUNICODE_STRING    ustr,
-    IN  PUCHAR              location
+    _In_ PCUNICODE_STRING   ustr,
+    _In_ PUCHAR             location
     )
 {
     *((USHORT*)location) =3D ustr->Length;
@@ -457,8 +457,8 @@ WriteCountedUnicodeString(
=20
 static NTSTATUS
 WriteCountedUTF8String(
-    IN  const CHAR*     string,
-    IN  PUCHAR          location
+    _In_ const CHAR     *string,
+    _In_ PUCHAR         location
     )
 {
     UNICODE_STRING      unicode;
@@ -489,8 +489,8 @@ WriteCountedUTF8String(
=20
 static VOID
 AllocUnicodeStringBuffer(
-    OUT PUNICODE_STRING string,
-    IN  USHORT          buffersize
+    _Out_ PUNICODE_STRING   string,
+    _In_ USHORT             buffersize
     )
 {
     string->Length =3D 0;
@@ -504,7 +504,7 @@ AllocUnicodeStringBuffer(
=20
 static FORCEINLINE VOID
 FreeUnicodeStringBuffer(
-    IN  PUNICODE_STRING string
+    _In_ PUNICODE_STRING    string
     )
 {
     if (string->Buffer)
@@ -516,8 +516,8 @@ FreeUnicodeStringBuffer(
=20
 static NTSTATUS
 CloneUnicodeString(
-    OUT PUNICODE_STRING     dest,
-    IN  PCUNICODE_STRING    src
+    _Out_ PUNICODE_STRING   dest,
+    _In_ PCUNICODE_STRING   src
     )
 {
     NTSTATUS                status;
@@ -535,15 +535,15 @@ CloneUnicodeString(
=20
 static NTSTATUS
 GetInstanceName(
-    OUT PUNICODE_STRING dest,
-    IN  PXENIFACE_FDO   Fdo,
-    IN  const CHAR*     string
+    _Out_ PUNICODE_STRING   dest,
+    _In_ PXENIFACE_FDO      Fdo,
+    _In_ const CHAR         *string
     )
 {
-    ANSI_STRING         ansi;
-    UNICODE_STRING      unicode;
-    NTSTATUS            status;
-    size_t              destsz;
+    ANSI_STRING             ansi;
+    UNICODE_STRING          unicode;
+    NTSTATUS                status;
+    size_t                  destsz;
=20
     RtlInitAnsiString(&ansi, string);
     status =3D RtlAnsiStringToUnicodeString(&unicode, &ansi, TRUE);
@@ -581,9 +581,9 @@ fail1:
=20
 static NTSTATUS
 WriteInstanceName(
-    IN  PXENIFACE_FDO   Fdo,
-    IN  const CHAR*     string,
-    IN  PUCHAR          location
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ const CHAR     *string,
+    _In_ PUCHAR         location
     )
 {
     UNICODE_STRING      destination;
@@ -600,7 +600,7 @@ WriteInstanceName(
=20
 static PSTR
 Xmasprintf(
-    IN  const char* fmt,
+    _In_ const char *fmt,
     =2E=2E=2E
     )
 {
@@ -634,8 +634,8 @@ Xmasprintf(
=20
 static FORCEINLINE VOID
 UnicodeShallowCopy(
-    IN  PUNICODE_STRING     dest,
-    IN  PUNICODE_STRING     src
+    _In_ PUNICODE_STRING    dest,
+    _In_ PUNICODE_STRING    src
     )
 {
     dest->Buffer =3D src->Buffer;
@@ -645,8 +645,8 @@ UnicodeShallowCopy(
=20
 static FORCEINLINE int
 CompareUnicodeStrings(
-    IN  PCUNICODE_STRING    string1,
-    IN  PCUNICODE_STRING    string2
+    _In_ PCUNICODE_STRING   string1,
+    _In_ PCUNICODE_STRING   string2
     )
 {
     if (string1->Length =3D=3D string2->Length)
@@ -658,10 +658,10 @@ CompareUnicodeStrings(
=20
 static int
 AccessWmiBuffer(
-    IN  PUCHAR  Buffer,
-    IN  int     readbuffer,
-    OUT ULONG*  RequiredSize,
-    IN  size_t  BufferSize,
+    _In_ PUCHAR Buffer,
+    _In_ int    readbuffer,
+    _Out_ ULONG *RequiredSize,
+    _In_ size_t BufferSize,
     =2E=2E=2E
     )
 {
@@ -810,8 +810,8 @@ AccessWmiBuffer(
=20
 static FORCEINLINE PXENSTORE_SESSION
 FindSessionLocked(
-    IN  PXENIFACE_FDO   Fdo,
-    IN  LONG            Id
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ LONG           Id
     )
 {
     PLIST_ENTRY         ListEntry;
@@ -834,8 +834,8 @@ FindSessionLocked(
=20
 static FORCEINLINE PXENSTORE_WATCH
 SessionFindWatchLocked(
-    IN  PXENSTORE_SESSION   Session,
-    IN  PUNICODE_STRING     Path
+    _In_ PXENSTORE_SESSION  Session,
+    _In_ PUNICODE_STRING    Path
     )
 {
     PLIST_ENTRY             ListEntry;
@@ -856,12 +856,12 @@ SessionFindWatchLocked(
=20
 static VOID
 FireWatch(
-    IN  PXENSTORE_WATCH Watch
+    _In_ PXENSTORE_WATCH    Watch
     )
 {
-    UCHAR*              eventdata;
-    ULONG               RequiredSize;
-    UCHAR*              sesbuf;
+    UCHAR*                  eventdata;
+    ULONG                   RequiredSize;
+    UCHAR*                  sesbuf;
=20
     (VOID) AccessWmiBuffer(NULL, FALSE, &RequiredSize, 0,
             WMI_STRING, GetCountedUnicodeStringSize(&Watch->Path), &sesbu=
f,
@@ -889,13 +889,13 @@ KSTART_ROUTINE WatchCallbackThread;
=20
 static NTSTATUS
 StartWatch(
-    IN  PXENIFACE_FDO   Fdo,
-    IN  PXENSTORE_WATCH Watch
+    _In_ PXENIFACE_FDO      Fdo,
+    _In_ PXENSTORE_WATCH    Watch
     )
 {
-    char*               tmppath;
-    ANSI_STRING         ansipath;
-    NTSTATUS            status;
+    char*                   tmppath;
+    ANSI_STRING             ansipath;
+    NTSTATUS                status;
=20
     status =3D RtlUnicodeStringToAnsiString(&ansipath, &Watch->Path, TRUE=
);
     if (!NT_SUCCESS(status))
@@ -934,7 +934,7 @@ fail1:
=20
 VOID
 WatchCallbackThread(
-    __in PVOID          StartContext
+    _In_ PVOID          StartContext
     )
 {
     NTSTATUS            status;
@@ -1030,9 +1030,9 @@ WatchCallbackThread(
=20
 static NTSTATUS
 SessionAddWatchLocked(
-    IN  PXENIFACE_FDO       Fdo,
-    IN  PXENSTORE_SESSION   Session,
-    IN  PUNICODE_STRING     Path
+    _In_ PXENIFACE_FDO      Fdo,
+    _In_ PXENSTORE_SESSION  Session,
+    _In_ PUNICODE_STRING    Path
     )
 {
     PXENSTORE_WATCH         Watch;
@@ -1079,7 +1079,7 @@ fail1:
=20
 static VOID
 SessionRemoveWatchLocked(
-    IN  PXENSTORE_WATCH     Watch
+    _In_ PXENSTORE_WATCH    Watch
     )
 {
     // ASSERT3P(Session->WatchMapLock=2EOwner, =3D=3D, KeGetCurrentThread=
());
@@ -1095,8 +1095,8 @@ SessionRemoveWatchLocked(
=20
 static PXENSTORE_SESSION
 FindSessionByInstanceLocked(
-    IN  PXENIFACE_FDO       Fdo,
-    IN  PUNICODE_STRING     Instance
+    _In_ PXENIFACE_FDO      Fdo,
+    _In_ PUNICODE_STRING    Instance
     )
 {
     PLIST_ENTRY             ListEntry;
@@ -1117,15 +1117,15 @@ FindSessionByInstanceLocked(
     return NULL;
 }
=20
-__checkReturn
+_Check_return_
 __success(return !=3D NULL)
 static PXENSTORE_SESSION
 FindSessionByInstanceAndLock(
-    IN  PXENIFACE_FDO   Fdo,
-    IN  PUNICODE_STRING Instance
+    _In_ PXENIFACE_FDO      Fdo,
+    _In_ PUNICODE_STRING    Instance
     )
 {
-    PXENSTORE_SESSION   Session;
+    PXENSTORE_SESSION       Session;
=20
     AcquireMutex(&Fdo->SessionLock);
     Session =3D FindSessionByInstanceLocked(Fdo, Instance);
@@ -1136,9 +1136,9 @@ FindSessionByInstanceAndLock(
=20
 static NTSTATUS
 SessionCreate(
-    IN  PXENIFACE_FDO       Fdo,
-    IN  PUNICODE_STRING     StringId,
-    OUT ULONG*              SessionId
+    _In_ PXENIFACE_FDO      Fdo,
+    _In_ PUNICODE_STRING    StringId,
+    _Out_ ULONG             *SessionId
     )
 {
     PXENSTORE_SESSION       Session;
@@ -1239,8 +1239,8 @@ fail1:
=20
 static VOID
 SessionRemoveLocked(
-    IN  PXENIFACE_FDO       Fdo,
-    IN  PXENSTORE_SESSION   Session
+    _In_ PXENIFACE_FDO      Fdo,
+    _In_ PXENSTORE_SESSION  Session
     )
 {
     PLIST_ENTRY             ListEntry;
@@ -1278,7 +1278,7 @@ SessionRemoveLocked(
=20
 static VOID
 SessionsRemoveAll(
-    IN  PXENIFACE_FDO   Fdo
+    _In_ PXENIFACE_FDO  Fdo
     )
 {
     PXENSTORE_SESSION   Session;
@@ -1298,8 +1298,8 @@ SessionsRemoveAll(
=20
 static VOID
 SessionsSuspendLocked(
-    IN  PXENIFACE_FDO       Fdo,
-    IN  PXENSTORE_SESSION   Session
+    _In_ PXENIFACE_FDO      Fdo,
+    _In_ PXENSTORE_SESSION  Session
     )
 {
     PLIST_ENTRY             ListEntry;
@@ -1327,7 +1327,7 @@ SessionsSuspendLocked(
=20
 static VOID
 SessionResumeLocked(
-    IN  PXENSTORE_SESSION   Session
+    _In_ PXENSTORE_SESSION  Session
     )
 {
     PLIST_ENTRY             ListEntry;
@@ -1356,10 +1356,10 @@ SessionResumeLocked(
=20
 static NTSTATUS
 NodeTooSmall(
-    IN  UCHAR*      Buffer,
-    IN  ULONG       BufferSize,
-    IN  ULONG       Needed,
-    OUT ULONG_PTR*  BytesWritten
+    _In_ UCHAR          *Buffer,
+    _In_ ULONG          BufferSize,
+    _In_ ULONG          Needed,
+    _Out_ ULONG_PTR     *BytesWritten
     )
 {
     WNODE_TOO_SMALL*    node;
@@ -1383,21 +1383,21 @@ NodeTooSmall(
=20
 static NTSTATUS
 SessionExecuteRemoveValue(
-    IN  PXENIFACE_FDO   Fdo,
-    IN  PUNICODE_STRING instance,
-    IN  UCHAR*          InBuffer,
-    IN  ULONG           InBufferSize,
-    IN  UCHAR*          OutBuffer,
-    IN  ULONG           OutBufferSize,
-    OUT ULONG_PTR*      BytesWritten
+    _In_ PXENIFACE_FDO      Fdo,
+    _In_ PUNICODE_STRING    instance,
+    _In_ UCHAR              *InBuffer,
+    _In_ ULONG              InBufferSize,
+    _In_ UCHAR              *OutBuffer,
+    _In_ ULONG              OutBufferSize,
+    _Out_ ULONG_PTR         *BytesWritten
     )
 {
-    ULONG               RequiredSize;
-    NTSTATUS            status;
-    UCHAR*              upathname;
-    OEM_STRING          pathname;
-    PXENSTORE_SESSION   session;
-    char*               tmpbuffer;
+    ULONG                   RequiredSize;
+    NTSTATUS                status;
+    UCHAR*                  upathname;
+    OEM_STRING              pathname;
+    PXENSTORE_SESSION       session;
+    char*                   tmpbuffer;
=20
     UNREFERENCED_PARAMETER(OutBuffer);
     UNREFERENCED_PARAMETER(OutBufferSize);
@@ -1453,21 +1453,21 @@ fail1:
=20
 static NTSTATUS
 SessionExecuteRemoveWatch(
-    IN  PXENIFACE_FDO   Fdo,
-    IN  PUNICODE_STRING instance,
-    IN  UCHAR*          InBuffer,
-    IN  ULONG           InBufferSize,
-    IN  UCHAR*          OutBuffer,
-    IN  ULONG           OutBufferSize,
-    OUT ULONG_PTR*      BytesWritten
+    _In_ PXENIFACE_FDO      Fdo,
+    _In_ PUNICODE_STRING    instance,
+    _In_ UCHAR              *InBuffer,
+    _In_ ULONG              InBufferSize,
+    _In_ UCHAR              *OutBuffer,
+    _In_ ULONG              OutBufferSize,
+    _Out_ ULONG_PTR         *BytesWritten
     )
 {
-    NTSTATUS            status;
-    ULONG               RequiredSize;
-    UCHAR*              upathname;
-    PXENSTORE_WATCH     watch;
-    UNICODE_STRING      unicpath_notbacked;
-    PXENSTORE_SESSION   session;
+    NTSTATUS                status;
+    ULONG                   RequiredSize;
+    UCHAR*                  upathname;
+    PXENSTORE_WATCH         watch;
+    UNICODE_STRING          unicpath_notbacked;
+    PXENSTORE_SESSION       session;
=20
     UNREFERENCED_PARAMETER(OutBuffer);
     UNREFERENCED_PARAMETER(OutBufferSize);
@@ -1507,21 +1507,21 @@ fail1:
=20
 static NTSTATUS
 SessionExecuteSetWatch(
-    IN  PXENIFACE_FDO   Fdo,
-    IN  PUNICODE_STRING instance,
-    IN  UCHAR*          InBuffer,
-    IN  ULONG           InBufferSize,
-    IN  UCHAR*          OutBuffer,
-    IN  ULONG           OutBufferSize,
-    OUT ULONG_PTR*      BytesWritten
+    _In_ PXENIFACE_FDO      Fdo,
+    _In_ PUNICODE_STRING    instance,
+    _In_ UCHAR              *InBuffer,
+    _In_ ULONG              InBufferSize,
+    _In_ UCHAR              *OutBuffer,
+    _In_ ULONG              OutBufferSize,
+    _Out_ ULONG_PTR         *BytesWritten
     )
 {
-    ULONG               RequiredSize;
-    NTSTATUS            status;
-    UCHAR*              upathname;
-    PXENSTORE_SESSION   Session;
-    UNICODE_STRING      unicpath_notbacked;
-    UNICODE_STRING      unicpath_backed;
+    ULONG                   RequiredSize;
+    NTSTATUS                status;
+    UCHAR*                  upathname;
+    PXENSTORE_SESSION       Session;
+    UNICODE_STRING          unicpath_notbacked;
+    UNICODE_STRING          unicpath_backed;
=20
     UNREFERENCED_PARAMETER(OutBuffer);
     UNREFERENCED_PARAMETER(OutBufferSize);
@@ -1567,17 +1567,17 @@ fail1:
=20
 static NTSTATUS
 SessionExecuteEndSession(
-    IN  PXENIFACE_FDO   Fdo,
-    IN  PUNICODE_STRING instance,
-    IN  UCHAR*          InBuffer,
-    IN  ULONG           InBufferSize,
-    IN  UCHAR*          OutBuffer,
-    IN  ULONG           OutBufferSize,
-    OUT ULONG_PTR*      BytesWritten
+    _In_ PXENIFACE_FDO      Fdo,
+    _In_ PUNICODE_STRING    instance,
+    _In_ UCHAR              *InBuffer,
+    _In_ ULONG              InBufferSize,
+    _In_ UCHAR              *OutBuffer,
+    _In_ ULONG              OutBufferSize,
+    _Out_ ULONG_PTR         *BytesWritten
     )
 {
-    PXENSTORE_SESSION   Session;
-    NTSTATUS            status;
+    PXENSTORE_SESSION       Session;
+    NTSTATUS                status;
=20
     UNREFERENCED_PARAMETER(OutBuffer);
     UNREFERENCED_PARAMETER(OutBufferSize);
@@ -1602,13 +1602,13 @@ fail1:
=20
 static NTSTATUS
 SessionExecuteSetValue(
-    IN  PXENIFACE_FDO       Fdo,
-    IN  PUNICODE_STRING     instance,
-    IN  UCHAR*              InBuffer,
-    IN  ULONG               InBufferSize,
-    IN  UCHAR*              OutBuffer,
-    IN  ULONG               OutBufferSize,
-    OUT ULONG_PTR*          BytesWritten
+    _In_ PXENIFACE_FDO      Fdo,
+    _In_ PUNICODE_STRING    instance,
+    _In_ UCHAR              *InBuffer,
+    _In_ ULONG              InBufferSize,
+    _In_ UCHAR              *OutBuffer,
+    _In_ ULONG              OutBufferSize,
+    _Out_ ULONG_PTR         *BytesWritten
     )
 {
     ULONG                   RequiredSize;
@@ -1693,13 +1693,13 @@ fail1:
=20
 static NTSTATUS
 SessionExecuteGetFirstChild(
-    IN  PXENIFACE_FDO       Fdo,
-    IN  PUNICODE_STRING     instance,
-    IN  UCHAR*              InBuffer,
-    IN  ULONG               InBufferSize,
-    IN  UCHAR*              OutBuffer,
-    IN  ULONG               OutBufferSize,
-    OUT ULONG_PTR*          BytesWritten
+    _In_ PXENIFACE_FDO      Fdo,
+    _In_ PUNICODE_STRING    instance,
+    _In_ UCHAR              *InBuffer,
+    _In_ ULONG              InBufferSize,
+    _In_ UCHAR              *OutBuffer,
+    _In_ ULONG              OutBufferSize,
+    _Out_ ULONG_PTR         *BytesWritten
     )
 {
     ULONG                   RequiredSize;
@@ -1809,13 +1809,13 @@ fail1:
=20
 static NTSTATUS
 SessionExecuteGetNextSibling(
-    IN  PXENIFACE_FDO       Fdo,
-    IN  PUNICODE_STRING     instance,
-    IN  UCHAR*              InBuffer,
-    IN  ULONG               InBufferSize,
-    IN  UCHAR*              OutBuffer,
-    IN  ULONG               OutBufferSize,
-    OUT ULONG_PTR*          BytesWritten
+    _In_ PXENIFACE_FDO      Fdo,
+    _In_ PUNICODE_STRING    instance,
+    _In_ UCHAR              *InBuffer,
+    _In_ ULONG              InBufferSize,
+    _In_ UCHAR              *OutBuffer,
+    _In_ ULONG              OutBufferSize,
+    _Out_ ULONG_PTR         *BytesWritten
     )
 {
     ULONG                   RequiredSize;
@@ -1976,13 +1976,13 @@ fail1:
=20
 static NTSTATUS
 SessionExecuteGetChildren(
-    IN  PXENIFACE_FDO       Fdo,
-    IN  PUNICODE_STRING     instance,
-    IN  UCHAR*              InBuffer,
-    IN  ULONG               InBufferSize,
-    IN  UCHAR*              OutBuffer,
-    IN  ULONG               OutBufferSize,
-    OUT ULONG_PTR*          BytesWritten
+    _In_ PXENIFACE_FDO      Fdo,
+    _In_ PUNICODE_STRING    instance,
+    _In_ UCHAR              *InBuffer,
+    _In_ ULONG              InBufferSize,
+    _In_ UCHAR              *OutBuffer,
+    _In_ ULONG              OutBufferSize,
+    _Out_ ULONG_PTR         *BytesWritten
     )
 {
     int                     i;
@@ -2104,19 +2104,19 @@ fail1:
=20
 static NTSTATUS
 SessionExecuteLog(
-    IN  PXENIFACE_FDO   Fdo,
-    IN  PUNICODE_STRING instance,
-    IN  UCHAR*          InBuffer,
-    IN  ULONG           InBufferSize,
-    IN  UCHAR*          OutBuffer,
-    IN  ULONG           OutBufferSize,
-    OUT ULONG_PTR*      BytesWritten
+    _In_ PXENIFACE_FDO      Fdo,
+    _In_ PUNICODE_STRING    instance,
+    _In_ UCHAR              *InBuffer,
+    _In_ ULONG              InBufferSize,
+    _In_ UCHAR              *OutBuffer,
+    _In_ ULONG              OutBufferSize,
+    _Out_ ULONG_PTR         *BytesWritten
     )
 {
-    ULONG               RequiredSize;
-    UCHAR*              uloc;
-    NTSTATUS            status;
-    ANSI_STRING         message;
+    ULONG                   RequiredSize;
+    UCHAR*                  uloc;
+    NTSTATUS                status;
+    ANSI_STRING             message;
=20
=20
     UNREFERENCED_PARAMETER(Fdo);
@@ -2148,17 +2148,17 @@ fail1:
=20
 static NTSTATUS
 SessionExecuteStartTransaction(
-    IN  PXENIFACE_FDO   Fdo,
-    IN  PUNICODE_STRING instance,
-    IN  UCHAR*          InBuffer,
-    IN  ULONG           InBufferSize,
-    IN  UCHAR*          OutBuffer,
-    IN  ULONG           OutBufferSize,
-    OUT ULONG_PTR*      BytesWritten
+    _In_ PXENIFACE_FDO      Fdo,
+    _In_ PUNICODE_STRING    instance,
+    _In_ UCHAR              *InBuffer,
+    _In_ ULONG              InBufferSize,
+    _In_ UCHAR              *OutBuffer,
+    _In_ ULONG              OutBufferSize,
+    _Out_ ULONG_PTR         *BytesWritten
     )
 {
-    NTSTATUS            status;
-    PXENSTORE_SESSION   session;
+    NTSTATUS                status;
+    PXENSTORE_SESSION       session;
=20
     UNREFERENCED_PARAMETER(InBuffer);
     UNREFERENCED_PARAMETER(InBufferSize);
@@ -2194,17 +2194,17 @@ fail1:
=20
 static NTSTATUS
 SessionExecuteCommitTransaction(
-    IN  PXENIFACE_FDO   Fdo,
-    IN  PUNICODE_STRING instance,
-    IN  UCHAR*          InBuffer,
-    IN  ULONG           InBufferSize,
-    IN  UCHAR*          OutBuffer,
-    IN  ULONG           OutBufferSize,
-    OUT ULONG_PTR*      BytesWritten
+    _In_ PXENIFACE_FDO      Fdo,
+    _In_ PUNICODE_STRING    instance,
+    _In_ UCHAR              *InBuffer,
+    _In_ ULONG              InBufferSize,
+    _In_ UCHAR              *OutBuffer,
+    _In_ ULONG              OutBufferSize,
+    _Out_ ULONG_PTR         *BytesWritten
     )
 {
-    NTSTATUS            status;
-    PXENSTORE_SESSION   session;
+    NTSTATUS                status;
+    PXENSTORE_SESSION       session;
=20
     UNREFERENCED_PARAMETER(InBuffer);
     UNREFERENCED_PARAMETER(InBufferSize);
@@ -2246,17 +2246,17 @@ fail1:
=20
 static NTSTATUS
 SessionExecuteAbortTransaction(
-    IN  PXENIFACE_FDO   Fdo,
-    IN  PUNICODE_STRING instance,
-    IN  UCHAR*          InBuffer,
-    IN  ULONG           InBufferSize,
-    IN  UCHAR*          OutBuffer,
-    IN  ULONG           OutBufferSize,
-    OUT ULONG_PTR*      BytesWritten
+    _In_ PXENIFACE_FDO      Fdo,
+    _In_ PUNICODE_STRING    instance,
+    _In_ UCHAR              *InBuffer,
+    _In_ ULONG              InBufferSize,
+    _In_ UCHAR              *OutBuffer,
+    _In_ ULONG              OutBufferSize,
+    _Out_ ULONG_PTR         *BytesWritten
     )
 {
-    NTSTATUS            status;
-    PXENSTORE_SESSION   session;
+    NTSTATUS                status;
+    PXENSTORE_SESSION       session;
=20
=20
     UNREFERENCED_PARAMETER(InBuffer);
@@ -2298,23 +2298,23 @@ fail1:
=20
 static NTSTATUS
 SessionExecuteGetValue(
-    IN  PXENIFACE_FDO   Fdo,
-    IN  PUNICODE_STRING instance,
-    IN  UCHAR*          InBuffer,
-    IN  ULONG           InBufferSize,
-    IN  UCHAR*          OutBuffer,
-    IN  ULONG           OutBufferSize,
-    OUT ULONG_PTR*      BytesWritten
+    _In_ PXENIFACE_FDO      Fdo,
+    _In_ PUNICODE_STRING    instance,
+    _In_ UCHAR              *InBuffer,
+    _In_ ULONG              InBufferSize,
+    _In_ UCHAR              *OutBuffer,
+    _In_ ULONG              OutBufferSize,
+    _Out_ ULONG_PTR         *BytesWritten
     )
 {
-    NTSTATUS            status;
-    OEM_STRING          path;
-    UCHAR*              uloc;
-    char*               value;
-    UCHAR*              valuepos;
-    char*               tmppath;
-    ULONG               RequiredSize;
-    PXENSTORE_SESSION   session;
+    NTSTATUS                status;
+    OEM_STRING              path;
+    UCHAR*                  uloc;
+    char*                   value;
+    UCHAR*                  valuepos;
+    char*                   tmppath;
+    ULONG                   RequiredSize;
+    PXENSTORE_SESSION       session;
=20
     *BytesWritten =3D 0;
     status =3D STATUS_INVALID_DEVICE_REQUEST;
@@ -2380,12 +2380,12 @@ fail1:
=20
 static NTSTATUS
 BaseExecuteAddSession(
-    IN  PXENIFACE_FDO   Fdo,
-    IN  UCHAR*          InBuffer,
-    IN  ULONG           InBufferSize,
-    IN  UCHAR*          OutBuffer,
-    IN  ULONG           OutBufferSize,
-    OUT ULONG_PTR*      BytesWritten
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ UCHAR          *InBuffer,
+    _In_ ULONG          InBufferSize,
+    _In_ UCHAR          *OutBuffer,
+    _In_ ULONG          OutBufferSize,
+    _Out_ ULONG_PTR     *BytesWritten
     )
 {
     ULONG               RequiredSize;
@@ -2437,10 +2437,10 @@ fail1:
=20
 static NTSTATUS
 SessionExecuteMethod(
-    IN  PXENIFACE_FDO   Fdo,
-    IN  UCHAR*          Buffer,
-    IN  ULONG           BufferSize,
-    OUT ULONG_PTR*      BytesWritten
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ UCHAR          *Buffer,
+    _In_ ULONG          BufferSize,
+    _Out_ ULONG_PTR     *BytesWritten
     )
 {
     ULONG               RequiredSize;
@@ -2598,10 +2598,10 @@ SessionExecuteMethod(
=20
 static NTSTATUS
 BaseExecuteMethod(
-    IN  PXENIFACE_FDO       Fdo,
-    IN  UCHAR*              Buffer,
-    IN  ULONG               BufferSize,
-    OUT ULONG_PTR*          BytesWritten
+    _In_ PXENIFACE_FDO      Fdo,
+    _In_ UCHAR              *Buffer,
+    _In_ ULONG              BufferSize,
+    _Out_ ULONG_PTR         *BytesWritten
     )
 {
     ULONG                   RequiredSize;
@@ -2639,9 +2639,9 @@ BaseExecuteMethod(
=20
 static NTSTATUS
 WmiExecuteMethod(
-    IN  PXENIFACE_FDO       Fdo,
-    IN  PIO_STACK_LOCATION  Stack,
-    OUT ULONG_PTR*          BytesWritten
+    _In_ PXENIFACE_FDO      Fdo,
+    _In_ PIO_STACK_LOCATION Stack,
+    _Out_ ULONG_PTR         *BytesWritten
     )
 {
     if (IsEqualGUID(Stack->Parameters=2EWMI=2EDataPath,
@@ -2663,26 +2663,26 @@ WmiExecuteMethod(
=20
 static NTSTATUS
 GenerateSessionBlock(
-    IN  PXENIFACE_FDO       Fdo,
-    IN  UCHAR*              Buffer,
-    IN  ULONG               BufferSize,
-    OUT ULONG_PTR*          BytesWritten
-    )
-{
-    PLIST_ENTRY             ListEntry;
-    PXENSTORE_SESSION       Session;
-    WNODE_ALL_DATA*         node;
-    ULONG                   RequiredSize;
-    size_t                  nodesizerequired;
-    size_t                  namesizerequired;
-    int                     entries;
-    OFFSETINSTANCEDATAANDLENGTH* dataoffsets;
-    ULONG*                  nameoffsets;
-    UCHAR*                  data;
-    UCHAR*                  names;
-    int                     entrynum =3D 0;
-    UCHAR*                  datapos;
-    UCHAR*                  namepos;
+    _In_ PXENIFACE_FDO              Fdo,
+    _In_ UCHAR                      *Buffer,
+    _In_ ULONG                      BufferSize,
+    _Out_ ULONG_PTR                 *BytesWritten
+    )
+{
+    PLIST_ENTRY                     ListEntry;
+    PXENSTORE_SESSION               Session;
+    WNODE_ALL_DATA*                 node;
+    ULONG                           RequiredSize;
+    size_t                          nodesizerequired;
+    size_t                          namesizerequired;
+    int                             entries;
+    OFFSETINSTANCEDATAANDLENGTH*    dataoffsets;
+    ULONG*                          nameoffsets;
+    UCHAR*                          data;
+    UCHAR*                          names;
+    int                             entrynum =3D 0;
+    UCHAR*                          datapos;
+    UCHAR*                          namepos;
=20
     AcquireMutex(&Fdo->SessionLock);
=20
@@ -2779,10 +2779,10 @@ GenerateSessionBlock(
=20
 static NTSTATUS
 GenerateBaseBlock(
-    IN  PXENIFACE_FDO       Fdo,
-    IN  UCHAR*              Buffer,
-    IN  ULONG               BufferSize,
-    OUT ULONG_PTR*          BytesWritten
+    _In_ PXENIFACE_FDO      Fdo,
+    _In_ UCHAR              *Buffer,
+    _In_ ULONG              BufferSize,
+    _Out_ ULONG_PTR         *BytesWritten
     )
 {
     WNODE_ALL_DATA*         node;
@@ -2819,10 +2819,10 @@ GenerateBaseBlock(
=20
 static NTSTATUS
 GenerateBaseInstance(
-    IN  PXENIFACE_FDO       Fdo,
-    IN  UCHAR*              Buffer,
-    IN  ULONG               BufferSize,
-    OUT ULONG_PTR*          BytesWritten
+    _In_ PXENIFACE_FDO      Fdo,
+    _In_ UCHAR              *Buffer,
+    _In_ ULONG              BufferSize,
+    _Out_ ULONG_PTR         *BytesWritten
     )
 {
     WNODE_SINGLE_INSTANCE*  node;
@@ -2871,10 +2871,10 @@ GenerateBaseInstance(
=20
 static NTSTATUS
 GenerateSessionInstance(
-    IN  PXENIFACE_FDO       Fdo,
-    IN  UCHAR*              Buffer,
-    IN  ULONG               BufferSize,
-    OUT ULONG_PTR*          BytesWritten
+    _In_ PXENIFACE_FDO      Fdo,
+    _In_ UCHAR              *Buffer,
+    _In_ ULONG              BufferSize,
+    _Out_ ULONG_PTR         *BytesWritten
     )
 {
     WNODE_SINGLE_INSTANCE*  node;
@@ -2940,9 +2940,9 @@ fail1:
=20
 NTSTATUS
 WmiQueryAllData(
-    IN  PXENIFACE_FDO       Fdo,
-    IN  PIO_STACK_LOCATION  Stack,
-    OUT ULONG_PTR*          BytesWritten
+    _In_ PXENIFACE_FDO      Fdo,
+    _In_ PIO_STACK_LOCATION Stack,
+    _Out_ ULONG_PTR         *BytesWritten
     )
 {
     if (IsEqualGUID(Stack->Parameters=2EWMI=2EDataPath,
@@ -2964,9 +2964,9 @@ WmiQueryAllData(
=20
 NTSTATUS
 WmiQuerySingleInstance(
-    IN  PXENIFACE_FDO       Fdo,
-    IN  PIO_STACK_LOCATION  Stack,
-    OUT ULONG_PTR*          BytesWritten
+    _In_ PXENIFACE_FDO      Fdo,
+    _In_ PIO_STACK_LOCATION Stack,
+    _Out_ ULONG_PTR         *BytesWritten
     )
 {
     if (IsEqualGUID(Stack->Parameters=2EWMI=2EDataPath,
@@ -2988,9 +2988,9 @@ WmiQuerySingleInstance(
=20
 NTSTATUS
 WmiRegInfo(
-    IN  PXENIFACE_FDO       Fdo,
-    IN  PIO_STACK_LOCATION  Stack,
-    OUT ULONG_PTR*          BytesWritten
+    _In_ PXENIFACE_FDO      Fdo,
+    _In_ PIO_STACK_LOCATION Stack,
+    _Out_ ULONG_PTR         *BytesWritten
    )
 {
     size_t                  mofnamesz;
@@ -3070,9 +3070,9 @@ WmiRegInfo(
=20
 NTSTATUS
 WmiRegInfoEx(
-    IN  PXENIFACE_FDO       Fdo,
-    IN  PIO_STACK_LOCATION  Stack,
-    OUT ULONG_PTR*          BytesWritten
+    _In_ PXENIFACE_FDO      Fdo,
+    _In_ PIO_STACK_LOCATION Stack,
+    _Out_ ULONG_PTR         *BytesWritten
     )
 {
     Trace("%s\n",__FUNCTION__);
@@ -3081,8 +3081,8 @@ WmiRegInfoEx(
=20
 NTSTATUS
 WmiProcessMinorFunction(
-    IN  PXENIFACE_FDO   Fdo,
-    IN  PIRP            Irp
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  Stack;
@@ -3118,7 +3118,7 @@ WmiProcessMinorFunction(
=20
 VOID
 WmiFireSuspendEvent(
-    IN  PXENIFACE_FDO   Fdo
+    _In_ PXENIFACE_FDO  Fdo
     )
 {
     Info("Ready to unsuspend Event\n");
@@ -3136,7 +3136,7 @@ WmiFireSuspendEvent(
=20
 VOID
 WmiSessionsSuspendAll(
-    IN  PXENIFACE_FDO   Fdo
+    _In_ PXENIFACE_FDO  Fdo
     )
 {
     PLIST_ENTRY         ListEntry;
@@ -3156,7 +3156,7 @@ WmiSessionsSuspendAll(
=20
 VOID
 WmiSessionsResumeAll(
-    IN  PXENIFACE_FDO   Fdo
+    _In_ PXENIFACE_FDO  Fdo
     )
 {
     PLIST_ENTRY         ListEntry;
@@ -3176,7 +3176,7 @@ WmiSessionsResumeAll(
=20
 NTSTATUS
 WmiRegister(
-    IN  PXENIFACE_FDO   Fdo
+    _In_ PXENIFACE_FDO  Fdo
     )
 {
     NTSTATUS            status;
@@ -3202,7 +3202,7 @@ fail1:
=20
 VOID
 WmiDeregister(
-    IN  PXENIFACE_FDO   Fdo
+    _In_ PXENIFACE_FDO  Fdo
     )
 {
     if (!Fdo->WmiReady)
@@ -3219,7 +3219,7 @@ WmiDeregister(
=20
 NTSTATUS
 WmiInitialize(
-    IN  PXENIFACE_FDO   Fdo
+    _In_ PXENIFACE_FDO  Fdo
     )
 {
     NTSTATUS            status;
@@ -3244,7 +3244,7 @@ fail1:
=20
 VOID
 WmiTeardown(
-    IN  PXENIFACE_FDO   Fdo
+    _In_ PXENIFACE_FDO  Fdo
     )
 {
     ASSERT(Fdo->Sessions =3D=3D 0);
diff --git a/src/xeniface/wmi=2Eh b/src/xeniface/wmi=2Eh
index dca2e84=2E=2E0cc7288 100644
--- a/src/xeniface/wmi=2Eh
+++ b/src/xeniface/wmi=2Eh
@@ -40,43 +40,43 @@
=20
 extern NTSTATUS
 WmiInitialize(
-    IN  PXENIFACE_FDO   Fdo
+    _In_ PXENIFACE_FDO  Fdo
     );
=20
 extern VOID
 WmiTeardown(
-    IN  PXENIFACE_FDO   Fdo
+    _In_ PXENIFACE_FDO  Fdo
     );
=20
 extern NTSTATUS
 WmiRegister(
-    IN  PXENIFACE_FDO   Fdo
+    _In_ PXENIFACE_FDO  Fdo
     );
=20
 extern VOID
 WmiDeregister(
-    IN  PXENIFACE_FDO   Fdo
+    _In_ PXENIFACE_FDO  Fdo
     );
=20
 extern VOID
 WmiSessionsResumeAll(
-    IN  PXENIFACE_FDO   Fdo
+    _In_ PXENIFACE_FDO  Fdo
     );
=20
 extern VOID
 WmiSessionsSuspendAll(
-    IN  PXENIFACE_FDO   Fdo
+    _In_ PXENIFACE_FDO  Fdo
     );
=20
 extern NTSTATUS
 WmiProcessMinorFunction(
-    IN  PXENIFACE_FDO   Fdo,
-    IN  PIRP            Irp
+    _In_ PXENIFACE_FDO  Fdo,
+    _In_ PIRP           Irp
     );
=20
 extern VOID
 WmiFireSuspendEvent(
-    IN  PXENIFACE_FDO   Fdo
+    _In_ PXENIFACE_FDO  Fdo
     );
=20
 #endif
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.63b.cb540c06152299a9.1a10bf6b073.af9cc41220790088=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 05 12:08:04 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 05 Oct 2026 12:08:04 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1440790.1658260 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDhUC-00035w-TO; Mon, 05 Oct 2026 12:08:04 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1440790.1658260; Mon, 05 Oct 2026 12:08:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDhUC-00034n-HA; Mon, 05 Oct 2026 12:08:04 +0000
Received: by outflank-mailman (input) for mailman id 1440790;
 Mon, 05 Oct 2026 12:08:03 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10bf6b49d0003f66@swg.vates.tech>)
 id 1xDhUB-0002yx-E7
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 12:08:03 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xDhUA-002Lif-Pi
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 14:08:02 +0200
Received: from [10.42.69.5] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10bf6b49d0003f66@swg.vates.tech>)
 id 6ac39320-e002-0a2a0a5209dd-0a2a45059364-6
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 14:08:02 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-c201ff.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10bf6b49d0003f66@swg.vates.tech>)
 id 6ac39322-4cb1-0a2a45050019-b9ff1c12acf9-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 14:08:02 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a10bf6b49d0003f66.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 05 Oct 2026 12:07:59 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 5535C823F7;
 Mon,  5 Oct 2026 14:07:59 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=acWlwgS+HG6oqot3aSMu9q9hOmbW4QkcOTBLOm9E5UE=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=qeaoV6Gbr9jpoSp2KPhxIi6dSsZmwHpJ6taSNxiYhVMzodL/upAU/OoqrH0anY4vjS1iQGOK/
 lgGOfUp7fHMVKQ3vHNh0Wpj/XUvrMYSAfm9xRnTEP8fbnyQNsM91df0HNge2Etn5vSG99yAP0NI
 nXvwwM7fCucgV+6olQaRVtKDEpotkFInqgXv12ZZEjtduPjY8twf0xsP6yhKs8LgxveCJ7obJ6X
 uanbawx3MfcyPROiCFel9KcwZkLpgbDen2ZeEReLHo+0WF4HgLexsr7RHHFBu2/x08ghd0G5nPE
 muvXKwXzgfgR/4FJClTcSPbtWcIXA+kArAM2+CCwZuxw==
X-Zone-Loop: 0be957c93810eccb174ddac14538e69ec1676ee99f70
x-campaign-type: default
x-transaction-id: de9e01ea-9949-402f-8a40-5cc8129f980b
x-swg-uid: 01-359f2f1a-2dbf-4e31-b272-0302b6c8a5db
X-Mailer: Sweego
Message-ID:
 <1791202079.8631fc262581453bbf619ec5b2062170.1a10bf6b49d0003f66@vates.tech>
x-swg-bid: 1791202079.8631fc262581453bbf619ec5b2062170.1a10bf6b49d0003f66
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 04/17] wmi: fix some anntotations
Date: Mon,  5 Oct 2026 14:07:45 +0200
In-Reply-To: <1791201881.8631fc262581453bbf619ec5b2062170.1a10bf3abba0003f66@vates.tech>
References: <1791201881.8631fc262581453bbf619ec5b2062170.1a10bf3abba0003f66@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.63d.8db13cf1e437774.1a10bf6b2d8.51313ccede9b2b0e=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791202079448
X-purgate-ID: tlsNG-c201ff/1791202082-F78BE2A1-AFA50A13/0/0
X-purgate-type: clean
X-purgate-size: 1772

---=Part.63d.8db13cf1e437774.1a10bf6b2d8.51313ccede9b2b0e=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

WriteCountedUnicodeString() only writes in location, and the RtlCopyMemory
is annotated as (_Out_, _In_, _In_), so location should be annotated as
_Out_=2E[1]

Functions that calls it are updated accordingly=2E

[1]: https://learn=2Emicrosoft=2Ecom/en-us/windows-hardware/drivers/ddi/wd=
m/nf-wdm-rtlcopymemory

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xeniface/wmi=2Ec | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/xeniface/wmi=2Ec b/src/xeniface/wmi=2Ec
index fac86ee=2E=2Ec2488f8 100644
--- a/src/xeniface/wmi=2Ec
+++ b/src/xeniface/wmi=2Ec
@@ -446,7 +446,7 @@ GetCountedUnicodeStringSize(
 static VOID
 WriteCountedUnicodeString(
     _In_ PCUNICODE_STRING   ustr,
-    _In_ PUCHAR             location
+    _Out_ PUCHAR            location
     )
 {
     *((USHORT*)location) =3D ustr->Length;
@@ -458,7 +458,7 @@ WriteCountedUnicodeString(
 static NTSTATUS
 WriteCountedUTF8String(
     _In_ const CHAR     *string,
-    _In_ PUCHAR         location
+    _Out_ PUCHAR        location
     )
 {
     UNICODE_STRING      unicode;
@@ -583,7 +583,7 @@ static NTSTATUS
 WriteInstanceName(
     _In_ PXENIFACE_FDO  Fdo,
     _In_ const CHAR     *string,
-    _In_ PUCHAR         location
+    _Out_ PUCHAR        location
     )
 {
     UNICODE_STRING      destination;
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.63d.8db13cf1e437774.1a10bf6b2d8.51313ccede9b2b0e=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 05 12:08:04 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 05 Oct 2026 12:08:04 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1440789.1658256 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDhUC-00034S-QA; Mon, 05 Oct 2026 12:08:04 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1440789.1658256; Mon, 05 Oct 2026 12:08:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDhUC-00033D-Cw; Mon, 05 Oct 2026 12:08:04 +0000
Received: by outflank-mailman (input) for mailman id 1440789;
 Mon, 05 Oct 2026 12:08:03 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10bf6b6cd0003f66@swg.vates.tech>)
 id 1xDhUB-0002yr-CW
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 12:08:03 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xDhUA-005zlm-PI
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 14:08:02 +0200
Received: from [10.42.69.6] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10bf6b6cd0003f66@swg.vates.tech>)
 id 6ac39316-8faa-0a2a0a5109dd-0a2a4506ac92-42
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 14:08:02 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-16d1c6.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10bf6b6cd0003f66@swg.vates.tech>)
 id 6ac39322-195a-0a2a45060019-b9ff1c23819b-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 14:08:02 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a10bf6b6cd0003f66.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 05 Oct 2026 12:08:00 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id DAB0B823B9;
 Mon,  5 Oct 2026 14:07:59 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=m9zU1WLAIIhV5UdG6Q5ylZzqE62OPijgZc6bzYEmzq8=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=aJCGSbkSg0NH/2Ve4puNMxVWjWVI2dtvOWDStb7ZgLXXKfFk8MCzpK04AesKh8HverYw8bhXr
 6/0V9SCsm5Lztqw+FS/aEvsY9GVh9B8FWkMR9pJHTcrDD/BzzzhoPg1bZ43HhniWUJjvxqVWtxj
 0UV1m0/fWAVh/o8wLPsb/26NtEIG49ISg7KKkXDvJ7yApkEHYvYy5wofHrz2CfEuEglclY0ZGOt
 NwN/XCv5L+mxbzFzTNryXHyB0wBKZmkEW2kjNMbuaEB0ERdxu5PCFCq/VdOjX2ZysxbMcNTeGoz
 38bQiuR8MhfH1RFTzdQQYkY9CvEMyB0eAUOCP89+1DfQ==
X-Zone-Loop: fde693d085b3c10201b4e882ea1ab3d07966f4ddf9f3
x-campaign-type: default
x-transaction-id: 3d1f33a3-80fe-4c8b-8233-6bf729ee5f5b
x-swg-uid: 01-dc6f3bd7-211b-472c-98da-2d53c7b59c15
X-Mailer: Sweego
Message-ID:
 <1791202080.8631fc262581453bbf619ec5b2062170.1a10bf6b6cd0003f66@vates.tech>
x-swg-bid: 1791202080.8631fc262581453bbf619ec5b2062170.1a10bf6b6cd0003f66
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 06/17] fdo: fix annotations
Date: Mon,  5 Oct 2026 14:07:47 +0200
In-Reply-To: <1791201881.8631fc262581453bbf619ec5b2062170.1a10bf3abba0003f66@vates.tech>
References: <1791201881.8631fc262581453bbf619ec5b2062170.1a10bf3abba0003f66@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.63f.35629d7d4e22ab11.1a10bf6b51d.c78cd4dbcb6e1b20=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791202080029
X-purgate-ID: tlsNG-16d1c6/1791202082-F4A0477B-00D0DF80/0/0
X-purgate-type: clean
X-purgate-size: 986

---=Part.63f.35629d7d4e22ab11.1a10bf6b51d.c78cd4dbcb6e1b20=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

__FdoMultiSzToUpcaseAnsi() writes in Buffer=2E Should be annotated as _Inou=
t_=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xeniface/fdo=2Ec | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/xeniface/fdo=2Ec b/src/xeniface/fdo=2Ec
index aba717b=2E=2E0f2e747 100644
--- a/src/xeniface/fdo=2Ec
+++ b/src/xeniface/fdo=2Ec
@@ -451,7 +451,7 @@ FdoParseResources(
=20
 static FORCEINLINE PANSI_STRING
 __FdoMultiSzToUpcaseAnsi(
-    _In_ PCHAR      Buffer
+    _Inout_ PCHAR   Buffer
     )
 {
     PANSI_STRING    Ansi;
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.63f.35629d7d4e22ab11.1a10bf6b51d.c78cd4dbcb6e1b20=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 05 12:08:06 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 05 Oct 2026 12:08:06 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1440791.1658266 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDhUE-0003Cr-4y; Mon, 05 Oct 2026 12:08:06 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1440791.1658266; Mon, 05 Oct 2026 12:08:06 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDhUE-0003Cg-1N; Mon, 05 Oct 2026 12:08:06 +0000
Received: by outflank-mailman (input) for mailman id 1440791;
 Mon, 05 Oct 2026 12:08:04 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10bf6b9c60003f66@swg.vates.tech>)
 id 1xDhUC-000360-Qy
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 12:08:04 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xDhUC-005zlm-7O
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 14:08:04 +0200
Received: from [10.42.69.4] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10bf6b9c60003f66@swg.vates.tech>)
 id 6ac39323-8faa-0a2a0a5109dd-0a2a4504ac68-12
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 14:08:04 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-ebf023.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10bf6b9c60003f66@swg.vates.tech>)
 id 6ac39322-b57f-0a2a45040019-b9ff1c2392a1-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 14:08:03 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a10bf6b9c60003f66.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 05 Oct 2026 12:08:01 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id A2708823B9;
 Mon,  5 Oct 2026 14:08:00 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=hGKEtZgureVe9xfKVFqJiq4hAV/3F/WTcANPkzkzM9o=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=CQTUawQZYLEZ136o8kWmLzZInHT7s8tzJlQsuN/Hx5LWThwj6YRkoXXScR6PKLvJQ8mcdjM71
 NTiOPhGXkwmlaPhhzChV51EiUCdilVhODDULYrpzeY+LWTzoNXhPz8r9IwcBdzF/KJCCBioRxqA
 udimdC+fOeIPc5zdjVKiFDt3g79r0LR6YlIxiSuWwtpO9voyUc017/Z+9hyVRW6U8+GFRhP6P/y
 yTSHkVWAslP2Gh89LB+CGtVLXCwEkF+Z2bto8tj3f2vK790XMYq3n4fXT9QUl8dxt1+jwFTtUa/
 F6//PjT1ZrFM1QxSjVhBl/nNKFInrilu8KcAT36dC02g==
X-Zone-Loop: bdbeebcb00a3f99c297c12f9bda1e32b457e7fae93e5
x-campaign-type: default
x-transaction-id: 699815d2-710b-4ab6-a9d0-038d3624f2be
x-swg-uid: 01-45d5f746-0737-467d-a62a-9b6993eb395b
X-Mailer: Sweego
Message-ID:
 <1791202081.8631fc262581453bbf619ec5b2062170.1a10bf6b9c60003f66@vates.tech>
x-swg-bid: 1791202081.8631fc262581453bbf619ec5b2062170.1a10bf6b9c60003f66
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 09/17] fix XENBUS_GNTTAB_QUERY_REFERENCE annotation
Date: Mon,  5 Oct 2026 14:07:50 +0200
In-Reply-To: <1791201881.8631fc262581453bbf619ec5b2062170.1a10bf3abba0003f66@vates.tech>
References: <1791201881.8631fc262581453bbf619ec5b2062170.1a10bf3abba0003f66@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.642.751481a16ed03e9.1a10bf6b823.c12a059db0224347=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791202080803
X-purgate-ID: tlsNG-ebf023/1791202083-52CCFB50-009E7F91/0/0
X-purgate-type: clean
X-purgate-size: 1090

---=Part.642.751481a16ed03e9.1a10bf6b823.c12a059db0224347=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Pfn is not a ** pointer, so we remove the _ptr_ part=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 include/gnttab_interface=2Eh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/gnttab_interface=2Eh b/include/gnttab_interface=2Eh
index 7d930e1=2E=2E41c8444 100644
--- a/include/gnttab_interface=2Eh
+++ b/include/gnttab_interface=2Eh
@@ -174,7 +174,7 @@ typedef NTSTATUS
 (*XENBUS_GNTTAB_QUERY_REFERENCE)(
     _In_ PINTERFACE             Interface,
     _In_ ULONG                  Reference,
-    _Outptr_opt_ PPFN_NUMBER    Pfn,
+    _Out_opt_ PPFN_NUMBER       Pfn,
     _Out_opt_ PBOOLEAN          ReadOnly
     );
=20
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.642.751481a16ed03e9.1a10bf6b823.c12a059db0224347=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 05 14:26:47 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 05 Oct 2026 14:26:47 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1440909.1658430 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDjeQ-000824-Jf; Mon, 05 Oct 2026 14:26:46 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1440909.1658430; Mon, 05 Oct 2026 14:26:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDjeQ-00081x-GW; Mon, 05 Oct 2026 14:26:46 +0000
Received: by outflank-mailman (input) for mailman id 1440909;
 Mon, 05 Oct 2026 14:26:46 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <owen.smith@citrix.com>) id 1xDjeQ-00081r-5v
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 14:26:46 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xDjeP-00DiU4-0t
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 16:26:45 +0200
Received: from [10.42.69.3] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ac3b399-e002-0a2a0a5209dd-0a2a4503cc60-28
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 16:26:44 +0200
Received: from [40.93.201.23]
 (helo=CY3PR05CU001.outbound.protection.outlook.com)
 by tlsNG-33051d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ac3b3a2-fae8-0a2a45030019-285dc917e649-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 16:26:44 +0200
Received: from SA6PR03MB7760.namprd03.prod.outlook.com (2603:10b6:806:43c::5)
 by PH7PR03MB7464.namprd03.prod.outlook.com (2603:10b6:510:2e9::7)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.472.20; Mon, 5 Oct
 2026 14:26:38 +0000
Received: from SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38]) by SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38%5]) with mapi id 15.21.0472.016; Mon, 5 Oct 2026
 14:26:38 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:x-ms-exchange-senderadcheck"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
 b=EzQp0D2nk46okOmHW616SUaO2d7pKyGnjh2zL1XHnOeO5h0iaVrJ11znmjkhzQn3UHQcBiFl8HQfLSG0H962kAXqH/qkgYPJ5XBnqoLeBVSb26K2gKpWlpuzoVrAiaXyW4Q0T799UmKq4FC5t0yPNgTViGdvXm98vCWW2Qry0NHMrP8oC/3LlCaotkP4YR+tQhACYaxX1EZSzTJ9Gk2NGOh3kuuEX4MIXRfm1c74/hb2nhYtWfqXglXi9wY7jqHJNwTfyUofm+nYFCMh90XI5WKBO8Lyg2mwiU1tpXdqmLRVaWhVNB9ZzT0iZiVeKVyYAWuNYmk/tWQU5RlzTaeKXg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector10001;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=w0fkJumEOAomYfIhfewcnNnTUWXRP3RCM70zhrEeCsk=;
 b=DHGww/LuerCmSkQNs04xIF6YnzWq9LHBRYeYkPctu4C8VzLTQyaso7pM/cLL2dia+a1X/xzx45yx0lfPT8LNTIPwF9D/ZLYYFA5A1rjzu+a2INfR1faX1GASZap1/KaqYVpr2A5xGjWmEp6Yu2NGo95+a0knLuEbLLtYXfahJLnR5fONbYrSmFMzttjbyO56pTvLE3LNHMDX0l0yNbO3Pkcy7fGnqFPmyNEtgsMuIQqDPv3O++1Yi6OfMRBRH24lKFN55MwJ1XSVZrTL5w3WWUtHHg4Dy7arkOKQeunJYProsPTtGMbITWsyKtvuJuGa+NvaK73uksJdX+hhuQw+wg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=w0fkJumEOAomYfIhfewcnNnTUWXRP3RCM70zhrEeCsk=;
 b=E6GvAMTHUT7CctBdhDjt6UmN5q1Ny0UJIr5w52oZuMisfNKP+bHWg+qblplum75KsWZAq2R9qzmCfGIu85/itPnj6bDoWBOd+obK9ZgJlgWuJovNcVLr/k7MIBQWTnlzDa+rA4hzsLPtUMkIYdNQff0v+i3epFtOFy/pxFZMa9w=
From: Owen Smith <owen.smith@citrix.com>
To: =?iso-8859-1?Q?C=E9saire_Mounah?= <cesaire.mounah@vates.tech>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Subject: Re: [PATCH 00/17] Update SAL annotations in xeniface
Thread-Topic: [PATCH 00/17] Update SAL annotations in xeniface
Thread-Index: AQHdVMG+/x9dvOnKzUKUxdzt0au1qLbvAWIf
Date: Mon, 5 Oct 2026 14:26:38 +0000
Message-ID:
 <SA6PR03MB77609DCDD616CE26D512DA11FE962@SA6PR03MB7760.namprd03.prod.outlook.com>
References:
 <1791201881.8631fc262581453bbf619ec5b2062170.1a10bf3abba0003f66@vates.tech>
In-Reply-To:
 <1791201881.8631fc262581453bbf619ec5b2062170.1a10bf3abba0003f66@vates.tech>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
msip_labels:
authentication-results: mx.microsoft.com 1; dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=citrix.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: SA6PR03MB7760:EE_|PH7PR03MB7464:EE_
x-ms-office365-filtering-correlation-id: a70ce116-7d31-4050-4e07-08df22ecaab8
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam:
 BCL:0;ARA:13230040|376014|23010399003|1800799024|366016|6133799003|22082099003|18002099003|10067099003|3023799007|38070700021|56012099006|11063799006;
x-microsoft-antispam-message-info:
 /KH6lhrnWAoyTHbnuLbd/buOi1AFP2hh5NMoIMdK7qVUJr+JzEiI6nA1VUnB0TdfhBsxwnRJakbfuL/41wlJlVbWZWhG05S/VY1TOxzO5JI/QJ7ASKEzebl9H1LWTuhY1AeNM5f8+w2CGCV4vzSYaBddQNHTYl8z3e/Tr0l2qyF9MRdlhvMnj9xkH0TXofzlCiHc0KfzXx5ilt1/TcORLo88+Ouyh0C/RRGLHAbf12GUbNTzbcNl6v71GgNMquS5fHz+OtETeVMaDFZsDA1EBi+3VgUtir2M98XFUq7xK65ruqAGeZJkfTFpND1vNJ2zHRh/XQdniCLhxz36B3QHw+83isUD43Rt8CWxvPKmcys3F3UFmQaRpm4PST6nQSeMB5ETmRXNlgYTZTzXLDY9HBFiu6cHHl04sNDzV71Eph5GVosMec25rgVFaU6ajs8QG4PImiBV/WKPvExt63xLv6tksxdGp9IrVELeynGBJLx9XhfCD1RoVsVe3Mxm566IdkTT45qyvDnsi0nLkTsOs5HrCER2BIT3DlAI4BLIFKKFA8gkPyKmw44pF9mxM1lxweWzjhkSL5eo5WfGNWcel8OmZDdApKXMbIFCBfB8l9YzrN7zZxHgr/Vrlwzu7OcoKpwBAUuNQoGtsAuajyfXajpeYQkA/D5RhQv23AlGu6I=
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SA6PR03MB7760.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(23010399003)(1800799024)(366016)(6133799003)(22082099003)(18002099003)(10067099003)(3023799007)(38070700021)(56012099006)(11063799006);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?iso-8859-1?Q?XFxA21dzN40eDt2hAWZwnGr5XJULZQiZnz+jErZEXbqQFq0xdPlSti3sup?=
 =?iso-8859-1?Q?vAEYmT3PQUB/yo+dSrFPPGL48VkEe82l7/LIwgeEyZOHX/7V1kWlX/y90c?=
 =?iso-8859-1?Q?Mo1/lhd+MmMVuevhrhqT/Nz8Y5BF/dDowzdMyrmu1Fh4fFzv/q41S65eTf?=
 =?iso-8859-1?Q?gnlEHiSrrnnD/ETIOdzHifjVs2nzKtjjH3pftLCJQ/n40/dJ6YeVXjACZw?=
 =?iso-8859-1?Q?5C8lhTH/8NR3sX8dg2hDkU/F2WKQYLuvABbIqferDoPIaWIkceBcKCgIbd?=
 =?iso-8859-1?Q?sOudI3u1XfM3VLGUnDzW4zNHDHi/EJ1AshAo/31brXR9lmcogb0wPFLJEj?=
 =?iso-8859-1?Q?+EdLGe6sSAEdRvQbxkDvOFNGxd1AIzMouSAH9FsGdAO0USER8lYyCJVpUR?=
 =?iso-8859-1?Q?dyQ3BaRsWxXl5C0sjNoC4+eRwZi1BwXdJw+n0Mh633U2L/DH+hFxMiDlDq?=
 =?iso-8859-1?Q?LDUf1JaOlJvYaiwp/XoqzRDJKVFcaVSXWPF4QeVSW9DI+9fcMULHjuTxci?=
 =?iso-8859-1?Q?J0uXercr7aeKYyWk9gNPn/YNuVEWzj7KMMvSuksOeWwbnvIqJiIW1Ir0lS?=
 =?iso-8859-1?Q?1krzqaJpzv7QinA2qTMHuGpYanqnXYxPVDaN4DcCLw7j3Wk9/+3Mcna6AN?=
 =?iso-8859-1?Q?6ZQT/ZDVg41yVb6QmueStXeNS+q7KqnLcdP5YF+K03MVKt91VJ7XGCV53S?=
 =?iso-8859-1?Q?d1Djg2Ci3lZWGT1h2ZJqpf/X+k4df9MU0SHOgyv6rYdK2SDBzUtgr5rjlg?=
 =?iso-8859-1?Q?VjeIMzsre4b7uSf/pgU9nH85m5RmUhy7GTWLNp8zLpsg70i5mwL0FwGrG4?=
 =?iso-8859-1?Q?WCx2M5bBKhAMtoUmtOyVs5kLe2lTZxRnxWTZvHi5bhhb4J4uaePPsqKf8B?=
 =?iso-8859-1?Q?vH5rGghVj+QIAAD10ROTTaP4XmEIKjgMbgODi+wqppUqKvbCGeKfcRnKR2?=
 =?iso-8859-1?Q?WDsPDey4RjvPnkTQvhRorXVY3CJQHWFXtBPQh8UoZ3twSXASZ3PqVViWTX?=
 =?iso-8859-1?Q?7D/RYf7v8BTgm7PiJz073QnxE6cuaWrred6VvQtEdMi8yNKpMrbrQStzob?=
 =?iso-8859-1?Q?58Fsl+KhAzD/jDiXRorN+ONY1sfG+g52KkK+CftBAY/iEIUcajGJbX8TOL?=
 =?iso-8859-1?Q?EK6+mKTJeQan+gTgNHn5YcPTd9RdZTizDUVKAb06f1tKFzwqC0AFz1GdW8?=
 =?iso-8859-1?Q?zZZjGWoRBtmLpfp+ytoZM3ujkNFvat6ituFYNeFN5axCRnkdW4wsATmzPt?=
 =?iso-8859-1?Q?6N/504kStGOZmRqDxboDjdj93/+7tJtgtDxDl8tHk87c9CCySvMQ1/5cOq?=
 =?iso-8859-1?Q?lbHtgSfrmDhiANm7eH3cIuAsJBVioFiuJkz3dV4++bl58LmIHMg0v/+ozA?=
 =?iso-8859-1?Q?8gGZJuIZPrsAfigNhZ3JkVzab3hLslTWarm4Qt2I3XsOkLEeCv/aHLmd0z?=
 =?iso-8859-1?Q?wRn0359H8IaULwGzMoLsKRFPdVYoN7Dk2PJi95JDN4AjKGUE8EOzMNirlj?=
 =?iso-8859-1?Q?y5vHtjnaY3t6Q26b8Xi9mvvoQrx9jAmrQ9Qd1OiGVOjhOikKR8Rjz6B2v8?=
 =?iso-8859-1?Q?zeV6LlyOOnaQc30o07olwd4IxYhZo3cybZfkVRbgjEY4lcOwjwcU4KHr7x?=
 =?iso-8859-1?Q?yOMiqBpEOOFclItH1dpDaY5toJKGMhHkdTaq+0+3LRF66ei/EixTs9m0tQ?=
 =?iso-8859-1?Q?GDhAuWpOQxIxJb/d5DIoTEpNMmy3AC4E7jfvMEWxxptRzubkkIaNUFS73O?=
 =?iso-8859-1?Q?7B9IPoW2/x556G4SggKLO4z05hlSf1CkHPPplhBVibASCz?=
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-OriginatorOrg: citrix.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: SA6PR03MB7760.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: a70ce116-7d31-4050-4e07-08df22ecaab8
X-MS-Exchange-CrossTenant-originalarrivaltime: 05 Oct 2026 14:26:38.1228
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: VMrLpYYgJ7+gupdP+xZovGtsj7vB3RGfestt4ceq9Jl18nUVgt/rKGZfOgYoggS9Vmlk0GtQXFrg4Og+0uAb/g==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR03MB7464
X-purgate-ID: tlsNG-33051d/1791210404-7488A4E9-27251B9B/0/0
X-purgate-type: clean
X-purgate-size: 2879

Hi,

This series seems to be missing patches 10 through 17

Owen

________________________________________
From: win-pv-devel <win-pv-devel-bounces@lists.xenproject.org> on behalf of=
 C=E9saire Mounah <cesaire.mounah@vates.tech>
Sent: 05 October 2026 1:04 PM
To: win-pv-devel@lists.xenproject.org
Cc: C=E9saire Mounah
Subject: [PATCH 00/17] Update SAL annotations in xeniface

This update concerns updating and fixing SAL annotations in the xeniface dr=
iver.

C=E9saire Mounah (17):
  xeniface: Sync common files with xenbus
  Convert to SAL 2.0 annotations
  util: fix some annotations
  wmi: fix some anntotations
  ioctl: fix annotations
  fdo: fix annotations
  update string typedefs in all include files
  wmi: fix annotation of AccessWmiBuffer
  fix XENBUS_GNTTAB_QUERY_REFERENCE annotation
  driver: fix annotation errors
  xc: fix annotations
  fdo: suppress warning in FdoQueryInterface
  ioctl: fix annotation of __CaptureUserBuffer
  wmi: fix output buffer annotations
  include: update the annotations of shared interfaces
  xeniface: route AccessWmiBuffer unknown-type exit through common path
  util: fix annotation of __wcstok_r

 include/cache_interface.h       |  76 ++--
 include/evtchn_interface.h      |  72 ++--
 include/gnttab_interface.h      |  88 ++---
 include/shared_info_interface.h |  44 +--
 include/store_interface.h       |  84 ++---
 include/suspend_interface.h     |  24 +-
 include/xencontrol.h            | 165 +++++----
 src/xencontrol/xencontrol.c     | 337 ++++++++---------
 src/xeniface/assert.h           |  82 ++--
 src/xeniface/driver.c           |  32 +-
 src/xeniface/fdo.c              | 348 ++++++++---------
 src/xeniface/fdo.h              |  26 +-
 src/xeniface/ioctl_evtchn.c     | 144 +++----
 src/xeniface/ioctl_gnttab.c     | 132 +++----
 src/xeniface/ioctl_sharedinfo.c |  10 +-
 src/xeniface/ioctl_store.c      | 162 ++++----
 src/xeniface/ioctl_suspend.c    |  66 ++--
 src/xeniface/ioctls.c           |  50 +--
 src/xeniface/ioctls.h           | 272 +++++++-------
 src/xeniface/irp_queue.c        |  46 +--
 src/xeniface/irp_queue.h        |  28 +-
 src/xeniface/log.h              |  16 +-
 src/xeniface/mutex.h            |  10 +-
 src/xeniface/names.h            |  18 +-
 src/xeniface/registry.c         | 452 ++++++++++++----------
 src/xeniface/registry.h         | 207 ++++++-----
 src/xeniface/thread.c           |  38 +-
 src/xeniface/thread.h           |  18 +-
 src/xeniface/util.h             |  90 +++--
 src/xeniface/wmi.c              | 638 ++++++++++++++++----------------
 src/xeniface/wmi.h              |  18 +-
 31 files changed, 1954 insertions(+), 1839 deletions(-)

--
2.55.0.windows.5



--
C=E9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen Orchestra - Vates solutions

web: https://vates.tech


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 05 15:54:48 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 05 Oct 2026 15:54:48 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1440959.1658497 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDl1b-0006ut-1E; Mon, 05 Oct 2026 15:54:47 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1440959.1658497; Mon, 05 Oct 2026 15:54:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDl1a-0006um-UQ; Mon, 05 Oct 2026 15:54:46 +0000
Received: by outflank-mailman (input) for mailman id 1440959;
 Mon, 05 Oct 2026 15:54:46 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10cc6405c0003f66@swg.vates.tech>)
 id 1xDl1a-0006ug-60
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 15:54:46 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xDl1Y-00Bd4c-RZ
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 17:54:44 +0200
Received: from [10.42.69.9] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10cc6405c0003f66@swg.vates.tech>)
 id 6ac3c81f-bab6-0a2a0a5309dd-0a2a4509b024-26
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 17:54:44 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-bad1c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10cc6405c0003f66@swg.vates.tech>)
 id 6ac3c844-be1a-0a2a45090019-b9ff1c22b295-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 17:54:44 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a10cc6405c0003f66.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 05 Oct 2026 15:54:41 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id E6F3E81DEE;
 Mon,  5 Oct 2026 17:54:40 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=YerztpCcj5A6nv0egg4KmpFBMTo1xtTPqWGbE3HCbv0=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:feedback-id;
 b=MsMUlEqODSptGqTyZ3JUY6HCa5HEhsI6ZE4cXFo3w3aIAGPFVSd4GhoD7JPmlHHw6PSv7Asuk
 1hiYE22wJfzDaqWATxOvkv0fWSUtS78J6GWT6JvI0iQAZVZc+W+cV6vAna/B2hUeKImXiy0gc0H
 L7wwflWqg4riyAeNzh8SN9MVo5koVsFAzCJ/VilCt16sjvUYF8SMarNNI5fdml5ohMt3t/cT/jT
 4dO/gT9FJUJXL+JtpjTsLZ6j4GmzbCXVTcRQ1TJYGO+66ncT/mMIJbs0CB7hSUrPeKx6NdCFpZR
 1Q5vl5tac4gA28BrWAk7qqN69nDhuZl+KobcuuDh1pBQ==
X-Zone-Loop: 18d0bd9532773782a1469a7a046b3a9763dbe78297cc
x-campaign-type: default
x-transaction-id: c4c4443d-0211-4380-a8d5-f5b00b320597
x-swg-uid: 01-1c8a4af9-fe14-4d24-9ec2-65b1aadf94fc
X-Mailer: Sweego
Message-ID:
 <1791215681.8631fc262581453bbf619ec5b2062170.1a10cc6405c0003f66@vates.tech>
x-swg-bid: 1791215681.8631fc262581453bbf619ec5b2062170.1a10cc6405c0003f66
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 0/6] xennet: update annotations to SAL 2.0
Date: Mon,  5 Oct 2026 17:54:33 +0200
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.65f.83bbb20e1253c572.1a10cc63e15.97bfda34afdee4a7=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791215681049
X-purgate-ID: tlsNG-bad1c0/1791215684-BE2C4034-818CC6C9/0/0
X-purgate-type: clean
X-purgate-size: 2222

---=Part.65f.83bbb20e1253c572.1a10cc63e15.97bfda34afdee4a7=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Update SAL annotations in xennet to SAL 2=2E0=2E
This update has 3 main changes:

1=2E Synchronize common files with xeniface=2E
* xennet: sync common files with xeniface

2=2E Convert and fix old annotations to SAL 2=2E0=2E
* xennet: convert and fix old annotations to SAL 2=2E0: Mechanical pass
* xennet: fix IN annotations
* xennet: use correct string annotations

3=2E Suppress warnings raised by static analysis=2E
* adapter: fix Unitialized *Interface in _QueryInterface
* receiver: suppress warning on *Pause being unitialized in
    _ReceiverPushPackets

C=C3=A9saire Mounah (6):
  xennet: sync common files with xeniface
  xennet: convert old annotations to SAL 2=2E0: Mechanical pass
  xennet: fix IN annotations
  xennet: use correct string annotations
  adapter: fix Unitialized *Interface in _QueryInterface
  receiver: suppress warning on *Pause being unitialized in
    _ReceiverPushPackets

 include/store_interface=2Eh   |  84 ++++-----
 include/suspend_interface=2Eh |  24 +--
 include/vif_interface=2Eh     | 158 ++++++++---------
 src/xennet/adapter=2Ec        | 333 ++++++++++++++++++------------------
 src/xennet/adapter=2Eh        |  32 ++--
 src/xennet/assert=2Eh         |  83 ++++-----
 src/xennet/dbg_print=2Eh      |  20 +--
 src/xennet/driver=2Ec         |  20 +--
 src/xennet/driver=2Eh         |   2 +-
 src/xennet/miniport=2Ec       |  66 +++----
 src/xennet/miniport=2Eh       |   6 +-
 src/xennet/receiver=2Ec       | 111 ++++++------
 src/xennet/receiver=2Eh       |  44 ++---
 src/xennet/string=2Ec         |  28 +--
 src/xennet/string=2Eh         |  10 +-
 src/xennet/transmitter=2Ec    |  60 +++----
 src/xennet/transmitter=2Eh    |  22 +--
 src/xennet/util=2Eh           | 102 ++++++-----
 18 files changed, 611 insertions(+), 594 deletions(-)

--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.65f.83bbb20e1253c572.1a10cc63e15.97bfda34afdee4a7=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 05 15:57:48 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 05 Oct 2026 15:57:48 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1440960.1658501 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDl4W-00071t-9Q; Mon, 05 Oct 2026 15:57:48 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1440960.1658501; Mon, 05 Oct 2026 15:57:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDl4W-00071m-6f; Mon, 05 Oct 2026 15:57:48 +0000
Received: by outflank-mailman (input) for mailman id 1440960;
 Mon, 05 Oct 2026 15:57:46 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10cc90ac00003f66@swg.vates.tech>)
 id 1xDl4U-00071g-P2
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 15:57:46 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xDl4T-00D2YL-Go
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 17:57:45 +0200
Received: from [10.42.69.1] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10cc90ac00003f66@swg.vates.tech>)
 id 6ac3c8b6-e002-0a2a0a5209dd-0a2a4501926c-26
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 17:57:45 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10cc90ac00003f66@swg.vates.tech>)
 id 6ac3c8f9-5984-0a2a45010019-b9ff1c129a9f-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 17:57:45 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a10cc90ac00003f66.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 05 Oct 2026 15:57:44 +0000
Received: from [192.168.1.121] (88-185-151-209.subs.proxad.net
 [88.185.151.209]) (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id D6BEB823A1
 for <win-pv-devel@lists.xenproject.org>; Mon,  5 Oct 2026 17:57:43 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=RVVmbpSFBgvZ1dc9Yu4yUZ4ecw33pLklDPb0VrctZzA=;
 h=from:subject:date:message-id:to:mime-version:content-type:in-reply-to:references:feedback-id;
 b=e/3a1fMlbrsxRG9StO4dDWZ2Iwk+65zV834D4/bqVjbHMHs/32skC9kqYGBHlcXZW9gabQsQ+
 0r7wS/fJkRL5NJEQYBSCHnNq8X523an0CCNee6Nu2PXZxq+i+RgCcZC/ShOxnr9tBoFWOJ3tyJA
 yEMly3pKJN+WNtE6vBm+Mb/CPIR2bjrq6nOf1YWwpzm0ZP61ckSNYteq3H/FfdNkxKG8tmAyCy1
 ioBTdOXmufUkY+GqDN0fnZA25xkebh2yJyPqD8rFfI36qKCb1cFAEak1+0JRj2p1yiWBVBRbSL4
 qy0L53iZA6/iCTdb+KwWn+xQV2zgqQ3TLqsyoIIiGnhQ==
X-Zone-Loop: f2d9bacca8d64cd6e0bea0d4def6b32bfbf77e69dd0e
x-campaign-type: default
x-transaction-id: 06b506f6-d10b-4e28-b62b-0734c0e11f11
x-swg-uid: 01-14e81d46-56a6-4abb-8e59-38dd3b34cfd6
X-Mailer: Sweego
Message-ID:
 <1791215864.8631fc262581453bbf619ec5b2062170.1a10cc90ac00003f66@vates.tech>
x-swg-bid: 1791215864.8631fc262581453bbf619ec5b2062170.1a10cc90ac00003f66
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
Date: Mon, 5 Oct 2026 17:57:42 +0200
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH 00/17] Update SAL annotations in xeniface
To: win-pv-devel@lists.xenproject.org
References: <1791201881.8631fc262581453bbf619ec5b2062170.1a10bf3abba0003f66@vates.tech>
 <SA6PR03MB77609DCDD616CE26D512DA11FE962@SA6PR03MB7760.namprd03.prod.outlook.com>
Content-Language: en-US
From: Mounah Honore Cesaire <cesaire.mounah@vates.tech>
In-Reply-To: <SA6PR03MB77609DCDD616CE26D512DA11FE962@SA6PR03MB7760.namprd03.prod.outlook.com>
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.660.dc805454d92f386c.1a10cc9087c.4692b16aa8de657=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791215863933
X-purgate-ID: tlsNG-d62444/1791215865-BFA6E757-FD122336/0/0
X-purgate-type: clean
X-purgate-size: 3637

---=Part.660.dc805454d92f386c.1a10cc9087c.4692b16aa8de657=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable


On 10/5/26 4:27 PM, Owen Smith wrote:
> Hi,
>
> This series seems to be missing patches 10 through 17
>
> Owen


Indeed, Sorry=2E I will send the rest=2E

C=C3=A9saire


>
> ________________________________________
> From: win-pv-devel <win-pv-devel-bounces@lists=2Exenproject=2Eorg> on be=
half of C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
> Sent: 05 October 2026 1:04 PM
> To: win-pv-devel@lists=2Exenproject=2Eorg
> Cc: C=C3=A9saire Mounah
> Subject: [PATCH 00/17] Update SAL annotations in xeniface
>
> This update concerns updating and fixing SAL annotations in the xeniface=
 driver=2E
>
> C=C3=A9saire Mounah (17):
>    xeniface: Sync common files with xenbus
>    Convert to SAL 2=2E0 annotations
>    util: fix some annotations
>    wmi: fix some anntotations
>    ioctl: fix annotations
>    fdo: fix annotations
>    update string typedefs in all include files
>    wmi: fix annotation of AccessWmiBuffer
>    fix XENBUS_GNTTAB_QUERY_REFERENCE annotation
>    driver: fix annotation errors
>    xc: fix annotations
>    fdo: suppress warning in FdoQueryInterface
>    ioctl: fix annotation of __CaptureUserBuffer
>    wmi: fix output buffer annotations
>    include: update the annotations of shared interfaces
>    xeniface: route AccessWmiBuffer unknown-type exit through common path
>    util: fix annotation of __wcstok_r
>
>   include/cache_interface=2Eh       |  76 ++--
>   include/evtchn_interface=2Eh      |  72 ++--
>   include/gnttab_interface=2Eh      |  88 ++---
>   include/shared_info_interface=2Eh |  44 +--
>   include/store_interface=2Eh       |  84 ++---
>   include/suspend_interface=2Eh     |  24 +-
>   include/xencontrol=2Eh            | 165 +++++----
>   src/xencontrol/xencontrol=2Ec     | 337 ++++++++---------
>   src/xeniface/assert=2Eh           |  82 ++--
>   src/xeniface/driver=2Ec           |  32 +-
>   src/xeniface/fdo=2Ec              | 348 ++++++++---------
>   src/xeniface/fdo=2Eh              |  26 +-
>   src/xeniface/ioctl_evtchn=2Ec     | 144 +++----
>   src/xeniface/ioctl_gnttab=2Ec     | 132 +++----
>   src/xeniface/ioctl_sharedinfo=2Ec |  10 +-
>   src/xeniface/ioctl_store=2Ec      | 162 ++++----
>   src/xeniface/ioctl_suspend=2Ec    |  66 ++--
>   src/xeniface/ioctls=2Ec           |  50 +--
>   src/xeniface/ioctls=2Eh           | 272 +++++++-------
>   src/xeniface/irp_queue=2Ec        |  46 +--
>   src/xeniface/irp_queue=2Eh        |  28 +-
>   src/xeniface/log=2Eh              |  16 +-
>   src/xeniface/mutex=2Eh            |  10 +-
>   src/xeniface/names=2Eh            |  18 +-
>   src/xeniface/registry=2Ec         | 452 ++++++++++++----------
>   src/xeniface/registry=2Eh         | 207 ++++++-----
>   src/xeniface/thread=2Ec           |  38 +-
>   src/xeniface/thread=2Eh           |  18 +-
>   src/xeniface/util=2Eh             |  90 +++--
>   src/xeniface/wmi=2Ec              | 638 ++++++++++++++++--------------=
--
>   src/xeniface/wmi=2Eh              |  18 +-
>   31 files changed, 1954 insertions(+), 1839 deletions(-)
>
> --
> 2=2E55=2E0=2Ewindows=2E5
>
>
>
> --
> C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer
>
> XCP-ng & Xen Orchestra - Vates solutions
>
> web: https://vates=2Etech


-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.660.dc805454d92f386c.1a10cc9087c.4692b16aa8de657=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 05 15:58:56 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 05 Oct 2026 15:58:56 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1440964.1658515 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDl5c-0007KE-K0; Mon, 05 Oct 2026 15:58:56 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1440964.1658515; Mon, 05 Oct 2026 15:58:56 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDl5c-0007K6-HF; Mon, 05 Oct 2026 15:58:56 +0000
Received: by outflank-mailman (input) for mailman id 1440964;
 Mon, 05 Oct 2026 15:58:55 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10cca0c560003f66@swg.vates.tech>)
 id 1xDl5b-0007Jk-4b
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 15:58:55 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xDl5a-003Jlh-GK
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 17:58:54 +0200
Received: from [10.42.69.9] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10cca0c560003f66@swg.vates.tech>)
 id 6ac3c914-8faa-0a2a0a5109dd-0a2a4509850a-26
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 17:58:54 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-bad1c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10cca0c560003f66@swg.vates.tech>)
 id 6ac3c93e-be1a-0a2a45090019-b9ff1c229459-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 17:58:54 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a10cca0c560003f66.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 05 Oct 2026 15:58:50 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id C3643822A9;
 Mon,  5 Oct 2026 17:58:49 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=0JiBhKjmhRJ9fwbC+3vQ6PMUo7FRWImdsamZDgy+rQE=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=S+ogTz19UXS708/BPDODuxVf2nkIMQwxrptyb/NSYOc6YY/cK3/NMm5ZZI8cttbwbhw3zn6Oi
 BJBZSwP41NLN0svl0hP0pM4zooejnW2bCf43Qi59/VKTYlfKxKX2bI9Z9bZM6LL3MJn5YC5TuV1
 P21agVGBRVnD6X2ry1rM2yrnrHm5L3Dm/3f39PabWglpzT+Yhbmkr7x7E9h90qv1z95/kJsYDlr
 BvDil2YJBgaldFO5zG18ifIKB0+93tpzlnfFhLYUShdQtZul7UtzMf/K5cTib+45KRof24XPJvQ
 RHQvqbLlC3oUmpRIWpdVyPWoPShXBOfXmcUCp7LEMKPA==
X-Zone-Loop: f0b6302b994a620f82ce4baa807d3533c04f687a0d06
x-campaign-type: default
x-transaction-id: 7ba95d14-ec94-448e-80eb-ec292fbd70fa
x-swg-uid: 01-619cb173-d82d-44a7-b157-65d19ccfdecc
X-Mailer: Sweego
Message-ID:
 <1791215930.8631fc262581453bbf619ec5b2062170.1a10cca0c560003f66@vates.tech>
x-swg-bid: 1791215930.8631fc262581453bbf619ec5b2062170.1a10cca0c560003f66
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 10/17] driver: fix annotation errors
Date: Mon,  5 Oct 2026 17:58:45 +0200
In-Reply-To: <1791201881.8631fc262581453bbf619ec5b2062170.1a10bf3abba0003f66@vates.tech>
References: <1791201881.8631fc262581453bbf619ec5b2062170.1a10bf3abba0003f66@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.661.36787e61132e9f04.1a10cca0a23.d9971a76746bd35f=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791215929891
X-purgate-ID: tlsNG-bad1c0/1791215934-FDA6E034-E9623318/0/0
X-purgate-type: clean
X-purgate-size: 2016

---=Part.661.36787e61132e9f04.1a10cca0a23.d9971a76746bd35f=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

* DRIVER_DISPATCH in wdm=2Eh is annotated as (_In_, _Inout_), so
we annotate Dispatch the same=2E
* __DriverSetDriverObject and __DriverSetParametersKey are called with
DriverObject parameter set as Null on DriverEntry failure cleanup path and
DriverUnload cleanup respectively=2E DriverObject should be annotated as _=
opt_
in both cases=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xeniface/driver=2Ec | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/xeniface/driver=2Ec b/src/xeniface/driver=2Ec
index 74192cf=2E=2E7c7d7e9 100644
--- a/src/xeniface/driver=2Ec
+++ b/src/xeniface/driver=2Ec
@@ -51,7 +51,7 @@ static XENIFACE_DRIVER  Driver;
=20
 static FORCEINLINE VOID
 __DriverSetDriverObject(
-    _In_ PDRIVER_OBJECT DriverObject
+    _In_opt_ PDRIVER_OBJECT DriverObject
     )
 {
     Driver=2EDriverObject =3D DriverObject;
@@ -75,7 +75,7 @@ DriverGetDriverObject(
=20
 static FORCEINLINE VOID
 __DriverSetParametersKey(
-    _In_ HANDLE Key
+    _In_opt_ HANDLE Key
     )
 {
     Driver=2EParametersKey =3D Key;
@@ -165,12 +165,12 @@ DRIVER_DISPATCH Dispatch;
=20
 NTSTATUS=20
 Dispatch(
-    _In_ PDEVICE_OBJECT DeviceObject,
-    _In_ PIRP           Irp
+    _In_ PDEVICE_OBJECT     DeviceObject,
+    _Inout_ PIRP            Irp
     )
 {
-    PXENIFACE_DX        Dx;
-    NTSTATUS            status;
+    PXENIFACE_DX            Dx;
+    NTSTATUS                status;
=20
     Dx =3D (PXENIFACE_DX)DeviceObject->DeviceExtension;
     ASSERT3P(Dx->DeviceObject, =3D=3D, DeviceObject);
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.661.36787e61132e9f04.1a10cca0a23.d9971a76746bd35f=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 05 15:59:26 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 05 Oct 2026 15:59:26 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1440967.1658519 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDl66-0007XI-Mr; Mon, 05 Oct 2026 15:59:26 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1440967.1658519; Mon, 05 Oct 2026 15:59:26 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDl66-0007X8-Jw; Mon, 05 Oct 2026 15:59:26 +0000
Received: by outflank-mailman (input) for mailman id 1440967;
 Mon, 05 Oct 2026 15:59:25 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10cca75cd0003f66@swg.vates.tech>)
 id 1xDl65-0007Vh-GV
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 15:59:25 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xDl5z-00D2oH-TW
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 17:59:19 +0200
Received: from [10.42.69.7] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10cca75cd0003f66@swg.vates.tech>)
 id 6ac3c942-e002-0a2a0a5209dd-0a2a4507b166-42
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 17:59:19 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-ef75cf.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10cca75cd0003f66@swg.vates.tech>)
 id 6ac3c957-b4ea-0a2a45070019-b9ff1c239e1b-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 17:59:19 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a10cca75cd0003f66.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 05 Oct 2026 15:59:17 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id E89A181E07;
 Mon,  5 Oct 2026 17:59:16 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=OIk8kiyZcfMSl7xBzQFvw8RJJ2vpcx1jJ6NHocTTz8k=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=JBTh21Z7+WPS8lXRP5IMuz+6Mem+iwb/Vb19ZqdGmjDQ0ysuzJDH86/6W4/fG+mzD6xBrfDwd
 4+siNIkCSbAMs7D78u3QTrbKbRRzx8+odT9+OHKAwqs52fRmsyKcq5RHc1xL/36u73KDPj948pB
 Pan+qy2nxvMr+LJFdt0Fj2CGVuaq4pX9QJuHLmn1G4iY4EwnuXaGvHSUVxe7Y36/ch7GymMbOZl
 Q717zucuHHPhWu2gsc0RHcY8GK2SEvC9812lVk9QnKkPF2MzcS/BU4GTj6nPirdVQ+6LIpNc++S
 MQPJr/uFTYFB/QdKYIWk/PBLcWpVfi7XE3zoERu+3Rog==
X-Zone-Loop: bf787376ff3035853dfb830a9ce3ff594a24ecc4e3a0
x-campaign-type: default
x-transaction-id: ca9344eb-70fa-42ee-a099-e0998fdbb573
x-swg-uid: 01-d7a38fea-b0ac-4785-b6a6-c85bca6a6f99
X-Mailer: Sweego
Message-ID:
 <1791215957.8631fc262581453bbf619ec5b2062170.1a10cca75cd0003f66@vates.tech>
x-swg-bid: 1791215957.8631fc262581453bbf619ec5b2062170.1a10cca75cd0003f66
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 11/17] xc: fix annotations
Date: Mon,  5 Oct 2026 17:58:58 +0200
In-Reply-To: <1791201881.8631fc262581453bbf619ec5b2062170.1a10bf3abba0003f66@vates.tech>
References: <1791201881.8631fc262581453bbf619ec5b2062170.1a10bf3abba0003f66@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.662.2e81814f28c98f58.1a10cca7430.a54684511647f352=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791215957040
X-purgate-ID: tlsNG-ef75cf/1791215959-372DCAE4-C18B1F7C/0/0
X-purgate-type: clean
X-purgate-size: 5498

---=Part.662.2e81814f28c98f58.1a10cca7430.a54684511647f352=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

* XcGnttabPermitForeignAccess2 is called by XcGnttabPermitForeignAccess
with Address set to Null so Address should be annotated as In_opt=2E
* Some functions only write to their output parameters on success path,
and failure paths are handled correctly=2E We explicitly annotate the
expected valid path with _Success_ to suppress the corresponding
compiler warnings=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 include/xencontrol=2Eh        | 11 ++++++++---
 src/xencontrol/xencontrol=2Ec | 23 ++++++++++++++---------
 2 files changed, 22 insertions(+), 12 deletions(-)

diff --git a/include/xencontrol=2Eh b/include/xencontrol=2Eh
index f9f0570=2E=2E4b916ec 100644
--- a/include/xencontrol=2Eh
+++ b/include/xencontrol=2Eh
@@ -74,8 +74,8 @@ XcSetLogLevel(
 XENCONTROL_API
 DWORD
 XcOpen(
-    _In_ XENCONTROL_LOGGER          *Logger,
-    _Outptr_ PXENCONTROL_CONTEXT    *Xc
+    _In_ XENCONTROL_LOGGER                          *Logger,
+    _Outptr_result_maybenull_ PXENCONTROL_CONTEXT   *Xc
     );
=20
 /*! \brief Close the Xen Interface device
@@ -96,6 +96,7 @@ XcClose(
     \return Error code
 */
 XENCONTROL_API
+_Success_(return =3D=3D ERROR_SUCCESS)
 DWORD
 XcEvtchnOpenUnbound(
     _In_ PXENCONTROL_CONTEXT    Xc,
@@ -115,6 +116,7 @@ XcEvtchnOpenUnbound(
     \return Error code
 */
 XENCONTROL_API
+_Success_(return =3D=3D ERROR_SUCCESS)
 DWORD
 XcEvtchnBindInterdomain(
     _In_ PXENCONTROL_CONTEXT    Xc,
@@ -198,11 +200,12 @@ XcGnttabPermitForeignAccess(
     \return Error code
 */
 XENCONTROL_API
+_Success_(return =3D=3D ERROR_SUCCESS)
 DWORD
 XcGnttabPermitForeignAccess2(
     _In_ PXENCONTROL_CONTEXT        Xc,
     _In_ USHORT                     RemoteDomain,
-    _In_ PVOID                      Address,
+    _In_opt_ PVOID                  Address,
     _In_ ULONG                      NumberPages,
     _In_ ULONG                      NotifyOffset,
     _In_ ULONG                      NotifyPort,
@@ -235,6 +238,7 @@ XcGnttabRevokeForeignAccess(
     \return Error code
 */
 XENCONTROL_API
+_Success_(return =3D=3D ERROR_SUCCESS)
 DWORD
 XcGnttabMapForeignPages(
     _In_ PXENCONTROL_CONTEXT        Xc,
@@ -341,6 +345,7 @@ XcStoreSetPermissions(
     \return Error code
 */
 XENCONTROL_API
+_Success_(return =3D=3D ERROR_SUCCESS)
 DWORD
 XcStoreAddWatch(
     _In_ PXENCONTROL_CONTEXT    Xc,
diff --git a/src/xencontrol/xencontrol=2Ec b/src/xencontrol/xencontrol=2Ec
index 9ab760b=2E=2E1fdfd0b 100644
--- a/src/xencontrol/xencontrol=2Ec
+++ b/src/xencontrol/xencontrol=2Ec
@@ -85,16 +85,16 @@ XcSetLogLevel(
=20
 DWORD
 XcOpen(
-    _In_ XENCONTROL_LOGGER          *Logger,
-    _Outptr_ PXENCONTROL_CONTEXT    *Xc
+    _In_ XENCONTROL_LOGGER                          *Logger,
+    _Outptr_result_maybenull_ PXENCONTROL_CONTEXT   *Xc
     )
 {
-    HDEVINFO                        DevInfo;
-    SP_DEVICE_INTERFACE_DATA        InterfaceData;
-    SP_DEVICE_INTERFACE_DETAIL_DATA *DetailData =3D NULL;
-    DWORD                           BufferSize;
-    PXENCONTROL_CONTEXT             Context;
-    DWORD                           Status =3D ERROR_OUTOFMEMORY;
+    HDEVINFO                                        DevInfo;
+    SP_DEVICE_INTERFACE_DATA                        InterfaceData;
+    SP_DEVICE_INTERFACE_DETAIL_DATA                 *DetailData =3D NULL;
+    DWORD                                           BufferSize;
+    PXENCONTROL_CONTEXT                             Context;
+    DWORD                                           Status =3D ERROR_OUTO=
FMEMORY;
=20
     Context =3D malloc(sizeof(*Context));
     if (Context =3D=3D NULL)
@@ -185,6 +185,7 @@ XcClose(
     free(Xc);
 }
=20
+_Success_(return =3D=3D ERROR_SUCCESS)
 DWORD
 XcEvtchnOpenUnbound(
     _In_ PXENCONTROL_CONTEXT            Xc,
@@ -225,6 +226,7 @@ end:
     return Status;
 }
=20
+_Success_(return =3D=3D ERROR_SUCCESS)
 DWORD
 XcEvtchnBindInterdomain(
     _In_ PXENCONTROL_CONTEXT                Xc,
@@ -381,11 +383,12 @@ XcGnttabPermitForeignAccess(
                                         References);
 }
=20
+_Success_(return =3D=3D ERROR_SUCCESS)
 DWORD
 XcGnttabPermitForeignAccess2(
     _In_ PXENCONTROL_CONTEXT                        Xc,
     _In_ USHORT                                     RemoteDomain,
-    _In_ PVOID                                      Address,
+    _In_opt_ PVOID                                  Address,
     _In_ ULONG                                      NumberPages,
     _In_ ULONG                                      NotifyOffset,
     _In_ ULONG                                      NotifyPort,
@@ -482,6 +485,7 @@ XcGnttabRevokeForeignAccess(
     return Status;
 }
=20
+_Success_(return =3D=3D ERROR_SUCCESS)
 DWORD
 XcGnttabMapForeignPages(
     _In_ PXENCONTROL_CONTEXT                    Xc,
@@ -761,6 +765,7 @@ end:
     return Status;
 }
=20
+_Success_(return =3D=3D ERROR_SUCCESS)
 DWORD
 XcStoreAddWatch(
     _In_ PXENCONTROL_CONTEXT        Xc,
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.662.2e81814f28c98f58.1a10cca7430.a54684511647f352=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 05 15:59:36 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 05 Oct 2026 15:59:36 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1440968.1658523 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDl6G-0007eh-Pe; Mon, 05 Oct 2026 15:59:36 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1440968.1658523; Mon, 05 Oct 2026 15:59:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDl6G-0007eB-M0; Mon, 05 Oct 2026 15:59:36 +0000
Received: by outflank-mailman (input) for mailman id 1440968;
 Mon, 05 Oct 2026 15:59:35 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10ccaa83e0003f66@swg.vates.tech>)
 id 1xDl6F-0007ba-ND
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 15:59:35 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xDl6F-0030af-4A
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 17:59:35 +0200
Received: from [10.42.69.8] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10ccaa83e0003f66@swg.vates.tech>)
 id 6ac3c949-8faa-0a2a0a5109dd-0a2a4508993a-42
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 17:59:35 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-c1860d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10ccaa83e0003f66@swg.vates.tech>)
 id 6ac3c966-f659-0a2a45080019-b9ff1c129aa7-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 17:59:35 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a10ccaa83e0003f66.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 05 Oct 2026 15:59:30 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id C9E2082347;
 Mon,  5 Oct 2026 17:59:29 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=bU4n0MwZYbdJ1ZbrGngjL8Il+sjrUK0UuFaxzgSbCbU=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=FVrFiqkWvLCFXojiqaNcFqhSvZvkqe8CnhtI/PM/kQweVwUKQw4ZAwjWUg4yZ0DT3JEuTLUb8
 wczrZMdACcARNvN+J+Q3RPsP4EvS6R/F/adBsKtjeiRAy0AAoELAhl5HJXg23fN0cTqCF+56WrK
 ypqf647uJZe8J5SqoGaz0gYK1+Q7pOIH7yirx/rnU0/iM69rXu7LSr/tz/a5FLPoT4Vhp/GTOsz
 A/hFWUJyHq7S8mu2xnKFr69Z/TBu3MG9RPRHV/ZRzaKneylzkfTx/ZoxvKmS5ricHwjjWcgAroS
 0qmetod+0HLovwA97/uhLZO5oX6iRaSsllsoK5O/33hg==
X-Zone-Loop: 95f389b71b40260fe402d290f6fa60cd1e67d8a116bc
x-campaign-type: default
x-transaction-id: 9da0aef9-5b09-4821-984f-c97c7baaf35a
x-swg-uid: 01-66b0f8ce-d926-436a-9caa-5b2939e5a140
X-Mailer: Sweego
Message-ID:
 <1791215970.8631fc262581453bbf619ec5b2062170.1a10ccaa83e0003f66@vates.tech>
x-swg-bid: 1791215970.8631fc262581453bbf619ec5b2062170.1a10ccaa83e0003f66
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 12/17] fdo: suppress warning in FdoQueryInterface
Date: Mon,  5 Oct 2026 17:58:59 +0200
In-Reply-To: <1791201881.8631fc262581453bbf619ec5b2062170.1a10bf3abba0003f66@vates.tech>
References: <1791201881.8631fc262581453bbf619ec5b2062170.1a10bf3abba0003f66@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.663.3ba10f85dff1a811.1a10ccaa6a3.69091d031d2c74f8=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791215969955
X-purgate-ID: tlsNG-c1860d/1791215975-CD14E87B-C172613B/0/0
X-purgate-type: clean
X-purgate-size: 1154

---=Part.663.3ba10f85dff1a811.1a10ccaa6a3.69091d031d2c74f8=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

IoCallDriver called by FdoQueryInterface is the one that fills
Interface indirectly, so to suppress the warning on Interface not
being touched by FdoQueryInterface we can just initialize it=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xeniface/fdo=2Ec | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/xeniface/fdo=2Ec b/src/xeniface/fdo=2Ec
index 0f2e747=2E=2E7f9c471 100644
--- a/src/xeniface/fdo=2Ec
+++ b/src/xeniface/fdo=2Ec
@@ -2272,6 +2272,8 @@ FdoQueryInterface(
=20
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, PASSIVE_LEVEL);
=20
+    RtlZeroMemory(Interface, Size);
+
     KeInitializeEvent(&Event, NotificationEvent, FALSE);
     RtlZeroMemory(&StatusBlock, sizeof(IO_STATUS_BLOCK));
=20
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.663.3ba10f85dff1a811.1a10ccaa6a3.69091d031d2c74f8=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 05 15:59:38 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 05 Oct 2026 15:59:38 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1440969.1658527 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDl6H-0007gT-SW; Mon, 05 Oct 2026 15:59:37 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1440969.1658527; Mon, 05 Oct 2026 15:59:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDl6H-0007gM-P2; Mon, 05 Oct 2026 15:59:37 +0000
Received: by outflank-mailman (input) for mailman id 1440969;
 Mon, 05 Oct 2026 15:59:35 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10ccaa92b0003f66@swg.vates.tech>)
 id 1xDl6F-0007cd-QR
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 15:59:35 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xDl6F-0030af-7K
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 17:59:35 +0200
Received: from [10.42.69.11] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10ccaa92b0003f66@swg.vates.tech>)
 id 6ac3c95e-8faa-0a2a0a5109dd-0a2a450be602-10
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 17:59:35 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-42698a.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10ccaa92b0003f66@swg.vates.tech>)
 id 6ac3c966-b7e8-0a2a450b0019-b9ff1c229449-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 17:59:35 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a10ccaa92b0003f66.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 05 Oct 2026 15:59:30 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 1973F8236B;
 Mon,  5 Oct 2026 17:59:30 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=W9ev4wy70jYg+b0W5KCxHpi/zQgTtK0pc83mYOY3vG8=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=l0tR7Pc9TKl5u1Li2NdNacHQrCyVE5ZwjG1OCNu46sNdd7t8CScyg3G5s0sko/c7qUG8QtJnJ
 BTDy6GKnQ84WlJRDPIqwyutinVmDcRB896IwArYtq0lk3dM8nJoMP3l3ej8199ma6mfhvO9VjDp
 ZnBHKfPQkY6dplE6D/CUIj6Kc3e0cJr6JxIwXhCFHw6eCLIuxu9MVa+jEuCOEj57Yzsh/89JQ0I
 Uzrf6e1LKXXAeDk5GQ1EccPDGqOF/vFOLasABSNf+XYgs0/Z8bbi45Wxk5uxRGOjDQY5th2l0Oc
 FVri7PyLJEK4NGYaJB8SVhH2iSx2N8q6nvvxIUHLtaFA==
X-Zone-Loop: 02bc403d6080eb34a56e0d059817f649c037ba1fa6fd
x-campaign-type: default
x-transaction-id: fdc0c0ef-f7a1-44d5-ae89-243ca5795a1c
x-swg-uid: 01-133aaa9f-23cb-4c97-8a74-e705063ad537
X-Mailer: Sweego
Message-ID:
 <1791215970.8631fc262581453bbf619ec5b2062170.1a10ccaa92b0003f66@vates.tech>
x-swg-bid: 1791215970.8631fc262581453bbf619ec5b2062170.1a10ccaa92b0003f66
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 13/17] ioctl: fix annotation of __CaptureUserBuffer
Date: Mon,  5 Oct 2026 17:59:00 +0200
In-Reply-To: <1791201881.8631fc262581453bbf619ec5b2062170.1a10bf3abba0003f66@vates.tech>
References: <1791201881.8631fc262581453bbf619ec5b2062170.1a10bf3abba0003f66@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.664.c1553e2af86166c8.1a10ccaa790.586491db80944550=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791215970192
X-purgate-ID: tlsNG-42698a/1791215975-A92CC9EA-EC8E381F/0/0
X-purgate-type: clean
X-purgate-size: 1783

---=Part.664.c1553e2af86166c8.1a10ccaa790.586491db80944550=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

*CapturedBuffer can be both Null or filled with Buffer on success path,
so depending on the passed Length of the buffer that needs to be captured
we annotate *CapturedBuffer accordingly=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xeniface/ioctls=2Ec | 4 +++-
 src/xeniface/ioctls=2Eh | 4 +++-
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/xeniface/ioctls=2Ec b/src/xeniface/ioctls=2Ec
index dec68d7=2E=2Ef9c959e 100644
--- a/src/xeniface/ioctls=2Ec
+++ b/src/xeniface/ioctls=2Ec
@@ -44,7 +44,9 @@ NTSTATUS
 __CaptureUserBuffer(
     _In_ PVOID      Buffer,
     _In_ ULONG      Length,
-    _Outptr_ PVOID  *CapturedBuffer
+    _When_(Length !=3D 0, _Outptr_result_bytebuffer_(Length))
+    _When_(Length =3D=3D 0, _Outptr_result_maybenull_)
+    PVOID           *CapturedBuffer
     )
 {
     NTSTATUS        Status;
diff --git a/src/xeniface/ioctls=2Eh b/src/xeniface/ioctls=2Eh
index 71d74d3=2E=2E59e186f 100644
--- a/src/xeniface/ioctls=2Eh
+++ b/src/xeniface/ioctls=2Eh
@@ -93,7 +93,9 @@ NTSTATUS
 __CaptureUserBuffer(
     _In_ PVOID      Buffer,
     _In_ ULONG      Length,
-    _Outptr_ PVOID  *CapturedBuffer
+    _When_(Length !=3D 0, _Outptr_result_bytebuffer_(Length))
+    _When_(Length =3D=3D 0, _Outptr_result_maybenull_)
+    PVOID           *CapturedBuffer
     );
=20
 VOID
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.664.c1553e2af86166c8.1a10ccaa790.586491db80944550=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 05 15:59:38 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 05 Oct 2026 15:59:38 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1440970.1658534 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDl6I-0007gs-37; Mon, 05 Oct 2026 15:59:38 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1440970.1658534; Mon, 05 Oct 2026 15:59:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDl6H-0007ga-Qc; Mon, 05 Oct 2026 15:59:37 +0000
Received: by outflank-mailman (input) for mailman id 1440970;
 Mon, 05 Oct 2026 15:59:35 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10ccaaa140003f66@swg.vates.tech>)
 id 1xDl6F-0007cp-RE
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 15:59:35 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xDl6F-00D2oH-8B
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 17:59:35 +0200
Received: from [10.42.69.3] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10ccaaa140003f66@swg.vates.tech>)
 id 6ac3c967-e002-0a2a0a5209dd-0a2a4503de34-0
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 17:59:35 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-33051d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10ccaaa140003f66@swg.vates.tech>)
 id 6ac3c966-fae8-0a2a45030019-b9ff1c22b4d7-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 17:59:35 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a10ccaaa140003f66.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 05 Oct 2026 15:59:30 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 5347382372;
 Mon,  5 Oct 2026 17:59:30 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=nTfJSzzDCmTDkYVMX+vf1VZ1NivyK15f0bqvuJ5897w=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=ojhdKaVijJGe2CiGouZVqY9aO6LG7Hr+YUbVw1VVaRNckYlhALqiFZjfOM26xREquOiqkvF5b
 fkjBfm9ioim67JTInI8rF1EDdo9/VBi10dhIjIYD3h5iXUW8XC1b5eSv3CKdXhj+zPNT3g9QkzA
 E5xPkBlun1wjGtJRL63jQqccN/SArsUBS6ZXiKdVfeU7RwV8KM9N+VTX5hcjz3BggszGY8lvR4w
 yDkKoMxXcO73d0FrcNQHAIbgqI8qcWFQsSEQmpeU3L2GWUHkDiR8pSe1k7taWmlyPBWAlvsQJv9
 uXCZ9k2l4aE3UNma83724E8uMLQow9Zs34Y9UroOKZkA==
X-Zone-Loop: 625067c1ace934228511a5017de6e0c4ac53086491f6
x-campaign-type: default
x-transaction-id: 936fa9b8-e27b-46e1-bc68-dfde0c7f0a8b
x-swg-uid: 01-57ace150-d82e-4235-87a9-927ed6ded1e8
X-Mailer: Sweego
Message-ID:
 <1791215970.8631fc262581453bbf619ec5b2062170.1a10ccaaa140003f66@vates.tech>
x-swg-bid: 1791215970.8631fc262581453bbf619ec5b2062170.1a10ccaaa140003f66
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 14/17] wmi: fix output buffer annotations
Date: Mon,  5 Oct 2026 17:59:01 +0200
In-Reply-To: <1791201881.8631fc262581453bbf619ec5b2062170.1a10bf3abba0003f66@vates.tech>
References: <1791201881.8631fc262581453bbf619ec5b2062170.1a10bf3abba0003f66@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.665.235ea9da239780a5.1a10ccaa87c.2faa9eedb778d2d7=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791215970429
X-purgate-ID: tlsNG-33051d/1791215975-6D4D74E9-95318EA8/0/0
X-purgate-type: clean
X-purgate-size: 1783

---=Part.665.235ea9da239780a5.1a10ccaa87c.2faa9eedb778d2d7=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

We annotate in Utf8FromUtf32 and Utf16FromUtf32 the number of bytes that
is legal to write=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xeniface/wmi=2Ec | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/src/xeniface/wmi=2Ec b/src/xeniface/wmi=2Ec
index 8e3f002=2E=2Ed8e1a73 100644
--- a/src/xeniface/wmi=2Ec
+++ b/src/xeniface/wmi=2Ec
@@ -190,13 +190,13 @@ Utf32FromUtf8(
=20
 static USHORT
 Utf16FromUtf32(
-    _Out_ PWCHAR    utf16,
-    _In_ ULONG      utf32
+    _Out_writes_(2) PWCHAR  utf16,
+    _In_ ULONG              utf32
     )
 {
-    WCHAR           u;
-    WCHAR           w;
-    WCHAR           x;
+    WCHAR                   u;
+    WCHAR                   w;
+    WCHAR                   x;
=20
     if ((utf32 > 0xFFFF)) {
         u =3D (utf32 & 0x1F0000) >> 16;
@@ -237,14 +237,14 @@ CountUtf16FromUtf32(
=20
 static USHORT
 Utf8FromUtf32(
-    _Out_ PCHAR dest,
-    _In_ ULONG  utf32
+    _Out_writes_(4) PCHAR   dest,
+    _In_ ULONG              utf32
     )
 {
-    CHAR        u;
-    CHAR        y;
-    CHAR        x;
-    CHAR        z;
+    CHAR                    u;
+    CHAR                    y;
+    CHAR                    x;
+    CHAR                    z;
=20
     if (utf32 & UTF8MASK4) {
         x =3D utf32 & 0x3f;
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.665.235ea9da239780a5.1a10ccaa87c.2faa9eedb778d2d7=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 05 15:59:38 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 05 Oct 2026 15:59:38 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1440971.1658536 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDl6I-0007hJ-7w; Mon, 05 Oct 2026 15:59:38 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1440971.1658536; Mon, 05 Oct 2026 15:59:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDl6H-0007gj-Sd; Mon, 05 Oct 2026 15:59:37 +0000
Received: by outflank-mailman (input) for mailman id 1440971;
 Mon, 05 Oct 2026 15:59:36 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10ccaaaff0003f66@swg.vates.tech>)
 id 1xDl6G-0007d6-5l
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 15:59:36 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xDl6F-003JxR-J0
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 17:59:35 +0200
Received: from [10.42.69.1] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10ccaaaff0003f66@swg.vates.tech>)
 id 6ac3c921-2eae-0a2a0a5409dd-0a2a4501af12-42
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 17:59:35 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10ccaaaff0003f66@swg.vates.tech>)
 id 6ac3c967-5984-0a2a45010019-b9ff1c23b047-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 17:59:35 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a10ccaaaff0003f66.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 05 Oct 2026 15:59:31 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 8D9C082347;
 Mon,  5 Oct 2026 17:59:30 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=EjvPDUsGzUw+6EveOMg+T6EOUq59n/2AnhZfcANwJ80=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=K7OrENYa7DKpasBPC39u7rX4axOj0e+in5ispf9VHPVzpuEuIEknZIOPmAqwUH8D3S9A9v+QL
 W5RS6o2E5YDC4ACS+ClCnhCRs4i/UhTUZrky03CHM9fNDMFNkRGLpUzZCbxH2qjvIpjWJwnjOD9
 81J7tSbnrI1I19VigS3FRyMf172L6ihs7IKhVHu4fUURvvsEQB15P7Lxji7bUEknkPFXXY9hdfQ
 LBQq37QSm9aKVgKqniPejs+cmotAXe83FqblXjTjaDZVGApiDbC8v+o4YKZfywp2YKCjgPV/DsC
 CLY2wSNeE4ea2wSrmjAZ85yNXkHv/vgaYzPEH9P2LBzw==
X-Zone-Loop: d3f3f60fe71fbdbc386f5273eb31a4cc89e2d667559e
x-campaign-type: default
x-transaction-id: 5ed99f3a-b906-4e0c-870b-620f275eb626
x-swg-uid: 01-3e6ee7af-116b-4a17-afb0-f6d8704781ae
X-Mailer: Sweego
Message-ID:
 <1791215971.8631fc262581453bbf619ec5b2062170.1a10ccaaaff0003f66@vates.tech>
x-swg-bid: 1791215971.8631fc262581453bbf619ec5b2062170.1a10ccaaaff0003f66
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 15/17] include: update the annotations of shared interfaces
Date: Mon,  5 Oct 2026 17:59:02 +0200
In-Reply-To: <1791201881.8631fc262581453bbf619ec5b2062170.1a10bf3abba0003f66@vates.tech>
References: <1791201881.8631fc262581453bbf619ec5b2062170.1a10bf3abba0003f66@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.666.14bbb2923a9ca149.1a10ccaa96d.74dc2e246562410a=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791215970669
X-purgate-ID: tlsNG-d62444/1791215975-C5146757-15CFB2C6/0/0
X-purgate-type: clean
X-purgate-size: 1793

---=Part.666.14bbb2923a9ca149.1a10ccaa96d.74dc2e246562410a=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

SharedInfoGetTime can be called with Local =3D Null and StoreWatchRemove
can be called with Watch =3D Null in wmi=2Ec and the two functions handle =
these
cases in xenbus so we add _opt_ accordingly=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 include/shared_info_interface=2Eh | 2 +-
 include/store_interface=2Eh       | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/include/shared_info_interface=2Eh b/include/shared_info_inter=
face=2Eh
index b9b7874=2E=2E37e92de 100644
--- a/include/shared_info_interface=2Eh
+++ b/include/shared_info_interface=2Eh
@@ -139,7 +139,7 @@ typedef VOID
 (*XENBUS_SHARED_INFO_GET_TIME)(
     _In_ PINTERFACE         Interface,
     _Out_ PLARGE_INTEGER    Time,
-    _Out_ PBOOLEAN          Local
+    _Out_opt_ PBOOLEAN      Local
     );
=20
 // {7E73C34F-1640-4649-A8F3-263BC930A004}
diff --git a/include/store_interface=2Eh b/include/store_interface=2Eh
index 2f01674=2E=2E83a76a1 100644
--- a/include/store_interface=2Eh
+++ b/include/store_interface=2Eh
@@ -246,8 +246,8 @@ typedef NTSTATUS
 */ =20
 typedef NTSTATUS
 (*XENBUS_STORE_WATCH_REMOVE)(
-    _In_ PINTERFACE             Interface,
-    _In_ PXENBUS_STORE_WATCH    Watch
+    _In_ PINTERFACE                 Interface,
+    _In_opt_ PXENBUS_STORE_WATCH    Watch
     );
=20
 /*! \typedef XENBUS_STORE_POLL
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.666.14bbb2923a9ca149.1a10ccaa96d.74dc2e246562410a=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 05 15:59:38 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 05 Oct 2026 15:59:38 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1440972.1658537 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDl6I-0007hy-8a; Mon, 05 Oct 2026 15:59:38 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1440972.1658537; Mon, 05 Oct 2026 15:59:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDl6H-0007hI-VO; Mon, 05 Oct 2026 15:59:37 +0000
Received: by outflank-mailman (input) for mailman id 1440972;
 Mon, 05 Oct 2026 15:59:36 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10ccaad0e0003f66@swg.vates.tech>)
 id 1xDl6G-0007d8-Bs
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 15:59:36 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xDl6F-0028ve-P2
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 17:59:35 +0200
Received: from [10.42.69.12] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10ccaad0e0003f66@swg.vates.tech>)
 id 6ac3c961-bab6-0a2a0a5309dd-0a2a450ce834-8
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 17:59:35 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-d25034.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10ccaad0e0003f66@swg.vates.tech>)
 id 6ac3c967-f479-0a2a450c0019-b9ff1c238b0f-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 17:59:35 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a10ccaad0e0003f66.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 05 Oct 2026 15:59:31 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 1067082372;
 Mon,  5 Oct 2026 17:59:31 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=YK9uoP1x9h6NtjmYFg9Wr6UDrvoIr0cGemMxOUfPDYM=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=IVE4CzbC5g9jgPfsYqlB79GoNN8K4N6aYziQUI5NxJTQOhMACA5z08KTEmEjTprlFiPBcsesh
 O0eOmEzupZI1/IGQ6Us59kmwWQdv1sUs45yp+ZlxXa7IFfwYRAeOWAoK3x4bDP51lh+HMdavXgP
 lK3vb2Rsl4m/6QcwVma1oIVmw69OK/pnw60XCxMkjJ+y/9lp/jE5L1+GN+tTER+P3egDUzmMlIz
 tYAyRIkNjCTtkxZBpDJl9l/W7pDPjB0tgU9lmnZm1GQxMu4PXcRl6BF1u4DhMZZYpO1Kav7jtMx
 45aN10rTSwJmcCOdgPP9FC4OQ2OpcMT5TnRm0jKxqoow==
X-Zone-Loop: f848a3da1a2a682fd0cdd0fa6fe11d8318a7c2d328ae
x-campaign-type: default
x-transaction-id: 57350038-81b6-40aa-8309-6b62b462302b
x-swg-uid: 01-64be1522-8a06-4f7e-a16d-1d12ad2c97e0
X-Mailer: Sweego
Message-ID:
 <1791215971.8631fc262581453bbf619ec5b2062170.1a10ccaad0e0003f66@vates.tech>
x-swg-bid: 1791215971.8631fc262581453bbf619ec5b2062170.1a10ccaad0e0003f66
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 17/17] util: fix annotation of __wcstok_r
Date: Mon,  5 Oct 2026 17:59:04 +0200
In-Reply-To: <1791201881.8631fc262581453bbf619ec5b2062170.1a10bf3abba0003f66@vates.tech>
References: <1791201881.8631fc262581453bbf619ec5b2062170.1a10bf3abba0003f66@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.668.6fdad69f04b31acb.1a10ccaab81.d02d3b23f7be7d3f=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791215971201
X-purgate-ID: tlsNG-d25034/1791215975-770D9A5B-D6D0D673/0/0
X-purgate-type: clean
X-purgate-size: 1105

---=Part.668.6fdad69f04b31acb.1a10ccaab81.d02d3b23f7be7d3f=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

__wcstok_r() indirectly write in Buffer
(*Context =3D Buffer, and later *Context =3D End) so it
should be annotated as _Inout_opt_=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xeniface/util=2Eh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/xeniface/util=2Eh b/src/xeniface/util=2Eh
index 77daa07=2E=2E79aee6d 100644
--- a/src/xeniface/util=2Eh
+++ b/src/xeniface/util=2Eh
@@ -317,7 +317,7 @@ __strtok_r(
=20
 static FORCEINLINE PWSTR
 __wcstok_r(
-    _In_opt_ PWSTR      Buffer,
+    _Inout_opt_ PWSTR   Buffer,
     _In_ PWSTR          Delimiter,
     _When_(Buffer !=3D NULL, _Outptr_)
     _When_(Buffer =3D=3D NULL, _Inout_)
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.668.6fdad69f04b31acb.1a10ccaab81.d02d3b23f7be7d3f=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 05 15:59:38 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 05 Oct 2026 15:59:38 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1440973.1658542 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDl6I-0007ir-Cd; Mon, 05 Oct 2026 15:59:38 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1440973.1658542; Mon, 05 Oct 2026 15:59:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDl6I-0007hm-1a; Mon, 05 Oct 2026 15:59:38 +0000
Received: by outflank-mailman (input) for mailman id 1440973;
 Mon, 05 Oct 2026 15:59:36 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10ccaabf90003f66@swg.vates.tech>)
 id 1xDl6G-0007d9-C4
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 15:59:36 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xDl6F-003JxR-PD
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 17:59:35 +0200
Received: from [10.42.69.10] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10ccaabf90003f66@swg.vates.tech>)
 id 6ac3c967-2eae-0a2a0a5409dd-0a2a450ad6b8-0
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 17:59:35 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-4011c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10ccaabf90003f66@swg.vates.tech>)
 id 6ac3c967-f2d2-0a2a450a0019-b9ff1c12afd9-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 17:59:35 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a10ccaabf90003f66.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 05 Oct 2026 15:59:31 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id C991A8236B;
 Mon,  5 Oct 2026 17:59:30 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=FnQxX1YpHyyhTwvfPJ5i3JGhU5gAD0/Nkng4ZwtYdD0=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=oxS/8/Qzk05yy21iMImHSqE2szZJawS4z9ckXPkWz1MA29J6ltkSZjY6U8mP1rbNttBQZQFz8
 D6M8RteOql6zyBp4T7l7MM2Gd5Xe/UUNRP384ThhdebCrFGqPCbg9QIs60YizynAM340x68mohl
 x32Hjp903bPFCvk9tHpjwHI5VANotey46WrJH4eDXtDG8G7Mc9SnPIB9+EcMQrSuYC9rsbeYJcy
 Pr639yjZ7Jgf+Fvhu9/zmlJLjDacUgo7ze5GituNouvOoF1TWIYxXDe5Z7CNsJaZadfNQVMCdbP
 PtXn7+PKVwBHjJGK5En7Hq1iirXw9TenUCxvOzIGZt/w==
X-Zone-Loop: 7d7fd05dfaf1e45eba7abb58a7b836e36ecc66f81acf
x-campaign-type: default
x-transaction-id: 7d25994b-6965-4deb-90d5-bb60783604bd
x-swg-uid: 01-22ab7b1b-a772-4967-a64e-f1973d63e289
X-Mailer: Sweego
Message-ID:
 <1791215971.8631fc262581453bbf619ec5b2062170.1a10ccaabf90003f66@vates.tech>
x-swg-bid: 1791215971.8631fc262581453bbf619ec5b2062170.1a10ccaabf90003f66
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 16/17] xeniface: route AccessWmiBuffer unknown-type exit through common path
Date: Mon,  5 Oct 2026 17:59:03 +0200
In-Reply-To: <1791201881.8631fc262581453bbf619ec5b2062170.1a10bf3abba0003f66@vates.tech>
References: <1791201881.8631fc262581453bbf619ec5b2062170.1a10bf3abba0003f66@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.667.cb8702effd2bb3ed.1a10ccaaa63.b2b6d3971248d02a=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791215970915
X-purgate-ID: tlsNG-4011c0/1791215975-52EDACFC-01277109/0/0
X-purgate-type: clean
X-purgate-size: 1261

---=Part.667.cb8702effd2bb3ed.1a10ccaaa63.b2b6d3971248d02a=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

The default case returned directly on an unknown WMI_TYPE, skipping
va_end and leaving RequiredSize at its initial value=2E

Assert on unknown types and jump to a common exit, so va_end is always
called and RequiredSize is always set=2E

Assisted-by: Claude/Opus-4
Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xeniface/wmi=2Ec | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/xeniface/wmi=2Ec b/src/xeniface/wmi=2Ec
index d8e1a73=2E=2E3392d3d 100644
--- a/src/xeniface/wmi=2Ec
+++ b/src/xeniface/wmi=2Ec
@@ -797,10 +797,12 @@ AccessWmiBuffer(
         } break;
=20
         default:
-            return FALSE;
+            overflow =3D TRUE;
+            goto done;
         }
     }
=20
+done:
     *RequiredSize =3D (ULONG)(position - Buffer);
     va_end(vl);
     if (overflow)
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.667.cb8702effd2bb3ed.1a10ccaaa63.b2b6d3971248d02a=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 05 16:03:41 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 05 Oct 2026 16:03:41 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1440997.1658583 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDlAD-00037o-Ko; Mon, 05 Oct 2026 16:03:41 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1440997.1658583; Mon, 05 Oct 2026 16:03:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDlAD-00037h-I4; Mon, 05 Oct 2026 16:03:41 +0000
Received: by outflank-mailman (input) for mailman id 1440997;
 Mon, 05 Oct 2026 16:03:40 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10cce72e00003f66@swg.vates.tech>)
 id 1xDlAC-00037b-Ap
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 16:03:40 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xDlAB-0031P3-Ns
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 18:03:39 +0200
Received: from [10.42.69.7] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10cce72e00003f66@swg.vates.tech>)
 id 6ac3ca50-8faa-0a2a0a5109dd-0a2a450790fc-36
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 18:03:39 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-ef75cf.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10cce72e00003f66@swg.vates.tech>)
 id 6ac3ca5b-b4ea-0a2a45070019-b9ff1c22828f-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 18:03:39 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a10cce72e00003f66.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 05 Oct 2026 16:03:38 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 2D2FE80034;
 Mon,  5 Oct 2026 18:03:38 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=n35HmR284ffFZagi0ZXUiduTVzwwOvkj95xyjuaPtak=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=URuJwmIyENB4AlClfyfuNeZyyhY2Yw1eLUyW0tLDgMzgPIrN93rk83I12rtHCFeDcWLcAUboi
 CO1c1LiLdmADgDlLjcuyRa4wlfBSvtadAr7kQ7wLsaxMllUJuPH2K13tEokhhK27ylXrbIxoOxo
 52TG9TTKKkJCdScN2dz6+8OqkINpy/wUDow8QMB+iH4/moW80Il/GB1jmjby0aqMgyFHy4hkVJd
 zPNvFWI5S2WsHOgPkYIAG79LLGduXUuW1clNNVA98F/cd401PH2T0XsIh9TAoX/u5fNty2Z6jPp
 34QdiKt+crcbdaeKh9bxuNdDTVXyEHiDObbILHZPFhEg==
X-Zone-Loop: 4da9d9622160a0e8795ec08caf44c90a2368f83bdbda
x-campaign-type: default
x-transaction-id: 4c7f7255-0b34-4ddb-89bf-142964069d97
x-swg-uid: 01-24f565b9-f422-4efb-a604-742958c7ed88
X-Mailer: Sweego
Message-ID:
 <1791216218.8631fc262581453bbf619ec5b2062170.1a10cce72e00003f66@vates.tech>
x-swg-bid: 1791216218.8631fc262581453bbf619ec5b2062170.1a10cce72e00003f66
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 1/6] xennet: sync common files with xeniface
Date: Mon,  5 Oct 2026 18:03:26 +0200
In-Reply-To: <1791215681.8631fc262581453bbf619ec5b2062170.1a10cc6405c0003f66@vates.tech>
References: <1791215681.8631fc262581453bbf619ec5b2062170.1a10cc6405c0003f66@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.66a.37348d63b206f122.1a10cce70b5.8d3880eede1d7f2d=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791216218293
X-purgate-ID: tlsNG-ef75cf/1791216219-A74D3AE4-FAC4598C/0/0
X-purgate-type: clean
X-purgate-size: 22472

---=Part.66a.37348d63b206f122.1a10cce70b5.8d3880eede1d7f2d=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Some files are used across many drivers, and they are already
converted to SAL 2=2E0 (in xenbus, xeniface and xenhid)=2E
We sync these files with xennet=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 include/store_interface=2Eh   | 84 +++++++++++++++++-----------------
 include/suspend_interface=2Eh | 24 +++++-----
 src/xennet/assert=2Eh         | 83 +++++++++++++++++-----------------
 src/xennet/dbg_print=2Eh      | 20 ++++-----
 src/xennet/util=2Eh           | 90 +++++++++++++++++++++----------------
 5 files changed, 158 insertions(+), 143 deletions(-)

diff --git a/include/store_interface=2Eh b/include/store_interface=2Eh
index ca883bd=2E=2E83a76a1 100644
--- a/include/store_interface=2Eh
+++ b/include/store_interface=2Eh
@@ -75,7 +75,7 @@ typedef struct _XENBUS_STORE_PERMISSION {
 */ =20
 typedef NTSTATUS
 (*XENBUS_STORE_ACQUIRE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_STORE_RELEASE
@@ -85,7 +85,7 @@ typedef NTSTATUS
 */ =20
 typedef VOID
 (*XENBUS_STORE_RELEASE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_STORE_FREE
@@ -96,8 +96,8 @@ typedef VOID
 */ =20
 typedef VOID
 (*XENBUS_STORE_FREE)(
-    IN  PINTERFACE  Interface,
-    IN  PCHAR       Buffer
+    _In_ PINTERFACE Interface,
+    _In_ PSTR       Buffer
     );
=20
 /*! \typedef XENBUS_STORE_READ
@@ -116,11 +116,11 @@ typedef VOID
 */ =20
 typedef NTSTATUS
 (*XENBUS_STORE_READ)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node,
-    OUT PCHAR                       *Buffer
+    _In_ PINTERFACE                     Interface,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PSTR                       Prefix,
+    _In_ PSTR                           Node,
+    _Outptr_ PCHAR                      *Buffer
     );
=20
 /*! \typedef XENBUS_STORE_PRINTF
@@ -139,11 +139,11 @@ typedef NTSTATUS
 */ =20
 typedef NTSTATUS
 (*XENBUS_STORE_PRINTF)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node,
-    IN  const CHAR                  *Format,
+    _In_ PINTERFACE                     Interface,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PSTR                       Prefix,
+    _In_ PSTR                           Node,
+    _In_ PCSTR                          Format,
     =2E=2E=2E
     );
=20
@@ -159,10 +159,10 @@ typedef NTSTATUS
 */ =20
 typedef NTSTATUS
 (*XENBUS_STORE_REMOVE)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node
+    _In_ PINTERFACE                     Interface,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PSTR                       Prefix,
+    _In_ PSTR                           Node
     );
=20
 /*! \typedef XENBUS_STORE_DIRECTORY
@@ -181,11 +181,11 @@ typedef NTSTATUS
 */ =20
 typedef NTSTATUS
 (*XENBUS_STORE_DIRECTORY)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node,
-    OUT PCHAR                       *Buffer
+    _In_ PINTERFACE                     Interface,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PSTR                       Prefix,
+    _In_ PSTR                           Node,
+    _Outptr_ PCHAR                      *Buffer
     );
=20
 /*! \typedef XENBUS_STORE_TRANSACTION_START
@@ -196,8 +196,8 @@ typedef NTSTATUS
 */ =20
 typedef NTSTATUS
 (*XENBUS_STORE_TRANSACTION_START)(
-    IN  PINTERFACE                  Interface,
-    OUT PXENBUS_STORE_TRANSACTION   *Transaction
+    _In_ PINTERFACE                     Interface,
+    _Outptr_ PXENBUS_STORE_TRANSACTION  *Transaction
     );
=20
 /*! \typedef XENBUS_STORE_TRANSACTION_END
@@ -213,9 +213,9 @@ typedef NTSTATUS
 */ =20
 typedef NTSTATUS
 (*XENBUS_STORE_TRANSACTION_END)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction,
-    IN  BOOLEAN                     Commit
+    _In_ PINTERFACE                 Interface,
+    _In_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_ BOOLEAN                    Commit
     );
=20
 /*! \typedef XENBUS_STORE_WATCH_ADD
@@ -231,11 +231,11 @@ typedef NTSTATUS
 */ =20
 typedef NTSTATUS
 (*XENBUS_STORE_WATCH_ADD)(
-    IN  PINTERFACE          Interface,
-    IN  PCHAR               Prefix OPTIONAL,
-    IN  PCHAR               Node,
-    IN  PKEVENT             Event,
-    OUT PXENBUS_STORE_WATCH *Watch
+    _In_ PINTERFACE                 Interface,
+    _In_opt_ PSTR                   Prefix,
+    _In_ PSTR                       Node,
+    _In_ PKEVENT                    Event,
+    _Outptr_ PXENBUS_STORE_WATCH    *Watch
     );
=20
 /*! \typedef XENBUS_STORE_WATCH_REMOVE
@@ -246,8 +246,8 @@ typedef NTSTATUS
 */ =20
 typedef NTSTATUS
 (*XENBUS_STORE_WATCH_REMOVE)(
-    IN  PINTERFACE          Interface,
-    IN  PXENBUS_STORE_WATCH Watch
+    _In_ PINTERFACE                 Interface,
+    _In_opt_ PXENBUS_STORE_WATCH    Watch
     );
=20
 /*! \typedef XENBUS_STORE_POLL
@@ -262,7 +262,7 @@ typedef NTSTATUS
 */ =20
 typedef VOID
 (*XENBUS_STORE_POLL)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_STORE_PERMISSIONS_SET
@@ -279,12 +279,12 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENBUS_STORE_PERMISSIONS_SET)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node,
-    IN  PXENBUS_STORE_PERMISSION    Permissions,
-    IN  ULONG                       NumberPermissions
+    _In_ PINTERFACE                     Interface,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PSTR                       Prefix,
+    _In_ PSTR                           Node,
+    _In_ PXENBUS_STORE_PERMISSION       Permissions,
+    _In_ ULONG                          NumberPermissions
     );
=20
 // {86824C3B-D34E-4753-B281-2F1E3AD214D7}
diff --git a/include/suspend_interface=2Eh b/include/suspend_interface=2Eh
index 4176dc3=2E=2E414bca5 100644
--- a/include/suspend_interface=2Eh
+++ b/include/suspend_interface=2Eh
@@ -62,7 +62,7 @@ typedef struct _XENBUS_SUSPEND_CALLBACK   XENBUS_SUSPEND=
_CALLBACK, *PXENBUS_SUSP
 */ =20
 typedef NTSTATUS
 (*XENBUS_SUSPEND_ACQUIRE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_SUSPEND_RELEASE
@@ -72,7 +72,7 @@ typedef NTSTATUS
 */ =20
 typedef VOID
 (*XENBUS_SUSPEND_RELEASE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_SUSPEND_FUNCTION
@@ -87,7 +87,7 @@ typedef VOID
 */ =20
 typedef VOID
 (*XENBUS_SUSPEND_FUNCTION)(
-    IN  PVOID   Argument
+    _In_ PVOID  Argument
     );
=20
 /*! \typedef XENBUS_SUSPEND_REGISTER
@@ -101,11 +101,11 @@ typedef VOID
 */ =20
 typedef NTSTATUS
 (*XENBUS_SUSPEND_REGISTER)(
-    IN  PINTERFACE                      Interface,
-    IN  XENBUS_SUSPEND_CALLBACK_TYPE    Type,
-    IN  XENBUS_SUSPEND_FUNCTION         Function,
-    IN  PVOID                           Argument OPTIONAL,
-    OUT PXENBUS_SUSPEND_CALLBACK        *Callback
+    _In_ PINTERFACE                     Interface,
+    _In_ XENBUS_SUSPEND_CALLBACK_TYPE   Type,
+    _In_ XENBUS_SUSPEND_FUNCTION        Function,
+    _In_opt_ PVOID                      Argument,
+    _Outptr_ PXENBUS_SUSPEND_CALLBACK   *Callback
     );
=20
 /*! \typedef XENBUS_SUSPEND_DEREGISTER
@@ -116,8 +116,8 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENBUS_SUSPEND_DEREGISTER)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_SUSPEND_CALLBACK    Callback
+    _In_ PINTERFACE                 Interface,
+    _In_ PXENBUS_SUSPEND_CALLBACK   Callback
     );
=20
 /*! \typedef XENBUS_SUSPEND_TRIGGER
@@ -129,7 +129,7 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENBUS_SUSPEND_TRIGGER)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_SUSPEND_GET_COUNT
@@ -140,7 +140,7 @@ typedef NTSTATUS
 */
 typedef ULONG
 (*XENBUS_SUSPEND_GET_COUNT)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 // {0554F2AF-B510-4C71-AC03-1C503E394238}
diff --git a/src/xennet/assert=2Eh b/src/xennet/assert=2Eh
index 53c8061=2E=2Ea2f407d 100644
--- a/src/xennet/assert=2Eh
+++ b/src/xennet/assert=2Eh
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -39,11 +39,11 @@
=20
 static FORCEINLINE VOID
 __Bug(
-    IN  ULONG       Code,
-    IN  ULONG_PTR   Parameter1,
-    IN  ULONG_PTR   Parameter2,
-    IN  ULONG_PTR   Parameter3,
-    IN  ULONG_PTR   Parameter4
+    _In_ ULONG      Code,
+    _In_ ULONG_PTR  Parameter1,
+    _In_ ULONG_PTR  Parameter2,
+    _In_ ULONG_PTR  Parameter3,
+    _In_ ULONG_PTR  Parameter4
     )
 {
 #pragma prefast(suppress:28159)
@@ -58,8 +58,8 @@ __Bug(
=20
 #define BUG(_TEXT)                                              \
         do {                                                    \
-            const CHAR  *_Text =3D (_TEXT);                       \
-            const CHAR  *_File =3D __FILE__;                      \
+            PCSTR       _Text =3D (_TEXT);                       \
+            PCSTR       _File =3D __FILE__;                      \
             ULONG       _Line =3D __LINE__;                       \
                                                                 \
             Error("BUG: " _TEXT "\n");                          \
@@ -89,7 +89,7 @@ __Bug(
 #define ASSERT(_EXP)                    \
         do {                            \
             __ASSERT(_EXP);             \
-            __analysis_assume(_EXP);    \
+            _Analysis_assume_(_EXP);    \
         } while (FALSE)
=20
 #define ASSERT3U(_X, _OP, _Y)                       \
@@ -132,7 +132,7 @@ __Bug(
=20
 #define ASSERT(_EXP)                    \
         do {                            \
-            __analysis_assume(_EXP);    \
+            _Analysis_assume_(_EXP);    \
         } while (FALSE)
=20
 #define ASSERT3U(_X, _OP, _Y)           \
@@ -154,10 +154,10 @@ __Bug(
=20
 static __inline BOOLEAN
 _IsZeroMemory(
-    IN  const PCHAR Caller,
-    IN  const PCHAR Name,
-    IN  PVOID       Buffer,
-    IN  ULONG       Length
+    _In_ PCSTR          Caller,
+    _In_ PCSTR          Name,
+    _In_ PVOID          Buffer,
+    _In_ ULONG          Length
     )
 {
     ULONG           Offset;
@@ -166,7 +166,7 @@ _IsZeroMemory(
     while (Offset < Length) {
         if (*((PUCHAR)Buffer + Offset) !=3D 0) {
             Error("%s: non-zero byte in %s (0x%p+0x%x)\n", Caller, Name, =
Buffer, Offset);
-            return FALSE;
+            return TRUE;
         }
         Offset++;
     }
@@ -178,10 +178,10 @@ _IsZeroMemory(
=20
 static __inline BOOLEAN
 _IsZeroMemory(
-    IN  const PCHAR Caller,
-    IN  const PCHAR Name,
-    IN  PVOID       Buffer,
-    IN  ULONG       Length
+    _In_ PCSTR          Caller,
+    _In_ PCSTR          Name,
+    _In_ PVOID          Buffer,
+    _In_ ULONG          Length
     )
 {
     UNREFERENCED_PARAMETER(Caller);
@@ -201,3 +201,4 @@ _IsZeroMemory(
 #define EQUIV(_X, _Y)   (IMPLY((_X), (_Y)) && IMPLY((_Y), (_X)))
=20
 #endif  // _XENNET_ASSERT_H
+   =20
\ No newline at end of file
diff --git a/src/xennet/dbg_print=2Eh b/src/xennet/dbg_print=2Eh
index ff24dc8=2E=2E0d1f8be 100644
--- a/src/xennet/dbg_print=2Eh
+++ b/src/xennet/dbg_print=2Eh
@@ -36,16 +36,16 @@
 #include <ntddk=2Eh>
 #include <stdarg=2Eh>
=20
+#pragma warning(disable:4127)   // conditional expression is constant
+
 #define stringify_literal(_text) #_text
 #define stringify(_text) stringify_literal(_text)
 #define __MODULE__ stringify(PROJECT)
=20
-#pragma warning(disable:4127)   // conditional expression is constant
-
 static __inline VOID
 __Error(
-    IN  const CHAR  *Prefix,
-    IN  const CHAR  *Format,
+    _In_ const CHAR *Prefix,
+    _In_ const CHAR *Format,
     =2E=2E=2E
     )
 {
@@ -67,8 +67,8 @@ __Error(
=20
 static __inline VOID
 __Warning(
-    IN  const CHAR  *Prefix,
-    IN  const CHAR  *Format,
+    _In_ const CHAR *Prefix,
+    _In_ const CHAR *Format,
     =2E=2E=2E
     )
 {
@@ -91,8 +91,8 @@ __Warning(
 #if DBG
 static __inline VOID
 __Trace(
-    IN  const CHAR  *Prefix,
-    IN  const CHAR  *Format,
+    _In_ const CHAR *Prefix,
+    _In_ const CHAR *Format,
     =2E=2E=2E
     )
 {
@@ -117,8 +117,8 @@ __Trace(
=20
 static __inline VOID
 __Info(
-    IN  const CHAR  *Prefix,
-    IN  const CHAR  *Format,
+    _In_ const CHAR *Prefix,
+    _In_ const CHAR *Format,
     =2E=2E=2E
     )
 {
diff --git a/src/xennet/util=2Eh b/src/xennet/util=2Eh
index d236c94=2E=2E597a2e1 100644
--- a/src/xennet/util=2Eh
+++ b/src/xennet/util=2Eh
@@ -38,12 +38,12 @@
=20
 #include "assert=2Eh"
=20
-#define	P2ROUNDUP(_x, _a)   \
-        (-(-(_x) & -(_a)))
+#define	P2ROUNDUP(_t, _x, _a)   \
+        (-(-((_t)(_x)) & -(((_t)(_a)))))
=20
 static FORCEINLINE LONG
 __ffs(
-    IN  unsigned long long  mask
+    _In_ unsigned long long mask
     )
 {
     unsigned char           *array =3D (unsigned char *)&mask;
@@ -82,11 +82,11 @@ __ffs(
=20
 static FORCEINLINE VOID
 __CpuId(
-    IN  ULONG   Leaf,
-    OUT PULONG  EAX OPTIONAL,
-    OUT PULONG  EBX OPTIONAL,
-    OUT PULONG  ECX OPTIONAL,
-    OUT PULONG  EDX OPTIONAL
+    _In_ ULONG          Leaf,
+    _Out_opt_ PULONG    EAX,
+    _Out_opt_ PULONG    EBX,
+    _Out_opt_ PULONG    ECX,
+    _Out_opt_ PULONG    EDX
     )
 {
     int         Value[4] =3D {0};
@@ -108,8 +108,8 @@ __CpuId(
=20
 static FORCEINLINE LONG
 __InterlockedAdd(
-    IN  LONG    *Value,
-    IN  LONG    Delta
+    _Inout_ LONG    *Value,
+    _In_ LONG       Delta
     )
 {
     LONG        New;
@@ -125,8 +125,8 @@ __InterlockedAdd(
=20
 static FORCEINLINE LONG
 __InterlockedSubtract(
-    IN  LONG    *Value,
-    IN  LONG    Delta
+    _Inout_ LONG    *Value,
+    _In_ LONG       Delta
     )
 {
     LONG        New;
@@ -140,23 +140,24 @@ __InterlockedSubtract(
     return New;
 }
=20
-__checkReturn
+_Check_return_
 static FORCEINLINE PVOID
 __AllocatePoolWithTag(
-    IN  POOL_TYPE   PoolType,
-    IN  SIZE_T      NumberOfBytes,
-    IN  ULONG       Tag
+    _In_ POOL_TYPE  PoolType,
+    _In_ SIZE_T     NumberOfBytes,
+    _In_ ULONG      Tag
     )
 {
     PUCHAR          Buffer;
=20
-    __analysis_assume(PoolType =3D=3D NonPagedPool ||
+    _Analysis_assume_(PoolType =3D=3D NonPagedPool ||
                       PoolType =3D=3D PagedPool);
=20
     if (NumberOfBytes =3D=3D 0)
         return NULL;
=20
 #if (_MSC_VER >=3D 1928) // VS 16=2E9 (EWDK 20344 or later)
+#pragma warning(suppress:28160) // annotation error
     Buffer =3D ExAllocatePoolUninitialized(PoolType, NumberOfBytes, Tag);
 #else
 #pragma warning(suppress:28160) // annotation error
@@ -171,8 +172,8 @@ __AllocatePoolWithTag(
=20
 static FORCEINLINE VOID
 __FreePoolWithTag(
-    IN  PVOID   Buffer,
-    IN  ULONG   Tag
+    _In_ PVOID  Buffer,
+    _In_ ULONG  Tag
     )
 {
     ExFreePoolWithTag(Buffer, Tag);
@@ -180,28 +181,37 @@ __FreePoolWithTag(
=20
 static FORCEINLINE PMDL
 __AllocatePages(
-    IN  ULONG           Count
+    _In_ ULONG          Count,
+    _In_ BOOLEAN        Contiguous
     )
 {
     PHYSICAL_ADDRESS    LowAddress;
     PHYSICAL_ADDRESS    HighAddress;
     LARGE_INTEGER       SkipBytes;
     SIZE_T              TotalBytes;
+    ULONG               Flags;
     PMDL                Mdl;
     PUCHAR              MdlMappedSystemVa;
     NTSTATUS            status;
=20
     LowAddress=2EQuadPart =3D 0ull;
     HighAddress=2EQuadPart =3D ~0ull;
-    SkipBytes=2EQuadPart =3D 0ull;
     TotalBytes =3D (SIZE_T)PAGE_SIZE * Count;
=20
+    if (Contiguous) {
+        SkipBytes=2EQuadPart =3D TotalBytes;
+        Flags =3D MM_ALLOCATE_REQUIRE_CONTIGUOUS_CHUNKS;
+    } else {
+        SkipBytes=2EQuadPart =3D 0ull;
+        Flags =3D MM_ALLOCATE_FULLY_REQUIRED;
+    }
+
     Mdl =3D MmAllocatePagesForMdlEx(LowAddress,
                                   HighAddress,
                                   SkipBytes,
                                   TotalBytes,
                                   MmCached,
-                                  MM_ALLOCATE_FULLY_REQUIRED);
+                                  Flags);
=20
     status =3D STATUS_NO_MEMORY;
     if (Mdl =3D=3D NULL)
@@ -245,11 +255,11 @@ fail1:
     return NULL;
 }
=20
-#define __AllocatePage()    __AllocatePages(1)
+#define __AllocatePage()    __AllocatePages(1, FALSE)
=20
 static FORCEINLINE VOID
 __FreePages(
-    IN	PMDL	Mdl
+    _In_ PMDL   Mdl
     )
 {
     PUCHAR	MdlMappedSystemVa;
@@ -265,15 +275,17 @@ __FreePages(
=20
 #define __FreePage(_Mdl)    __FreePages(_Mdl)
=20
-static FORCEINLINE PCHAR
+static FORCEINLINE PSTR
 __strtok_r(
-    IN      PCHAR   Buffer,
-    IN      PCHAR   Delimiter,
-    IN OUT  PCHAR   *Context
+    _Inout_opt_ PSTR    Buffer,
+    _In_ PSTR           Delimiter,
+    _When_(Buffer !=3D NULL, _Outptr_)
+    _When_(Buffer =3D=3D NULL, _Inout_)
+    PSTR                *Context
     )
 {
-    PCHAR           Token;
-    PCHAR           End;
+    PSTR                Token;
+    PSTR                End;
=20
     if (Buffer !=3D NULL)
         *Context =3D Buffer;
@@ -303,15 +315,17 @@ __strtok_r(
     return Token;
 }
=20
-static FORCEINLINE PWCHAR
+static FORCEINLINE PWSTR
 __wcstok_r(
-    IN      PWCHAR  Buffer,
-    IN      PWCHAR  Delimiter,
-    IN OUT  PWCHAR  *Context
+    _Inout_opt_ PWSTR   Buffer,
+    _In_ PWSTR          Delimiter,
+    _When_(Buffer !=3D NULL, _Outptr_)
+    _When_(Buffer =3D=3D NULL, _Inout_)
+    PWSTR               *Context
     )
 {
-    PWCHAR          Token;
-    PWCHAR          End;
+    PWSTR               Token;
+    PWSTR               End;
=20
     if (Buffer !=3D NULL)
         *Context =3D Buffer;
@@ -343,7 +357,7 @@ __wcstok_r(
=20
 static FORCEINLINE CHAR
 __toupper(
-    IN  CHAR    Character
+    _In_ CHAR   Character
     )
 {
     if (Character < 'a' || Character > 'z')
@@ -354,7 +368,7 @@ __toupper(
=20
 static FORCEINLINE CHAR
 __tolower(
-    IN  CHAR    Character
+    _In_ CHAR   Character
     )
 {
     if (Character < 'A' || Character > 'Z')
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.66a.37348d63b206f122.1a10cce70b5.8d3880eede1d7f2d=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 05 16:03:45 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 05 Oct 2026 16:03:45 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1440998.1658587 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDlAH-00039k-N0; Mon, 05 Oct 2026 16:03:45 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1440998.1658587; Mon, 05 Oct 2026 16:03:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDlAH-00039d-K0; Mon, 05 Oct 2026 16:03:45 +0000
Received: by outflank-mailman (input) for mailman id 1440998;
 Mon, 05 Oct 2026 16:03:45 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10cce74f60003f66@swg.vates.tech>)
 id 1xDlAH-00039N-0M
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 16:03:45 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xDlAG-0031P3-DO
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 18:03:44 +0200
Received: from [10.42.69.7] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10cce74f60003f66@swg.vates.tech>)
 id 6ac3ca50-8faa-0a2a0a5109dd-0a2a450790fc-42
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 18:03:44 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-ef75cf.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10cce74f60003f66@swg.vates.tech>)
 id 6ac3ca5b-b4ea-0a2a45070019-b9ff1c22828f-4
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 18:03:44 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a10cce74f60003f66.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 05 Oct 2026 16:03:39 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id DACE48231E;
 Mon,  5 Oct 2026 18:03:38 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=RslkRB7oWbhZ/H3CiLWhMg+uGEjtiWerzCjP9pbSRzA=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=bn7HZKGwdQFMfDZRk8GqTJHdPIeDtNhXr+5HJxqBbneHgQOu9BjRwBnVtTsDxhT8ozj3adK04
 1KzqWRrNuIKSSxESQs343WgHVAtvnstEDzTUYRZG0GaEDZGxSRrqIpS5oEOIXbUwjvHmQBys/xF
 eceDCaINSpx+2ovqs040B41NduVMu6P7fCwuQEmmqSpi/zsMVTWaS35aKUeSeU5I/VxKEEjVA+0
 0eY96caSqPky4vreBMstyPv1GW/qSaJAXUizw05kLkYG2DvTkOKZccQLUeg0nbHHF2OXkIfxo85
 7mCS9TbWLEqL6bn4c0JD4yyQhokGHV4i5CP/fX+NwwTA==
X-Zone-Loop: 3ad166ab2d46f0c1549337340268b4c2437fa0d852ab
x-campaign-type: default
x-transaction-id: 9e88ee6d-98d2-47bf-8b7a-b23543a90ef5
x-swg-uid: 01-731f91f4-81c1-4ff2-ac4f-5ff0137f1bfc
X-Mailer: Sweego
Message-ID:
 <1791216219.8631fc262581453bbf619ec5b2062170.1a10cce74f60003f66@vates.tech>
x-swg-bid: 1791216219.8631fc262581453bbf619ec5b2062170.1a10cce74f60003f66
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 3/6] xennet: fix IN annotations
Date: Mon,  5 Oct 2026 18:03:28 +0200
In-Reply-To: <1791215681.8631fc262581453bbf619ec5b2062170.1a10cc6405c0003f66@vates.tech>
References: <1791215681.8631fc262581453bbf619ec5b2062170.1a10cc6405c0003f66@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.66c.30558f650a4d5c86.1a10cce7365.a426dc2aa191871c=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791216218982
X-purgate-ID: tlsNG-ef75cf/1791216224-34AC8AE4-8BDA12E6/0/0
X-purgate-type: clean
X-purgate-size: 2000

---=Part.66c.30558f650a4d5c86.1a10cce7365.a426dc2aa191871c=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

* string=2Ec: FormatNumber only writes to Buffer, so it should be
annotated as _Out_

* adapter=2Ec: __AdapterMultiSzToUpcaseAnsi reads and writes to Buffer par=
am
so it should be annotated as _Inout_

* adapter=2Ec: __AdapterMatchDistribution calls util=2Ec::__strtork_r(buff=
er, =2E=2E=2E)
that is annotated as (_Inout_opt_, _In_, _Inout_) so buffer paramater shou=
ld
be annotated as _Inout_opt_=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xennet/adapter=2Ec | 4 ++--
 src/xennet/string=2Ec  | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/xennet/adapter=2Ec b/src/xennet/adapter=2Ec
index ba7fd2a=2E=2E9fd93d3 100644
--- a/src/xennet/adapter=2Ec
+++ b/src/xennet/adapter=2Ec
@@ -1542,7 +1542,7 @@ __AdapterFree(
=20
 static FORCEINLINE PANSI_STRING
 __AdapterMultiSzToUpcaseAnsi(
-    _In_ PCHAR      Buffer
+    _Inout_ PCHAR   Buffer
     )
 {
     PANSI_STRING    Ansi;
@@ -1621,7 +1621,7 @@ __AdapterFreeAnsi(
 static FORCEINLINE BOOLEAN
 __AdapterMatchDistribution(
     _In_ PXENNET_ADAPTER    Adapter,
-    _In_ PCHAR              Buffer
+    _Inout_opt_ PCHAR       Buffer
     )
 {
     PCHAR                   Vendor;
diff --git a/src/xennet/string=2Ec b/src/xennet/string=2Ec
index b75e249=2E=2Ea740951 100644
--- a/src/xennet/string=2Ec
+++ b/src/xennet/string=2Ec
@@ -53,7 +53,7 @@ __StringPut(
=20
 static PCHAR
 FormatNumber(
-    _In_ PCHAR      Buffer,
+    _Out_ PCHAR     Buffer,
     _In_ ULONGLONG  Value,
     _In_ UCHAR      Base,
     _In_ BOOLEAN    UpperCase
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.66c.30558f650a4d5c86.1a10cce7365.a426dc2aa191871c=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 05 16:03:46 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 05 Oct 2026 16:03:46 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1440999.1658591 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDlAI-0003C5-QG; Mon, 05 Oct 2026 16:03:46 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1440999.1658591; Mon, 05 Oct 2026 16:03:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDlAI-0003Bx-NF; Mon, 05 Oct 2026 16:03:46 +0000
Received: by outflank-mailman (input) for mailman id 1440999;
 Mon, 05 Oct 2026 16:03:45 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10cce75dd0003f66@swg.vates.tech>)
 id 1xDlAH-00039X-Gu
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 16:03:45 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xDlAG-00D3QI-To
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 18:03:44 +0200
Received: from [10.42.69.4] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10cce75dd0003f66@swg.vates.tech>)
 id 6ac3ca51-2eae-0a2a0a5409dd-0a2a4504c7b2-38
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 18:03:44 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-ebf023.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10cce75dd0003f66@swg.vates.tech>)
 id 6ac3ca60-b57f-0a2a45040019-b9ff1c23a1d7-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 18:03:44 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a10cce75dd0003f66.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 05 Oct 2026 16:03:39 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 1ED0782361;
 Mon,  5 Oct 2026 18:03:39 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=qpcWtHeSYOsPrv59J2sVNyMpVz6C9d64zyjf5/gZp1s=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=CUvL8EguBEjX3QxwcxeEyqkA1W3IXjh88Yp+NZbUCYIHYtm2uV+TfIGtVXShtVmcIa8sivnIO
 wtLNJR7LzNUf9SlV18WnWgFWqGbGLS9sy2zHu2wBVD9ZHDbNkUXHG0r9EHPhC62nCiKbse2Z/D1
 tQGfk2z3Pvq4Yla5E+ykOcm0naQl7ge/4twz5R8+9j7UzmMRiAMDd4ZTfI4LmjSA53xBg/BFePp
 4XLL/iUV/1DuCG76/93g3UnSp0N9rTu+lBDe3+6eb7EWhkQT5xGrWRtu3AKAkV/rdoJWfQ6IkYD
 /jImCLd3KJkDpdsd8SWvIhMyWrfkzvbpqPcmCUYgSxjw==
X-Zone-Loop: b2b1179e9c83b31c17ce2f80e79594f8aed86ed71406
x-campaign-type: default
x-transaction-id: 13bad0da-cc1e-4222-8470-8ccc6be6a4a9
x-swg-uid: 01-11791449-198c-44d4-a9fd-8d1870d92707
X-Mailer: Sweego
Message-ID:
 <1791216219.8631fc262581453bbf619ec5b2062170.1a10cce75dd0003f66@vates.tech>
x-swg-bid: 1791216219.8631fc262581453bbf619ec5b2062170.1a10cce75dd0003f66
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 4/6] xennet: use correct string annotations
Date: Mon,  5 Oct 2026 18:03:29 +0200
In-Reply-To: <1791215681.8631fc262581453bbf619ec5b2062170.1a10cc6405c0003f66@vates.tech>
References: <1791215681.8631fc262581453bbf619ec5b2062170.1a10cc6405c0003f66@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.66d.352f55040f825f69.1a10cce743d.1f74fb652952a57b=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791216219197
X-purgate-ID: tlsNG-ebf023/1791216224-514D3B50-B6C97BB6/0/0
X-purgate-type: clean
X-purgate-size: 4286

---=Part.66d.352f55040f825f69.1a10cce743d.1f74fb652952a57b=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

STR types come built-in with recommended annotations for manipulating
strings=2E
CHAR*/WCHAR* and variants should be converted to STR=2E

Types:
  const CHAR */CHAR *  -> PCSTR/PSTR
  const WCHAR */WCHAR* -> PCWSTR
  const PCHAR          -> PCSTR
  PCHAR                -> PSTR

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xennet/adapter=2Ec   |  6 +++---
 src/xennet/dbg_print=2Eh | 16 ++++++++--------
 src/xennet/string=2Ec    |  8 ++++----
 src/xennet/string=2Eh    |  4 ++--
 4 files changed, 17 insertions(+), 17 deletions(-)

diff --git a/src/xennet/adapter=2Ec b/src/xennet/adapter=2Ec
index 9fd93d3=2E=2Ef1414fc 100644
--- a/src/xennet/adapter=2Ec
+++ b/src/xennet/adapter=2Ec
@@ -239,7 +239,7 @@ AdapterVifCallback(
=20
 static VOID
 DisplayOffload(
-    _In_ const CHAR     *Type,
+    _In_ PCSTR          Type,
     _In_ PNDIS_OFFLOAD  Offload
     )
 {
@@ -1542,7 +1542,7 @@ __AdapterFree(
=20
 static FORCEINLINE PANSI_STRING
 __AdapterMultiSzToUpcaseAnsi(
-    _Inout_ PCHAR   Buffer
+    _Inout_ PSTR    Buffer
     )
 {
     PANSI_STRING    Ansi;
@@ -1621,7 +1621,7 @@ __AdapterFreeAnsi(
 static FORCEINLINE BOOLEAN
 __AdapterMatchDistribution(
     _In_ PXENNET_ADAPTER    Adapter,
-    _Inout_opt_ PCHAR       Buffer
+    _Inout_opt_ PSTR        Buffer
     )
 {
     PCHAR                   Vendor;
diff --git a/src/xennet/dbg_print=2Eh b/src/xennet/dbg_print=2Eh
index 0d1f8be=2E=2E9c2acdf 100644
--- a/src/xennet/dbg_print=2Eh
+++ b/src/xennet/dbg_print=2Eh
@@ -44,8 +44,8 @@
=20
 static __inline VOID
 __Error(
-    _In_ const CHAR *Prefix,
-    _In_ const CHAR *Format,
+    _In_ PCSTR      Prefix,
+    _In_ PCSTR      Format,
     =2E=2E=2E
     )
 {
@@ -67,8 +67,8 @@ __Error(
=20
 static __inline VOID
 __Warning(
-    _In_ const CHAR *Prefix,
-    _In_ const CHAR *Format,
+    _In_ PCSTR      Prefix,
+    _In_ PCSTR      Format,
     =2E=2E=2E
     )
 {
@@ -91,8 +91,8 @@ __Warning(
 #if DBG
 static __inline VOID
 __Trace(
-    _In_ const CHAR *Prefix,
-    _In_ const CHAR *Format,
+    _In_ PCSTR      Prefix,
+    _In_ PCSTR      Format,
     =2E=2E=2E
     )
 {
@@ -117,8 +117,8 @@ __Trace(
=20
 static __inline VOID
 __Info(
-    _In_ const CHAR *Prefix,
-    _In_ const CHAR *Format,
+    _In_ PCSTR      Prefix,
+    _In_ PCSTR      Format,
     =2E=2E=2E
     )
 {
diff --git a/src/xennet/string=2Ec b/src/xennet/string=2Ec
index a740951=2E=2E5b84568 100644
--- a/src/xennet/string=2Ec
+++ b/src/xennet/string=2Ec
@@ -53,7 +53,7 @@ __StringPut(
=20
 static PCHAR
 FormatNumber(
-    _Out_ PCHAR     Buffer,
+    _Out_ PSTR      Buffer,
     _In_ ULONGLONG  Value,
     _In_ UCHAR      Base,
     _In_ BOOLEAN    UpperCase
@@ -114,7 +114,7 @@ FormatNumber(
 static NTSTATUS
 StringWriteBuffer(
     _In_ PSTRING        String,
-    _In_ const CHAR     *Format,
+    _In_ PCSTR          Format,
     _In_ va_list        Arguments
     )
 {
@@ -420,7 +420,7 @@ done:
 NTSTATUS
 StringVPrintf(
     _In_ PSTRING    String,
-    _In_ const CHAR *Format,
+    _In_ PCSTR      Format,
     _In_ va_list    Arguments
     )
 {
@@ -453,7 +453,7 @@ fail1:
 NTSTATUS
 StringPrintf(
     _In_ PSTRING    String,
-    _In_ const CHAR *Format,
+    _In_ PCSTR      Format,
     =2E=2E=2E
     )
 {
diff --git a/src/xennet/string=2Eh b/src/xennet/string=2Eh
index 295617c=2E=2Ed69dfb3 100644
--- a/src/xennet/string=2Eh
+++ b/src/xennet/string=2Eh
@@ -38,14 +38,14 @@
 extern NTSTATUS
 StringVPrintf(
     _In_ PSTRING    String,
-    _In_ const CHAR *Format,
+    _In_ PCSTR      Format,
     _In_ va_list    Arguments
     );
=20
 extern NTSTATUS
 StringPrintf(
     _In_ PSTRING    String,
-    _In_ const CHAR *Format,
+    _In_ PCSTR      Format,
     =2E=2E=2E
     );
=20
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.66d.352f55040f825f69.1a10cce743d.1f74fb652952a57b=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 05 16:03:48 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 05 Oct 2026 16:03:48 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1441000.1658595 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDlAK-0003ET-Se; Mon, 05 Oct 2026 16:03:48 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1441000.1658595; Mon, 05 Oct 2026 16:03:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDlAK-0003EI-PG; Mon, 05 Oct 2026 16:03:48 +0000
Received: by outflank-mailman (input) for mailman id 1441000;
 Mon, 05 Oct 2026 16:03:45 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10cce74110003f66@swg.vates.tech>)
 id 1xDlAH-00039Y-HW
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 16:03:45 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xDlAG-0031P3-UL
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 18:03:44 +0200
Received: from [10.42.69.3] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10cce74110003f66@swg.vates.tech>)
 id 6ac3ca57-8faa-0a2a0a5109dd-0a2a45039b18-18
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 18:03:44 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-33051d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10cce74110003f66@swg.vates.tech>)
 id 6ac3ca60-fae8-0a2a45030019-b9ff1c23b0af-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 18:03:44 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a10cce74110003f66.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 05 Oct 2026 16:03:39 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 91C97822C6;
 Mon,  5 Oct 2026 18:03:38 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=/fnBva7Ucct7pkVAeyDEsPmi5fPW88aFRL3WpQS0VM4=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=EHIfFfjC8PigeGFqX5dUshmYi4leIgtjSqOSUoJVS7uHolT+MO6plL95RXjSjcs0SJA7ue/8S
 PR1Ia3S5zyn+6EUy39f0BakxejVLykMXQsGQpi9nGQz5DghvbFM0UarhOespFhuBcLHPxGDAphu
 73IZX6VuRi8iwYcdMisRNzVyGE2r40jPupOYANhbJH07lA05IothDSTgZYKC3G5JGLkNBewzNQL
 /ybh5A/1skBqA0P+jNQv1FV7oDP9iRZYUG5AvuMqNNGoFgiDal8HTSN3ZuTE3PinVHleU58dVLf
 pHO2o2V8rJD8hp/5nC1YGAfmVDnAItvnIkq7FMmvXcTw==
X-Zone-Loop: 742aa0c790ffdd92df5e43b67b9e4435ec818eab66dc
x-campaign-type: default
x-transaction-id: f8a324bb-1e54-4f65-89e0-1d4e44a1d233
x-swg-uid: 01-6f325c6c-b5a0-49cd-9e64-b12aa457713c
X-Mailer: Sweego
Message-ID:
 <1791216219.8631fc262581453bbf619ec5b2062170.1a10cce74110003f66@vates.tech>
x-swg-bid: 1791216219.8631fc262581453bbf619ec5b2062170.1a10cce74110003f66
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 2/6] xennet: convert old annotations to SAL 2.0: Mechanical pass
Date: Mon,  5 Oct 2026 18:03:27 +0200
In-Reply-To: <1791215681.8631fc262581453bbf619ec5b2062170.1a10cc6405c0003f66@vates.tech>
References: <1791215681.8631fc262581453bbf619ec5b2062170.1a10cc6405c0003f66@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.66b.c9e17cafd6760207.1a10cce729c.db9a895da82c41a7=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791216218780
X-purgate-ID: tlsNG-33051d/1791216224-75683749-190E67D0/0/0
X-purgate-type: clean
X-purgate-size: 68987

---=Part.66b.c9e17cafd6760207.1a10cce729c.db9a895da82c41a7=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Convert to SAL 2=2E0 annotations

Mechanical pass, no functional change=2E

Annotations:
  IN/OUT/IN OUT        -> _In_/_Out_/_Inout_
  __in/__out/__inout   -> same, _opt_ variants preserved
  trailing OPTIONAL    -> folded into the annotation (_In_opt_ &c)
  _Out_ on a T **      -> _Outptr_
  __drv_*/__checkReturn-> _IRQL_requires_*/_Dispatch_type_/_Check_return_

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 include/vif_interface=2Eh  | 158 +++++++++----------
 src/xennet/adapter=2Ec     | 332 +++++++++++++++++++--------------------
 src/xennet/adapter=2Eh     |  32 ++--
 src/xennet/assert=2Eh      |  16 +-
 src/xennet/driver=2Ec      |  20 +--
 src/xennet/driver=2Eh      |   2 +-
 src/xennet/miniport=2Ec    |  66 ++++----
 src/xennet/miniport=2Eh    |   6 +-
 src/xennet/receiver=2Ec    | 110 ++++++-------
 src/xennet/receiver=2Eh    |  44 +++---
 src/xennet/string=2Ec      |  28 ++--
 src/xennet/string=2Eh      |  10 +-
 src/xennet/transmitter=2Ec |  60 +++----
 src/xennet/transmitter=2Eh |  22 +--
 src/xennet/util=2Eh        |  12 +-
 15 files changed, 459 insertions(+), 459 deletions(-)

diff --git a/include/vif_interface=2Eh b/include/vif_interface=2Eh
index a63abba=2E=2E05d472e 100644
--- a/include/vif_interface=2Eh
+++ b/include/vif_interface=2Eh
@@ -461,7 +461,7 @@ union _XENVIF_VIF_CALLBACK_PARAMETERS_V10 {
 */ =20
 typedef NTSTATUS
 (*XENVIF_VIF_ACQUIRE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENVIF_VIF_RELEASE
@@ -471,21 +471,21 @@ typedef NTSTATUS
 */ =20
 typedef VOID
 (*XENVIF_VIF_RELEASE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 typedef VOID
 (*XENVIF_VIF_CALLBACK_V8)(
-    IN  PVOID                       Argument OPTIONAL,
-    IN  XENVIF_VIF_CALLBACK_TYPE    Type,
+    _In_opt_ PVOID                  Argument,
+    _In_ XENVIF_VIF_CALLBACK_TYPE   Type,
     =2E=2E=2E
     );
=20
 typedef VOID
 (*XENVIF_VIF_CALLBACK_V9)(
-    IN  PVOID                                       Argument OPTIONAL,
-    IN  XENVIF_VIF_CALLBACK_TYPE                    Type,
-    IN  union _XENVIF_VIF_CALLBACK_PARAMETERS_V9   *Parameters
+    _In_opt_ PVOID                                  Argument,
+    _In_ XENVIF_VIF_CALLBACK_TYPE                   Type,
+    _In_ union _XENVIF_VIF_CALLBACK_PARAMETERS_V9   *Parameters
     );
=20
 typedef union _XENVIF_VIF_CALLBACK_PARAMETERS_V10 XENVIF_VIF_CALLBACK_PAR=
AMETERS, *PXENVIF_VIF_CALLBACK_PARAMETERS;
@@ -499,23 +499,23 @@ typedef union _XENVIF_VIF_CALLBACK_PARAMETERS_V10 XE=
NVIF_VIF_CALLBACK_PARAMETERS
 */
 typedef VOID
 (*XENVIF_VIF_CALLBACK)(
-    IN  PVOID                           Argument OPTIONAL,
-    IN  XENVIF_VIF_CALLBACK_TYPE        Type,
-    IN  PXENVIF_VIF_CALLBACK_PARAMETERS Parameters
+    _In_opt_ PVOID                          Argument,
+    _In_ XENVIF_VIF_CALLBACK_TYPE           Type,
+    _In_ PXENVIF_VIF_CALLBACK_PARAMETERS    Parameters
     );
=20
 typedef NTSTATUS
 (*XENVIF_VIF_ENABLE_V8)(
-    IN  PINTERFACE              Interface,
-    IN  XENVIF_VIF_CALLBACK_V8  Callback,
-    IN  PVOID                   Argument OPTIONAL
+    _In_ PINTERFACE             Interface,
+    _In_ XENVIF_VIF_CALLBACK_V8 Callback,
+    _In_opt_ PVOID              Argument
     );
=20
 typedef NTSTATUS
 (*XENVIF_VIF_ENABLE_V9)(
-    IN  PINTERFACE              Interface,
-    IN  XENVIF_VIF_CALLBACK_V9  Callback,
-    IN  PVOID                   Argument OPTIONAL
+    _In_ PINTERFACE             Interface,
+    _In_ XENVIF_VIF_CALLBACK_V9 Callback,
+    _In_opt_ PVOID              Argument
     );
=20
 /*! \typedef XENVIF_VIF_ENABLE
@@ -530,9 +530,9 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENVIF_VIF_ENABLE)(
-    IN  PINTERFACE          Interface,
-    IN  XENVIF_VIF_CALLBACK Callback,
-    IN  PVOID               Argument OPTIONAL
+    _In_ PINTERFACE             Interface,
+    _In_ XENVIF_VIF_CALLBACK    Callback,
+    _In_opt_ PVOID              Argument
     );
=20
 /*! \typedef XENVIF_VIF_DISABLE
@@ -545,7 +545,7 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENVIF_VIF_DISABLE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENVIF_VIF_QUERY_STATISTIC
@@ -562,9 +562,9 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENVIF_VIF_QUERY_STATISTIC)(
-    IN  PINTERFACE              Interface,
-    IN  XENVIF_VIF_STATISTIC    Index,
-    OUT PULONGLONG              Value
+    _In_ PINTERFACE             Interface,
+    _In_ XENVIF_VIF_STATISTIC   Index,
+    _Out_ PULONGLONG            Value
     );
=20
 /*! \typedef XENVIF_VIF_QUERY_RING_COUNT
@@ -576,8 +576,8 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENVIF_VIF_QUERY_RING_COUNT)(
-    IN  PINTERFACE  Interface,
-    OUT PULONG      Count
+    _In_ PINTERFACE Interface,
+    _Out_ PULONG    Count
     );
=20
 /*! \typedef XENVIF_VIF_UPDATE_HASH_MAPPING
@@ -591,9 +591,9 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENVIF_VIF_UPDATE_HASH_MAPPING)(
-    IN  PINTERFACE          Interface,
-    IN  PPROCESSOR_NUMBER   Mapping,
-    IN  ULONG               Size
+    _In_ PINTERFACE         Interface,
+    _In_ PPROCESSOR_NUMBER  Mapping,
+    _In_ ULONG              Size
     );
=20
 /*! \typedef XENVIF_VIF_RECEIVER_RETURN_PACKET
@@ -605,8 +605,8 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENVIF_VIF_RECEIVER_RETURN_PACKET)(
-    IN  PINTERFACE  Interface,
-    IN  PVOID       Cookie
+    _In_ PINTERFACE Interface,
+    _In_ PVOID      Cookie
     );
=20
 /*! \typedef XENVIF_VIF_TRANSMITTER_QUEUE_PACKET
@@ -625,16 +625,16 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENVIF_VIF_TRANSMITTER_QUEUE_PACKET)(
-    IN  PINTERFACE                  Interface,
-    IN  PMDL                        Mdl,
-    IN  ULONG                       Offset,
-    IN  ULONG                       Length,
-    IN  XENVIF_VIF_OFFLOAD_OPTIONS  OffloadOptions,
-    IN  USHORT                      MaximumSegmentSize,
-    IN  USHORT                      TagControlInformation,
-    IN  PXENVIF_PACKET_HASH         Hash,
-    IN  BOOLEAN                     More,
-    IN  PVOID                       Cookie
+    _In_ PINTERFACE                 Interface,
+    _In_ PMDL                       Mdl,
+    _In_ ULONG                      Offset,
+    _In_ ULONG                      Length,
+    _In_ XENVIF_VIF_OFFLOAD_OPTIONS OffloadOptions,
+    _In_ USHORT                     MaximumSegmentSize,
+    _In_ USHORT                     TagControlInformation,
+    _In_ PXENVIF_PACKET_HASH        Hash,
+    _In_ BOOLEAN                    More,
+    _In_ PVOID                      Cookie
     );
=20
 /*! \typedef XENVIF_VIF_TRANSMITTER_QUERY_OFFLOAD_OPTIONS
@@ -646,8 +646,8 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENVIF_VIF_TRANSMITTER_QUERY_OFFLOAD_OPTIONS)(
-    IN  PINTERFACE                  Interface,
-    OUT PXENVIF_VIF_OFFLOAD_OPTIONS Options
+    _In_ PINTERFACE                     Interface,
+    _Out_ PXENVIF_VIF_OFFLOAD_OPTIONS   Options
     );
=20
 /*! \typedef XENVIF_VIF_RECEIVER_SET_OFFLOAD_OPTIONS
@@ -659,8 +659,8 @@ typedef VOID
 */
 typedef VOID
 (*XENVIF_VIF_RECEIVER_SET_OFFLOAD_OPTIONS)(
-    IN  PINTERFACE                  Interface,
-    IN  XENVIF_VIF_OFFLOAD_OPTIONS  Options
+    _In_ PINTERFACE                 Interface,
+    _In_ XENVIF_VIF_OFFLOAD_OPTIONS Options
     );
=20
 /*! \typedef XENVIF_VIF_RECEIVER_SET_BACKFILL_SIZE
@@ -672,8 +672,8 @@ typedef VOID
 */
 typedef VOID
 (*XENVIF_VIF_RECEIVER_SET_BACKFILL_SIZE)(
-    IN  PINTERFACE  Interface,
-    IN  ULONG       Size
+    _In_ PINTERFACE Interface,
+    _In_ ULONG      Size
     );
=20
 /*! \typedef XENVIF_VIF_TRANSMITTER_QUERY_LARGE_PACKET_SIZE
@@ -686,9 +686,9 @@ typedef VOID
 */=20
 typedef VOID
 (*XENVIF_VIF_TRANSMITTER_QUERY_LARGE_PACKET_SIZE)(
-    IN  PINTERFACE  Interface,
-    IN  UCHAR       Version,
-    OUT PULONG      Size
+    _In_ PINTERFACE Interface,
+    _In_ UCHAR      Version,
+    _Out_ PULONG    Size
     );
=20
 /*! \typedef XENVIF_VIF_TRANSMITTER_QUERY_RING_SIZE
@@ -700,8 +700,8 @@ typedef VOID
 */
 typedef VOID
 (*XENVIF_VIF_TRANSMITTER_QUERY_RING_SIZE)(
-    IN  PINTERFACE  Interface,
-    OUT PULONG      Size
+    _In_ PINTERFACE Interface,
+    _Out_ PULONG    Size
     );
=20
 /*! \typedef XENVIF_VIF_RECEIVER_QUERY_RING_SIZE
@@ -713,8 +713,8 @@ typedef VOID
 */
 typedef VOID
 (*XENVIF_VIF_RECEIVER_QUERY_RING_SIZE)(
-    IN  PINTERFACE  Interface,
-    OUT PULONG      Size
+    _In_ PINTERFACE Interface,
+    _Out_ PULONG    Size
     );
=20
 /*! \typedef XENVIF_VIF_RECEIVER_SET_HASH_ALGORITHM
@@ -726,8 +726,8 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENVIF_VIF_RECEIVER_SET_HASH_ALGORITHM)(
-    IN  PINTERFACE                      Interface,
-    IN  XENVIF_PACKET_HASH_ALGORITHM    Algorithm
+    _In_ PINTERFACE                     Interface,
+    _In_ XENVIF_PACKET_HASH_ALGORITHM   Algorithm
     );
=20
 /*! \typedef XENVIF_VIF_RECEIVER_QUERY_HASH_CAPABILITIES
@@ -741,7 +741,7 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENVIF_VIF_RECEIVER_QUERY_HASH_CAPABILITIES)(
-    IN  PINTERFACE  Interface,
+    _In_ PINTERFACE Interface,
     =2E=2E=2E
     );
=20
@@ -757,7 +757,7 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENVIF_VIF_RECEIVER_UPDATE_HASH_PARAMETERS)(
-    IN  PINTERFACE  Interface,
+    _In_ PINTERFACE Interface,
     =2E=2E=2E
     );
=20
@@ -773,10 +773,10 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENVIF_VIF_MAC_QUERY_STATE)(
-    IN  PINTERFACE                  Interface,
-    OUT PNET_IF_MEDIA_CONNECT_STATE MediaConnectState OPTIONAL,
-    OUT PULONG64                    LinkSpeed OPTIONAL,
-    OUT PNET_IF_MEDIA_DUPLEX_STATE  MediaDuplexState OPTIONAL
+    _In_ PINTERFACE                         Interface,
+    _Out_opt_ PNET_IF_MEDIA_CONNECT_STATE   MediaConnectState,
+    _Out_opt_ PULONG64                      LinkSpeed,
+    _Out_opt_ PNET_IF_MEDIA_DUPLEX_STATE    MediaDuplexState
     );
=20
 /*! \typedef XENVIF_VIF_MAC_QUERY_MAXIMUM_FRAME_SIZE
@@ -788,8 +788,8 @@ typedef VOID
 */
 typedef VOID
 (*XENVIF_VIF_MAC_QUERY_MAXIMUM_FRAME_SIZE)(
-    IN  PINTERFACE  Interface,
-    OUT PULONG      Size
+    _In_ PINTERFACE Interface,
+    _Out_ PULONG    Size
     );
=20
 /*! \typedef XENVIF_VIF_MAC_QUERY_PERMANENT_ADDRESS
@@ -800,8 +800,8 @@ typedef VOID
 */
 typedef VOID
 (*XENVIF_VIF_MAC_QUERY_PERMANENT_ADDRESS)(
-    IN  PINTERFACE          Interface,
-    OUT PETHERNET_ADDRESS   Address
+    _In_ PINTERFACE         Interface,
+    _Out_ PETHERNET_ADDRESS Address
     );
=20
 /*! \typedef XENVIF_VIF_MAC_QUERY_CURRENT_ADDRESS
@@ -816,8 +816,8 @@ typedef VOID
 */
 typedef VOID
 (*XENVIF_VIF_MAC_QUERY_CURRENT_ADDRESS)(
-    IN  PINTERFACE          Interface,
-    OUT PETHERNET_ADDRESS   Address
+    _In_ PINTERFACE         Interface,
+    _Out_ PETHERNET_ADDRESS Address
     );
=20
 /*! \typedef XENVIF_VIF_MAC_QUERY_MULTICAST_ADDRESSES
@@ -833,9 +833,9 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENVIF_VIF_MAC_QUERY_MULTICAST_ADDRESSES)(
-    IN      PINTERFACE          Interface,
-    OUT     PETHERNET_ADDRESS   Address OPTIONAL,
-    IN OUT  PULONG              Count
+    _In_ PINTERFACE             Interface,
+    _Out_opt_ PETHERNET_ADDRESS Address,
+    _Inout_ PULONG              Count
     );
=20
 /*! \typedef XENVIF_VIF_MAC_SET_MULTICAST_ADDRESSES
@@ -850,9 +850,9 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENVIF_VIF_MAC_SET_MULTICAST_ADDRESSES)(
-    IN  PINTERFACE          Interface,
-    IN  PETHERNET_ADDRESS   Address OPTIONAL,
-    IN  ULONG               Count
+    _In_ PINTERFACE             Interface,
+    _In_opt_ PETHERNET_ADDRESS  Address,
+    _In_ ULONG                  Count
     );
=20
 /*! \typedef XENVIF_VIF_MAC_SET_FILTER_LEVEL
@@ -865,9 +865,9 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENVIF_VIF_MAC_SET_FILTER_LEVEL)(
-    IN  PINTERFACE              Interface,
-    IN  ETHERNET_ADDRESS_TYPE   Type,
-    IN  XENVIF_MAC_FILTER_LEVEL Level
+    _In_ PINTERFACE                 Interface,
+    _In_ ETHERNET_ADDRESS_TYPE      Type,
+    _In_ XENVIF_MAC_FILTER_LEVEL    Level
     );
=20
 /*! \typedef XENVIF_VIF_MAC_QUERY_FILTER_LEVEL
@@ -880,9 +880,9 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENVIF_VIF_MAC_QUERY_FILTER_LEVEL)(
-    IN  PINTERFACE                  Interface,
-    IN  ETHERNET_ADDRESS_TYPE       Type,
-    OUT PXENVIF_MAC_FILTER_LEVEL    Level
+    _In_ PINTERFACE                 Interface,
+    _In_ ETHERNET_ADDRESS_TYPE      Type,
+    _Out_ PXENVIF_MAC_FILTER_LEVEL  Level
     );
=20
 // {76F279CD-CA11-418B-92E8-C57F77DE0E2E}
diff --git a/src/xennet/adapter=2Ec b/src/xennet/adapter=2Ec
index 6e5a95a=2E=2Eba7fd2a 100644
--- a/src/xennet/adapter=2Ec
+++ b/src/xennet/adapter=2Ec
@@ -163,13 +163,13 @@ static NDIS_OID XennetSupportedOids[] =3D
=20
 #define ADAPTER_POOL_TAG    'AteN'
=20
-__drv_functionClass(MINIPORT_PROCESS_SG_LIST)
+_Function_class_(MINIPORT_PROCESS_SG_LIST)
 static VOID
 AdapterProcessSGList(
-    IN PDEVICE_OBJECT       DeviceObject,
-    IN PVOID                Reserved,
-    IN PSCATTER_GATHER_LIST SGL,
-    IN PVOID                Context
+    _In_ PDEVICE_OBJECT         DeviceObject,
+    _In_ PVOID                  Reserved,
+    _In_ PSCATTER_GATHER_LIST   SGL,
+    _In_ PVOID                  Context
     )
 {
     UNREFERENCED_PARAMETER(DeviceObject);
@@ -180,14 +180,14 @@ AdapterProcessSGList(
     ASSERT(FALSE);
 }
=20
-__drv_functionClass(MINIPORT_ALLOCATE_SHARED_MEM_COMPLETE)
+_Function_class_(MINIPORT_ALLOCATE_SHARED_MEM_COMPLETE)
 static VOID
 AdapterAllocateComplete (
-    IN NDIS_HANDLE              MiniportAdapterContext,
-    IN PVOID                    VirtualAddress,
-    IN PNDIS_PHYSICAL_ADDRESS   PhysicalAddress,
-    IN ULONG                    Length,
-    IN PVOID                    Context
+    _In_ NDIS_HANDLE            MiniportAdapterContext,
+    _In_ PVOID                  VirtualAddress,
+    _In_ PNDIS_PHYSICAL_ADDRESS PhysicalAddress,
+    _In_ ULONG                  Length,
+    _In_ PVOID                  Context
     )
 {
     UNREFERENCED_PARAMETER(MiniportAdapterContext);
@@ -201,12 +201,12 @@ AdapterAllocateComplete (
=20
 static VOID
 AdapterVifCallback(
-    IN  PVOID                           Context,
-    IN  XENVIF_VIF_CALLBACK_TYPE        Type,
-    IN  PXENVIF_VIF_CALLBACK_PARAMETERS Parameters
+    _In_ PVOID                              Context,
+    _In_ XENVIF_VIF_CALLBACK_TYPE           Type,
+    _In_ PXENVIF_VIF_CALLBACK_PARAMETERS    Parameters
     )
 {
-    PXENNET_ADAPTER                     Adapter =3D Context;
+    PXENNET_ADAPTER                         Adapter =3D Context;
=20
     switch (Type) {
     case XENVIF_TRANSMITTER_RETURN_PACKET:
@@ -239,8 +239,8 @@ AdapterVifCallback(
=20
 static VOID
 DisplayOffload(
-    IN  const CHAR      *Type,
-    IN  PNDIS_OFFLOAD   Offload
+    _In_ const CHAR     *Type,
+    _In_ PNDIS_OFFLOAD  Offload
     )
 {
     Trace("%s:\n", Type);
@@ -313,7 +313,7 @@ DisplayOffload(
=20
 static VOID
 AdapterIndicateOffloadChanged(
-    IN  PXENNET_ADAPTER         Adapter
+    _In_ PXENNET_ADAPTER        Adapter
     )
 {
     NDIS_STATUS_INDICATION      Status;
@@ -441,8 +441,8 @@ AdapterIndicateOffloadChanged(
=20
 static VOID
 AdapterGetPacketFilter(
-    IN  PXENNET_ADAPTER         Adapter,
-    OUT PULONG                  PacketFilter
+    _In_ PXENNET_ADAPTER    Adapter,
+    _Out_ PULONG            PacketFilter
     )
 {
     XENVIF_MAC_FILTER_LEVEL UnicastFilterLevel;
@@ -487,8 +487,8 @@ AdapterGetPacketFilter(
=20
 static NDIS_STATUS
 AdapterSetPacketFilter(
-    IN  PXENNET_ADAPTER         Adapter,
-    IN  PULONG                  PacketFilter
+    _In_ PXENNET_ADAPTER    Adapter,
+    _In_ PULONG             PacketFilter
     )
 {
     XENVIF_MAC_FILTER_LEVEL UnicastFilterLevel;
@@ -543,13 +543,13 @@ done:
=20
 static NDIS_STATUS
 AdapterGetOffloadEncapsulation(
-    IN  PXENNET_ADAPTER     Adapter,
-    IN  PNDIS_OFFLOAD_ENCAPSULATION Offload
+    _In_ PXENNET_ADAPTER                Adapter,
+    _In_ PNDIS_OFFLOAD_ENCAPSULATION    Offload
     )
 {
-    XENVIF_VIF_OFFLOAD_OPTIONS  Options;
-    PXENVIF_VIF_OFFLOAD_OPTIONS TxOptions;
-    PXENVIF_VIF_OFFLOAD_OPTIONS RxOptions;
+    XENVIF_VIF_OFFLOAD_OPTIONS          Options;
+    PXENVIF_VIF_OFFLOAD_OPTIONS         TxOptions;
+    PXENVIF_VIF_OFFLOAD_OPTIONS         RxOptions;
=20
     if (Offload->IPv4=2EEnabled =3D=3D NDIS_OFFLOAD_SET_ON &&
         Offload->IPv4=2EEncapsulationType !=3D NDIS_ENCAPSULATION_IEEE_80=
2_3)
@@ -624,8 +624,8 @@ invalid_parameter:
=20
 static NDIS_STATUS
 AdapterGetTcpOffloadParameters(
-    IN  PXENNET_ADAPTER     Adapter,
-    IN  PNDIS_OFFLOAD_PARAMETERS    Offload
+    _In_ PXENNET_ADAPTER            Adapter,
+    _In_ PNDIS_OFFLOAD_PARAMETERS   Offload
     )
 {
     XENVIF_VIF_OFFLOAD_OPTIONS      Options;
@@ -698,7 +698,7 @@ invalid_parameter:
=20
 static VOID
 AdapterDisableRSSHash(
-    IN  PXENNET_ADAPTER Adapter
+    _In_ PXENNET_ADAPTER    Adapter
     )
 {
     Adapter->Rss=2EScaleEnabled =3D FALSE;
@@ -711,9 +711,9 @@ AdapterDisableRSSHash(
=20
 static NDIS_STATUS
 AdapterUpdateRSSTable(
-    IN  PXENNET_ADAPTER     Adapter,
-    IN  PPROCESSOR_NUMBER   Table,
-    IN  ULONG               TableSize
+    _In_ PXENNET_ADAPTER    Adapter,
+    _In_ PPROCESSOR_NUMBER  Table,
+    _In_ ULONG              TableSize
     )
 {
     NTSTATUS                status;
@@ -740,12 +740,12 @@ AdapterUpdateRSSTable(
=20
 static NDIS_STATUS
 AdapterUpdateRSSKey(
-    IN  PXENNET_ADAPTER Adapter,
-    IN  PUCHAR          Key,
-    IN  ULONG           KeySize
+    _In_ PXENNET_ADAPTER    Adapter,
+    _In_ PUCHAR             Key,
+    _In_ ULONG              KeySize
     )
 {
-    NTSTATUS            status;
+    NTSTATUS                status;
=20
     if (KeySize =3D=3D 0) {
         AdapterDisableRSSHash(Adapter);
@@ -769,13 +769,13 @@ AdapterUpdateRSSKey(
=20
 static NDIS_STATUS
 AdapterUpdateRSSHash(
-    IN  PXENNET_ADAPTER Adapter,
-    IN  ULONG           Information
+    _In_ PXENNET_ADAPTER    Adapter,
+    _In_ ULONG              Information
     )
 {
-    ULONG               HashType =3D NDIS_RSS_HASH_TYPE_FROM_HASH_INFO(In=
formation);
-    ULONG               HashFunc =3D NDIS_RSS_HASH_FUNC_FROM_HASH_INFO(In=
formation);
-    NTSTATUS            status;
+    ULONG                   HashType =3D NDIS_RSS_HASH_TYPE_FROM_HASH_INF=
O(Information);
+    ULONG                   HashFunc =3D NDIS_RSS_HASH_FUNC_FROM_HASH_INF=
O(Information);
+    NTSTATUS                status;
=20
     if (HashFunc =3D=3D 0) {
         AdapterDisableRSSHash(Adapter);
@@ -824,7 +824,7 @@ AdapterUpdateRSSHash(
=20
 static VOID
 DisplayRss(
-    IN  PXENNET_RSS Rss
+    _In_ PXENNET_RSS    Rss
     )
 {
     Trace("HashEnabled: %s\n", (Rss->HashEnabled) ? "TRUE" : "FALSE");
@@ -926,9 +926,9 @@ DisplayRss(
=20
 static NDIS_STATUS
 AdapterGetReceiveScaleParameters(
-    IN  PXENNET_ADAPTER                 Adapter,
-    IN  PNDIS_RECEIVE_SCALE_PARAMETERS  Parameters,
-    OUT PULONG                          BytesRead
+    _In_ PXENNET_ADAPTER                Adapter,
+    _In_ PNDIS_RECEIVE_SCALE_PARAMETERS Parameters,
+    _Out_ PULONG                        BytesRead
     )
 {
     NDIS_STATUS                         ndisStatus;
@@ -999,8 +999,8 @@ fail:
=20
 static NDIS_STATUS
 AdapterGetReceiveHashParameters(
-    IN  PXENNET_ADAPTER                 Adapter,
-    IN  PNDIS_RECEIVE_HASH_PARAMETERS   Parameters
+    _In_ PXENNET_ADAPTER                Adapter,
+    _In_ PNDIS_RECEIVE_HASH_PARAMETERS  Parameters
     )
 {
     NDIS_STATUS                         ndisStatus;
@@ -1047,13 +1047,13 @@ fail:
=20
 static NDIS_STATUS
 AdapterQueryGeneralStatistics(
-    IN  PXENNET_ADAPTER     Adapter,
-    IN  PNDIS_STATISTICS_INFO   Info,
-    IN  ULONG               BufferLength,
-    IN OUT PULONG           BytesWritten
+    _In_ PXENNET_ADAPTER        Adapter,
+    _In_ PNDIS_STATISTICS_INFO  Info,
+    _In_ ULONG                  BufferLength,
+    _Inout_ PULONG              BytesWritten
     )
 {
-    ULONGLONG   Value;
+    ULONGLONG                   Value;
=20
     if (BufferLength < sizeof(NDIS_STATISTICS_INFO))
         goto fail1;
@@ -1225,16 +1225,16 @@ fail1:
=20
 static NDIS_STATUS
 AdapterQueryMulticastList(
-    IN  PXENNET_ADAPTER     Adapter,
-    IN  PVOID               Buffer,
-    IN  ULONG               BufferLength,
-    IN OUT PULONG           BytesNeeded,
-    IN OUT PULONG           BytesWritten
+    _In_ PXENNET_ADAPTER    Adapter,
+    _In_ PVOID              Buffer,
+    _In_ ULONG              BufferLength,
+    _Inout_ PULONG          BytesNeeded,
+    _Inout_ PULONG          BytesWritten
     )
 {
-    ULONG       Count;
-    NDIS_STATUS ndisStatus;
-    NTSTATUS    status;
+    ULONG                   Count;
+    NDIS_STATUS             ndisStatus;
+    NTSTATUS                status;
=20
     XENVIF_VIF(MacQueryMulticastAddresses,
                &Adapter->VifInterface,
@@ -1265,12 +1265,12 @@ fail1:
=20
 static FORCEINLINE NDIS_STATUS
 AdapterSetMulticastAddresses(
-    IN  PXENNET_ADAPTER     Adapter,
-    IN  PETHERNET_ADDRESS   Address,
-    IN  ULONG               Count
+    _In_ PXENNET_ADAPTER    Adapter,
+    _In_ PETHERNET_ADDRESS  Address,
+    _In_ ULONG              Count
     )
 {
-    NTSTATUS        status;
+    NTSTATUS                status;
=20
     status =3D XENVIF_VIF(MacSetMulticastAddresses,
                         &Adapter->VifInterface,
@@ -1284,11 +1284,11 @@ AdapterSetMulticastAddresses(
=20
 static FORCEINLINE VOID
 AdapterGetXmitOk(
-    IN  PXENNET_ADAPTER     Adapter,
-    OUT PULONGLONG          Buffer
+    _In_ PXENNET_ADAPTER    Adapter,
+    _Out_ PULONGLONG        Buffer
     )
 {
-    ULONGLONG   Value;
+    ULONGLONG               Value;
=20
     XENVIF_VIF(QueryStatistic,
                 &Adapter->VifInterface,
@@ -1314,11 +1314,11 @@ AdapterGetXmitOk(
=20
 static FORCEINLINE VOID
 AdapterGetRcvOk(
-    IN  PXENNET_ADAPTER     Adapter,
-    OUT PULONGLONG          Buffer
+    _In_ PXENNET_ADAPTER    Adapter,
+    _Out_ PULONGLONG        Buffer
     )
 {
-    ULONGLONG   Value;
+    ULONGLONG               Value;
=20
     XENVIF_VIF(QueryStatistic,
                 &Adapter->VifInterface,
@@ -1344,11 +1344,11 @@ AdapterGetRcvOk(
=20
 static NDIS_STATUS
 AdapterGetXmitError(
-    IN  PXENNET_ADAPTER     Adapter,
-    OUT PULONG              Buffer
+    _In_ PXENNET_ADAPTER    Adapter,
+    _Out_ PULONG            Buffer
     )
 {
-    ULONGLONG   Value;
+    ULONGLONG               Value;
=20
     XENVIF_VIF(QueryStatistic,
                 &Adapter->VifInterface,
@@ -1369,11 +1369,11 @@ AdapterGetXmitError(
=20
 static FORCEINLINE NDIS_STATUS
 AdapterGetRcvError(
-    IN  PXENNET_ADAPTER     Adapter,
-    OUT PULONG              Buffer
+    _In_ PXENNET_ADAPTER    Adapter,
+    _Out_ PULONG            Buffer
     )
 {
-    ULONGLONG   Value;
+    ULONGLONG               Value;
=20
     XENVIF_VIF(QueryStatistic,
                 &Adapter->VifInterface,
@@ -1394,10 +1394,10 @@ AdapterGetRcvError(
=20
 static FORCEINLINE NDIS_STATUS
 AdapterInterruptModeration(
-    IN  PXENNET_ADAPTER                         Adapter,
-    IN  PNDIS_INTERRUPT_MODERATION_PARAMETERS   Params,
-    IN  ULONG                                   BufferLength,
-    IN OUT PULONG                               BytesWritten
+    _In_ PXENNET_ADAPTER                        Adapter,
+    _In_ PNDIS_INTERRUPT_MODERATION_PARAMETERS  Params,
+    _In_ ULONG                                  BufferLength,
+    _Inout_ PULONG                              BytesWritten
     )
 {
     UNREFERENCED_PARAMETER(Adapter);
@@ -1422,10 +1422,10 @@ fail1:
=20
 static FORCEINLINE NDIS_STATUS
 AdapterReceiveHash(
-    IN  PXENNET_ADAPTER                 Adapter,
-    IN  PNDIS_RECEIVE_HASH_PARAMETERS   Params,
-    IN  ULONG                           BufferLength,
-    IN OUT PULONG                       BytesWritten
+    _In_ PXENNET_ADAPTER                Adapter,
+    _In_ PNDIS_RECEIVE_HASH_PARAMETERS  Params,
+    _In_ ULONG                          BufferLength,
+    _Inout_ PULONG                      BytesWritten
     )
 {
     ULONG                               HashType;
@@ -1475,7 +1475,7 @@ fail1:
=20
 NDIS_HANDLE
 AdapterGetHandle(
-    IN  PXENNET_ADAPTER     Adapter
+    _In_ PXENNET_ADAPTER    Adapter
     )
 {
     return Adapter->NdisAdapterHandle;
@@ -1483,10 +1483,10 @@ AdapterGetHandle(
=20
 ULONG
 AdapterGetNblMaxBatchSize(
-    IN  PXENNET_ADAPTER     Adapter
+    _In_ PXENNET_ADAPTER    Adapter
     )
 {
-    ULONG val =3D (ULONG)Adapter->Properties=2Enblbatchmax;
+    ULONG                   val =3D (ULONG)Adapter->Properties=2Enblbatch=
max;
     if (val =3D=3D 0 || val > NBL_BATCH_SIZE_MAX)
         return NBL_BATCH_SIZE_DEFAULT;
     return val;
@@ -1494,7 +1494,7 @@ AdapterGetNblMaxBatchSize(
=20
 PXENVIF_VIF_INTERFACE
 AdapterGetVifInterface(
-    IN  PXENNET_ADAPTER     Adapter
+    _In_ PXENNET_ADAPTER    Adapter
     )
 {
     return &Adapter->VifInterface;
@@ -1502,7 +1502,7 @@ AdapterGetVifInterface(
=20
 PXENNET_TRANSMITTER
 AdapterGetTransmitter(
-    IN  PXENNET_ADAPTER     Adapter
+    _In_ PXENNET_ADAPTER    Adapter
     )
 {
     return Adapter->Transmitter;
@@ -1510,7 +1510,7 @@ AdapterGetTransmitter(
=20
 PXENNET_RECEIVER
 AdapterGetReceiver(
-    IN  PXENNET_ADAPTER     Adapter
+    _In_ PXENNET_ADAPTER    Adapter
     )
 {
     return Adapter->Receiver;
@@ -1518,7 +1518,7 @@ AdapterGetReceiver(
=20
 PWCHAR
 AdapterGetLocation(
-    IN  PXENNET_ADAPTER     Adapter
+    _In_ PXENNET_ADAPTER    Adapter
     )
 {
     return Adapter->Location;
@@ -1526,7 +1526,7 @@ AdapterGetLocation(
=20
 static FORCEINLINE PVOID
 __AdapterAllocate(
-    IN  ULONG   Length
+    _In_ ULONG  Length
     )
 {
     return __AllocatePoolWithTag(NonPagedPool, Length, ADAPTER_POOL_TAG);
@@ -1534,7 +1534,7 @@ __AdapterAllocate(
=20
 static FORCEINLINE VOID
 __AdapterFree(
-    IN  PVOID   Buffer
+    _In_ PVOID  Buffer
     )
 {
     __FreePoolWithTag(Buffer, ADAPTER_POOL_TAG);
@@ -1542,7 +1542,7 @@ __AdapterFree(
=20
 static FORCEINLINE PANSI_STRING
 __AdapterMultiSzToUpcaseAnsi(
-    IN  PCHAR       Buffer
+    _In_ PCHAR      Buffer
     )
 {
     PANSI_STRING    Ansi;
@@ -1607,7 +1607,7 @@ fail1:
=20
 static FORCEINLINE VOID
 __AdapterFreeAnsi(
-    IN  PANSI_STRING    Ansi
+    _In_ PANSI_STRING   Ansi
     )
 {
     ULONG               Index;
@@ -1620,17 +1620,17 @@ __AdapterFreeAnsi(
=20
 static FORCEINLINE BOOLEAN
 __AdapterMatchDistribution(
-    IN  PXENNET_ADAPTER Adapter,
-    IN  PCHAR           Buffer
+    _In_ PXENNET_ADAPTER    Adapter,
+    _In_ PCHAR              Buffer
     )
 {
-    PCHAR               Vendor;
-    PCHAR               Product;
-    PCHAR               Context;
-    const CHAR          *Text;
-    BOOLEAN             Match;
-    ULONG               Index;
-    NTSTATUS            status;
+    PCHAR                   Vendor;
+    PCHAR                   Product;
+    PCHAR                   Context;
+    const CHAR              *Text;
+    BOOLEAN                 Match;
+    ULONG                   Index;
+    NTSTATUS                status;
=20
     UNREFERENCED_PARAMETER(Adapter);
=20
@@ -1680,13 +1680,13 @@ fail1:
=20
 static FORCEINLINE VOID
 __AdapterClearDistribution(
-    IN  PXENNET_ADAPTER Adapter
+    _In_ PXENNET_ADAPTER    Adapter
     )
 {
-    PCHAR               Buffer;
-    PANSI_STRING        Distributions;
-    ULONG               Index;
-    NTSTATUS            status;
+    PCHAR                   Buffer;
+    PANSI_STRING            Distributions;
+    ULONG                   Index;
+    NTSTATUS                status;
=20
     Trace("=3D=3D=3D=3D>\n");
=20
@@ -1743,15 +1743,15 @@ done:
=20
 static FORCEINLINE NTSTATUS
 __AdapterSetDistribution(
-    IN  PXENNET_ADAPTER Adapter
+    _In_ PXENNET_ADAPTER    Adapter
     )
 {
-    ULONG               Index;
-    CHAR                Distribution[MAXNAMELEN];
-    CHAR                Vendor[MAXNAMELEN];
-    STRING              String;
-    const CHAR          *Product;
-    NTSTATUS            status;
+    ULONG                   Index;
+    CHAR                    Distribution[MAXNAMELEN];
+    CHAR                    Vendor[MAXNAMELEN];
+    STRING                  String;
+    const CHAR              *Product;
+    NTSTATUS                status;
=20
     Trace("=3D=3D=3D=3D>\n");
=20
@@ -1844,7 +1844,7 @@ fail1:
=20
 static DECLSPEC_NOINLINE VOID
 AdapterSuspendCallbackLate(
-    IN  PVOID       Argument
+    _In_ PVOID      Argument
     )
 {
     PXENNET_ADAPTER Adapter =3D Argument;
@@ -1861,11 +1861,11 @@ AdapterSuspendCallbackLate(
=20
 static NTSTATUS
 AdapterSetDistribution(
-    IN  PXENNET_ADAPTER Adapter
+    _In_ PXENNET_ADAPTER    Adapter
     )
 {
-    LONG                Count;
-    NTSTATUS            status;
+    LONG                    Count;
+    NTSTATUS                status;
=20
     Trace("=3D=3D=3D=3D>\n");
=20
@@ -1900,10 +1900,10 @@ fail1:
=20
 static VOID
 AdapterClearDistribution(
-    IN  PXENNET_ADAPTER Adapter
+    _In_ PXENNET_ADAPTER    Adapter
     )
 {
-    LONG                Count;
+    LONG                    Count;
=20
     Trace("=3D=3D=3D=3D>\n");
=20
@@ -1922,7 +1922,7 @@ AdapterClearDistribution(
=20
 NDIS_STATUS
 AdapterEnable(
-    IN  PXENNET_ADAPTER     Adapter
+    _In_ PXENNET_ADAPTER    Adapter
     )
 {
     NTSTATUS                status;
@@ -1973,7 +1973,7 @@ fail1:
=20
 VOID
 AdapterDisable(
-    IN  PXENNET_ADAPTER     Adapter
+    _In_ PXENNET_ADAPTER    Adapter
     )
 {
     if (!Adapter->Enabled)
@@ -1995,8 +1995,8 @@ AdapterDisable(
=20
 static VOID
 DisplayLinkState(
-    IN  PXENNET_ADAPTER     Adapter,
-    IN  PNDIS_LINK_STATE    LinkState
+    _In_ PXENNET_ADAPTER    Adapter,
+    _In_ PNDIS_LINK_STATE   LinkState
     )
 {
     if (LinkState->MediaConnectState =3D=3D MediaConnectStateUnknown) {
@@ -2021,7 +2021,7 @@ DisplayLinkState(
=20
 VOID
 AdapterMediaStateChange(
-    IN  PXENNET_ADAPTER     Adapter
+    _In_ PXENNET_ADAPTER    Adapter
     )
 {
     NDIS_LINK_STATE         LinkState;
@@ -2062,8 +2062,8 @@ AdapterMediaStateChange(
=20
 NDIS_STATUS
 AdapterSetInformation(
-    IN  PXENNET_ADAPTER     Adapter,
-    IN  PNDIS_OID_REQUEST   Request
+    _In_ PXENNET_ADAPTER    Adapter,
+    _In_ PNDIS_OID_REQUEST  Request
     )
 {
     PVOID                   Buffer;
@@ -2216,11 +2216,11 @@ AdapterSetInformation(
=20
 static FORCEINLINE NDIS_STATUS
 __CopyBuffer(
-    IN  PVOID   Destination,
-    IN  ULONG   DestinationLength,
-    IN  PVOID   Source,
-    IN  ULONG   SourceLength,
-    OUT PULONG  CopyLength
+    _In_ PVOID      Destination,
+    _In_ ULONG      DestinationLength,
+    _In_ PVOID      Source,
+    _In_ ULONG      SourceLength,
+    _Out_ PULONG    CopyLength
     )
 {
     *CopyLength =3D __min(SourceLength, DestinationLength);
@@ -2233,10 +2233,10 @@ __CopyBuffer(
=20
 static FORCEINLINE NDIS_STATUS
 __SetUlong(
-    IN  PVOID   Destination,
-    IN  ULONG   DestinationLength,
-    IN  ULONG   Source,
-    OUT PULONG  CopyLength
+    _In_ PVOID      Destination,
+    _In_ ULONG      DestinationLength,
+    _In_ ULONG      Source,
+    _Out_ PULONG    CopyLength
     )
 {
     return __CopyBuffer(Destination,
@@ -2248,13 +2248,13 @@ __SetUlong(
=20
 static FORCEINLINE NDIS_STATUS
 __SetUlong64(
-    IN  PVOID   Destination,
-    IN  ULONG   DestinationLength,
-    IN  ULONG64 Source,
-    OUT PULONG  CopyLength
+    _In_ PVOID      Destination,
+    _In_ ULONG      DestinationLength,
+    _In_ ULONG64    Source,
+    _Out_ PULONG    CopyLength
     )
 {
-    NDIS_STATUS ndisStatus;
+    NDIS_STATUS     ndisStatus;
=20
     ndisStatus =3D  __CopyBuffer(Destination,
                                DestinationLength & ~3,
@@ -2269,8 +2269,8 @@ __SetUlong64(
=20
 NDIS_STATUS
 AdapterQueryInformation(
-    IN  PXENNET_ADAPTER     Adapter,
-    IN  PNDIS_OID_REQUEST   Request
+    _In_ PXENNET_ADAPTER    Adapter,
+    _In_ PNDIS_OID_REQUEST  Request
     )
 {
     PVOID                   Buffer;
@@ -2777,15 +2777,15 @@ AdapterQueryInformation(
     return ndisStatus;
 }
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 static NTSTATUS
 __QueryInterface(
-    IN  PDEVICE_OBJECT  DeviceObject,
-    IN  const GUID      *Guid,
-    IN  ULONG           Version,
-    OUT PINTERFACE      Interface,
-    IN  ULONG           Size,
-    IN  BOOLEAN         Optional
+    _In_ PDEVICE_OBJECT DeviceObject,
+    _In_ const GUID     *Guid,
+    _In_ ULONG          Version,
+    _Out_ PINTERFACE    Interface,
+    _In_ ULONG          Size,
+    _In_ BOOLEAN        Optional
     )
 {
     KEVENT              Event;
@@ -2855,8 +2855,8 @@ fail1:
=20
 static NTSTATUS
 __QueryLocationInformation(
-    IN  PDEVICE_OBJECT  DeviceObject,
-    OUT PWCHAR          *Location
+    _In_ PDEVICE_OBJECT DeviceObject,
+    _Outptr_ PWCHAR     *Location
     )
 {
     ULONG               Size;
@@ -2921,7 +2921,7 @@ fail1:
=20
 static NDIS_STATUS
 AdapterGetAdvancedSettings(
-    IN  PXENNET_ADAPTER Adapter
+    _In_ PXENNET_ADAPTER        Adapter
     )
 {
     NDIS_CONFIGURATION_OBJECT   Config;
@@ -2967,7 +2967,7 @@ fail1:
=20
 static NDIS_STATUS
 AdapterSetRegistrationAttributes(
-    IN  PXENNET_ADAPTER Adapter
+    _In_ PXENNET_ADAPTER                            Adapter
     )
 {
     NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES   Attribs;
@@ -2993,7 +2993,7 @@ AdapterSetRegistrationAttributes(
=20
 static NDIS_STATUS
 AdapterSetGeneralAttributes(
-    IN  PXENNET_ADAPTER Adapter
+    _In_ PXENNET_ADAPTER                        Adapter
     )
 {
     NDIS_MINIPORT_ADAPTER_GENERAL_ATTRIBUTES    Attribs;
@@ -3134,7 +3134,7 @@ done:
=20
 static NDIS_STATUS
 AdapterSetOffloadAttributes(
-    IN  PXENNET_ADAPTER Adapter
+    _In_ PXENNET_ADAPTER                        Adapter
     )
 {
     NDIS_MINIPORT_ADAPTER_OFFLOAD_ATTRIBUTES    Attribs;
@@ -3320,14 +3320,14 @@ AdapterSetOffloadAttributes(
=20
 NDIS_STATUS
 AdapterInitialize(
-    IN  NDIS_HANDLE         Handle,
-    OUT PXENNET_ADAPTER     *Adapter
+    _In_ NDIS_HANDLE            Handle,
+    _Outptr_ PXENNET_ADAPTER    *Adapter
     )
 {
-    NDIS_STATUS             ndisStatus;
-    NTSTATUS                status;
-    PDEVICE_OBJECT          DeviceObject;
-    NDIS_SG_DMA_DESCRIPTION Dma;
+    NDIS_STATUS                 ndisStatus;
+    NTSTATUS                    status;
+    PDEVICE_OBJECT              DeviceObject;
+    NDIS_SG_DMA_DESCRIPTION     Dma;
=20
     *Adapter =3D __AdapterAllocate(sizeof (XENNET_ADAPTER));
=20
@@ -3464,7 +3464,7 @@ fail1:
=20
 VOID
 AdapterTeardown(
-    IN  PXENNET_ADAPTER     Adapter
+    _In_ PXENNET_ADAPTER    Adapter
     )
 {
     TransmitterTeardown(Adapter->Transmitter);
diff --git a/src/xennet/adapter=2Eh b/src/xennet/adapter=2Eh
index a54cb4d=2E=2Ec6eb99f 100644
--- a/src/xennet/adapter=2Eh
+++ b/src/xennet/adapter=2Eh
@@ -57,68 +57,68 @@ typedef struct _XENNET_ADAPTER XENNET_ADAPTER, *PXENNE=
T_ADAPTER;
=20
 extern NDIS_STATUS
 AdapterInitialize(
-    IN  NDIS_HANDLE         Handle,
-    OUT PXENNET_ADAPTER     *Adapter
+    _In_ NDIS_HANDLE            Handle,
+    _Outptr_ PXENNET_ADAPTER    *Adapter
     );
=20
 extern VOID
 AdapterTeardown(
-    IN  PXENNET_ADAPTER     Adapter
+    _In_ PXENNET_ADAPTER    Adapter
     );
=20
 extern NDIS_HANDLE
 AdapterGetHandle(
-    IN  PXENNET_ADAPTER     Adapter
+    _In_ PXENNET_ADAPTER    Adapter
     );
=20
 #include <vif_interface=2Eh>
 extern PXENVIF_VIF_INTERFACE
 AdapterGetVifInterface(
-    IN  PXENNET_ADAPTER     Adapter
+    _In_ PXENNET_ADAPTER    Adapter
     );
=20
 #include "transmitter=2Eh"
 extern PXENNET_TRANSMITTER
 AdapterGetTransmitter(
-    IN  PXENNET_ADAPTER     Adapter
+    _In_ PXENNET_ADAPTER    Adapter
     );
=20
 #include "receiver=2Eh"
 extern PXENNET_RECEIVER
 AdapterGetReceiver(
-    IN  PXENNET_ADAPTER     Adapter
+    _In_ PXENNET_ADAPTER    Adapter
     );
=20
 extern PWCHAR
 AdapterGetLocation(
-    IN  PXENNET_ADAPTER     Adapter
+    _In_ PXENNET_ADAPTER    Adapter
     );
=20
 extern NDIS_STATUS
 AdapterEnable(
-    IN  PXENNET_ADAPTER     Adapter
+    _In_ PXENNET_ADAPTER    Adapter
     );
=20
 extern VOID
 AdapterDisable(
-    IN  PXENNET_ADAPTER     Adapter
+    _In_ PXENNET_ADAPTER    Adapter
     );
=20
 extern VOID
 AdapterMediaStateChange(
-    IN  PXENNET_ADAPTER     Adapter
+    _In_ PXENNET_ADAPTER    Adapter
     );
=20
 extern NDIS_STATUS
 AdapterSetInformation(
-    IN  PXENNET_ADAPTER     Adapter,
-    IN  PNDIS_OID_REQUEST   Request
+    _In_ PXENNET_ADAPTER    Adapter,
+    _In_ PNDIS_OID_REQUEST  Request
     );
=20
 extern NDIS_STATUS
 AdapterQueryInformation(
-    IN  PXENNET_ADAPTER     Adapter,
-    IN  PNDIS_OID_REQUEST   Request
+    _In_ PXENNET_ADAPTER    Adapter,
+    _In_ PNDIS_OID_REQUEST  Request
     );
=20
 #define NBL_BATCH_SIZE_DEFAULT  32
@@ -126,7 +126,7 @@ AdapterQueryInformation(
=20
 extern ULONG
 AdapterGetNblMaxBatchSize(
-    IN  PXENNET_ADAPTER     Adapter
+    _In_ PXENNET_ADAPTER    Adapter
     );
=20
 #endif // _XENNET_ADAPTER_H_
diff --git a/src/xennet/assert=2Eh b/src/xennet/assert=2Eh
index a2f407d=2E=2E240ae44 100644
--- a/src/xennet/assert=2Eh
+++ b/src/xennet/assert=2Eh
@@ -154,10 +154,10 @@ __Bug(
=20
 static __inline BOOLEAN
 _IsZeroMemory(
-    _In_ PCSTR          Caller,
-    _In_ PCSTR          Name,
-    _In_ PVOID          Buffer,
-    _In_ ULONG          Length
+    _In_ PCSTR      Caller,
+    _In_ PCSTR      Name,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length
     )
 {
     ULONG           Offset;
@@ -178,10 +178,10 @@ _IsZeroMemory(
=20
 static __inline BOOLEAN
 _IsZeroMemory(
-    _In_ PCSTR          Caller,
-    _In_ PCSTR          Name,
-    _In_ PVOID          Buffer,
-    _In_ ULONG          Length
+    _In_ PCSTR  Caller,
+    _In_ PCSTR  Name,
+    _In_ PVOID  Buffer,
+    _In_ ULONG  Length
     )
 {
     UNREFERENCED_PARAMETER(Caller);
diff --git a/src/xennet/driver=2Ec b/src/xennet/driver=2Ec
index 5f31ac2=2E=2Ebcf3f0b 100644
--- a/src/xennet/driver=2Ec
+++ b/src/xennet/driver=2Ec
@@ -48,7 +48,7 @@ static XENNET_DRIVER Driver;
=20
 VOID
 DriverUnload(
-    IN  PDRIVER_OBJECT  DriverObject
+    _In_ PDRIVER_OBJECT DriverObject
     )
 {
     UNREFERENCED_PARAMETER(DriverObject);
@@ -75,17 +75,17 @@ DRIVER_INITIALIZE       DriverEntry;
=20
 NTSTATUS
 DriverEntry (
-    IN  PDRIVER_OBJECT  DriverObject,
-    IN  PUNICODE_STRING RegistryPath
+    _In_ PDRIVER_OBJECT             DriverObject,
+    _In_ PUNICODE_STRING            RegistryPath
     )
 {
-    NDIS_STATUS ndisStatus;
-    NDIS_CONFIGURATION_OBJECT ConfigurationObject;
-    NDIS_HANDLE ConfigurationHandle;
-    NDIS_STRING ParameterName;
-    PNDIS_CONFIGURATION_PARAMETER ParameterValue;
-    ULONG FailCreateClose;
-    ULONG FailDeviceControl;
+    NDIS_STATUS                     ndisStatus;
+    NDIS_CONFIGURATION_OBJECT       ConfigurationObject;
+    NDIS_HANDLE                     ConfigurationHandle;
+    NDIS_STRING                     ParameterName;
+    PNDIS_CONFIGURATION_PARAMETER   ParameterValue;
+    ULONG                           FailCreateClose;
+    ULONG                           FailDeviceControl;
=20
     ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
     WdmlibProcgrpInitialize();
diff --git a/src/xennet/driver=2Eh b/src/xennet/driver=2Eh
index 1c167c6=2E=2Ea0ccc11 100644
--- a/src/xennet/driver=2Eh
+++ b/src/xennet/driver=2Eh
@@ -35,7 +35,7 @@
=20
 extern VOID
 DriverUnload(
-    IN  PDRIVER_OBJECT  DriverObject
+    _In_ PDRIVER_OBJECT DriverObject
     );
=20
 #endif  // _XENNET_DRIVER_H
diff --git a/src/xennet/miniport=2Ec b/src/xennet/miniport=2Ec
index 9f3a8c6=2E=2Efe3bfd0 100644
--- a/src/xennet/miniport=2Ec
+++ b/src/xennet/miniport=2Ec
@@ -43,8 +43,8 @@ static
 _Function_class_(SET_OPTIONS)
 NDIS_STATUS
 MiniportSetOptions(
-    IN  NDIS_HANDLE NdisDriverHandle,
-    IN  NDIS_HANDLE DriverContext
+    _In_ NDIS_HANDLE    NdisDriverHandle,
+    _In_ NDIS_HANDLE    DriverContext
     )
 {
     UNREFERENCED_PARAMETER(NdisDriverHandle);
@@ -59,9 +59,9 @@ static
 _Function_class_(MINIPORT_INITIALIZE)
 NDIS_STATUS
 MiniportInitializeEx(
-    IN  NDIS_HANDLE                     NdisMiniportHandle,
-    IN  NDIS_HANDLE                     MiniportDriverContext,
-    IN  PNDIS_MINIPORT_INIT_PARAMETERS  MiniportInitParameters
+    _In_ NDIS_HANDLE                    NdisMiniportHandle,
+    _In_ NDIS_HANDLE                    MiniportDriverContext,
+    _In_ PNDIS_MINIPORT_INIT_PARAMETERS MiniportInitParameters
     )
 {
     PXENNET_ADAPTER                     Adapter;
@@ -86,8 +86,8 @@ static
 _Function_class_(MINIPORT_HALT)
 VOID
 MiniportHaltEx(
-    IN  NDIS_HANDLE         MiniportAdapterContext,
-    IN  NDIS_HALT_ACTION    HaltAction
+    _In_ NDIS_HANDLE        MiniportAdapterContext,
+    _In_ NDIS_HALT_ACTION   HaltAction
     )
 {
     PXENNET_ADAPTER         Adapter =3D (PXENNET_ADAPTER)MiniportAdapterC=
ontext;
@@ -104,7 +104,7 @@ static
 _Function_class_(MINIPORT_UNLOAD)
 VOID
 MiniportDriverUnload(
-    IN  PDRIVER_OBJECT  DriverObject
+    _In_ PDRIVER_OBJECT DriverObject
     )
 {
     DriverUnload(DriverObject);
@@ -114,11 +114,11 @@ static
 _Function_class_(MINIPORT_PAUSE)
 NDIS_STATUS
 MiniportPause(
-    IN  NDIS_HANDLE                     MiniportAdapterContext,
-    IN  PNDIS_MINIPORT_PAUSE_PARAMETERS MiniportPauseParameters
+    _In_ NDIS_HANDLE                        MiniportAdapterContext,
+    _In_ PNDIS_MINIPORT_PAUSE_PARAMETERS    MiniportPauseParameters
     )
 {
-    PXENNET_ADAPTER                     Adapter =3D (PXENNET_ADAPTER)Mini=
portAdapterContext;
+    PXENNET_ADAPTER                         Adapter =3D (PXENNET_ADAPTER)=
MiniportAdapterContext;
=20
     UNREFERENCED_PARAMETER(MiniportPauseParameters);
=20
@@ -131,8 +131,8 @@ static
 _Function_class_(MINIPORT_RESTART)
 NDIS_STATUS
 MiniportRestart(
-    IN  NDIS_HANDLE                         MiniportAdapterContext,
-    IN  PNDIS_MINIPORT_RESTART_PARAMETERS   MiniportRestartParameters
+    _In_ NDIS_HANDLE                        MiniportAdapterContext,
+    _In_ PNDIS_MINIPORT_RESTART_PARAMETERS  MiniportRestartParameters
     )
 {
     PXENNET_ADAPTER                         Adapter =3D (PXENNET_ADAPTER)=
MiniportAdapterContext;
@@ -149,8 +149,8 @@ static
 _Function_class_(MINIPORT_OID_REQUEST)
 NDIS_STATUS
 MiniportOidRequest(
-    IN  NDIS_HANDLE         MiniportAdapterContext,
-    IN  PNDIS_OID_REQUEST   OidRequest
+    _In_ NDIS_HANDLE        MiniportAdapterContext,
+    _In_ PNDIS_OID_REQUEST  OidRequest
     )
 {
     PXENNET_ADAPTER         Adapter =3D (PXENNET_ADAPTER)MiniportAdapterC=
ontext;
@@ -178,10 +178,10 @@ static
 _Function_class_(MINIPORT_SEND_NET_BUFFER_LISTS)
 VOID
 MiniportSendNetBufferLists(
-    IN  NDIS_HANDLE         MiniportAdapterContext,
-    IN  PNET_BUFFER_LIST    NetBufferList,
-    IN  NDIS_PORT_NUMBER    PortNumber,
-    IN  ULONG               SendFlags
+    _In_ NDIS_HANDLE        MiniportAdapterContext,
+    _In_ PNET_BUFFER_LIST   NetBufferList,
+    _In_ NDIS_PORT_NUMBER   PortNumber,
+    _In_ ULONG              SendFlags
     )
 {
     PXENNET_ADAPTER         Adapter =3D (PXENNET_ADAPTER)MiniportAdapterC=
ontext;
@@ -197,9 +197,9 @@ static
 _Function_class_(MINIPORT_RETURN_NET_BUFFER_LISTS)
 VOID
 MiniportReturnNetBufferLists(
-    IN  NDIS_HANDLE         MiniportAdapterContext,
-    IN  PNET_BUFFER_LIST    NetBufferLists,
-    IN  ULONG               ReturnFlags
+    _In_ NDIS_HANDLE        MiniportAdapterContext,
+    _In_ PNET_BUFFER_LIST   NetBufferLists,
+    _In_ ULONG              ReturnFlags
     )
 {
     PXENNET_ADAPTER         Adapter =3D (PXENNET_ADAPTER)MiniportAdapterC=
ontext;
@@ -214,8 +214,8 @@ static
 _Function_class_(MINIPORT_CANCEL_SEND)
 VOID
 MiniportCancelSend(
-    IN  NDIS_HANDLE MiniportAdapterContext,
-    IN  PVOID       CancelId
+    _In_ NDIS_HANDLE    MiniportAdapterContext,
+    _In_ PVOID          CancelId
     )
 {
     UNREFERENCED_PARAMETER(MiniportAdapterContext);
@@ -226,8 +226,8 @@ static
 _Function_class_(MINIPORT_DEVICE_PNP_EVENT_NOTIFY)
 VOID
 MiniportDevicePnPEventNotify(
-    IN  NDIS_HANDLE             MiniportAdapterContext,
-    IN  PNET_DEVICE_PNP_EVENT   NetDevicePnPEvent
+    _In_ NDIS_HANDLE            MiniportAdapterContext,
+    _In_ PNET_DEVICE_PNP_EVENT  NetDevicePnPEvent
     )
 {
     PXENNET_ADAPTER             Adapter =3D (PXENNET_ADAPTER)MiniportAdap=
terContext;
@@ -246,8 +246,8 @@ static
 _Function_class_(MINIPORT_SHUTDOWN)
 VOID
 MiniportShutdownEx(
-    IN  NDIS_HANDLE             MiniportAdapterContext,
-    IN  NDIS_SHUTDOWN_ACTION    ShutdownAction
+    _In_ NDIS_HANDLE            MiniportAdapterContext,
+    _In_ NDIS_SHUTDOWN_ACTION   ShutdownAction
     )
 {
     PXENNET_ADAPTER             Adapter =3D (PXENNET_ADAPTER)MiniportAdap=
terContext;
@@ -266,8 +266,8 @@ static
 _Function_class_(MINIPORT_CANCEL_OID_REQUEST)
 VOID
 MiniportCancelOidRequest(
-    IN  NDIS_HANDLE MiniportAdapterContext,
-    IN  PVOID       RequestId
+    _In_ NDIS_HANDLE    MiniportAdapterContext,
+    _In_ PVOID          RequestId
     )
 {
     UNREFERENCED_PARAMETER(MiniportAdapterContext);
@@ -278,9 +278,9 @@ MiniportCancelOidRequest(
=20
 NDIS_STATUS
 MiniportRegister(
-    IN  PDRIVER_OBJECT                      DriverObject,
-    IN  PUNICODE_STRING                     RegistryPath,
-    OUT PNDIS_HANDLE                        NdisMiniportDriverHandle
+    _In_ PDRIVER_OBJECT                     DriverObject,
+    _In_ PUNICODE_STRING                    RegistryPath,
+    _Out_ PNDIS_HANDLE                      NdisMiniportDriverHandle
     )
 {
     NDIS_STATUS                             NdisStatus;
diff --git a/src/xennet/miniport=2Eh b/src/xennet/miniport=2Eh
index 16e9395=2E=2E7ef76c7 100644
--- a/src/xennet/miniport=2Eh
+++ b/src/xennet/miniport=2Eh
@@ -35,9 +35,9 @@
=20
 extern NDIS_STATUS
 MiniportRegister(
-    IN  PDRIVER_OBJECT  DriverObject,
-    IN  PUNICODE_STRING RegistryPath,
-    OUT PNDIS_HANDLE    NdisMiniportDriverHandle
+    _In_ PDRIVER_OBJECT     DriverObject,
+    _In_ PUNICODE_STRING    RegistryPath,
+    _Out_ PNDIS_HANDLE      NdisMiniportDriverHandle
     );
=20
 #endif  // _XENNET_MINIPORT_H
diff --git a/src/xennet/receiver=2Ec b/src/xennet/receiver=2Ec
index 55492f2=2E=2E1cb6519 100644
--- a/src/xennet/receiver=2Ec
+++ b/src/xennet/receiver=2Ec
@@ -72,7 +72,7 @@ C_ASSERT(sizeof (NET_BUFFER_LIST_RESERVED) <=3D RTL_FIEL=
D_SIZE(NET_BUFFER_LIST, Mi
=20
 static FORCEINLINE PNET_BUFFER_LIST
 __ReceiverGetNetBufferList(
-    IN  PXENNET_RECEIVER    Receiver
+    _In_ PXENNET_RECEIVER   Receiver
     )
 {
     ULONG                   Index;
@@ -99,8 +99,8 @@ __ReceiverGetNetBufferList(
=20
 static FORCEINLINE VOID
 __ReceiverPutNetBufferList(
-    IN  PXENNET_RECEIVER    Receiver,
-    IN  PNET_BUFFER_LIST    NetBufferList
+    _In_ PXENNET_RECEIVER   Receiver,
+    _In_ PNET_BUFFER_LIST   NetBufferList
     )
 {
     PNET_BUFFER_LIST        Old;
@@ -118,12 +118,12 @@ __ReceiverPutNetBufferList(
=20
 static PNET_BUFFER_LIST
 __ReceiverAllocateNetBufferList(
-    IN  PXENNET_RECEIVER        Receiver,
-    IN  PMDL                    Mdl,
-    IN  ULONG                   Offset,
-    IN  ULONG                   Length,
-    IN  PXENVIF_PACKET_INFO     Info,
-    IN  PVOID                   Cookie
+    _In_ PXENNET_RECEIVER       Receiver,
+    _In_ PMDL                   Mdl,
+    _In_ ULONG                  Offset,
+    _In_ ULONG                  Length,
+    _In_ PXENVIF_PACKET_INFO    Info,
+    _In_ PVOID                  Cookie
     )
 {
     PNET_BUFFER_LIST            NetBufferList;
@@ -187,9 +187,9 @@ __ReceiverAllocateNetBufferList(
=20
 static PVOID
 __ReceiverReleaseNetBufferList(
-    IN  PXENNET_RECEIVER        Receiver,
-    IN  PNET_BUFFER_LIST        NetBufferList,
-    IN  BOOLEAN                 Cache
+    _In_ PXENNET_RECEIVER       Receiver,
+    _In_ PNET_BUFFER_LIST       NetBufferList,
+    _In_ BOOLEAN                Cache
     )
 {
     PNET_BUFFER_LIST_RESERVED   ListReserved;
@@ -210,9 +210,9 @@ __ReceiverReleaseNetBufferList(
=20
 static FORCEINLINE VOID
 __ReceiverReturnNetBufferLists(
-    IN  PXENNET_RECEIVER    Receiver,
-    IN  PNET_BUFFER_LIST    NetBufferList,
-    IN  BOOLEAN             Cache
+    _In_ PXENNET_RECEIVER   Receiver,
+    _In_ PNET_BUFFER_LIST   NetBufferList,
+    _In_ BOOLEAN            Cache
     )
 {
     PXENVIF_VIF_INTERFACE   VifInterface;
@@ -245,16 +245,16 @@ __ReceiverReturnNetBufferLists(
=20
 static PNET_BUFFER_LIST
 __ReceiverReceivePacket(
-    IN  PXENNET_RECEIVER                        Receiver,
-    IN  PMDL                                    Mdl,
-    IN  ULONG                                   Offset,
-    IN  ULONG                                   Length,
-    IN  XENVIF_PACKET_CHECKSUM_FLAGS            Flags,
-    IN  USHORT                                  MaximumSegmentSize,
-    IN  USHORT                                  TagControlInformation,
-    IN  PXENVIF_PACKET_INFO                     Info,
-    IN  PXENVIF_PACKET_HASH                     Hash,
-    IN  PVOID                                   Cookie
+    _In_ PXENNET_RECEIVER                       Receiver,
+    _In_ PMDL                                   Mdl,
+    _In_ ULONG                                  Offset,
+    _In_ ULONG                                  Length,
+    _In_ XENVIF_PACKET_CHECKSUM_FLAGS           Flags,
+    _In_ USHORT                                 MaximumSegmentSize,
+    _In_ USHORT                                 TagControlInformation,
+    _In_ PXENVIF_PACKET_INFO                    Info,
+    _In_ PXENVIF_PACKET_HASH                    Hash,
+    _In_ PVOID                                  Cookie
     )
 {
     PNET_BUFFER_LIST                            NetBufferList;
@@ -352,11 +352,11 @@ fail1:
=20
 static FORCEINLINE VOID
 __IndicateReceiveNetBufferLists(
-    IN  PXENNET_RECEIVER    Receiver,
-    IN  PNET_BUFFER_LIST    Remaining,
-    IN  NDIS_PORT_NUMBER    PortNumber,
-    IN  ULONG               NumberOfNetBufferLists,
-    IN  ULONG               ReceiveFlags
+    _In_ PXENNET_RECEIVER   Receiver,
+    _In_ PNET_BUFFER_LIST   Remaining,
+    _In_ NDIS_PORT_NUMBER   PortNumber,
+    _In_ ULONG              NumberOfNetBufferLists,
+    _In_ ULONG              ReceiveFlags
     )
 {
     PXENNET_ADAPTER         Adapter =3D Receiver->Adapter;
@@ -432,9 +432,9 @@ __IndicateReceiveNetBufferLists(
=20
 static VOID
 __ReceiverPushPackets(
-    IN  PXENNET_RECEIVER    Receiver,
-    IN  ULONG               Index,
-    OUT PBOOLEAN            Pause
+    _In_ PXENNET_RECEIVER   Receiver,
+    _In_ ULONG              Index,
+    _Out_ PBOOLEAN          Pause
     )
 {
     ULONG                   Flags;
@@ -480,8 +480,8 @@ __ReceiverPushPackets(
=20
 NDIS_STATUS
 ReceiverInitialize(
-    IN  PXENNET_ADAPTER     Adapter,
-    OUT PXENNET_RECEIVER    *Receiver
+    _In_ PXENNET_ADAPTER            Adapter,
+    _Outptr_ PXENNET_RECEIVER       *Receiver
     )
 {
     NET_BUFFER_LIST_POOL_PARAMETERS Params;
@@ -530,7 +530,7 @@ fail1:
=20
 VOID
 ReceiverTeardown(
-    IN  PXENNET_RECEIVER    Receiver
+    _In_ PXENNET_RECEIVER   Receiver
     )
 {
     ULONG                   Index;
@@ -577,9 +577,9 @@ ReceiverTeardown(
=20
 VOID
 ReceiverReturnNetBufferLists(
-    IN  PXENNET_RECEIVER    Receiver,
-    IN  PNET_BUFFER_LIST    NetBufferList,
-    IN  ULONG               ReturnFlags
+    _In_ PXENNET_RECEIVER   Receiver,
+    _In_ PNET_BUFFER_LIST   NetBufferList,
+    _In_ ULONG              ReturnFlags
     )
 {
     UNREFERENCED_PARAMETER(ReturnFlags);
@@ -589,19 +589,19 @@ ReceiverReturnNetBufferLists(
=20
 VOID
 ReceiverQueuePacket(
-    IN  PXENNET_RECEIVER                Receiver,
-    IN  ULONG                           Index,
-    IN  PMDL                            Mdl,
-    IN  ULONG                           Offset,
-    IN  ULONG                           Length,
-    IN  XENVIF_PACKET_CHECKSUM_FLAGS    Flags,
-    IN  USHORT                          MaximumSegmentSize,
-    IN  USHORT                          TagControlInformation,
-    IN  PXENVIF_PACKET_INFO             Info,
-    IN  PXENVIF_PACKET_HASH             Hash,
-    IN  BOOLEAN                         More,
-    IN  PVOID                           Cookie,
-    OUT PBOOLEAN                        Pause
+    _In_ PXENNET_RECEIVER               Receiver,
+    _In_ ULONG                          Index,
+    _In_ PMDL                           Mdl,
+    _In_ ULONG                          Offset,
+    _In_ ULONG                          Length,
+    _In_ XENVIF_PACKET_CHECKSUM_FLAGS   Flags,
+    _In_ USHORT                         MaximumSegmentSize,
+    _In_ USHORT                         TagControlInformation,
+    _In_ PXENVIF_PACKET_INFO            Info,
+    _In_ PXENVIF_PACKET_HASH            Hash,
+    _In_ BOOLEAN                        More,
+    _In_ PVOID                          Cookie,
+    _Out_ PBOOLEAN                      Pause
     )
 {
     PXENVIF_VIF_INTERFACE               VifInterface;
@@ -657,7 +657,7 @@ done:
=20
 PXENVIF_VIF_OFFLOAD_OPTIONS
 ReceiverOffloadOptions(
-    IN  PXENNET_RECEIVER    Receiver
+    _In_ PXENNET_RECEIVER   Receiver
     )
 {
     return &Receiver->OffloadOptions;
@@ -665,7 +665,7 @@ ReceiverOffloadOptions(
=20
 VOID
 ReceiverEnable(
-    IN  PXENNET_RECEIVER    Receiver
+    _In_ PXENNET_RECEIVER   Receiver
     )
 {
     PXENNET_ADAPTER         Adapter =3D Receiver->Adapter;
@@ -676,7 +676,7 @@ ReceiverEnable(
=20
 VOID
 ReceiverDisable(
-    IN  PXENNET_RECEIVER    Receiver
+    _In_ PXENNET_RECEIVER   Receiver
     )
 {
     PXENNET_ADAPTER         Adapter =3D Receiver->Adapter;
diff --git a/src/xennet/receiver=2Eh b/src/xennet/receiver=2Eh
index d8b8c84=2E=2E0b17b8c 100644
--- a/src/xennet/receiver=2Eh
+++ b/src/xennet/receiver=2Eh
@@ -40,52 +40,52 @@ typedef struct _XENNET_RECEIVER XENNET_RECEIVER, *PXEN=
NET_RECEIVER;
 #include "adapter=2Eh"
 extern NDIS_STATUS
 ReceiverInitialize(
-    IN  PXENNET_ADAPTER     Adapter,
-    OUT PXENNET_RECEIVER    *Receiver
+    _In_ PXENNET_ADAPTER        Adapter,
+    _Outptr_ PXENNET_RECEIVER   *Receiver
     );
=20
 extern VOID
 ReceiverTeardown(
-    IN  PXENNET_RECEIVER    Receiver
+    _In_ PXENNET_RECEIVER   Receiver
     );
=20
 extern VOID
 ReceiverReturnNetBufferLists(
-    IN  PXENNET_RECEIVER    Receiver,
-    IN  PNET_BUFFER_LIST    NetBufferList,
-    IN  ULONG               ReturnFlags
+    _In_ PXENNET_RECEIVER   Receiver,
+    _In_ PNET_BUFFER_LIST   NetBufferList,
+    _In_ ULONG              ReturnFlags
     );
=20
 extern VOID
 ReceiverQueuePacket(
-    IN  PXENNET_RECEIVER                Receiver,
-    IN  ULONG                           Index,
-    IN  PMDL                            Mdl,
-    IN  ULONG                           Offset,
-    IN  ULONG                           Length,
-    IN  XENVIF_PACKET_CHECKSUM_FLAGS    Flags,
-    IN  USHORT                          MaximumSegmentSize,
-    IN  USHORT                          TagControlInformation,
-    IN  PXENVIF_PACKET_INFO             Info,
-    IN  PXENVIF_PACKET_HASH             Hash,
-    IN  BOOLEAN                         More,
-    IN  PVOID                           Cookie,
-    OUT PBOOLEAN                        Pause
+    _In_ PXENNET_RECEIVER               Receiver,
+    _In_ ULONG                          Index,
+    _In_ PMDL                           Mdl,
+    _In_ ULONG                          Offset,
+    _In_ ULONG                          Length,
+    _In_ XENVIF_PACKET_CHECKSUM_FLAGS   Flags,
+    _In_ USHORT                         MaximumSegmentSize,
+    _In_ USHORT                         TagControlInformation,
+    _In_ PXENVIF_PACKET_INFO            Info,
+    _In_ PXENVIF_PACKET_HASH            Hash,
+    _In_ BOOLEAN                        More,
+    _In_ PVOID                          Cookie,
+    _Out_ PBOOLEAN                      Pause
     );
=20
 extern PXENVIF_VIF_OFFLOAD_OPTIONS
 ReceiverOffloadOptions(
-    IN  PXENNET_RECEIVER    Receiver
+    _In_ PXENNET_RECEIVER   Receiver
     );
=20
 extern VOID
 ReceiverEnable(
-    IN  PXENNET_RECEIVER    Receiver
+    _In_ PXENNET_RECEIVER   Receiver
     );
=20
 extern VOID
 ReceiverDisable(
-    IN  PXENNET_RECEIVER    Receiver
+    _In_ PXENNET_RECEIVER   Receiver
     );
=20
 #endif // _XENNET_RECEIVER_H_
diff --git a/src/xennet/string=2Ec b/src/xennet/string=2Ec
index e0e22a7=2E=2Eb75e249 100644
--- a/src/xennet/string=2Ec
+++ b/src/xennet/string=2Ec
@@ -40,8 +40,8 @@
=20
 static FORCEINLINE NTSTATUS
 __StringPut(
-    IN  PSTRING String,
-    IN  CHAR    Character
+    _In_ PSTRING    String,
+    _In_ CHAR       Character
     )
 {
     if (String->Length >=3D String->MaximumLength - 1)
@@ -53,10 +53,10 @@ __StringPut(
=20
 static PCHAR
 FormatNumber(
-    IN  PCHAR       Buffer,
-    IN  ULONGLONG   Value,
-    IN  UCHAR       Base,
-    IN  BOOLEAN     UpperCase
+    _In_ PCHAR      Buffer,
+    _In_ ULONGLONG  Value,
+    _In_ UCHAR      Base,
+    _In_ BOOLEAN    UpperCase
     )
 {
     ULONGLONG       Next =3D Value / Base;
@@ -113,9 +113,9 @@ FormatNumber(
=20
 static NTSTATUS
 StringWriteBuffer(
-    IN  PSTRING         String,
-    IN  const CHAR      *Format,
-    IN  va_list         Arguments
+    _In_ PSTRING        String,
+    _In_ const CHAR     *Format,
+    _In_ va_list        Arguments
     )
 {
     CHAR                Character;
@@ -419,9 +419,9 @@ done:
=20
 NTSTATUS
 StringVPrintf(
-    IN  PSTRING     String,
-    IN  const CHAR  *Format,
-    IN  va_list     Arguments
+    _In_ PSTRING    String,
+    _In_ const CHAR *Format,
+    _In_ va_list    Arguments
     )
 {
     NTSTATUS        status;
@@ -452,8 +452,8 @@ fail1:
=20
 NTSTATUS
 StringPrintf(
-    IN  PSTRING     String,
-    IN  const CHAR  *Format,
+    _In_ PSTRING    String,
+    _In_ const CHAR *Format,
     =2E=2E=2E
     )
 {
diff --git a/src/xennet/string=2Eh b/src/xennet/string=2Eh
index 03a96ce=2E=2E295617c 100644
--- a/src/xennet/string=2Eh
+++ b/src/xennet/string=2Eh
@@ -37,15 +37,15 @@
=20
 extern NTSTATUS
 StringVPrintf(
-    IN  PSTRING     String,
-    IN  const CHAR  *Format,
-    IN  va_list     Arguments
+    _In_ PSTRING    String,
+    _In_ const CHAR *Format,
+    _In_ va_list    Arguments
     );
=20
 extern NTSTATUS
 StringPrintf(
-    IN  PSTRING     String,
-    IN  const CHAR  *Format,
+    _In_ PSTRING    String,
+    _In_ const CHAR *Format,
     =2E=2E=2E
     );
=20
diff --git a/src/xennet/transmitter=2Ec b/src/xennet/transmitter=2Ec
index 4bb82bc=2E=2E01693ca 100644
--- a/src/xennet/transmitter=2Ec
+++ b/src/xennet/transmitter=2Ec
@@ -49,11 +49,11 @@ struct _XENNET_TRANSMITTER {
=20
 NDIS_STATUS
 TransmitterInitialize (
-    IN  PXENNET_ADAPTER     Adapter,
-    OUT PXENNET_TRANSMITTER *Transmitter
+    _In_ PXENNET_ADAPTER            Adapter,
+    _Outptr_ PXENNET_TRANSMITTER    *Transmitter
     )
 {
-    NTSTATUS                status;
+    NTSTATUS                        status;
=20
     *Transmitter =3D __AllocatePoolWithTag(NonPagedPool,
                                          sizeof(XENNET_TRANSMITTER),
@@ -79,7 +79,7 @@ fail1:
=20
 VOID
 TransmitterTeardown(
-    IN  PXENNET_TRANSMITTER Transmitter
+    _In_ PXENNET_TRANSMITTER    Transmitter
     )
 {
     Transmitter->Adapter =3D NULL;
@@ -99,9 +99,9 @@ C_ASSERT(sizeof (NET_BUFFER_LIST_RESERVED) <=3D RTL_FIEL=
D_SIZE(NET_BUFFER_LIST, Mi
=20
 static VOID
 __TransmitterCompleteNetBufferList(
-    IN  PXENNET_TRANSMITTER     Transmitter,
-    IN  PNET_BUFFER_LIST        NetBufferList,
-    IN  NDIS_STATUS             Status
+    _In_ PXENNET_TRANSMITTER    Transmitter,
+    _In_ PNET_BUFFER_LIST       NetBufferList,
+    _In_ NDIS_STATUS            Status
     )
 {
     ASSERT3P(NET_BUFFER_LIST_NEXT_NBL(NetBufferList), =3D=3D, NULL);
@@ -125,8 +125,8 @@ __TransmitterCompleteNetBufferList(
=20
 static VOID
 __TransmitterGetNetBufferList(
-    IN  PXENNET_TRANSMITTER     Transmitter,
-    IN  PNET_BUFFER_LIST        NetBufferList
+    _In_ PXENNET_TRANSMITTER    Transmitter,
+    _In_ PNET_BUFFER_LIST       NetBufferList
     )
 {
     PNET_BUFFER_LIST_RESERVED   ListReserved;
@@ -141,8 +141,8 @@ __TransmitterGetNetBufferList(
=20
 static VOID
 __TransmitterPutNetBufferList(
-    IN  PXENNET_TRANSMITTER     Transmitter,
-    IN  PNET_BUFFER_LIST        NetBufferList
+    _In_ PXENNET_TRANSMITTER    Transmitter,
+    _In_ PNET_BUFFER_LIST       NetBufferList
     )
 {
     PNET_BUFFER_LIST_RESERVED   ListReserved;
@@ -160,9 +160,9 @@ __TransmitterPutNetBufferList(
=20
 static VOID
 __TransmitterReturnPacket(
-    IN  PXENNET_TRANSMITTER     Transmitter,
-    IN  PVOID                   Cookie,
-    IN  NDIS_STATUS             Status
+    _In_ PXENNET_TRANSMITTER    Transmitter,
+    _In_ PVOID                  Cookie,
+    _In_ NDIS_STATUS            Status
     )
 {
     PNET_BUFFER_LIST            NetBufferList =3D Cookie;
@@ -178,10 +178,10 @@ __TransmitterReturnPacket(
=20
 static VOID
 __TransmitterOffloadOptions(
-    IN  PNET_BUFFER_LIST            NetBufferList,
-    OUT PXENVIF_VIF_OFFLOAD_OPTIONS OffloadOptions,
-    OUT PUSHORT                     TagControlInformation,
-    OUT PUSHORT                     MaximumSegmentSize
+    _In_ PNET_BUFFER_LIST                               NetBufferList,
+    _Out_ PXENVIF_VIF_OFFLOAD_OPTIONS                   OffloadOptions,
+    _Out_ PUSHORT                                       TagControlInforma=
tion,
+    _Out_ PUSHORT                                       MaximumSegmentSiz=
e
     )
 {
     PNDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO   LargeSendInfo;
@@ -247,8 +247,8 @@ __TransmitterOffloadOptions(
=20
 static VOID
 __TransmitterHash(
-    IN  PNET_BUFFER_LIST        NetBufferList,
-    OUT PXENVIF_PACKET_HASH     Hash
+    _In_ PNET_BUFFER_LIST       NetBufferList,
+    _Out_ PXENVIF_PACKET_HASH   Hash
     )
 {
     switch (NET_BUFFER_LIST_GET_HASH_FUNCTION(NetBufferList)) {
@@ -287,8 +287,8 @@ __TransmitterHash(
=20
 static VOID
 __TransmitterSendNetBufferList(
-    IN  PXENNET_TRANSMITTER     Transmitter,
-    IN  PNET_BUFFER_LIST        NetBufferList
+    _In_ PXENNET_TRANSMITTER    Transmitter,
+    _In_ PNET_BUFFER_LIST       NetBufferList
     )
 {
     PNET_BUFFER_LIST_RESERVED   ListReserved;
@@ -360,10 +360,10 @@ __TransmitterSendNetBufferList(
=20
 VOID
 TransmitterSendNetBufferLists(
-    IN  PXENNET_TRANSMITTER     Transmitter,
-    IN  PNET_BUFFER_LIST        NetBufferList,
-    IN  NDIS_PORT_NUMBER        PortNumber,
-    IN  ULONG                   SendFlags
+    _In_ PXENNET_TRANSMITTER    Transmitter,
+    _In_ PNET_BUFFER_LIST       NetBufferList,
+    _In_ NDIS_PORT_NUMBER       PortNumber,
+    _In_ ULONG                  SendFlags
     )
 {
     LIST_ENTRY                  List;
@@ -397,9 +397,9 @@ TransmitterSendNetBufferLists(
=20
 VOID
 TransmitterReturnPacket(
-    IN  PXENNET_TRANSMITTER                         Transmitter,
-    IN  PVOID                                       Cookie,
-    IN  PXENVIF_TRANSMITTER_PACKET_COMPLETION_INFO  Completion
+    _In_ PXENNET_TRANSMITTER                        Transmitter,
+    _In_ PVOID                                      Cookie,
+    _In_ PXENVIF_TRANSMITTER_PACKET_COMPLETION_INFO Completion
     )
 {
     NDIS_STATUS                                     Status;
@@ -415,7 +415,7 @@ TransmitterReturnPacket(
=20
 PXENVIF_VIF_OFFLOAD_OPTIONS
 TransmitterOffloadOptions(
-    IN  PXENNET_TRANSMITTER Transmitter
+    _In_ PXENNET_TRANSMITTER    Transmitter
     )
 {
     return &Transmitter->OffloadOptions;
diff --git a/src/xennet/transmitter=2Eh b/src/xennet/transmitter=2Eh
index 97d2f74=2E=2E4dc8937 100644
--- a/src/xennet/transmitter=2Eh
+++ b/src/xennet/transmitter=2Eh
@@ -40,33 +40,33 @@ typedef struct _XENNET_TRANSMITTER XENNET_TRANSMITTER,=
 *PXENNET_TRANSMITTER;
 #include "adapter=2Eh"
 extern NDIS_STATUS
 TransmitterInitialize(
-    IN  PXENNET_ADAPTER     Adapter,
-    OUT PXENNET_TRANSMITTER *Transmitter
+    _In_ PXENNET_ADAPTER            Adapter,
+    _Outptr_ PXENNET_TRANSMITTER    *Transmitter
     );
=20
 extern VOID
 TransmitterTeardown(
-    IN  PXENNET_TRANSMITTER Transmitter
+    _In_ PXENNET_TRANSMITTER    Transmitter
     );
=20
 extern VOID
 TransmitterSendNetBufferLists (
-    IN  PXENNET_TRANSMITTER Transmitter,
-    IN  PNET_BUFFER_LIST    NetBufferList,
-    IN  NDIS_PORT_NUMBER    PortNumber,
-    IN  ULONG               SendFlags
+    _In_ PXENNET_TRANSMITTER    Transmitter,
+    _In_ PNET_BUFFER_LIST       NetBufferList,
+    _In_ NDIS_PORT_NUMBER       PortNumber,
+    _In_ ULONG                  SendFlags
     );
=20
 extern VOID
 TransmitterReturnPacket(
-    IN  PXENNET_TRANSMITTER                         Transmitter,
-    IN  PVOID                                       Cookie,
-    IN  PXENVIF_TRANSMITTER_PACKET_COMPLETION_INFO  Completion
+    _In_ PXENNET_TRANSMITTER                        Transmitter,
+    _In_ PVOID                                      Cookie,
+    _In_ PXENVIF_TRANSMITTER_PACKET_COMPLETION_INFO Completion
     );
=20
 extern PXENVIF_VIF_OFFLOAD_OPTIONS
 TransmitterOffloadOptions(
-    IN  PXENNET_TRANSMITTER Transmitter
+    _In_ PXENNET_TRANSMITTER    Transmitter
     );
=20
 #endif // _XENNET_TRANSMITTER_H_
diff --git a/src/xennet/util=2Eh b/src/xennet/util=2Eh
index 597a2e1=2E=2E59ca37e 100644
--- a/src/xennet/util=2Eh
+++ b/src/xennet/util=2Eh
@@ -89,7 +89,7 @@ __CpuId(
     _Out_opt_ PULONG    EDX
     )
 {
-    int         Value[4] =3D {0};
+    int                 Value[4] =3D {0};
=20
     __cpuid(Value, Leaf);
=20
@@ -112,8 +112,8 @@ __InterlockedAdd(
     _In_ LONG       Delta
     )
 {
-    LONG        New;
-    LONG        Old;
+    LONG            New;
+    LONG            Old;
=20
     do {
         Old =3D *Value;
@@ -129,8 +129,8 @@ __InterlockedSubtract(
     _In_ LONG       Delta
     )
 {
-    LONG        New;
-    LONG        Old;
+    LONG            New;
+    LONG            Old;
=20
     do {
         Old =3D *Value;
@@ -262,7 +262,7 @@ __FreePages(
     _In_ PMDL   Mdl
     )
 {
-    PUCHAR	MdlMappedSystemVa;
+    PUCHAR      MdlMappedSystemVa;
=20
     ASSERT(Mdl->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA);
     MdlMappedSystemVa =3D Mdl->MappedSystemVa;
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.66b.c9e17cafd6760207.1a10cce729c.db9a895da82c41a7=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 05 16:03:49 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 05 Oct 2026 16:03:49 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1441001.1658597 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDlAK-0003Ek-Vg; Mon, 05 Oct 2026 16:03:48 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1441001.1658597; Mon, 05 Oct 2026 16:03:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDlAK-0003EZ-Qp; Mon, 05 Oct 2026 16:03:48 +0000
Received: by outflank-mailman (input) for mailman id 1441001;
 Mon, 05 Oct 2026 16:03:46 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10cce77e60003f66@swg.vates.tech>)
 id 1xDlAH-0003AY-Ul
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 16:03:45 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xDlAH-0031P3-A5
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 18:03:45 +0200
Received: from [10.42.69.6] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10cce77e60003f66@swg.vates.tech>)
 id 6ac3ca61-8faa-0a2a0a5109dd-0a2a4506b332-0
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 18:03:45 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-16d1c6.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10cce77e60003f66@swg.vates.tech>)
 id 6ac3ca60-195a-0a2a45060019-b9ff1c12ac99-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 18:03:45 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a10cce77e60003f66.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 05 Oct 2026 16:03:40 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 9242C8231E;
 Mon,  5 Oct 2026 18:03:39 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=0A1K8eEIURzoQeVbAwSw7MUvsorwHnI7jCMCoSCKYZM=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=mz7ZgLlwbDRSNfYjJ76vKHwPUf1fTBBZAbkD4tNKSscA9hGrHpsH252Qt+WzbNSkHKQ3a8shr
 V9Sd6fWqvjnDPpRaybXTMgya+bSL7Kky+dwgC6d1mFf2Y6FVYbfG7xCOf1THCVE4TUybqNcD/qy
 gV0MPMQBtr519akhDxDwKbyAMYLRSaR5sJ1HclZ9sK6o4MMP6ZTrDHmUVOAzBt/HCljBpua9Ttr
 vlneByYOhGrpo4NSDPJ6NEWSBR3MOcBFWvwgIC3bv9HXyti/ZrdfjiVKiNT7jEJGyl557HuoaHi
 tCOAdkBzmptvTSsP8y2amLQkr83whQz4jvLItpZQNtXw==
X-Zone-Loop: b56ee65697853f33b9397e5da864382e3912aa30b83c
x-campaign-type: default
x-transaction-id: 76848669-0590-4bc8-bd76-f6c9de81a19d
x-swg-uid: 01-76868256-a821-46a1-988a-eca042687aa1
X-Mailer: Sweego
Message-ID:
 <1791216220.8631fc262581453bbf619ec5b2062170.1a10cce77e60003f66@vates.tech>
x-swg-bid: 1791216220.8631fc262581453bbf619ec5b2062170.1a10cce77e60003f66
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 6/6] receiver: suppress warning on *Pause being unitialized in _ReceiverPushPackets
Date: Mon,  5 Oct 2026 18:03:31 +0200
In-Reply-To: <1791215681.8631fc262581453bbf619ec5b2062170.1a10cc6405c0003f66@vates.tech>
References: <1791215681.8631fc262581453bbf619ec5b2062170.1a10cc6405c0003f66@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.66f.1fc5506c91f0eda0.1a10cce764b.af637f02b20cc117=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791216219723
X-purgate-ID: tlsNG-16d1c6/1791216225-F480577B-3C5E3A35/0/0
X-purgate-type: clean
X-purgate-size: 1113

---=Part.66f.1fc5506c91f0eda0.1a10cce764b.af637f02b20cc117=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Code analysis raised a warning on *Pause being annotated as _Out_ but not
written on a success path, specifically the case where Count =3D=3D 0=2E
We can suppress it by initializing Pause to False=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xennet/receiver=2Ec | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/xennet/receiver=2Ec b/src/xennet/receiver=2Ec
index 1cb6519=2E=2E565d31b 100644
--- a/src/xennet/receiver=2Ec
+++ b/src/xennet/receiver=2Ec
@@ -450,6 +450,7 @@ __ReceiverPushPackets(
=20
     NetBufferList =3D Queue->Head;
     Count =3D Queue->Count;
+    *Pause =3D FALSE;
=20
     Queue->Tail =3D Queue->Head =3D NULL;
     Queue->Count =3D 0;
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.66f.1fc5506c91f0eda0.1a10cce764b.af637f02b20cc117=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 05 16:03:49 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 05 Oct 2026 16:03:49 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1441002.1658603 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDlAL-0003FF-3p; Mon, 05 Oct 2026 16:03:49 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1441002.1658603; Mon, 05 Oct 2026 16:03:49 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xDlAK-0003Ej-SN; Mon, 05 Oct 2026 16:03:48 +0000
Received: by outflank-mailman (input) for mailman id 1441002;
 Mon, 05 Oct 2026 16:03:46 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10cce76dd0003f66@swg.vates.tech>)
 id 1xDlAI-0003BR-4F
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 16:03:46 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xDlAH-00D3QI-G3
 for win-pv-devel@lists.xenproject.org; Mon, 05 Oct 2026 18:03:45 +0200
Received: from [10.42.69.2] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10cce76dd0003f66@swg.vates.tech>)
 id 6ac3ca57-2eae-0a2a0a5409dd-0a2a4502b32a-24
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 18:03:45 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a10cce76dd0003f66@swg.vates.tech>)
 id 6ac3ca60-6ca4-0a2a45020019-b9ff1c239b01-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 05 Oct 2026 18:03:45 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a10cce76dd0003f66.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 05 Oct 2026 16:03:39 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 597AA822C6;
 Mon,  5 Oct 2026 18:03:39 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=I3BIixAVsKOBoMJLFSnl5kPlp9ldzNXIZXFI2e8dAUY=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=CGim3I1UCfiEuZvGw1Yv99yMKFHGu7r7s3US2PF90ZWLxQZbKXjIJ0FJKcWznWf/YcxcXbyUx
 EgJ9Q54JYm015GVPu+MWgpHR5SLOki86UM8Sw3VG/awwZrIKh3DCFB635bddFmT3YQplWyKU9h2
 NcpM97f8u1pagYdR0pb5ZUD1dHiruV0lKXojPvB5k4nJ7hJUVa34gNQVab4F+pIjePqmuhBTN0c
 TqDPXx9c0OMscdXOdogANFjW9VRGX77s6WWfWzu+B3kJwFZrVq6SkAbX7yRDGQklKCTUsgD2kLp
 tqHuvnTuu1aRIQ2quEAmCV7kvajDKmk0DaEnriULEJRQ==
X-Zone-Loop: 6dbcd6a0d49b8a0732f4135b39008bcb68d13d94f0d8
x-campaign-type: default
x-transaction-id: e8d99cec-5358-42b8-a0d0-36675aafd652
x-swg-uid: 01-42548c44-17ce-4250-ace5-bec1eb8773ae
X-Mailer: Sweego
Message-ID:
 <1791216219.8631fc262581453bbf619ec5b2062170.1a10cce76dd0003f66@vates.tech>
x-swg-bid: 1791216219.8631fc262581453bbf619ec5b2062170.1a10cce76dd0003f66
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 5/6] adapter: fix Unitialized *Interface in _QueryInterface
Date: Mon,  5 Oct 2026 18:03:30 +0200
In-Reply-To: <1791215681.8631fc262581453bbf619ec5b2062170.1a10cc6405c0003f66@vates.tech>
References: <1791215681.8631fc262581453bbf619ec5b2062170.1a10cc6405c0003f66@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.66e.4387251a55ca1813.1a10cce753c.3597bc917c3d6cd3=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791216219452
X-purgate-ID: tlsNG-720697/1791216225-30BC02AC-834993F7/0/0
X-purgate-type: clean
X-purgate-size: 1332

---=Part.66e.4387251a55ca1813.1a10cce753c.3597bc917c3d6cd3=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Static code analysis raised a warning on *Interface in _QueryInterface
which is annotated as _Out_, but is not written by _QueryInterface on
the success path=2E
*Interface is filled when calling IoCallDriver(DeficeObject, Irp) down the
stack on the success path so the warning can just be suppressed by
initializing it=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xennet/adapter=2Ec | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/xennet/adapter=2Ec b/src/xennet/adapter=2Ec
index f1414fc=2E=2E965315d 100644
--- a/src/xennet/adapter=2Ec
+++ b/src/xennet/adapter=2Ec
@@ -2798,6 +2798,7 @@ __QueryInterface(
=20
     KeInitializeEvent(&Event, NotificationEvent, FALSE);
     RtlZeroMemory(&StatusBlock, sizeof(StatusBlock));
+    RtlZeroMemory(Interface, Size);
=20
     Irp =3D IoBuildSynchronousFsdRequest(IRP_MJ_PNP,
                                        DeviceObject,
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.66e.4387251a55ca1813.1a10cce753c.3597bc917c3d6cd3=---


From win-pv-devel-bounces@lists.xenproject.org Tue Oct 06 09:04:37 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 06 Oct 2026 09:04:37 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1441309.1658898 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xE16D-0005kr-DE; Tue, 06 Oct 2026 09:04:37 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1441309.1658898; Tue, 06 Oct 2026 09:04:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xE16D-0005kj-9y; Tue, 06 Oct 2026 09:04:37 +0000
Received: by outflank-mailman (input) for mailman id 1441309;
 Tue, 06 Oct 2026 09:04:36 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <owen.smith@citrix.com>) id 1xE16C-0005kS-4h
 for win-pv-devel@lists.xenproject.org; Tue, 06 Oct 2026 09:04:36 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xE16B-00DjAV-HU
 for win-pv-devel@lists.xenproject.org; Tue, 06 Oct 2026 11:04:35 +0200
Received: from [10.42.69.10] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ac4b99b-8faa-0a2a0a5109dd-0a2a450ac082-44
 for <win-pv-devel@lists.xenproject.org>; Tue, 06 Oct 2026 11:04:35 +0200
Received: from [52.101.43.29]
 (helo=SJ2PR03CU001.outbound.protection.outlook.com)
 by tlsNG-4011c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ac4b99e-f2d2-0a2a450a0019-34652b1d648a-3
 for <win-pv-devel@lists.xenproject.org>; Tue, 06 Oct 2026 11:04:34 +0200
Received: from MN6PR03MB7744.namprd03.prod.outlook.com (2603:10b6:208:4ef::8)
 by LV8PR03MB7472.namprd03.prod.outlook.com (2603:10b6:408:18f::14)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.472.20; Tue, 6 Oct
 2026 09:04:26 +0000
Received: from MN6PR03MB7744.namprd03.prod.outlook.com
 ([fe80::7172:3a7e:11a2:19ea]) by MN6PR03MB7744.namprd03.prod.outlook.com
 ([fe80::7172:3a7e:11a2:19ea%7]) with mapi id 15.21.0472.016; Tue, 6 Oct 2026
 09:04:26 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:x-ms-exchange-senderadcheck"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
 b=P5/vKegkYlBqvlFbWNJ9VS0ERCRNps8KMnyn0aWynJP4Gj2Te4m1Dajckf2bzFP2KCYbE9CoCBEsZ8A7ZNC8mXQitUOcKWBBELmhGN7exQiToIFO0GkiHKghwCPwDDy6zm5hSUX3tzvZQmSbWQETA3DUJ8DUpRaV8tHHL5hdQL4UpvrkIHNo0VYl7APPQvoSB5m67GC4DgqpeHz/AK8jLEbXkUjOMcLqY+rXzFkEPijQvnyclJbWr+3SZk7z88mfdALf7yQEDS9wNr7vWqCgHN8TldXDMgjN1mBebePRz8q4VKNCZnir1tm9kmrtL8QNN14vn2Up1QoZDPgjdjmong==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector10001;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=+r+EpXeTyYcqDpQdQhelA+pD0iEecDmzaAoufqcUKF0=;
 b=B4/QnIyjoBL+qcjoPOhuQ0Z15i0nByeIgB0wF8/dLuXY6Mh/Uw7CHmVt8ccpbkMI+GwBoh0EE8Yr6oJSz3822Y5mFBl0/syKLBFfYEg/b4M4S5TwsG95ERweYoBfedDZeoRDqC64DoQWMhHdBMVaklnhmFIdu3juGOFxAE+EiCdrGkEdfKQqdDPA62zrN8cKysNlGi5BDBCDnt1av9jSHDja+BZAv2+xUu4nlnJbcdi0UibPinl88TiLe6mgNjkPZoYJWWUvYLDGHGA6q1gDNugttQP9jR5PRKYEmzIYktXthm0w0vPiaAq/d4hBiioljTapC3buN/REUCIPL53MTg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=+r+EpXeTyYcqDpQdQhelA+pD0iEecDmzaAoufqcUKF0=;
 b=pDejXxYR3P6WSBExojHz+yEX9SdQvaVzS+i+hmXBHknMu54mJHRaCdUkW6A8T9onAjhZeAVLGpvMiRMxKQ7C44LN6ljKm1yxtjaz/CZ7VXYn1qBTib9BL5sHnvHC/jmEb2ucIrSowImhPJuIRJTB7Q7yEEa2cuauc3duzkR6abg=
From: Owen Smith <owen.smith@citrix.com>
To: Mounah Honore Cesaire <cesaire.mounah@vates.tech>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Subject: Re: [PATCH 00/17] Update SAL annotations in xeniface
Thread-Topic: [PATCH 00/17] Update SAL annotations in xeniface
Thread-Index: AQHdVMG+/x9dvOnKzUKUxdzt0au1qLbvAWIfgAAZnACAAR6nJg==
Date: Tue, 6 Oct 2026 09:04:26 +0000
Message-ID:
 <MN6PR03MB77447E3EDFF6A781968A99BEFE952@MN6PR03MB7744.namprd03.prod.outlook.com>
References:
 <1791201881.8631fc262581453bbf619ec5b2062170.1a10bf3abba0003f66@vates.tech>
 <SA6PR03MB77609DCDD616CE26D512DA11FE962@SA6PR03MB7760.namprd03.prod.outlook.com>
 <1791215864.8631fc262581453bbf619ec5b2062170.1a10cc90ac00003f66@vates.tech>
In-Reply-To:
 <1791215864.8631fc262581453bbf619ec5b2062170.1a10cc90ac00003f66@vates.tech>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
msip_labels:
authentication-results: mx.microsoft.com 1; dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=citrix.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: MN6PR03MB7744:EE_|LV8PR03MB7472:EE_
x-ms-office365-filtering-correlation-id: be82a130-ae39-4c6e-311d-08df2388d295
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam:
 BCL:0;ARA:13230040|1800799024|366016|376014|23010399003|38070700021|56012099006|4143699003|11063799006|10067099003|18002099003|22082099003|6133799003|3023799007|13003099007;
x-microsoft-antispam-message-info:
 5CHsOmTFhnn8oJInDlH/Mso+evU8puWJ+23W9JWdahELEyFvSgzKeTWl7R0Pf5vUYC/BCzh0lIp9vg85qmLIZX46LaNRKDfCu861Y1Ep065LRaYw5IE8fFS4g9U5bIuTI/A9WJIYjTNymL6jtDJ5cEks382Bpgl/heTQaSafxQFHOFinklVpas2YcYVi34oP28fKHaH8zwKapY2vZKUs2MwpL3bXs4HVuItBdYvZxApJCwv/jv3x9ncQ/h9EK74DFXD/XQq8hGDg60rEUHr7dIVh+SLRGInm1noGw1KgiXwVPLxJoVXsPuUc8psDdQMmaLFM2Z5va05BIRn4h9mc6w4V7BW/Rbx6Q0rP5v4T4+ikn+veo1f9HxLXCL7xV4cB0XKnoCoO9Q+Yd4NIoOYtlNAFuxEASGIld/exYNv5YH15ltM6YzhnWYRrw1Flki6gf+URcAovOYSNb9e9Aa3H8MolQMdiTYhLjivZ4MTgve8EG8k7UMaRlgbtBNnbxBAArE1brR6REcvIhmFDmsH1Z9t72o9DnXd/h4XKmT8Hg8+HlybnXEUO/G+5kApeMQ1YIGtnnO4uXFbuh1s9n5ewU0bAI+Ix0TEENqJRaAVdBhytZ/iq+lgVO13jlPOBKXTYFF+o0/8QoJyg02sscuugeSVILDSDM4J21H2H6CF4n+o=
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN6PR03MB7744.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(23010399003)(38070700021)(56012099006)(4143699003)(11063799006)(10067099003)(18002099003)(22082099003)(6133799003)(3023799007)(13003099007);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?iso-8859-1?Q?hs2GQdtm/nsyV2kNDQoyR26nEFSYsKU/3VTIx+lb1SQYChowY/8YRy4y9B?=
 =?iso-8859-1?Q?wxUoyfqq4FA3m3odvvgEXGV78Q/L/VuiF5NQQKKp5J/FKYF84rCrwdGpfh?=
 =?iso-8859-1?Q?T6LIJBomcCrUVzx4Iy4ob0DQa9SLS2CMtUXYJOfXvb5fSa65TyeqzdKO3T?=
 =?iso-8859-1?Q?+87qYfltx2dIyVP7t/uPcymtLieoKg6FW+mMtKf9/8Pi+pvTM0nZz/1igN?=
 =?iso-8859-1?Q?CfGzeVd85kBNixVnjmu+c2fQ2hTpr6Ph8aIMdoQ2JjIGJNHELqqpeeYPSl?=
 =?iso-8859-1?Q?kkh7ARlisHkWWJQ4JrQymxuNWPTWEZbKtXLfgIT6eayVYnM38g/QOKJREF?=
 =?iso-8859-1?Q?rdDoZdHg4n4L3XRs1Wh3XRHh1MeTcUrzDoa/beRJO5uOs9RQ5usqH+KtEI?=
 =?iso-8859-1?Q?9tJU2XqhvjnSt2sLJe6C9lyTcX6NZFOuaeeD5MEOiK8Fr7Pi2BgAqrmOWe?=
 =?iso-8859-1?Q?TcbShIU//S+jtry9YXsPoH0wJRkWjYyQmfWWeYmfYt6i++HEbINKsw6qDD?=
 =?iso-8859-1?Q?2HArqRi4gbqOqFWNUgjSw3Nxbw59Gyf/La3Naod27lX79OYrWYYYY4cLTn?=
 =?iso-8859-1?Q?Bud4O3Ihi1DIr4bZXiG4TlphnioSKILHF3HgMNowgiCAHVM+ego1Ksrplq?=
 =?iso-8859-1?Q?S02COrshw2xJ283PW/f7kFBbdV8A/EAvCqbGhCfvcLQ+VY+qOlZIZFwRe8?=
 =?iso-8859-1?Q?kri3bslqp/0wsJcT4VmCjgtVmx++aOHRoM+CFZKLK1gtwl9XjR3VWSSm+y?=
 =?iso-8859-1?Q?MkN45so9n9U+m3qlhZCjW0YeHvSsLBBDepL+2EuPn0HVgyPLKt++XYB784?=
 =?iso-8859-1?Q?nTmjKTLi06qC61cUDYS+nF2tGG0gCioBZ/iIUV8UC3kz9DCE7n/ksYr5Pj?=
 =?iso-8859-1?Q?6tRCAQUSUkXZ3nw9yIjm/KCvyLJSDmbC48tlaBY+3tREifYYuUIQRy2jL8?=
 =?iso-8859-1?Q?0LaJ3RaoeHxm3e5sLaVGgGZqrviExfMzAia+2RSDKJkw8Efe+4rskzv3ly?=
 =?iso-8859-1?Q?9uraT8gpb3at4+PsvdRlkql3aoXzoveHd7Ap3YfVSbNzGsmLLSiDlRMgII?=
 =?iso-8859-1?Q?pPnG0A8Hk/ZwRi5fl+AgvaQ+wUAMfJ1SV6rwggDUZnCEdeauyCfCHGq+KJ?=
 =?iso-8859-1?Q?iU6imAblS+64Spe4xfT4d2ZrPop5Up5Y0R35RYQobbfFApud7MK6EAP+uZ?=
 =?iso-8859-1?Q?xPa2wUNpsXa9r/XMZ8pqShsoJZ5cDjDdrvCD1mcUv3YAWyYlOwHmK3Lp25?=
 =?iso-8859-1?Q?0hgadzkQr02pU1CN8oJ8Tn/PFc+yZEAInTCRIWnR5qM5m9flTZfte4gW6x?=
 =?iso-8859-1?Q?7BRzhX+Fd2bg3xJ0y1K6EgVO5HWS/qI4JJDYW9lHTA9N2HRcdN7dBsNMuf?=
 =?iso-8859-1?Q?ynG0J4TesGFpseG3EnA2zzfu8MgmYue4dvsdHPfyXC2Q1pjR8sHMVf0Q4n?=
 =?iso-8859-1?Q?cIU2kID0x6lFbcycOFbE4PtTywzKEeVsIewLjpLQm/l3zimpseGNfnQcWn?=
 =?iso-8859-1?Q?8CJNrVTHB6ifuE9+NLBSPZKGGQkRDi9HlrL4KJB4ZeNn1Rxi6l8TCwCt4R?=
 =?iso-8859-1?Q?ftHQ6wU68FpgE5foe6UdJaTftc3YyFaJYFtrt8aA1tPjckI+0vUwYqtOKR?=
 =?iso-8859-1?Q?au2QukGpWV/crF/er8bl74YMQWPmTQXpPW9NExq+/KLHJtU42KICjINL3P?=
 =?iso-8859-1?Q?MuMFkuDnaKaFVoNQ57HNTXn/ReT0SvBS0xDi743prPRAT7YoAyBKievD0b?=
 =?iso-8859-1?Q?mcTZhAQJtcCvtrGEiQ09Pq/DwaxscDuHFVBKT9PT2MHCRu?=
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-OriginatorOrg: citrix.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: MN6PR03MB7744.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: be82a130-ae39-4c6e-311d-08df2388d295
X-MS-Exchange-CrossTenant-originalarrivaltime: 06 Oct 2026 09:04:26.4967
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: BSNoKb1RdqEv0P6+VXYMb1KHgccJ+n8SSAiCfxY90qd1aI/YDWz2tX3S56ffcRGh/TG8svi+DI1ekBhtFw5/MA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV8PR03MB7472
X-purgate-ID: tlsNG-4011c0/1791277475-4B8D5CFC-8FB5C71F/0/0
X-purgate-type: clean
X-purgate-size: 3700

The entire patch series looks good
Reviewed-by: Owen Smith <owen.smith@citrix.com>

________________________________________
From: win-pv-devel <win-pv-devel-bounces@lists.xenproject.org> on behalf of=
 Mounah Honore Cesaire <cesaire.mounah@vates.tech>
Sent: 05 October 2026 4:57 PM
To: win-pv-devel@lists.xenproject.org
Subject: Re: [PATCH 00/17] Update SAL annotations in xeniface


On 10/5/26 4:27 PM, Owen Smith wrote:
> Hi,
>
> This series seems to be missing patches 10 through 17
>
> Owen


Indeed, Sorry. I will send the rest.

C=E9saire


>
> ________________________________________
> From: win-pv-devel <win-pv-devel-bounces@lists.xenproject.org> on behalf =
of C=E9saire Mounah <cesaire.mounah@vates.tech>
> Sent: 05 October 2026 1:04 PM
> To: win-pv-devel@lists.xenproject.org
> Cc: C=E9saire Mounah
> Subject: [PATCH 00/17] Update SAL annotations in xeniface
>
> This update concerns updating and fixing SAL annotations in the xeniface =
driver.
>
> C=E9saire Mounah (17):
>    xeniface: Sync common files with xenbus
>    Convert to SAL 2.0 annotations
>    util: fix some annotations
>    wmi: fix some anntotations
>    ioctl: fix annotations
>    fdo: fix annotations
>    update string typedefs in all include files
>    wmi: fix annotation of AccessWmiBuffer
>    fix XENBUS_GNTTAB_QUERY_REFERENCE annotation
>    driver: fix annotation errors
>    xc: fix annotations
>    fdo: suppress warning in FdoQueryInterface
>    ioctl: fix annotation of __CaptureUserBuffer
>    wmi: fix output buffer annotations
>    include: update the annotations of shared interfaces
>    xeniface: route AccessWmiBuffer unknown-type exit through common path
>    util: fix annotation of __wcstok_r
>
>   include/cache_interface.h       |  76 ++--
>   include/evtchn_interface.h      |  72 ++--
>   include/gnttab_interface.h      |  88 ++---
>   include/shared_info_interface.h |  44 +--
>   include/store_interface.h       |  84 ++---
>   include/suspend_interface.h     |  24 +-
>   include/xencontrol.h            | 165 +++++----
>   src/xencontrol/xencontrol.c     | 337 ++++++++---------
>   src/xeniface/assert.h           |  82 ++--
>   src/xeniface/driver.c           |  32 +-
>   src/xeniface/fdo.c              | 348 ++++++++---------
>   src/xeniface/fdo.h              |  26 +-
>   src/xeniface/ioctl_evtchn.c     | 144 +++----
>   src/xeniface/ioctl_gnttab.c     | 132 +++----
>   src/xeniface/ioctl_sharedinfo.c |  10 +-
>   src/xeniface/ioctl_store.c      | 162 ++++----
>   src/xeniface/ioctl_suspend.c    |  66 ++--
>   src/xeniface/ioctls.c           |  50 +--
>   src/xeniface/ioctls.h           | 272 +++++++-------
>   src/xeniface/irp_queue.c        |  46 +--
>   src/xeniface/irp_queue.h        |  28 +-
>   src/xeniface/log.h              |  16 +-
>   src/xeniface/mutex.h            |  10 +-
>   src/xeniface/names.h            |  18 +-
>   src/xeniface/registry.c         | 452 ++++++++++++----------
>   src/xeniface/registry.h         | 207 ++++++-----
>   src/xeniface/thread.c           |  38 +-
>   src/xeniface/thread.h           |  18 +-
>   src/xeniface/util.h             |  90 +++--
>   src/xeniface/wmi.c              | 638 ++++++++++++++++----------------
>   src/xeniface/wmi.h              |  18 +-
>   31 files changed, 1954 insertions(+), 1839 deletions(-)
>
> --
> 2.55.0.windows.5
>
>
>
> --
> C=E9saire Mounah | Vates Windows Guest Tools Engineer
>
> XCP-ng & Xen Orchestra - Vates solutions
>
> web: https://vates.tech


--
C=E9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen Orchestra - Vates solutions

web: https://vates.tech


From win-pv-devel-bounces@lists.xenproject.org Tue Oct 06 09:27:56 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 06 Oct 2026 09:27:56 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1441317.1658902 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xE1Sm-0000O2-04; Tue, 06 Oct 2026 09:27:56 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1441317.1658902; Tue, 06 Oct 2026 09:27:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xE1Sl-0000Nv-SF; Tue, 06 Oct 2026 09:27:55 +0000
Received: by outflank-mailman (input) for mailman id 1441317;
 Tue, 06 Oct 2026 09:27:54 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <owen.smith@citrix.com>) id 1xE1Sk-0000Np-Ne
 for win-pv-devel@lists.xenproject.org; Tue, 06 Oct 2026 09:27:54 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xE1Sk-005CL2-4Y
 for win-pv-devel@lists.xenproject.org; Tue, 06 Oct 2026 11:27:54 +0200
Received: from [10.42.69.5] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ac4bf10-2eae-0a2a0a5409dd-0a2a4505b714-34
 for <win-pv-devel@lists.xenproject.org>; Tue, 06 Oct 2026 11:27:53 +0200
Received: from [52.101.43.27]
 (helo=SJ2PR03CU001.outbound.protection.outlook.com)
 by tlsNG-c201ff.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ac4bf17-4cb1-0a2a45050019-34652b1b6674-3
 for <win-pv-devel@lists.xenproject.org>; Tue, 06 Oct 2026 11:27:53 +0200
Received: from MN6PR03MB7744.namprd03.prod.outlook.com (2603:10b6:208:4ef::8)
 by DS7PR03MB8033.namprd03.prod.outlook.com (2603:10b6:8:250::14) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.496.15; Tue, 6 Oct
 2026 09:27:49 +0000
Received: from MN6PR03MB7744.namprd03.prod.outlook.com
 ([fe80::7172:3a7e:11a2:19ea]) by MN6PR03MB7744.namprd03.prod.outlook.com
 ([fe80::7172:3a7e:11a2:19ea%7]) with mapi id 15.21.0472.016; Tue, 6 Oct 2026
 09:27:49 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:x-ms-exchange-senderadcheck"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
 b=oHEto4AxeOTbFvSx+UhkXjNHehhuG+VLejYgSXbT53n4GV50Bqsj6WrAqt0wiOPcOBXBbQ3EPjYVPnmct8nHpd2eaJ6Udks76XNc1wa2LQBufP3LZupKSMGGqbP4aqc0ajndgpfgsa6lCyrFl0aRbXS3Joecgt0wmCn9tzxSuXE+NCMjJ9WMW5zLSzh670+gP+0NXsbMsnHCOB8mBzwN0mgPW80UGa4d0fCUOHdjlcsEiE4OvWbh5RVxRy5XNFkgdvKzouugWRbhkiCtPbqmLiHh29XzX98Ro5TdZwSEzUPGNltQ1U8wz9oW/13fvFD/7wtfwtRjnvuXf8W5jO/L5g==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector10001;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=NkcBVoKvfVAC2OG4487jQ9M9Eaanr8/R+A5ZZXYzJVA=;
 b=xyr1dzZMIFRMppO+5UsBsAl2oTRnwQeNPI+bGEJC7JTZndSfUBl5WMzgCSStVpral44ygE97oLdxabMM1bh4QKVsDyj5d3XfhxZcG0o8v6GNA18bvdxJyktxjZtj3qTz8LAonOupMGrRFeklJHTrvN46JSm3gEYzkrgBWL7kczc1XWijtTedflgs2J+jm7/7ivYMdmwbSteEbbZCrNmGVpVuie8KsGZK0zaA8noQyiYeKW8V6YhjQPdi485jnOrsgF0meb5wksd++fof1+8e62+vuTMYIq53ZvluGCEeKLugeIm4YA6t9mCbWoZBxdTj2XIThsRs2NHLiEEszksueg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=NkcBVoKvfVAC2OG4487jQ9M9Eaanr8/R+A5ZZXYzJVA=;
 b=sZFRiibtgaCKSnsZAe1PUD1Wd43IP7CSMBRRuIiRgML+aDJcGs/4U4yEsSl7r8/F/qny79xfmZwBDnfDM2a8nR4KwAY8FQEy8VnDMy3hUzM45rtgS0evOv7doj18hN6Dq1R4drewZewQSTqA4TdqOAVp6mhtKxwhksPVa3yUIUs=
From: Owen Smith <owen.smith@citrix.com>
To: =?iso-8859-1?Q?C=E9saire_Mounah?= <cesaire.mounah@vates.tech>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Subject: Re: [PATCH 0/6] xennet: update annotations to SAL 2.0
Thread-Topic: [PATCH 0/6] xennet: update annotations to SAL 2.0
Thread-Index: AQHdVOHooRZLd2qtb0ONAvSblGJCvLbwQAmq
Date: Tue, 6 Oct 2026 09:27:49 +0000
Message-ID:
 <MN6PR03MB77446D2D5A780B92A6A4F8F1FE952@MN6PR03MB7744.namprd03.prod.outlook.com>
References:
 <1791215681.8631fc262581453bbf619ec5b2062170.1a10cc6405c0003f66@vates.tech>
In-Reply-To:
 <1791215681.8631fc262581453bbf619ec5b2062170.1a10cc6405c0003f66@vates.tech>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
msip_labels:
authentication-results: mx.microsoft.com 1; dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=citrix.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: MN6PR03MB7744:EE_|DS7PR03MB8033:EE_
x-ms-office365-filtering-correlation-id: ef19b954-0315-4e70-8e20-08df238c16b7
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam:
 BCL:0;ARA:13230040|376014|23010399003|366016|1800799024|10067099003|11063799006|56012099006|6133799003|18002099003|22082099003|38070700021;
x-microsoft-antispam-message-info:
 79ogeYNEsh/Zer1x/5+JDknjZAcR6/joKH8hbQvJuyiSf0NeoR+lIgC7FV+2MQa6llkqpJbR3udpZTxnWL4nwnF7qc6tqinVB1MEFNvb3C4QZxIF1rpTID5/YJ7Q40NRVl+XOCDcowMeKWVltosJb3T4c5yLEAmK7w/CPtta6g3HuM/xvXYX3Hvb4qxC4yIH+sdmYzCJ3N7UQYD/+Ljc3fA45Yjs7Kwx8Hh1YeH/+H9vMqZuOQq4ExduFuWtR/OsPDDhqi76kJVs+ULD9bfcB4qvNwdX35PJM/7ZvficNMtYJTYVuva+LM1JGcs06Uc/eS5JW0ecCKBNjrYlDqcSMUabQ07SMVYHlY7RHQKQi+kItHJFgS+3fVfAT2a+W2YVeLCkI21r/OtjVqZZrwSDVIkCXu/daXbfL0lXrAzllx0ypDYpWFXq1pi2MhM9sT8t3/YFZmJwUWvAaL0/2YwK9IgylRbwDVCM6dQxyjR2U1T9k0D3HiA0c3Wx2lMXUR5jhB0gRxRvzAARbY7PX4Sm2eQHiQm/VPpLTUJinoZpZM+k4K5119LmwhdbWg5/aYaOg9ZTlHAQ6ckPn2utJt85/0jRveFeIr+/NdslMWAV2+ZMQmSXhwhAjtR4Y7K2hltez5RFV8u9DEjwiU3REU6a+m2GJSQM4GJNOaLbGfKf47I=
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN6PR03MB7744.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(23010399003)(366016)(1800799024)(10067099003)(11063799006)(56012099006)(6133799003)(18002099003)(22082099003)(38070700021);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?iso-8859-1?Q?8MtVqGVzLVqSsNlGzR8oWgJRYW7+PH27UQg+5OK84WVp/Ts2J3jEl+ssn6?=
 =?iso-8859-1?Q?xxt4ld8yEBE0OTaciA7MefL9f2uYHK1omaECqu2PfKB3MoI1N74DhFk3/9?=
 =?iso-8859-1?Q?61dJuEWNTiiQe+TCEkYCPSbgUJgVQrYEZXOrb/cbuAS2lW98DdgHPFs15I?=
 =?iso-8859-1?Q?daNbnyiHdRnNAuyZvYGJS9s27FOChIhUby87XwfFLoGz45hJhnSNXc15iL?=
 =?iso-8859-1?Q?cTxFPnUjbF+1q/t0xroOiokPD58pX40cfoJEILJGvLbrdk5niBFtFhop0o?=
 =?iso-8859-1?Q?PF0cJu/WsedeCqae0FuxkmOWquLJjxO1Ltw3bvCuSiGj0eXjHnE5YNWiUN?=
 =?iso-8859-1?Q?6FwFDtblaWk4cTYEgRBsMqwu1u1lb2eR0mRbqugn8fRFIj9FcGgUhuLC9N?=
 =?iso-8859-1?Q?W/akm8z7uscjkQMkR4XqsG+Zyd2LEYCR/NuKE6NIdzBNtZdBsQyh2TUHUR?=
 =?iso-8859-1?Q?AwkMjCVB5tUCjbjtU5E5EiGXyA3JkF5/Rtup2i4qBeM8PUNsOsOu01dwGz?=
 =?iso-8859-1?Q?4rAQIsH5nYMfglKw1NQEYB9cCQ9j2TNerTqt8s8C3J/0rQVOmgAN+SDpiN?=
 =?iso-8859-1?Q?E0umQIxCkqcwwbe9Gwd5dr5TJP2ONbK/CIjArrm65RTKXk/sDKzydCaR1j?=
 =?iso-8859-1?Q?rxzmK3k1SRgzW3Oz6ACYrpSO/P6DGIN+GleMV8SV4wZYf7vJpzgq227BYL?=
 =?iso-8859-1?Q?xlL7Ixw4+wYVEjvJun0cWtnhRHyAhsttj5snImeLqYRgrF68qDJvsVqq9N?=
 =?iso-8859-1?Q?j3E5rOwMv4elCyjqYa46pjHwexvl+9e8NYGOuPLcLlUr+4tUdpr8/K15Wi?=
 =?iso-8859-1?Q?xMF3Ef7XucQPXo4E1YobYpo7STp7Mv5LwkmlHGy7oUCmp17Q6JJxBA6K6A?=
 =?iso-8859-1?Q?oR1qsuTz+lqUNxs/VeE6CeZws4RA4gN60COsuL20iypTz3D8FqjS7k2aOR?=
 =?iso-8859-1?Q?HBp3tJh8SJXsZ3j1dJ4uE4RFXOnPnIC4QJ1ahXpn6sgNkws5cNg/YYmxaB?=
 =?iso-8859-1?Q?arCpqXoF16IXYAagW3PA2yOSStFiNz1zplmCnyCCfNsE68mmZwwCu5cKp/?=
 =?iso-8859-1?Q?9cirObf3Jm/qm6wbpJ1Uwre9Z2pSchPGR8/3pLVRtFk8Lkm2l0PbNgj4+Y?=
 =?iso-8859-1?Q?jDEVaCdCUpXyk8cdmxxAxwLbl6nqXfZmARl+Ow4aoJ4OlgHaABC9nuIZPL?=
 =?iso-8859-1?Q?xJTA0ArGOqmSkvoRP2nw9ACQNpPKLXDao5BGIefZWnQh7Nop0d1W86Ma/H?=
 =?iso-8859-1?Q?Ee9SGQxp0bncXCSpFzbNKtkH2qWmwAbjuBWqUDP4OKamCqnTczynvqFaZ9?=
 =?iso-8859-1?Q?1AliB6rcgTmf5yVVLjYFFnM8+flgaiFxWR6qUWmWyE74oOhAExVdXMjQwb?=
 =?iso-8859-1?Q?SCMkIasb6Mlb8kA+H0avBohJu8sx54tOefbU48fd4DspunSBNA4x9XvBAx?=
 =?iso-8859-1?Q?5H1EOPzB+UuXVtz9qnzGkjCXc+bip+6HHSDMM/JI9iMGdWI35xjZz2RW8g?=
 =?iso-8859-1?Q?fo50VBttu6LUD4ImukOfGBa0i68BZZ7g5yAcPwJWVUyOmrC5ytVk5UrNGa?=
 =?iso-8859-1?Q?vXhEYPEibp9vA9xIi+s29UWjRw0mxf/UptrodmZ2IvD9d3yvod6laYuktT?=
 =?iso-8859-1?Q?gwsRC7xojBH3rRNCexJQIlnrMH50bfNCnXTRUFiqGkZjW2ndbwF/CKXqUK?=
 =?iso-8859-1?Q?sJhK6Y27h2nELVI1e54haSAcFmSGHEYp+uOH1RGO8wC0kLIg482R050mYE?=
 =?iso-8859-1?Q?vGFfVZ4/dSGGojtWgfzQPZJjdTgb0ze2WCHus0mnWCnETp?=
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-OriginatorOrg: citrix.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: MN6PR03MB7744.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: ef19b954-0315-4e70-8e20-08df238c16b7
X-MS-Exchange-CrossTenant-originalarrivaltime: 06 Oct 2026 09:27:49.3142
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: wi5r2LIQghVOEKgX1ETRu95Ef4e37YT2UF4xMX8Od/eRFPlDnm7jZxivWv0WjQKozIVBdfDCmw7v7SZJYS6Kaw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR03MB8033
X-purgate-ID: tlsNG-c201ff/1791278873-726B52A1-52A8CD19/0/0
X-purgate-type: clean
X-purgate-size: 2322

The full patch series
Reviewed-by: Owen Smith <owen.smith@citrix.com>

________________________________________
From: win-pv-devel <win-pv-devel-bounces@lists.xenproject.org> on behalf of=
 C=E9saire Mounah <cesaire.mounah@vates.tech>
Sent: 05 October 2026 4:54 PM
To: win-pv-devel@lists.xenproject.org
Cc: C=E9saire Mounah
Subject: [PATCH 0/6] xennet: update annotations to SAL 2.0

Update SAL annotations in xennet to SAL 2.0.
This update has 3 main changes:

1. Synchronize common files with xeniface.
* xennet: sync common files with xeniface

2. Convert and fix old annotations to SAL 2.0.
* xennet: convert and fix old annotations to SAL 2.0: Mechanical pass
* xennet: fix IN annotations
* xennet: use correct string annotations

3. Suppress warnings raised by static analysis.
* adapter: fix Unitialized *Interface in _QueryInterface
* receiver: suppress warning on *Pause being unitialized in
    _ReceiverPushPackets

C=E9saire Mounah (6):
  xennet: sync common files with xeniface
  xennet: convert old annotations to SAL 2.0: Mechanical pass
  xennet: fix IN annotations
  xennet: use correct string annotations
  adapter: fix Unitialized *Interface in _QueryInterface
  receiver: suppress warning on *Pause being unitialized in
    _ReceiverPushPackets

 include/store_interface.h   |  84 ++++-----
 include/suspend_interface.h |  24 +--
 include/vif_interface.h     | 158 ++++++++---------
 src/xennet/adapter.c        | 333 ++++++++++++++++++------------------
 src/xennet/adapter.h        |  32 ++--
 src/xennet/assert.h         |  83 ++++-----
 src/xennet/dbg_print.h      |  20 +--
 src/xennet/driver.c         |  20 +--
 src/xennet/driver.h         |   2 +-
 src/xennet/miniport.c       |  66 +++----
 src/xennet/miniport.h       |   6 +-
 src/xennet/receiver.c       | 111 ++++++------
 src/xennet/receiver.h       |  44 ++---
 src/xennet/string.c         |  28 +--
 src/xennet/string.h         |  10 +-
 src/xennet/transmitter.c    |  60 +++----
 src/xennet/transmitter.h    |  22 +--
 src/xennet/util.h           | 102 ++++++-----
 18 files changed, 611 insertions(+), 594 deletions(-)

--
2.55.0.windows.5



--
C=E9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen Orchestra - Vates solutions

web: https://vates.tech


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 08 06:30:16 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 08 Oct 2026 06:30:16 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1442949.1660329 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xEhdv-00010E-RD; Thu, 08 Oct 2026 06:30:15 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1442949.1660329; Thu, 08 Oct 2026 06:30:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xEhdv-000106-OT; Thu, 08 Oct 2026 06:30:15 +0000
Received: by outflank-mailman (input) for mailman id 1442949;
 Thu, 08 Oct 2026 06:30:14 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <owen.smith@citrix.com>) id 1xEhdu-0000yl-Fi
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 06:30:14 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xEhdt-00A6FL-RL
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 08:30:13 +0200
Received: from [10.42.69.2] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ac73875-bab6-0a2a0a5309dd-0a2a450283ec-0
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 08:30:13 +0200
Received: from [160.101.131.8] (helo=na1pdmzitismtp01.tibco.com)
 by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ac73874-6ca4-0a2a45020019-a0658308a07a-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 08:30:13 +0200
Received: from mewpvdipd2033.citrite.net (unknown [10.113.48.64])
 by na1pdmzitismtp01.tibco.com (Postfix) with ESMTP id 58564482EA5E;
 Thu,  8 Oct 2026 02:28:02 -0400 (EDT)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; none
From: Owen Smith <owen.smith@citrix.com>
To: win-pv-devel@lists.xenproject.org
Cc: Owen Smith <owen.smith@citrix.com>
Subject: [PATCH 2/2] Clear SRB queue and Shutdown queue on reset
Date: Thu,  8 Oct 2026 07:30:06 +0100
Message-ID: <20261008063007.1304-2-owen.smith@citrix.com>
X-Mailer: git-send-email 2.51.2.windows.1
In-Reply-To: <20261008063007.1304-1-owen.smith@citrix.com>
References: <20261008063007.1304-1-owen.smith@citrix.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-purgate-ID: tlsNG-720697/1791441013-F3ABD2AC-2B34A74A/0/0
X-purgate-type: clean
X-purgate-size: 2675

Fix a potential hang during TargetReset.
When the ring is disabled, any SRBs queued, but not submitted were left
in the queues. These SRBs would only be recovered when StorPort's internal
timeout triggered.
When the ring is disabled, abort any SRBs that were not sent to the backend,
so that StorPort is responsible for requeueing any when the ring is re-enabled.
SRB_STATUS_ABORTED will inform StorPort to re-issue the requests when the
target has recovered, rather than failing them.

Assisted-by: Claude:claude-opus-4.8
Signed-off-by: Owen Smith <owen.smith@citrix.com>
---
 src/xenvbd/ring.c | 40 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 40 insertions(+)

diff --git a/src/xenvbd/ring.c b/src/xenvbd/ring.c
index ffbd18a..4ad707f 100644
--- a/src/xenvbd/ring.c
+++ b/src/xenvbd/ring.c
@@ -2271,6 +2271,46 @@ BlkifRingDisable(
         __BlkifRingCompleteResponse(BlkifRing, Request, BLKIF_RSP_ERROR);
     }
 
+    // Complete any SRBs that were queued but never made it as far as the
+    // backend. Now that the ring is disabled the schedule thread will not
+    // run again, so without this these requests would be left stuck until
+    // StorPort times them out. First drain the atomic packet list into the
+    // SRB queue so that nothing accepted from a concurrent submitter is
+    // missed, then fail everything still pending. SRB_STATUS_ABORTED lets
+    // StorPort re-issue them once the target has recovered.
+
+    BlkifRingSwizzle(BlkifRing);
+
+    while (!IsListEmpty(&BlkifRing->SrbQueue)) {
+        PLIST_ENTRY ListEntry;
+        PXENVBD_SRBEXT SrbExt;
+        PSCSI_REQUEST_BLOCK Srb;
+
+        ListEntry = RemoveHeadList(&BlkifRing->SrbQueue);
+        ASSERT3P(ListEntry, !=, &BlkifRing->SrbQueue);
+
+        RtlZeroMemory(ListEntry, sizeof(LIST_ENTRY));
+
+        SrbExt = CONTAINING_RECORD(ListEntry, XENVBD_SRBEXT, ListEntry);
+        Srb = SrbExt->Srb;
+        Srb->SrbStatus = SRB_STATUS_ABORTED;
+        __BlkifRingCompleteSrb(BlkifRing, SrbExt);
+    }
+
+    while (!IsListEmpty(&BlkifRing->ShutdownQueue)) {
+        PLIST_ENTRY ListEntry;
+        PXENVBD_SRBEXT SrbExt;
+        PSCSI_REQUEST_BLOCK Srb;
+
+        ListEntry = RemoveHeadList(&BlkifRing->ShutdownQueue);
+        ASSERT3P(ListEntry, !=, &BlkifRing->ShutdownQueue);
+
+        SrbExt = CONTAINING_RECORD(ListEntry, XENVBD_SRBEXT, ListEntry);
+        Srb = SrbExt->Srb;
+        Srb->SrbStatus = SRB_STATUS_ABORTED;
+        __BlkifRingCompleteSrb(BlkifRing, SrbExt);
+    }
+
     BlkifRing->Stopped = FALSE;
 
     __BlkifRingReleaseLock(BlkifRing);
-- 
2.51.2.windows.1



From win-pv-devel-bounces@lists.xenproject.org Thu Oct 08 06:30:16 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 08 Oct 2026 06:30:16 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1442948.1660326 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xEhdu-0000yz-Q7; Thu, 08 Oct 2026 06:30:14 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1442948.1660326; Thu, 08 Oct 2026 06:30:14 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xEhdu-0000yr-N5; Thu, 08 Oct 2026 06:30:14 +0000
Received: by outflank-mailman (input) for mailman id 1442948;
 Thu, 08 Oct 2026 06:30:13 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <owen.smith@citrix.com>) id 1xEhdt-0000yf-GT
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 06:30:13 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xEhds-00A6Ed-TY
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 08:30:12 +0200
Received: from [10.42.69.12] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ac7386c-e002-0a2a0a5209dd-0a2a450ce21e-48
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 08:30:12 +0200
Received: from [160.101.131.8] (helo=na1pdmzitismtp01.tibco.com)
 by tlsNG-d25034.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ac73873-f479-0a2a450c0019-a0658308d1f8-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 08:30:12 +0200
Received: from mewpvdipd2033.citrite.net (unknown [10.113.48.64])
 by na1pdmzitismtp01.tibco.com (Postfix) with ESMTP id 8352A482EA5D;
 Thu,  8 Oct 2026 02:28:01 -0400 (EDT)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; none
From: Owen Smith <owen.smith@citrix.com>
To: win-pv-devel@lists.xenproject.org
Cc: Owen Smith <owen.smith@citrix.com>
Subject: [PATCH 1/2] Avoid ASSERT(IsZeroMemory()) in checked builds
Date: Thu,  8 Oct 2026 07:30:05 +0100
Message-ID: <20261008063007.1304-1-owen.smith@citrix.com>
X-Mailer: git-send-email 2.51.2.windows.1
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-purgate-ID: tlsNG-d25034/1791441012-022C0A5B-2706347B/0/0
X-purgate-type: clean
X-purgate-size: 4359

* Zero Srb counters in BlkifRingDestroy
* NULL Path pointer in BlkifRingCreate fail path
* Zero embedded structures and values in FrontendDestroy
* Zero TargetPath and FrontendPath on FrontendCreate fail path
* Zero any Page80/83 overrides on FrontendConnect fail path
* NULL TargetList entry in AdapterTeardown

Signed-off-by: Owen Smith <owen.smith@citrix.com>
---
 src/xenvbd/adapter.c  |  1 +
 src/xenvbd/frontend.c | 40 +++++++++++++++++++++++++++++-----------
 src/xenvbd/ring.c     |  6 +++++-
 3 files changed, 35 insertions(+), 12 deletions(-)

diff --git a/src/xenvbd/adapter.c b/src/xenvbd/adapter.c
index 0f9500c..a0be841 100644
--- a/src/xenvbd/adapter.c
+++ b/src/xenvbd/adapter.c
@@ -1507,6 +1507,7 @@ AdapterTeardown(
         TargetSetMissing(Target, "AdapterTeardown");
         // drop ref-count acquired in __AdapterGetTarget *before* destroying Target
         TargetDestroy(Target);
+        Adapter->TargetList[TargetId] = NULL;
     }
 
     Adapter->BootEmulated = FALSE;
diff --git a/src/xenvbd/frontend.c b/src/xenvbd/frontend.c
index 3b078da..5311dd5 100644
--- a/src/xenvbd/frontend.c
+++ b/src/xenvbd/frontend.c
@@ -1287,6 +1287,19 @@ abort:
 fail7:
     Error("Fail7\n");
     RtlZeroMemory(&Frontend->Features, sizeof(XENVBD_FEATURES));
+
+    if (Frontend->Page80.Data)
+        Base64Free(Frontend->Page80.Data);
+    Frontend->Page80.Data = NULL;
+    Frontend->Page80.Size = 0;
+
+    if (Frontend->Page83.Data)
+        Base64Free(Frontend->Page83.Data);
+    Frontend->Page83.Data = NULL;
+    Frontend->Page83.Size = 0;
+
+    RtlZeroMemory(&Frontend->DiskInfo, sizeof(XENVBD_DISKINFO));
+
 fail6:
     Error("Fail6\n");
 fail5:
@@ -1923,8 +1936,10 @@ fail5:
     Frontend->Ring = NULL;
 fail4:
     Error("fail4\n");
+    RtlZeroMemory(Frontend->TargetPath, sizeof(Frontend->TargetPath));
 fail3:
     Error("fail3\n");
+    RtlZeroMemory(Frontend->FrontendPath, sizeof(Frontend->FrontendPath));
 fail2:
     Error("Fail2\n");
     Frontend->Target = NULL;
@@ -1951,16 +1966,6 @@ FrontendDestroy(
 
     Trace("Target[%d] @ (%d) =====>\n", TargetId, KeGetCurrentIrql());
 
-    if (Frontend->Page80.Data)
-        Base64Free(Frontend->Page80.Data);
-    Frontend->Page80.Data = NULL;
-    Frontend->Page80.Size = 0;
-
-    if (Frontend->Page83.Data)
-        Base64Free(Frontend->Page83.Data);
-    Frontend->Page83.Data = NULL;
-    Frontend->Page83.Size = 0;
-
     ThreadAlert(Frontend->BackendThread);
     ThreadJoin(Frontend->BackendThread);
     Frontend->BackendThread = NULL;
@@ -1971,11 +1976,24 @@ FrontendDestroy(
     RingDestroy(Frontend->Ring);
     Frontend->Ring = NULL;
 
-    Frontend->MaxQueues = 0;
+    RtlZeroMemory(&Frontend->StateLock, sizeof(KSPIN_LOCK));
+
+    RtlZeroMemory(Frontend->TargetPath, sizeof(Frontend->TargetPath));
+    RtlZeroMemory(Frontend->FrontendPath, sizeof(Frontend->FrontendPath));
+    RtlZeroMemory(&Frontend->DiskInfo, sizeof(XENVBD_DISKINFO));
+    RtlZeroMemory(&Frontend->Caps, sizeof(XENVBD_CAPS));
 
     ASSERT3P(Frontend->BackendPath, ==, NULL);
     ASSERT3P(Frontend->BackendWatch, ==, NULL);
 
+    Frontend->Target = NULL;
+    Frontend->TargetId = 0;
+    Frontend->DeviceId = 0;
+    Frontend->State = XENVBD_STATE_INVALID; // 0
+    Frontend->BackendDomain = 0;
+    Frontend->MaxQueues = 0;
+
+    ASSERT(IsZeroMemory(Frontend, sizeof(XENVBD_FRONTEND)));
     __FrontendFree(Frontend);
     Trace("Target[%d] @ (%d) <=====\n", TargetId, KeGetCurrentIrql());
 }
diff --git a/src/xenvbd/ring.c b/src/xenvbd/ring.c
index 0b56831..ffbd18a 100644
--- a/src/xenvbd/ring.c
+++ b/src/xenvbd/ring.c
@@ -1917,7 +1917,7 @@ fail4:
     RtlZeroMemory(&(*BlkifRing)->SrbQueue, sizeof(LIST_ENTRY));
 
     __RingFree((*BlkifRing)->Path);
-    (*BlkifRing)->Path;
+    (*BlkifRing)->Path = NULL;
     (*BlkifRing)->Index = 0;
     (*BlkifRing)->Ring = NULL;
 
@@ -1957,6 +1957,10 @@ BlkifRingDestroy(
     ASSERT(IsListEmpty(&BlkifRing->ShutdownQueue));
     RtlZeroMemory(&BlkifRing->ShutdownQueue, sizeof(LIST_ENTRY));
 
+    BlkifRing->SrbsQueued = 0;
+    BlkifRing->SrbsCompleted = 0;
+    BlkifRing->SrbsFailed = 0;
+
     __RingFree(BlkifRing->Path);
     BlkifRing->Path = NULL;
     BlkifRing->Index = 0;
-- 
2.51.2.windows.1



From win-pv-devel-bounces@lists.xenproject.org Thu Oct 08 07:44:04 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 08 Oct 2026 07:44:04 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1442995.1660362 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xEinL-0004V4-O6; Thu, 08 Oct 2026 07:44:03 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1442995.1660362; Thu, 08 Oct 2026 07:44:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xEinL-0004Uw-Kt; Thu, 08 Oct 2026 07:44:03 +0000
Received: by outflank-mailman (input) for mailman id 1442995;
 Thu, 08 Oct 2026 07:44:02 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a11a7806380003f66@swg.vates.tech>)
 id 1xEinK-0004Ua-5u
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 07:44:02 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xEinJ-004bfh-32
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 09:44:01 +0200
Received: from [10.42.69.5] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a11a7806380003f66@swg.vates.tech>)
 id 6ac749b4-8faa-0a2a0a5109dd-0a2a4505dd02-24
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 09:44:00 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-c201ff.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a11a7806380003f66@swg.vates.tech>)
 id 6ac749c0-4cb1-0a2a45050019-b9ff1c2297db-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 09:44:00 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a11a7806380003f66.002 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 08 Oct 2026 07:43:55 +0000
Received: from [192.168.1.61] (142.220.66.37.rev.sfr.net [37.66.220.142])
 (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id AE32881FCC;
 Thu,  8 Oct 2026 09:43:37 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=KbkYm02J6vBBNNoAOFYiwSf8qWydmx3IWt2J1tgOjMM=;
 h=from:subject:date:message-id:to:mime-version:content-type:in-reply-to:references:feedback-id;
 b=RauY7cw+k/C9njcljew+W9CFGOWNXFzgtUfLzCgfrdtafvqZ2sQPHbHS2lWqY8Z6WtEEBRGLk
 jS6UjSICeqx0DQ+RRP+XOdiiVj/cUzQRkuE++JILqFWADThy1VmTQ/Injb2LVMO/gf6J5IcDKcE
 W2OajX/SEhqEze6Tp5qR28BG2P1+DSlMlNch5ZCAeRE/3O8MOMT3Ujdpvxu4WPp7n/nKDCAZBKq
 PfBZN/8xt9MV1Uxxw7g27NNPYPwtSBLEDy9iM5Ng4cRsjRcXivOfmZxZ3XSA1R8OKzhsYRi0PMK
 wZWTjPkJUUAj2mg5xOhtBlAWFpYNibdRXUQrbd3M0iUQ==
X-Zone-Loop: 98849ab11755d017ffa232add490f71bdd062cb570ec
x-campaign-type: default
x-transaction-id: 61fab61e-bb6b-40c5-b13a-44b71b1d327a
x-swg-uid: 01-3d654d55-f9df-49cb-952d-cc565b140606
X-Mailer: Sweego
Message-ID:
 <1791445436.8631fc262581453bbf619ec5b2062170.1a11a7806380003f66@vates.tech>
x-swg-bid: 1791445436.8631fc262581453bbf619ec5b2062170.1a11a7806380003f66
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
Date: Thu, 8 Oct 2026 09:43:37 +0200
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH 1/2] Avoid ASSERT(IsZeroMemory()) in checked builds
To: Owen Smith <owen.smith@citrix.com>, win-pv-devel@lists.xenproject.org
References: <20261008063007.1304-1-owen.smith@citrix.com>
Content-Language: en-US
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
In-Reply-To: <20261008063007.1304-1-owen.smith@citrix.com>
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.6.ac8e50fae625d223.1a11a77bf2b.7c8b2a0930b4a151=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791445417776
X-purgate-ID: tlsNG-c201ff/1791445440-F62AB2A1-4FD4430F/0/0
X-purgate-type: clean
X-purgate-size: 5275

---=Part.6.ac8e50fae625d223.1a11a77bf2b.7c8b2a0930b4a151=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

On 08/10/2026 08:31, Owen Smith wrote:
> * Zero Srb counters in BlkifRingDestroy
> * NULL Path pointer in BlkifRingCreate fail path
> * Zero embedded structures and values in FrontendDestroy
> * Zero TargetPath and FrontendPath on FrontendCreate fail path
> * Zero any Page80/83 overrides on FrontendConnect fail path
> * NULL TargetList entry in AdapterTeardown
>=20
> Signed-off-by: Owen Smith <owen=2Esmith@citrix=2Ecom>

Reviewed-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>

> ---
>   src/xenvbd/adapter=2Ec  |  1 +
>   src/xenvbd/frontend=2Ec | 40 +++++++++++++++++++++++++++++-----------
>   src/xenvbd/ring=2Ec     |  6 +++++-
>   3 files changed, 35 insertions(+), 12 deletions(-)
>=20
> diff --git a/src/xenvbd/adapter=2Ec b/src/xenvbd/adapter=2Ec
> index 0f9500c=2E=2Ea0be841 100644
> --- a/src/xenvbd/adapter=2Ec
> +++ b/src/xenvbd/adapter=2Ec
> @@ -1507,6 +1507,7 @@ AdapterTeardown(
>           TargetSetMissing(Target, "AdapterTeardown");
>           // drop ref-count acquired in __AdapterGetTarget *before* dest=
roying Target
>           TargetDestroy(Target);
> +        Adapter->TargetList[TargetId] =3D NULL;
>       }
>  =20
>       Adapter->BootEmulated =3D FALSE;
> diff --git a/src/xenvbd/frontend=2Ec b/src/xenvbd/frontend=2Ec
> index 3b078da=2E=2E5311dd5 100644
> --- a/src/xenvbd/frontend=2Ec
> +++ b/src/xenvbd/frontend=2Ec
> @@ -1287,6 +1287,19 @@ abort:
>   fail7:
>       Error("Fail7\n");
>       RtlZeroMemory(&Frontend->Features, sizeof(XENVBD_FEATURES));
> +
> +    if (Frontend->Page80=2EData)
> +        Base64Free(Frontend->Page80=2EData);
> +    Frontend->Page80=2EData =3D NULL;
> +    Frontend->Page80=2ESize =3D 0;
> +
> +    if (Frontend->Page83=2EData)
> +        Base64Free(Frontend->Page83=2EData);
> +    Frontend->Page83=2EData =3D NULL;
> +    Frontend->Page83=2ESize =3D 0;
> +
> +    RtlZeroMemory(&Frontend->DiskInfo, sizeof(XENVBD_DISKINFO));
> +
>   fail6:
>       Error("Fail6\n");
>   fail5:
> @@ -1923,8 +1936,10 @@ fail5:
>       Frontend->Ring =3D NULL;
>   fail4:
>       Error("fail4\n");
> +    RtlZeroMemory(Frontend->TargetPath, sizeof(Frontend->TargetPath));
>   fail3:
>       Error("fail3\n");
> +    RtlZeroMemory(Frontend->FrontendPath, sizeof(Frontend->FrontendPath=
));
>   fail2:
>       Error("Fail2\n");
>       Frontend->Target =3D NULL;
> @@ -1951,16 +1966,6 @@ FrontendDestroy(
>  =20
>       Trace("Target[%d] @ (%d) =3D=3D=3D=3D=3D>\n", TargetId, KeGetCurre=
ntIrql());
>  =20
> -    if (Frontend->Page80=2EData)
> -        Base64Free(Frontend->Page80=2EData);
> -    Frontend->Page80=2EData =3D NULL;
> -    Frontend->Page80=2ESize =3D 0;
> -
> -    if (Frontend->Page83=2EData)
> -        Base64Free(Frontend->Page83=2EData);
> -    Frontend->Page83=2EData =3D NULL;
> -    Frontend->Page83=2ESize =3D 0;
> -
>       ThreadAlert(Frontend->BackendThread);
>       ThreadJoin(Frontend->BackendThread);
>       Frontend->BackendThread =3D NULL;
> @@ -1971,11 +1976,24 @@ FrontendDestroy(
>       RingDestroy(Frontend->Ring);
>       Frontend->Ring =3D NULL;
>  =20
> -    Frontend->MaxQueues =3D 0;
> +    RtlZeroMemory(&Frontend->StateLock, sizeof(KSPIN_LOCK));
> +
> +    RtlZeroMemory(Frontend->TargetPath, sizeof(Frontend->TargetPath));
> +    RtlZeroMemory(Frontend->FrontendPath, sizeof(Frontend->FrontendPath=
));
> +    RtlZeroMemory(&Frontend->DiskInfo, sizeof(XENVBD_DISKINFO));
> +    RtlZeroMemory(&Frontend->Caps, sizeof(XENVBD_CAPS));
>  =20
>       ASSERT3P(Frontend->BackendPath, =3D=3D, NULL);
>       ASSERT3P(Frontend->BackendWatch, =3D=3D, NULL);
>  =20
> +    Frontend->Target =3D NULL;
> +    Frontend->TargetId =3D 0;
> +    Frontend->DeviceId =3D 0;
> +    Frontend->State =3D XENVBD_STATE_INVALID; // 0
> +    Frontend->BackendDomain =3D 0;
> +    Frontend->MaxQueues =3D 0;
> +
> +    ASSERT(IsZeroMemory(Frontend, sizeof(XENVBD_FRONTEND)));
>       __FrontendFree(Frontend);
>       Trace("Target[%d] @ (%d) <=3D=3D=3D=3D=3D\n", TargetId, KeGetCurre=
ntIrql());
>   }
> diff --git a/src/xenvbd/ring=2Ec b/src/xenvbd/ring=2Ec
> index 0b56831=2E=2Effbd18a 100644
> --- a/src/xenvbd/ring=2Ec
> +++ b/src/xenvbd/ring=2Ec
> @@ -1917,7 +1917,7 @@ fail4:
>       RtlZeroMemory(&(*BlkifRing)->SrbQueue, sizeof(LIST_ENTRY));
>  =20
>       __RingFree((*BlkifRing)->Path);
> -    (*BlkifRing)->Path;
> +    (*BlkifRing)->Path =3D NULL;
>       (*BlkifRing)->Index =3D 0;
>       (*BlkifRing)->Ring =3D NULL;
>  =20
> @@ -1957,6 +1957,10 @@ BlkifRingDestroy(
>       ASSERT(IsListEmpty(&BlkifRing->ShutdownQueue));
>       RtlZeroMemory(&BlkifRing->ShutdownQueue, sizeof(LIST_ENTRY));
>  =20
> +    BlkifRing->SrbsQueued =3D 0;
> +    BlkifRing->SrbsCompleted =3D 0;
> +    BlkifRing->SrbsFailed =3D 0;
> +
>       __RingFree(BlkifRing->Path);
>       BlkifRing->Path =3D NULL;
>       BlkifRing->Index =3D 0;



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.6.ac8e50fae625d223.1a11a77bf2b.7c8b2a0930b4a151=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 08 08:07:35 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 08 Oct 2026 08:07:35 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1443026.1660391 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xEjA7-0001RF-Eb; Thu, 08 Oct 2026 08:07:35 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1443026.1660391; Thu, 08 Oct 2026 08:07:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xEjA7-0001R7-Bt; Thu, 08 Oct 2026 08:07:35 +0000
Received: by outflank-mailman (input) for mailman id 1443026;
 Thu, 08 Oct 2026 08:07:34 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a11a8d9fe90003f66@swg.vates.tech>)
 id 1xEjA6-0001Qx-Nt
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 08:07:34 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xEjA5-000D8J-UC
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 10:07:34 +0200
Received: from [10.42.69.7] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a11a8d9fe90003f66@swg.vates.tech>)
 id 6ac74f45-2eae-0a2a0a5409dd-0a2a4507d3ae-6
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 10:07:33 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-ef75cf.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a11a8d9fe90003f66@swg.vates.tech>)
 id 6ac74f45-b4ea-0a2a45070019-b9ff1c23901f-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 10:07:33 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a11a8d9fe90003f66.002 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 08 Oct 2026 08:07:31 +0000
Received: from [192.168.1.61] (142.220.66.37.rev.sfr.net [37.66.220.142])
 (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id A90F681D8F;
 Thu,  8 Oct 2026 10:07:30 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=YlJuFwJC2XiUC298Wc6ZeZT23iUW5hwrqxt/2eOlCeI=;
 h=from:subject:date:message-id:to:mime-version:content-type:in-reply-to:references:feedback-id;
 b=Vq8/53xY+uT9xQfYDCRjWwR+pEJRm5CMceidvxRxTSxs6fkG4GH6QeVhungr0fNGUxeaveAJu
 3K/OSH35nG+4F5GXX/Tm8HLbVuy/P/3gXuIkajpcn+bmMqDtbaGtrSzgXUfLa/HtKjNETnfG1E1
 5dfY/E/AE1Qa3bWKp/FsLNV3XgYEY80Az0KxXb6u7926cPwUg13LZM1B0wWB0WB2SEvLXy3P59Z
 cEqbg8yBmEwJ4mTTYFT1m3S+I8sfGRcVppBqUvun2h8PGBOf5B6vBX//c9Kxu2x5ujLm8605o8h
 +ocYrhLWQoTnMs0P2j12fi7+DqJi/IxRok9OHhn9ligA==
X-Zone-Loop: 424a64e1cef5b121afec1ddb93b4606955e9660b8a84
x-campaign-type: default
x-transaction-id: 60d3a3f7-24cc-42f4-8a6e-1891765b7a0c
x-swg-uid: 01-6b922910-3f5d-41e5-925d-3a7b10a6b4e2
X-Mailer: Sweego
Message-ID:
 <1791446851.8631fc262581453bbf619ec5b2062170.1a11a8d9fe90003f66@vates.tech>
x-swg-bid: 1791446851.8631fc262581453bbf619ec5b2062170.1a11a8d9fe90003f66
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
Date: Thu, 8 Oct 2026 10:07:30 +0200
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH 2/2] Clear SRB queue and Shutdown queue on reset
Content-Language: en-US
To: Owen Smith <owen.smith@citrix.com>, win-pv-devel@lists.xenproject.org
References: <20261008063007.1304-1-owen.smith@citrix.com>
 <20261008063007.1304-2-owen.smith@citrix.com>
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
In-Reply-To: <20261008063007.1304-2-owen.smith@citrix.com>
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.c.45ce97f14174db7c.1a11a8d9cb9.75cdcfec593645e2=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791446850745
X-purgate-ID: tlsNG-ef75cf/1791446853-A66DAAE4-D641C26F/0/0
X-purgate-type: clean
X-purgate-size: 4353

---=Part.c.45ce97f14174db7c.1a11a8d9cb9.75cdcfec593645e2=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

On 08/10/2026 08:31, Owen Smith wrote:
> Fix a potential hang during TargetReset=2E
> When the ring is disabled, any SRBs queued, but not submitted were left
> in the queues=2E These SRBs would only be recovered when StorPort's inte=
rnal
> timeout triggered=2E
> When the ring is disabled, abort any SRBs that were not sent to the back=
end,
> so that StorPort is responsible for requeueing any when the ring is re-e=
nabled=2E
> SRB_STATUS_ABORTED will inform StorPort to re-issue the requests when th=
e
> target has recovered, rather than failing them=2E
>=20
> Assisted-by: Claude:claude-opus-4=2E8
> Signed-off-by: Owen Smith <owen=2Esmith@citrix=2Ecom>

There's still a gap because __BlkifRingQueueSrb and BlkifRingDisable=20
don't wait for each other=2E So the following sequence is still possible:

- __BlkifRingQueueSrb observes BlkifRing->Enabled =3D TRUE and enters the=
=20
submission code
- BlkifRingDisable acquires the ring lock, sets Enabled =3D FALSE and swiz=
zles
- __BlkifRingQueueSrb queues yet another SRB to the atomic list
- BlkifRingDisable exits without aborting that SRB

I think it's possible to implement this in the !Enabled case of=20
BlkifRingSchedule instead=2E Then instead of having to duplicate the=20
cleanup code, RingDisable only needs to acquire the lock, set Enabled =3D=
=20
FALSE and drop the lock=2E This also handles the above case if RingDisable=
=20
is the lock holder=2E

Still, I'm not sure if this is sufficient to drain all RingQueueSrb=20
attempts either, since RingDisable does not wait for all RingQueueSrb=20
callers to complete first=2E If RingQueueSrb is instead the lock holder,=
=20
it could attempt to access an already destroyed ring during unlock=2E

> ---
>   src/xenvbd/ring=2Ec | 40 ++++++++++++++++++++++++++++++++++++++++
>   1 file changed, 40 insertions(+)
>=20
> diff --git a/src/xenvbd/ring=2Ec b/src/xenvbd/ring=2Ec
> index ffbd18a=2E=2E4ad707f 100644
> --- a/src/xenvbd/ring=2Ec
> +++ b/src/xenvbd/ring=2Ec
> @@ -2271,6 +2271,46 @@ BlkifRingDisable(
>           __BlkifRingCompleteResponse(BlkifRing, Request, BLKIF_RSP_ERRO=
R);
>       }
>  =20
> +    // Complete any SRBs that were queued but never made it as far as t=
he
> +    // backend=2E Now that the ring is disabled the schedule thread wil=
l not
> +    // run again, so without this these requests would be left stuck un=
til
> +    // StorPort times them out=2E First drain the atomic packet list in=
to the
> +    // SRB queue so that nothing accepted from a concurrent submitter i=
s
> +    // missed, then fail everything still pending=2E SRB_STATUS_ABORTED=
 lets
> +    // StorPort re-issue them once the target has recovered=2E
> +
> +    BlkifRingSwizzle(BlkifRing);
> +
> +    while (!IsListEmpty(&BlkifRing->SrbQueue)) {
> +        PLIST_ENTRY ListEntry;
> +        PXENVBD_SRBEXT SrbExt;
> +        PSCSI_REQUEST_BLOCK Srb;
> +
> +        ListEntry =3D RemoveHeadList(&BlkifRing->SrbQueue);
> +        ASSERT3P(ListEntry, !=3D, &BlkifRing->SrbQueue);
> +
> +        RtlZeroMemory(ListEntry, sizeof(LIST_ENTRY));
> +
> +        SrbExt =3D CONTAINING_RECORD(ListEntry, XENVBD_SRBEXT, ListEntr=
y);
> +        Srb =3D SrbExt->Srb;
> +        Srb->SrbStatus =3D SRB_STATUS_ABORTED;
> +        __BlkifRingCompleteSrb(BlkifRing, SrbExt);
> +    }
> +
> +    while (!IsListEmpty(&BlkifRing->ShutdownQueue)) {
> +        PLIST_ENTRY ListEntry;
> +        PXENVBD_SRBEXT SrbExt;
> +        PSCSI_REQUEST_BLOCK Srb;
> +
> +        ListEntry =3D RemoveHeadList(&BlkifRing->ShutdownQueue);
> +        ASSERT3P(ListEntry, !=3D, &BlkifRing->ShutdownQueue);
> +
> +        SrbExt =3D CONTAINING_RECORD(ListEntry, XENVBD_SRBEXT, ListEntr=
y);
> +        Srb =3D SrbExt->Srb;
> +        Srb->SrbStatus =3D SRB_STATUS_ABORTED;
> +        __BlkifRingCompleteSrb(BlkifRing, SrbExt);
> +    }
> +
>       BlkifRing->Stopped =3D FALSE;
>  =20
>       __BlkifRingReleaseLock(BlkifRing);



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.c.45ce97f14174db7c.1a11a8d9cb9.75cdcfec593645e2=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 08 08:55:29 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 08 Oct 2026 08:55:29 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1443075.1660458 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xEjuT-000418-4z; Thu, 08 Oct 2026 08:55:29 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1443075.1660458; Thu, 08 Oct 2026 08:55:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xEjuT-000411-2B; Thu, 08 Oct 2026 08:55:29 +0000
Received: by outflank-mailman (input) for mailman id 1443075;
 Thu, 08 Oct 2026 08:55:28 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a11ab96ebe0003f66@swg.vates.tech>)
 id 1xEjuS-00040v-3s
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 08:55:28 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xEjuR-004qZ1-Gn
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 10:55:27 +0200
Received: from [10.42.69.10] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a11ab96ebe0003f66@swg.vates.tech>)
 id 6ac75a76-e002-0a2a0a5209dd-0a2a450ab396-20
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 10:55:27 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-4011c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a11ab96ebe0003f66@swg.vates.tech>)
 id 6ac75a7f-f2d2-0a2a450a0019-b9ff1c128637-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 10:55:27 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a11ab96ebe0003f66.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 08 Oct 2026 08:55:22 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id BC7FC82177;
 Thu,  8 Oct 2026 10:55:21 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=jDsSmvYRV+KkPgUKL9j3PJt5kZ7CLziRzLeDjtfinJY=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:feedback-id;
 b=oLut26L2cOAx5aUJLCyBwwro/CAL6pZo8D1eU3qqciQEvAkoDoN9rqz04cJSRBbUgei8Thwot
 CYJkIFlXQ2Cb3sX5YdJNzXc0sfiNB2CRwoLRXCAh7eElwelShihrVGbfcfYAMjJDbFD9SQN1rNR
 3S+aA2FQRfsdf76tfrlE8QTuLz6z9jCe4zbHjMJuuuZgfSfCOMNaasbK0r/bGH1vU9OhiaFR3ff
 mpyhAmJfUsjbaQ09n4EE5xeYjUHEYJGcAd7AVrJaRJ6yd1zQ0ipN7MkxZVDOVygx17fiLGATecS
 yeez33HZQugU3nPOsOUnBumOdVDGt37eoTwQYEx6NEAg==
X-Zone-Loop: 40f7b92c709230619f24bf5e369c8648d95115c5f753
x-campaign-type: default
x-transaction-id: 72a17650-5ef8-4109-b001-1dd2f716504c
x-swg-uid: 01-625d0419-ed42-4324-887e-3fa39a23401a
X-Mailer: Sweego
Message-ID:
 <1791449722.8631fc262581453bbf619ec5b2062170.1a11ab96ebe0003f66@vates.tech>
x-swg-bid: 1791449722.8631fc262581453bbf619ec5b2062170.1a11ab96ebe0003f66
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [PATCH 1/2] receiver: Remove dependencies on HVM_MAX_VCPUS
Date: Thu,  8 Oct 2026 10:54:24 +0200
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.1a.168d0c4268014fe0.1a11ab96be8.6b2ae6aff01cc32e=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791449721833
X-purgate-ID: tlsNG-4011c0/1791449727-510C9CFC-69EA01A6/0/0
X-purgate-type: clean
X-purgate-size: 4404

---=Part.1a.168d0c4268014fe0.1a11ab96be8.6b2ae6aff01cc32e=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

XenNet can simply use KeQueryMaximumProcessorCountEx(
ALL_PROCESSOR_GROUPS) instead=2E

Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 src/xennet/receiver=2Ec | 52 ++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 46 insertions(+), 6 deletions(-)

diff --git a/src/xennet/receiver=2Ec b/src/xennet/receiver=2Ec
index 565d31b=2E=2E91e344b 100644
--- a/src/xennet/receiver=2Ec
+++ b/src/xennet/receiver=2Ec
@@ -33,7 +33,6 @@
 #include <ndis=2Eh>
 #include <procgrp=2Eh>
 #include <tcpip=2Eh>
-#include <xen=2Eh>
 #include <ethernet=2Eh>
=20
 #include "util=2Eh"
@@ -53,8 +52,9 @@ struct _XENNET_RECEIVER {
     PXENNET_ADAPTER             Adapter;
     NDIS_HANDLE                 NetBufferListPool;
     PNET_BUFFER_LIST            PutList;
-    PNET_BUFFER_LIST            GetList[HVM_MAX_VCPUS];
-    XENNET_RECEIVER_QUEUE       Queue[HVM_MAX_VCPUS];
+    ULONG                       Count;
+    PNET_BUFFER_LIST            *GetList;
+    XENNET_RECEIVER_QUEUE       *Queue;
     LONG                        Indicated;
     LONG                        Returned;
     XENVIF_VIF_OFFLOAD_OPTIONS  OffloadOptions;
@@ -500,6 +500,20 @@ ReceiverInitialize(
     RtlZeroMemory(*Receiver, sizeof(XENNET_RECEIVER));
     (*Receiver)->Adapter =3D Adapter;
=20
+    (*Receiver)->Count =3D KeQueryMaximumProcessorCountEx(ALL_PROCESSOR_G=
ROUPS);
+
+    (*Receiver)->GetList =3D __AllocatePoolWithTag(NonPagedPool,
+                                                 (*Receiver)->Count * siz=
eof(PNET_BUFFER_LIST),
+                                                 RECEIVER_POOL_TAG);
+    if ((*Receiver)->GetList =3D=3D NULL)
+        goto fail2;
+
+    (*Receiver)->Queue =3D __AllocatePoolWithTag(NonPagedPool,
+                                               (*Receiver)->Count * sizeo=
f(XENNET_RECEIVER_QUEUE),
+                                               RECEIVER_POOL_TAG);
+    if ((*Receiver)->Queue =3D=3D NULL)
+        goto fail3;
+
     RtlZeroMemory(&Params, sizeof(NET_BUFFER_LIST_POOL_PARAMETERS));
     Params=2EHeader=2EType =3D NDIS_OBJECT_TYPE_DEFAULT;
     Params=2EHeader=2ERevision =3D NET_BUFFER_LIST_POOL_PARAMETERS_REVISI=
ON_1;
@@ -514,9 +528,9 @@ ReceiverInitialize(
=20
     status =3D NDIS_STATUS_RESOURCES;
     if ((*Receiver)->NetBufferListPool =3D=3D NULL)
-        goto fail2;
+        goto fail4;
=20
-    for (Index =3D 0; Index < HVM_MAX_VCPUS; Index++) {
+    for (Index =3D 0; Index < (*Receiver)->Count; Index++) {
         PXENNET_RECEIVER_QUEUE  Queue =3D &(*Receiver)->Queue[Index];
=20
         KeInitializeSpinLock(&Queue->Lock);
@@ -524,8 +538,28 @@ ReceiverInitialize(
=20
     return NDIS_STATUS_SUCCESS;
=20
+fail4:
+    Error("fail4\n");
+
+    __FreePoolWithTag((*Receiver)->Queue, RECEIVER_POOL_TAG);
+    (*Receiver)->Queue =3D NULL;
+
+fail3:
+    Error("fail3\n");
+
+    __FreePoolWithTag((*Receiver)->GetList, RECEIVER_POOL_TAG);
+    (*Receiver)->GetList =3D NULL;
+
 fail2:
+    Error("fail2\n");
+
+    (*Receiver)->Count =3D 0;
+    __FreePoolWithTag(*Receiver, RECEIVER_POOL_TAG);
+    *Receiver =3D NULL;
+
 fail1:
+    Error("fail1 (%08x)\n", status);
+
     return status;
 }
=20
@@ -541,7 +575,7 @@ ReceiverTeardown(
=20
     ASSERT3U(Receiver->Returned, =3D=3D, Receiver->Indicated);
=20
-    for (Index =3D 0; Index < HVM_MAX_VCPUS; Index++) {
+    for (Index =3D 0; Index < Receiver->Count; Index++) {
         NetBufferList =3D Receiver->GetList[Index];
=20
         while (NetBufferList !=3D NULL) {
@@ -571,6 +605,12 @@ ReceiverTeardown(
     NdisFreeNetBufferListPool(Receiver->NetBufferListPool);
     Receiver->NetBufferListPool =3D NULL;
=20
+    __FreePoolWithTag(Receiver->Queue, RECEIVER_POOL_TAG);
+    Receiver->Queue =3D NULL;
+
+    __FreePoolWithTag(Receiver->GetList, RECEIVER_POOL_TAG);
+    Receiver->GetList =3D NULL;
+
     Receiver->Adapter =3D NULL;
=20
     __FreePoolWithTag(Receiver, RECEIVER_POOL_TAG);
--=20
2=2E55=2E0=2Ewindows=2E3



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.1a.168d0c4268014fe0.1a11ab96be8.6b2ae6aff01cc32e=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 08 08:56:45 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 08 Oct 2026 08:56:45 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1443076.1660463 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xEjvh-00045k-AH; Thu, 08 Oct 2026 08:56:45 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1443076.1660463; Thu, 08 Oct 2026 08:56:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xEjvh-00045d-6y; Thu, 08 Oct 2026 08:56:45 +0000
Received: by outflank-mailman (input) for mailman id 1443076;
 Thu, 08 Oct 2026 08:56:44 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a11aba99310003f66@swg.vates.tech>)
 id 1xEjvf-00045X-Nn
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 08:56:44 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xEjvf-004qvz-4U
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 10:56:43 +0200
Received: from [10.42.69.12] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a11aba99310003f66@swg.vates.tech>)
 id 6ac75abb-2eae-0a2a0a5409dd-0a2a450cdac4-44
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 10:56:43 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-d25034.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a11aba99310003f66@swg.vates.tech>)
 id 6ac75aca-f479-0a2a450c0019-b9ff1c12a053-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 10:56:42 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a11aba99310003f66.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 08 Oct 2026 08:56:38 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 3C23D8241F;
 Thu,  8 Oct 2026 10:56:38 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=9D7Mn3KoEiy2/jHccFzsiRpDW72xonU7UT3lIgl4AsM=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=JeS1rSvEQ3mHO8SWNL9XP2pBMeQDn7Rq4b4eDaK40CbdVfD67dnJEKY2pTjzL8DmiU7pkgMGH
 oLHLSBuG4WqhfS5BE8VZO6PrR5D3Iu4sLicCqgtGom8Ao27eEaLYFv0LPH0SjqcIM5FDf7y+W3T
 A6z1brii6tb9Tyx5jJxTcuHOJT2nmrwmGtTP0MT0wXAsnTQlkfJItr9Nh6/wca1LWjgsHIxujST
 4jcPXf0nSwV/NYZteUwnPFHzT8azZHs53DR0Oup5wgpIkPpyBttIVhIkMQlvg0B7VI7zgCpZzZ3
 QHOsz6Louf6i4a5q3xoDmSaCVJxzHjrC3Yom9I6Fk6rQ==
X-Zone-Loop: 1b5ee4a2bfed80e676613c5048e87e95bbd068ca7b96
x-campaign-type: default
x-transaction-id: 62d74e9c-73e2-434e-8fb5-557b8b600ee8
x-swg-uid: 01-c315ba08-6aba-42d0-bf46-bb5385d5973d
X-Mailer: Sweego
Message-ID:
 <1791449799.8631fc262581453bbf619ec5b2062170.1a11aba99310003f66@vates.tech>
x-swg-bid: 1791449799.8631fc262581453bbf619ec5b2062170.1a11aba99310003f66
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [PATCH 2/2] Remove Xen headers
Date: Thu,  8 Oct 2026 10:56:33 +0200
In-Reply-To: <1791449722.8631fc262581453bbf619ec5b2062170.1a11ab96ebe0003f66@vates.tech>
References: <1791449722.8631fc262581453bbf619ec5b2062170.1a11ab96ebe0003f66@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.1b.70cc0f548c474c4d.1a11aba96ec.1585278543300875=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791449798380
X-purgate-ID: tlsNG-d25034/1791449802-517379FB-DD0BEBAE/0/0
X-purgate-type: clean
X-purgate-size: 89838

---=Part.1b.70cc0f548c474c4d.1a11aba96ec.1585278543300875=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

As a pure NDIS driver, XenNet doesn't need Xen headers at all=2E

Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 get_xen_headers=2Epy                       |  74 --
 include/xen-types=2Eh                      |  59 --
 include/xen-version=2Eh                    |  38 -
 include/xen-warnings=2Eh                   |  43 -
 include/xen=2Eh                            |  44 -
 include/xen/public/arch-x86/xen-x86_32=2Eh | 169 ----
 include/xen/public/arch-x86/xen-x86_64=2Eh | 202 -----
 include/xen/public/arch-x86/xen=2Eh        | 338 --------
 include/xen/public/hvm/hvm_info_table=2Eh  |  74 --
 include/xen/public/xen-compat=2Eh          |  44 -
 include/xen/public/xen=2Eh                 | 995 -----------------------
 11 files changed, 2080 deletions(-)
 delete mode 100644 get_xen_headers=2Epy
 delete mode 100644 include/xen-types=2Eh
 delete mode 100644 include/xen-version=2Eh
 delete mode 100644 include/xen-warnings=2Eh
 delete mode 100644 include/xen=2Eh
 delete mode 100644 include/xen/public/arch-x86/xen-x86_32=2Eh
 delete mode 100644 include/xen/public/arch-x86/xen-x86_64=2Eh
 delete mode 100644 include/xen/public/arch-x86/xen=2Eh
 delete mode 100644 include/xen/public/hvm/hvm_info_table=2Eh
 delete mode 100644 include/xen/public/xen-compat=2Eh
 delete mode 100644 include/xen/public/xen=2Eh

diff --git a/get_xen_headers=2Epy b/get_xen_headers=2Epy
deleted file mode 100644
index 2d4d0f6=2E=2E0000000
--- a/get_xen_headers=2Epy
+++ /dev/null
@@ -1,74 +0,0 @@
-#!python -u
-
-import os, sys
-import shutil
-import subprocess
-import re
-
-def shell(command, dir =3D '=2E'):
-    print("in '%s' execute '%s'" % (dir, ' '=2Ejoin(command)))
-    sys=2Estdout=2Eflush()
-
-    sub =3D subprocess=2EPopen(' '=2Ejoin(command), cwd=3Ddir,
-                           stdout=3Dsubprocess=2EPIPE,
-                           stderr=3Dsubprocess=2ESTDOUT)
-
-    for line in sub=2Estdout:
-        print(line=2Edecode(sys=2Egetdefaultencoding())=2Erstrip())
-
-    sub=2Ewait()
-
-    return sub=2Ereturncode
-
-def get_repo(url, working):
-    shell(['git', 'clone', '--no-checkout', url, working])
-
-def get_branch(tag, working):
-    shell(['git', 'checkout', '-b', 'tmp', tag], working)
-
-def put_branch(working):
-    shell(['git', 'checkout', 'master'], working)
-    shell(['git', 'branch', '-d', 'tmp'], working)
-
-def copy_file(working, dir, name):
-    try:
-        os=2Emakedirs('include\\xen\\%s' % dir)
-    except OSError:
-        None
-
-    src =3D open('%s\\xen\\include\\%s\\%s' % (working, dir, name), 'r')
-    dst =3D open('include\\xen\\%s\\%s' % (dir, name), 'w', newline=3D'\n=
')
-
-    print(name)
-
-    for line in src:
-        line =3D re=2Esub(' unsigned long', ' ULONG_PTR', line)
-        line =3D re=2Esub('\(unsigned long', '(ULONG_PTR', line)
-        line =3D re=2Esub(' long', ' LONG_PTR', line)
-        line =3D re=2Esub('\(long', '(LONG_PTR', line)
-        dst=2Ewrite(line)
-
-    dst=2Eclose()
-    src=2Eclose()
-
-if __name__ =3D=3D '__main__':
-    tag =3D sys=2Eargv[1]
-    working =3D sys=2Eargv[2]
-
-    get_repo('git://xenbits=2Exen=2Eorg/xen=2Egit', working)
-    get_branch(tag, working)
-
-    shell(['git', 'rm', '-r', '-f', 'xen'], 'include')
-
-    copy_file(working, 'public', 'xen=2Eh')
-    copy_file(working, 'public', 'xen-compat=2Eh')
-
-    copy_file(working, 'public\\arch-x86', 'xen=2Eh')
-    copy_file(working, 'public\\arch-x86', 'xen-x86_32=2Eh')
-    copy_file(working, 'public\\arch-x86', 'xen-x86_64=2Eh')
-
-    copy_file(working, 'public\\hvm', 'hvm_info_table=2Eh')
-
-    put_branch(working)
-
-    shell(['git', 'add', 'xen'], 'include')
diff --git a/include/xen-types=2Eh b/include/xen-types=2Eh
deleted file mode 100644
index b618af2=2E=2E0000000
--- a/include/xen-types=2Eh
+++ /dev/null
@@ -1,59 +0,0 @@
-/* Copyright (c) Xen Project=2E
- * Copyright (c) Cloud Software Group, Inc=2E
- * All rights reserved=2E
- *
- * Redistribution and use in source and binary forms,
- * with or without modification, are permitted provided
- * that the following conditions are met:
- *
- * *   Redistributions of source code must retain the above
- *     copyright notice, this list of conditions and the
- *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above
- *     copyright notice, this list of conditions and the
- *     following disclaimer in the documentation and/or other
- *     materials provided with the distribution=2E
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE=2E
- */
-
-#ifndef _XEN_TYPES_H
-#define _XEN_TYPES_H
-
-#include <ntddk=2Eh>
-
-// Define types necessary to include xen headers
-
-typedef CHAR    int8_t;
-typedef SHORT   int16_t;
-typedef LONG    int32_t;
-typedef LONG64  int64_t;
-
-typedef UCHAR   uint8_t;
-typedef USHORT  uint16_t;
-typedef ULONG   uint32_t;
-typedef ULONG64 uint64_t;
-
-#define xen_mb()    KeMemoryBarrier()
-#if defined(_M_IX86) || defined(_M_X64)
-#define xen_wmb()   KeMemoryBarrierWithoutFence()
-#define xen_rmb()   KeMemoryBarrierWithoutFence()
-#else
-#define xen_wmb()   KeMemoryBarrier()
-#define xen_rmb()   KeMemoryBarrier()
-#endif
-
-#endif  // _XEN_TYPES_H
diff --git a/include/xen-version=2Eh b/include/xen-version=2Eh
deleted file mode 100644
index 224ca88=2E=2E0000000
--- a/include/xen-version=2Eh
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Copyright (c) Xen Project=2E
- * Copyright (c) Cloud Software Group, Inc=2E
- * All rights reserved=2E
- *
- * Redistribution and use in source and binary forms,
- * with or without modification, are permitted provided
- * that the following conditions are met:
- *
- * *   Redistributions of source code must retain the above
- *     copyright notice, this list of conditions and the
- *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above
- *     copyright notice, this list of conditions and the
- *     following disclaimer in the documentation and/or other
- *     materials provided with the distribution=2E
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE=2E
- */
-
-#ifndef _XEN_VERSION_H
-#define _XEN_VERSION_H
-
-#define __XEN_INTERFACE_VERSION__ __XEN_LATEST_INTERFACE_VERSION__
-
-#endif  // _XEN_VERSION_H
diff --git a/include/xen-warnings=2Eh b/include/xen-warnings=2Eh
deleted file mode 100644
index 30c0f7d=2E=2E0000000
--- a/include/xen-warnings=2Eh
+++ /dev/null
@@ -1,43 +0,0 @@
-/* Copyright (c) Xen Project=2E
- * Copyright (c) Cloud Software Group, Inc=2E
- * All rights reserved=2E
- *
- * Redistribution and use in source and binary forms,
- * with or without modification, are permitted provided
- * that the following conditions are met:
- *
- * *   Redistributions of source code must retain the above
- *     copyright notice, this list of conditions and the
- *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above
- *     copyright notice, this list of conditions and the
- *     following disclaimer in the documentation and/or other
- *     materials provided with the distribution=2E
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE=2E
- */
-
-#ifndef _XEN_WARNINGS_H
-#define _XEN_WARNINGS_H
-
-#include <ntddk=2Eh>
-
-// Disable warnings necessary to include xen headers
-
-# pragma warning(disable:4214) // nonstandard extension used : bit field =
types other than int
-# pragma warning(disable:4200) // nonstandard extension used : zero-sized=
 array in struct/union
-
-#endif  // _XEN_WARNINGS_H
diff --git a/include/xen=2Eh b/include/xen=2Eh
deleted file mode 100644
index 2cee266=2E=2E0000000
--- a/include/xen=2Eh
+++ /dev/null
@@ -1,44 +0,0 @@
-/* Copyright (c) Xen Project=2E
- * Copyright (c) Cloud Software Group, Inc=2E
- * All rights reserved=2E
- *
- * Redistribution and use in source and binary forms,
- * with or without modification, are permitted provided
- * that the following conditions are met:
- *
- * *   Redistributions of source code must retain the above
- *     copyright notice, this list of conditions and the
- *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above
- *     copyright notice, this list of conditions and the
- *     following disclaimer in the documentation and/or other
- *     materials provided with the distribution=2E
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE=2E
- */
-
-#ifndef _XEN_H
-#define _XEN_H
-
-#include <ntddk=2Eh>
-
-#include <xen-version=2Eh>
-#include <xen-types=2Eh>
-#include <xen-warnings=2Eh>
-
-#include <public/hvm/hvm_info_table=2Eh>
-
-#endif  // _XEN_H
diff --git a/include/xen/public/arch-x86/xen-x86_32=2Eh b/include/xen/publ=
ic/arch-x86/xen-x86_32=2Eh
deleted file mode 100644
index d23340b=2E=2E0000000
--- a/include/xen/public/arch-x86/xen-x86_32=2Eh
+++ /dev/null
@@ -1,169 +0,0 @@
-/************************************************************************=
******
- * xen-x86_32=2Eh
- *
- * Guest OS interface to x86 32-bit Xen=2E
- *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
- * Copyright (c) 2004-2007, K A Fraser
- */
-
-#ifndef __XEN_PUBLIC_ARCH_X86_XEN_X86_32_H__
-#define __XEN_PUBLIC_ARCH_X86_XEN_X86_32_H__
-
-/*
- * Hypercall interface:
- *  Input:  %ebx, %ecx, %edx, %esi, %edi, %ebp (arguments 1-6)
- *  Output: %eax
- * Access is via hypercall page (set up by guest loader or via a Xen MSR)=
:
- *  call hypercall_page + hypercall-number * 32
- * Clobbered: Argument registers (e=2Eg=2E, 2-arg hypercall clobbers %ebx=
,%ecx)
- */
-
-/*
- * These flat segments are in the Xen-private section of every GDT=2E Sin=
ce these
- * are also present in the initial GDT, many OSes will be able to avoid
- * installing their own GDT=2E
- */
-#define FLAT_RING1_CS 0xe019    /* GDT index 259 */
-#define FLAT_RING1_DS 0xe021    /* GDT index 260 */
-#define FLAT_RING1_SS 0xe021    /* GDT index 260 */
-#define FLAT_RING3_CS 0xe02b    /* GDT index 261 */
-#define FLAT_RING3_DS 0xe033    /* GDT index 262 */
-#define FLAT_RING3_SS 0xe033    /* GDT index 262 */
-
-#define FLAT_KERNEL_CS FLAT_RING1_CS
-#define FLAT_KERNEL_DS FLAT_RING1_DS
-#define FLAT_KERNEL_SS FLAT_RING1_SS
-#define FLAT_USER_CS    FLAT_RING3_CS
-#define FLAT_USER_DS    FLAT_RING3_DS
-#define FLAT_USER_SS    FLAT_RING3_SS
-
-#define __HYPERVISOR_VIRT_START_PAE    0xF5800000
-#define __MACH2PHYS_VIRT_START_PAE     0xF5800000
-#define __MACH2PHYS_VIRT_END_PAE       0xF6800000
-#define HYPERVISOR_VIRT_START_PAE      xen_mk_ulong(__HYPERVISOR_VIRT_STA=
RT_PAE)
-#define MACH2PHYS_VIRT_START_PAE       xen_mk_ulong(__MACH2PHYS_VIRT_STAR=
T_PAE)
-#define MACH2PHYS_VIRT_END_PAE         xen_mk_ulong(__MACH2PHYS_VIRT_END_=
PAE)
-
-/* Non-PAE bounds are obsolete=2E */
-#define __HYPERVISOR_VIRT_START_NONPAE 0xFC000000
-#define __MACH2PHYS_VIRT_START_NONPAE  0xFC000000
-#define __MACH2PHYS_VIRT_END_NONPAE    0xFC400000
-#define HYPERVISOR_VIRT_START_NONPAE   \
-    xen_mk_ulong(__HYPERVISOR_VIRT_START_NONPAE)
-#define MACH2PHYS_VIRT_START_NONPAE    \
-    xen_mk_ulong(__MACH2PHYS_VIRT_START_NONPAE)
-#define MACH2PHYS_VIRT_END_NONPAE      \
-    xen_mk_ulong(__MACH2PHYS_VIRT_END_NONPAE)
-
-#define __HYPERVISOR_VIRT_START __HYPERVISOR_VIRT_START_PAE
-#define __MACH2PHYS_VIRT_START  __MACH2PHYS_VIRT_START_PAE
-#define __MACH2PHYS_VIRT_END    __MACH2PHYS_VIRT_END_PAE
-
-#ifndef HYPERVISOR_VIRT_START
-#define HYPERVISOR_VIRT_START xen_mk_ulong(__HYPERVISOR_VIRT_START)
-#endif
-
-#define MACH2PHYS_VIRT_START  xen_mk_ulong(__MACH2PHYS_VIRT_START)
-#define MACH2PHYS_VIRT_END    xen_mk_ulong(__MACH2PHYS_VIRT_END)
-#define MACH2PHYS_NR_ENTRIES  ((MACH2PHYS_VIRT_END-MACH2PHYS_VIRT_START)>=
>2)
-#ifndef machine_to_phys_mapping
-#define machine_to_phys_mapping ((ULONG_PTR *)MACH2PHYS_VIRT_START)
-#endif
-
-/* 32-/64-bit invariability for control interfaces (domctl/sysctl)=2E */
-#if defined(__XEN__) || defined(__XEN_TOOLS__)
-#undef ___DEFINE_XEN_GUEST_HANDLE
-#define ___DEFINE_XEN_GUEST_HANDLE(name, type)                  \
-    typedef struct { type *p; }                                 \
-        __guest_handle_ ## name;                                \
-    typedef struct { union { type *p; uint64_aligned_t q; }; }  \
-        __guest_handle_64_ ## name
-#undef set_xen_guest_handle_raw
-#define set_xen_guest_handle_raw(hnd, val)                  \
-    do { if ( sizeof(hnd) =3D=3D 8 ) *(uint64_t *)&(hnd) =3D 0;   \
-         (hnd)=2Ep =3D val;                                     \
-    } while ( 0 )
-#define  int64_aligned_t  int64_t __attribute__((aligned(8)))
-#define uint64_aligned_t uint64_t __attribute__((aligned(8)))
-#define __XEN_GUEST_HANDLE_64(name) __guest_handle_64_ ## name
-#define XEN_GUEST_HANDLE_64(name) __XEN_GUEST_HANDLE_64(name)
-#endif
-
-#ifndef __ASSEMBLY__
-
-struct cpu_user_regs {
-    uint32_t ebx;
-    uint32_t ecx;
-    uint32_t edx;
-    uint32_t esi;
-    uint32_t edi;
-    uint32_t ebp;
-    uint32_t eax;
-    uint16_t error_code;    /* private */
-    uint16_t entry_vector;  /* private */
-    uint32_t eip;
-    uint16_t cs;
-    uint8_t  saved_upcall_mask;
-    uint8_t  _pad0;
-    uint32_t eflags;        /* eflags=2EIF =3D=3D !saved_upcall_mask */
-    uint32_t esp;
-    uint16_t ss, _pad1;
-    uint16_t es, _pad2;
-    uint16_t ds, _pad3;
-    uint16_t fs, _pad4;
-    uint16_t gs, _pad5;
-};
-typedef struct cpu_user_regs cpu_user_regs_t;
-DEFINE_XEN_GUEST_HANDLE(cpu_user_regs_t);
-
-/*
- * Page-directory addresses above 4GB do not fit into architectural %cr3=
=2E
- * When accessing %cr3, or equivalent field in vcpu_guest_context, guests
- * must use the following accessor macros to pack/unpack valid MFNs=2E
- */
-#define xen_pfn_to_cr3(pfn) (((unsigned)(pfn) << 12) | ((unsigned)(pfn) >=
> 20))
-#define xen_cr3_to_pfn(cr3) (((unsigned)(cr3) >> 12) | ((unsigned)(cr3) <=
< 20))
-
-struct arch_vcpu_info {
-    ULONG_PTR cr2;
-    ULONG_PTR pad[5]; /* sizeof(vcpu_info_t) =3D=3D 64 */
-};
-typedef struct arch_vcpu_info arch_vcpu_info_t;
-
-struct xen_callback {
-    ULONG_PTR cs;
-    ULONG_PTR eip;
-};
-typedef struct xen_callback xen_callback_t;
-
-#endif /* !__ASSEMBLY__ */
-
-#endif /* __XEN_PUBLIC_ARCH_X86_XEN_X86_32_H__ */
-
-/*
- * Local variables:
- * mode: C
- * c-file-style: "BSD"
- * c-basic-offset: 4
- * tab-width: 4
- * indent-tabs-mode: nil
- * End:
- */
diff --git a/include/xen/public/arch-x86/xen-x86_64=2Eh b/include/xen/publ=
ic/arch-x86/xen-x86_64=2Eh
deleted file mode 100644
index 2f53f69=2E=2E0000000
--- a/include/xen/public/arch-x86/xen-x86_64=2Eh
+++ /dev/null
@@ -1,202 +0,0 @@
-/************************************************************************=
******
- * xen-x86_64=2Eh
- *
- * Guest OS interface to x86 64-bit Xen=2E
- *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
- * Copyright (c) 2004-2006, K A Fraser
- */
-
-#ifndef __XEN_PUBLIC_ARCH_X86_XEN_X86_64_H__
-#define __XEN_PUBLIC_ARCH_X86_XEN_X86_64_H__
-
-/*
- * Hypercall interface:
- *  Input:  %rdi, %rsi, %rdx, %r10, %r8, %r9 (arguments 1-6)
- *  Output: %rax
- * Access is via hypercall page (set up by guest loader or via a Xen MSR)=
:
- *  call hypercall_page + hypercall-number * 32
- * Clobbered: argument registers (e=2Eg=2E, 2-arg hypercall clobbers %rdi=
,%rsi)
- */
-
-/*
- * 64-bit segment selectors
- * These flat segments are in the Xen-private section of every GDT=2E Sin=
ce these
- * are also present in the initial GDT, many OSes will be able to avoid
- * installing their own GDT=2E
- */
-
-#define FLAT_RING3_CS32 0xe023  /* GDT index 260 */
-#define FLAT_RING3_CS64 0xe033  /* GDT index 261 */
-#define FLAT_RING3_DS32 0xe02b  /* GDT index 262 */
-#define FLAT_RING3_DS64 0x0000  /* NULL selector */
-#define FLAT_RING3_SS32 0xe02b  /* GDT index 262 */
-#define FLAT_RING3_SS64 0xe02b  /* GDT index 262 */
-
-#define FLAT_KERNEL_DS64 FLAT_RING3_DS64
-#define FLAT_KERNEL_DS32 FLAT_RING3_DS32
-#define FLAT_KERNEL_DS   FLAT_KERNEL_DS64
-#define FLAT_KERNEL_CS64 FLAT_RING3_CS64
-#define FLAT_KERNEL_CS32 FLAT_RING3_CS32
-#define FLAT_KERNEL_CS   FLAT_KERNEL_CS64
-#define FLAT_KERNEL_SS64 FLAT_RING3_SS64
-#define FLAT_KERNEL_SS32 FLAT_RING3_SS32
-#define FLAT_KERNEL_SS   FLAT_KERNEL_SS64
-
-#define FLAT_USER_DS64 FLAT_RING3_DS64
-#define FLAT_USER_DS32 FLAT_RING3_DS32
-#define FLAT_USER_DS   FLAT_USER_DS64
-#define FLAT_USER_CS64 FLAT_RING3_CS64
-#define FLAT_USER_CS32 FLAT_RING3_CS32
-#define FLAT_USER_CS   FLAT_USER_CS64
-#define FLAT_USER_SS64 FLAT_RING3_SS64
-#define FLAT_USER_SS32 FLAT_RING3_SS32
-#define FLAT_USER_SS   FLAT_USER_SS64
-
-#define __HYPERVISOR_VIRT_START 0xFFFF800000000000
-#define __HYPERVISOR_VIRT_END   0xFFFF880000000000
-#define __MACH2PHYS_VIRT_START  0xFFFF800000000000
-#define __MACH2PHYS_VIRT_END    0xFFFF804000000000
-
-#ifndef HYPERVISOR_VIRT_START
-#define HYPERVISOR_VIRT_START xen_mk_ulong(__HYPERVISOR_VIRT_START)
-#define HYPERVISOR_VIRT_END   xen_mk_ulong(__HYPERVISOR_VIRT_END)
-#endif
-
-#define MACH2PHYS_VIRT_START  xen_mk_ulong(__MACH2PHYS_VIRT_START)
-#define MACH2PHYS_VIRT_END    xen_mk_ulong(__MACH2PHYS_VIRT_END)
-#define MACH2PHYS_NR_ENTRIES  ((MACH2PHYS_VIRT_END-MACH2PHYS_VIRT_START)>=
>3)
-#ifndef machine_to_phys_mapping
-#define machine_to_phys_mapping ((ULONG_PTR *)HYPERVISOR_VIRT_START)
-#endif
-
-/*
- * int HYPERVISOR_set_segment_base(unsigned int which, ULONG_PTR base)
- *  @which =3D=3D SEGBASE_*  ;  @base =3D=3D 64-bit base address
- * Returns 0 on success=2E
- */
-#define SEGBASE_FS          0
-#define SEGBASE_GS_USER     1
-#define SEGBASE_GS_KERNEL   2
-#define SEGBASE_GS_USER_SEL 3 /* Set user %gs specified in base[15:0] */
-
-/*
- * int HYPERVISOR_iret(void)
- * All arguments are on the kernel stack, in the following format=2E
- * Never returns if successful=2E Current kernel context is lost=2E
- * The saved CS is mapped as follows:
- *   RING0 -> RING3 kernel mode=2E
- *   RING1 -> RING3 kernel mode=2E
- *   RING2 -> RING3 kernel mode=2E
- *   RING3 -> RING3 user mode=2E
- * However RING0 indicates that the guest kernel should return to iteself
- * directly with
- *      orb   $3,1*8(%rsp)
- *      iretq
- * If flags contains VGCF_in_syscall:
- *   Restore RAX, RIP, RFLAGS, RSP=2E
- *   Discard R11, RCX, CS, SS=2E
- * Otherwise:
- *   Restore RAX, R11, RCX, CS:RIP, RFLAGS, SS:RSP=2E
- * All other registers are saved on hypercall entry and restored to user=
=2E
- */
-/* Guest exited in SYSCALL context? Return to guest with SYSRET? */
-#define _VGCF_in_syscall 8
-#define VGCF_in_syscall  (1<<_VGCF_in_syscall)
-#define VGCF_IN_SYSCALL  VGCF_in_syscall
-
-#ifndef __ASSEMBLY__
-
-struct iret_context {
-    /* Top of stack (%rsp at point of hypercall)=2E */
-    uint64_t rax, r11, rcx, flags, rip, cs, rflags, rsp, ss;
-    /* Bottom of iret stack frame=2E */
-};
-
-#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
-/* Anonymous union includes both 32- and 64-bit names (e=2Eg=2E, eax/rax)=
=2E */
-#define __DECL_REG(name) union { \
-    uint64_t r ## name, e ## name; \
-    uint32_t _e ## name; \
-}
-#else
-/* Non-gcc sources must always use the proper 64-bit name (e=2Eg=2E, rax)=
=2E */
-#define __DECL_REG(name) uint64_t r ## name
-#endif
-
-struct cpu_user_regs {
-    uint64_t r15;
-    uint64_t r14;
-    uint64_t r13;
-    uint64_t r12;
-    __DECL_REG(bp);
-    __DECL_REG(bx);
-    uint64_t r11;
-    uint64_t r10;
-    uint64_t r9;
-    uint64_t r8;
-    __DECL_REG(ax);
-    __DECL_REG(cx);
-    __DECL_REG(dx);
-    __DECL_REG(si);
-    __DECL_REG(di);
-    uint32_t error_code;    /* private */
-    uint32_t entry_vector;  /* private */
-    __DECL_REG(ip);
-    uint16_t cs, _pad0[1];
-    uint8_t  saved_upcall_mask;
-    uint8_t  _pad1[3];
-    __DECL_REG(flags);      /* rflags=2EIF =3D=3D !saved_upcall_mask */
-    __DECL_REG(sp);
-    uint16_t ss, _pad2[3];
-    uint16_t es, _pad3[3];
-    uint16_t ds, _pad4[3];
-    uint16_t fs, _pad5[3]; /* Non-zero =3D> takes precedence over fs_base=
=2E     */
-    uint16_t gs, _pad6[3]; /* Non-zero =3D> takes precedence over gs_base=
_usr=2E */
-};
-typedef struct cpu_user_regs cpu_user_regs_t;
-DEFINE_XEN_GUEST_HANDLE(cpu_user_regs_t);
-
-#undef __DECL_REG
-
-#define xen_pfn_to_cr3(pfn) ((ULONG_PTR)(pfn) << 12)
-#define xen_cr3_to_pfn(cr3) ((ULONG_PTR)(cr3) >> 12)
-
-struct arch_vcpu_info {
-    ULONG_PTR cr2;
-    ULONG_PTR pad; /* sizeof(vcpu_info_t) =3D=3D 64 */
-};
-typedef struct arch_vcpu_info arch_vcpu_info_t;
-
-typedef ULONG_PTR xen_callback_t;
-
-#endif /* !__ASSEMBLY__ */
-
-#endif /* __XEN_PUBLIC_ARCH_X86_XEN_X86_64_H__ */
-
-/*
- * Local variables:
- * mode: C
- * c-file-style: "BSD"
- * c-basic-offset: 4
- * tab-width: 4
- * indent-tabs-mode: nil
- * End:
- */
diff --git a/include/xen/public/arch-x86/xen=2Eh b/include/xen/public/arch=
-x86/xen=2Eh
deleted file mode 100644
index 05db77f=2E=2E0000000
--- a/include/xen/public/arch-x86/xen=2Eh
+++ /dev/null
@@ -1,338 +0,0 @@
-/************************************************************************=
******
- * arch-x86/xen=2Eh
- *
- * Guest OS interface to x86 Xen=2E
- *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
- * Copyright (c) 2004-2006, K A Fraser
- */
-
-#include "=2E=2E/xen=2Eh"
-
-#ifndef __XEN_PUBLIC_ARCH_X86_XEN_H__
-#define __XEN_PUBLIC_ARCH_X86_XEN_H__
-
-/* Structural guest handles introduced in 0x00030201=2E */
-#if __XEN_INTERFACE_VERSION__ >=3D 0x00030201
-#define ___DEFINE_XEN_GUEST_HANDLE(name, type) \
-    typedef struct { type *p; } __guest_handle_ ## name
-#else
-#define ___DEFINE_XEN_GUEST_HANDLE(name, type) \
-    typedef type * __guest_handle_ ## name
-#endif
-
-/*
- * XEN_GUEST_HANDLE represents a guest pointer, when passed as a field
- * in a struct in memory=2E
- * XEN_GUEST_HANDLE_PARAM represent a guest pointer, when passed as an
- * hypercall argument=2E
- * XEN_GUEST_HANDLE_PARAM and XEN_GUEST_HANDLE are the same on X86 but
- * they might not be on other architectures=2E
- */
-#define __DEFINE_XEN_GUEST_HANDLE(name, type) \
-    ___DEFINE_XEN_GUEST_HANDLE(name, type);   \
-    ___DEFINE_XEN_GUEST_HANDLE(const_##name, const type)
-#define DEFINE_XEN_GUEST_HANDLE(name)   __DEFINE_XEN_GUEST_HANDLE(name, n=
ame)
-#define __XEN_GUEST_HANDLE(name)        __guest_handle_ ## name
-#define XEN_GUEST_HANDLE(name)          __XEN_GUEST_HANDLE(name)
-#define XEN_GUEST_HANDLE_PARAM(name)    XEN_GUEST_HANDLE(name)
-#define set_xen_guest_handle_raw(hnd, val)  do { (hnd)=2Ep =3D val; } whi=
le (0)
-#define set_xen_guest_handle(hnd, val) set_xen_guest_handle_raw(hnd, val)
-
-#if defined(__i386__)
-#include "xen-x86_32=2Eh"
-#elif defined(__x86_64__)
-#include "xen-x86_64=2Eh"
-#endif
-
-#ifndef __ASSEMBLY__
-typedef ULONG_PTR xen_pfn_t;
-#define PRI_xen_pfn "lx"
-#endif
-
-#define XEN_HAVE_PV_GUEST_ENTRY 1
-
-#define XEN_HAVE_PV_UPCALL_MASK 1
-
-/*
- * `incontents 200 segdesc Segment Descriptor Tables
- */
-/*
- * ` enum neg_errnoval
- * ` HYPERVISOR_set_gdt(const xen_pfn_t frames[], unsigned int entries);
- * `
- */
-/*
- * A number of GDT entries are reserved by Xen=2E These are not situated =
at the
- * start of the GDT because some stupid OSes export hard-coded selector v=
alues
- * in their ABI=2E These hard-coded values are always near the start of t=
he GDT,
- * so Xen places itself out of the way, at the far end of the GDT=2E
- *
- * NB The LDT is set using the MMUEXT_SET_LDT op of HYPERVISOR_mmuext_op
- */
-#define FIRST_RESERVED_GDT_PAGE  14
-#define FIRST_RESERVED_GDT_BYTE  (FIRST_RESERVED_GDT_PAGE * 4096)
-#define FIRST_RESERVED_GDT_ENTRY (FIRST_RESERVED_GDT_BYTE / 8)
-
-
-/*
- * ` enum neg_errnoval
- * ` HYPERVISOR_update_descriptor(u64 pa, u64 desc);
- * `
- * ` @pa   The machine physical address of the descriptor to
- * `       update=2E Must be either a descriptor page or writable=2E
- * ` @desc The descriptor value to update, in the same format as a
- * `       native descriptor table entry=2E
- */
-
-/* Maximum number of virtual CPUs in legacy multi-processor guests=2E */
-#define XEN_LEGACY_MAX_VCPUS 32
-
-#ifndef __ASSEMBLY__
-
-typedef ULONG_PTR xen_ulong_t;
-#define PRI_xen_ulong "lx"
-
-/*
- * ` enum neg_errnoval
- * ` HYPERVISOR_stack_switch(ULONG_PTR ss, ULONG_PTR esp);
- * `
- * Sets the stack segment and pointer for the current vcpu=2E
- */
-
-/*
- * ` enum neg_errnoval
- * ` HYPERVISOR_set_trap_table(const struct trap_info traps[]);
- * `
- */
-/*
- * Send an array of these to HYPERVISOR_set_trap_table()=2E
- * Terminate the array with a sentinel entry, with traps[]=2Eaddress=3D=
=3D0=2E
- * The privilege level specifies which modes may enter a trap via a softw=
are
- * interrupt=2E On x86/64, since rings 1 and 2 are unavailable, we alloca=
te
- * privilege levels as follows:
- *  Level =3D=3D 0: Noone may enter
- *  Level =3D=3D 1: Kernel may enter
- *  Level =3D=3D 2: Kernel may enter
- *  Level =3D=3D 3: Everyone may enter
- */
-#define TI_GET_DPL(_ti)      ((_ti)->flags & 3)
-#define TI_GET_IF(_ti)       ((_ti)->flags & 4)
-#define TI_SET_DPL(_ti,_dpl) ((_ti)->flags |=3D (_dpl))
-#define TI_SET_IF(_ti,_if)   ((_ti)->flags |=3D ((!!(_if))<<2))
-struct trap_info {
-    uint8_t       vector;  /* exception vector                           =
   */
-    uint8_t       flags;   /* 0-3: privilege level; 4: clear event enable=
?  */
-    uint16_t      cs;      /* code selector                              =
   */
-    ULONG_PTR address; /* code offset                                   *=
/
-};
-typedef struct trap_info trap_info_t;
-DEFINE_XEN_GUEST_HANDLE(trap_info_t);
-
-typedef uint64_t tsc_timestamp_t; /* RDTSC timestamp */
-
-/*
- * The following is all CPU context=2E Note that the fpu_ctxt block is fi=
lled
- * in by FXSAVE if the CPU has feature FXSR; otherwise FSAVE is used=2E
- *
- * Also note that when calling DOMCTL_setvcpucontext and VCPU_initialise
- * for HVM and PVH guests, not all information in this structure is updat=
ed:
- *
- * - For HVM guests, the structures read include: fpu_ctxt (if
- * VGCT_I387_VALID is set), flags, user_regs, debugreg[*]
- *
- * - PVH guests are the same as HVM guests, but additionally use ctrlreg[=
3] to
- * set cr3=2E All other fields not used should be set to 0=2E
- */
-struct vcpu_guest_context {
-    /* FPU registers come first so they can be aligned for FXSAVE/FXRSTOR=
=2E */
-    struct { char x[512]; } fpu_ctxt;       /* User-level FPU registers  =
   */
-#define VGCF_I387_VALID                (1<<0)
-#define VGCF_IN_KERNEL                 (1<<2)
-#define _VGCF_i387_valid               0
-#define VGCF_i387_valid                (1<<_VGCF_i387_valid)
-#define _VGCF_in_kernel                2
-#define VGCF_in_kernel                 (1<<_VGCF_in_kernel)
-#define _VGCF_failsafe_disables_events 3
-#define VGCF_failsafe_disables_events  (1<<_VGCF_failsafe_disables_events=
)
-#define _VGCF_syscall_disables_events  4
-#define VGCF_syscall_disables_events   (1<<_VGCF_syscall_disables_events)
-#define _VGCF_online                   5
-#define VGCF_online                    (1<<_VGCF_online)
-    ULONG_PTR flags;                    /* VGCF_* flags                 *=
/
-    struct cpu_user_regs user_regs;         /* User-level CPU registers  =
   */
-    struct trap_info trap_ctxt[256];        /* Virtual IDT               =
   */
-    ULONG_PTR ldt_base, ldt_ents;       /* LDT (linear address, # ents) *=
/
-    ULONG_PTR gdt_frames[16], gdt_ents; /* GDT (machine frames, # ents) *=
/
-    ULONG_PTR kernel_ss, kernel_sp;     /* Virtual TSS (only SS1/SP1)   *=
/
-    /* NB=2E User pagetable on x86/64 is placed in ctrlreg[1]=2E */
-    ULONG_PTR ctrlreg[8];               /* CR0-CR7 (control registers)  *=
/
-    ULONG_PTR debugreg[8];              /* DB0-DB7 (debug registers)    *=
/
-#ifdef __i386__
-    ULONG_PTR event_callback_cs;        /* CS:EIP of event callback     *=
/
-    ULONG_PTR event_callback_eip;
-    ULONG_PTR failsafe_callback_cs;     /* CS:EIP of failsafe callback  *=
/
-    ULONG_PTR failsafe_callback_eip;
-#else
-    ULONG_PTR event_callback_eip;
-    ULONG_PTR failsafe_callback_eip;
-#ifdef __XEN__
-    union {
-        ULONG_PTR syscall_callback_eip;
-        struct {
-            unsigned int event_callback_cs;    /* compat CS of event cb  =
   */
-            unsigned int failsafe_callback_cs; /* compat CS of failsafe c=
b  */
-        };
-    };
-#else
-    ULONG_PTR syscall_callback_eip;
-#endif
-#endif
-    ULONG_PTR vm_assist;                /* VMASST_TYPE_* bitmap */
-#ifdef __x86_64__
-    /* Segment base addresses=2E */
-    uint64_t      fs_base;
-    uint64_t      gs_base_kernel;
-    uint64_t      gs_base_user;
-#endif
-};
-typedef struct vcpu_guest_context vcpu_guest_context_t;
-DEFINE_XEN_GUEST_HANDLE(vcpu_guest_context_t);
-
-struct arch_shared_info {
-    /*
-     * Number of valid entries in the p2m table(s) anchored at
-     * pfn_to_mfn_frame_list_list and/or p2m_vaddr=2E
-     */
-    ULONG_PTR max_pfn;
-    /*
-     * Frame containing list of mfns containing list of mfns containing p=
2m=2E
-     * A value of 0 indicates it has not yet been set up, ~0 indicates it=
 has
-     * been set to invalid e=2Eg=2E due to the p2m being too large for th=
e 3-level
-     * p2m tree=2E In this case the linear mapper p2m list anchored at p2=
m_vaddr
-     * is to be used=2E
-     */
-    xen_pfn_t     pfn_to_mfn_frame_list_list;
-    ULONG_PTR nmi_reason;
-    /*
-     * Following three fields are valid if p2m_cr3 contains a value diffe=
rent
-     * from 0=2E
-     * p2m_cr3 is the root of the address space where p2m_vaddr is valid=
=2E
-     * p2m_cr3 is in the same format as a cr3 value in the vcpu register =
state
-     * and holds the folded machine frame number (via xen_pfn_to_cr3) of =
a
-     * L3 or L4 page table=2E
-     * p2m_vaddr holds the virtual address of the linear p2m list=2E All =
entries
-     * in the range [0=2E=2E=2Emax_pfn[ are accessible via this pointer=
=2E
-     * p2m_generation will be incremented by the guest before and after e=
ach
-     * change of the mappings of the p2m list=2E p2m_generation starts at=
 0 and
-     * a value with the least significant bit set indicates that a mappin=
g
-     * update is in progress=2E This allows guest external software (e=2E=
g=2E in Dom0)
-     * to verify that read mappings are consistent and whether they have =
changed
-     * since the last check=2E
-     * Modifying a p2m element in the linear p2m list is allowed via an a=
tomic
-     * write only=2E
-     */
-    ULONG_PTR p2m_cr3;         /* cr3 value of the p2m address space */
-    ULONG_PTR p2m_vaddr;       /* virtual address of the p2m list */
-    ULONG_PTR p2m_generation;  /* generation count of p2m mapping */
-#ifdef __i386__
-    /* There's no room for this field in the generic structure=2E */
-    uint32_t wc_sec_hi;
-#endif
-};
-typedef struct arch_shared_info arch_shared_info_t;
-
-#if defined(__XEN__) || defined(__XEN_TOOLS__)
-/*
- * struct xen_arch_domainconfig's ABI is covered by
- * XEN_DOMCTL_INTERFACE_VERSION=2E
- */
-struct xen_arch_domainconfig {
-#define _XEN_X86_EMU_LAPIC          0
-#define XEN_X86_EMU_LAPIC           (1U<<_XEN_X86_EMU_LAPIC)
-#define _XEN_X86_EMU_HPET           1
-#define XEN_X86_EMU_HPET            (1U<<_XEN_X86_EMU_HPET)
-#define _XEN_X86_EMU_PM             2
-#define XEN_X86_EMU_PM              (1U<<_XEN_X86_EMU_PM)
-#define _XEN_X86_EMU_RTC            3
-#define XEN_X86_EMU_RTC             (1U<<_XEN_X86_EMU_RTC)
-#define _XEN_X86_EMU_IOAPIC         4
-#define XEN_X86_EMU_IOAPIC          (1U<<_XEN_X86_EMU_IOAPIC)
-#define _XEN_X86_EMU_PIC            5
-#define XEN_X86_EMU_PIC             (1U<<_XEN_X86_EMU_PIC)
-#define _XEN_X86_EMU_VGA            6
-#define XEN_X86_EMU_VGA             (1U<<_XEN_X86_EMU_VGA)
-#define _XEN_X86_EMU_IOMMU          7
-#define XEN_X86_EMU_IOMMU           (1U<<_XEN_X86_EMU_IOMMU)
-#define _XEN_X86_EMU_PIT            8
-#define XEN_X86_EMU_PIT             (1U<<_XEN_X86_EMU_PIT)
-
-#define XEN_X86_EMU_ALL             (XEN_X86_EMU_LAPIC | XEN_X86_EMU_HPET=
 |  \
-                                     XEN_X86_EMU_PM | XEN_X86_EMU_RTC |  =
    \
-                                     XEN_X86_EMU_IOAPIC | XEN_X86_EMU_PIC=
 |  \
-                                     XEN_X86_EMU_VGA | XEN_X86_EMU_IOMMU =
|   \
-                                     XEN_X86_EMU_PIT)
-    uint32_t emulation_flags;
-};
-#endif
-
-#endif /* !__ASSEMBLY__ */
-
-/*
- * ` enum neg_errnoval
- * ` HYPERVISOR_fpu_taskswitch(int set);
- * `
- * Sets (if set!=3D0) or clears (if set=3D=3D0) CR0=2ETS=2E
- */
-
-/*
- * ` enum neg_errnoval
- * ` HYPERVISOR_set_debugreg(int regno, ULONG_PTR value);
- *
- * ` ULONG_PTR
- * ` HYPERVISOR_get_debugreg(int regno);
- * For 0<=3Dreg<=3D7, returns the debug register value=2E
- * For other values of reg, returns ((ULONG_PTR)-EINVAL)=2E
- * (Unfortunately, this interface is defective=2E)
- */
-
-/*
- * Prefix forces emulation of some non-trapping instructions=2E
- * Currently only CPUID=2E
- */
-#ifdef __ASSEMBLY__
-#define XEN_EMULATE_PREFIX =2Ebyte 0x0f,0x0b,0x78,0x65,0x6e ;
-#define XEN_CPUID          XEN_EMULATE_PREFIX cpuid
-#else
-#define XEN_EMULATE_PREFIX "=2Ebyte 0x0f,0x0b,0x78,0x65,0x6e ; "
-#define XEN_CPUID          XEN_EMULATE_PREFIX "cpuid"
-#endif
-
-#endif /* __XEN_PUBLIC_ARCH_X86_XEN_H__ */
-
-/*
- * Local variables:
- * mode: C
- * c-file-style: "BSD"
- * c-basic-offset: 4
- * tab-width: 4
- * indent-tabs-mode: nil
- * End:
- */
diff --git a/include/xen/public/hvm/hvm_info_table=2Eh b/include/xen/publi=
c/hvm/hvm_info_table=2Eh
deleted file mode 100644
index a92e8f7=2E=2E0000000
--- a/include/xen/public/hvm/hvm_info_table=2Eh
+++ /dev/null
@@ -1,74 +0,0 @@
-/************************************************************************=
******
- * hvm/hvm_info_table=2Eh
- *
- * HVM parameter and information table, written into guest memory map=2E
- *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
- * Copyright (c) 2006, Keir Fraser
- */
-
-#ifndef __XEN_PUBLIC_HVM_HVM_INFO_TABLE_H__
-#define __XEN_PUBLIC_HVM_HVM_INFO_TABLE_H__
-
-#define HVM_INFO_PFN         0x09F
-#define HVM_INFO_OFFSET      0x800
-#define HVM_INFO_PADDR       ((HVM_INFO_PFN << 12) + HVM_INFO_OFFSET)
-
-/* Maximum we can support with current vLAPIC ID mapping=2E */
-#define HVM_MAX_VCPUS        128
-
-struct hvm_info_table {
-    char        signature[8]; /* "HVM INFO" */
-    uint32_t    length;
-    uint8_t     checksum;
-
-    /* Should firmware build APIC descriptors (APIC MADT / MP BIOS)? */
-    uint8_t     apic_mode;
-
-    /* How many CPUs does this domain have? */
-    uint32_t    nr_vcpus;
-
-    /*
-     * MEMORY MAP provided by HVM domain builder=2E
-     * Notes:
-     *  1=2E page_to_phys(x) =3D x << 12
-     *  2=2E If a field is zero, the corresponding range does not exist=
=2E
-     */
-    /*
-     *  0x0 to page_to_phys(low_mem_pgend)-1:
-     *    RAM below 4GB (except for VGA hole 0xA0000-0xBFFFF)
-     */
-    uint32_t    low_mem_pgend;
-    /*
-     *  page_to_phys(reserved_mem_pgstart) to 0xFFFFFFFF:
-     *    Reserved for special memory mappings
-     */
-    uint32_t    reserved_mem_pgstart;
-    /*
-     *  0x100000000 to page_to_phys(high_mem_pgend)-1:
-     *    RAM above 4GB
-     */
-    uint32_t    high_mem_pgend;
-
-    /* Bitmap of which CPUs are online at boot time=2E */
-    uint8_t     vcpu_online[(HVM_MAX_VCPUS + 7)/8];
-};
-
-#endif /* __XEN_PUBLIC_HVM_HVM_INFO_TABLE_H__ */
diff --git a/include/xen/public/xen-compat=2Eh b/include/xen/public/xen-co=
mpat=2Eh
deleted file mode 100644
index 2eea0e2=2E=2E0000000
--- a/include/xen/public/xen-compat=2Eh
+++ /dev/null
@@ -1,44 +0,0 @@
-/************************************************************************=
******
- * xen-compat=2Eh
- *
- * Guest OS interface to Xen=2E  Compatibility layer=2E
- *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
- * Copyright (c) 2006, Christian Limpach
- */
-
-#ifndef __XEN_PUBLIC_XEN_COMPAT_H__
-#define __XEN_PUBLIC_XEN_COMPAT_H__
-
-#define __XEN_LATEST_INTERFACE_VERSION__ 0x00040700
-
-#if defined(__XEN__) || defined(__XEN_TOOLS__)
-/* Xen is built with matching headers and implements the latest interface=
=2E */
-#define __XEN_INTERFACE_VERSION__ __XEN_LATEST_INTERFACE_VERSION__
-#elif !defined(__XEN_INTERFACE_VERSION__)
-/* Guests which do not specify a version get the legacy interface=2E */
-#define __XEN_INTERFACE_VERSION__ 0x00000000
-#endif
-
-#if __XEN_INTERFACE_VERSION__ > __XEN_LATEST_INTERFACE_VERSION__
-#error "These header files do not support the requested interface version=
=2E"
-#endif
-
-#endif /* __XEN_PUBLIC_XEN_COMPAT_H__ */
diff --git a/include/xen/public/xen=2Eh b/include/xen/public/xen=2Eh
deleted file mode 100644
index 2057b52=2E=2E0000000
--- a/include/xen/public/xen=2Eh
+++ /dev/null
@@ -1,995 +0,0 @@
-/************************************************************************=
******
- * xen=2Eh
- *
- * Guest OS interface to Xen=2E
- *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
- * Copyright (c) 2004, K A Fraser
- */
-
-#ifndef __XEN_PUBLIC_XEN_H__
-#define __XEN_PUBLIC_XEN_H__
-
-#include "xen-compat=2Eh"
-
-#if defined(__i386__) || defined(__x86_64__)
-#include "arch-x86/xen=2Eh"
-#elif defined(__arm__) || defined (__aarch64__)
-#include "arch-arm=2Eh"
-#else
-#error "Unsupported architecture"
-#endif
-
-#ifndef __ASSEMBLY__
-/* Guest handles for primitive C types=2E */
-DEFINE_XEN_GUEST_HANDLE(char);
-__DEFINE_XEN_GUEST_HANDLE(uchar, unsigned char);
-DEFINE_XEN_GUEST_HANDLE(int);
-__DEFINE_XEN_GUEST_HANDLE(uint,  unsigned int);
-#if __XEN_INTERFACE_VERSION__ < 0x00040300
-DEFINE_XEN_GUEST_HANDLE(LONG_PTR);
-__DEFINE_XEN_GUEST_HANDLE(ulong, ULONG_PTR);
-#endif
-DEFINE_XEN_GUEST_HANDLE(void);
-
-DEFINE_XEN_GUEST_HANDLE(uint64_t);
-DEFINE_XEN_GUEST_HANDLE(xen_pfn_t);
-DEFINE_XEN_GUEST_HANDLE(xen_ulong_t);
-
-/* Turn a plain number into a C unsigned (LONG_PTR) constant=2E */
-#define __xen_mk_uint(x)  x ## U
-#define __xen_mk_ulong(x) x ## UL
-#define xen_mk_uint(x)    __xen_mk_uint(x)
-#define xen_mk_ulong(x)   __xen_mk_ulong(x)
-
-#else
-
-/* In assembly code we cannot use C numeric constant suffixes=2E */
-#define xen_mk_uint(x)  x
-#define xen_mk_ulong(x) x
-
-#endif
-
-/*
- * HYPERCALLS
- */
-
-/* `incontents 100 hcalls List of hypercalls
- * ` enum hypercall_num { // __HYPERVISOR_* =3D> HYPERVISOR_*()
- */
-
-#define __HYPERVISOR_set_trap_table        0
-#define __HYPERVISOR_mmu_update            1
-#define __HYPERVISOR_set_gdt               2
-#define __HYPERVISOR_stack_switch          3
-#define __HYPERVISOR_set_callbacks         4
-#define __HYPERVISOR_fpu_taskswitch        5
-#define __HYPERVISOR_sched_op_compat       6 /* compat since 0x00030101 *=
/
-#define __HYPERVISOR_platform_op           7
-#define __HYPERVISOR_set_debugreg          8
-#define __HYPERVISOR_get_debugreg          9
-#define __HYPERVISOR_update_descriptor    10
-#define __HYPERVISOR_memory_op            12
-#define __HYPERVISOR_multicall            13
-#define __HYPERVISOR_update_va_mapping    14
-#define __HYPERVISOR_set_timer_op         15
-#define __HYPERVISOR_event_channel_op_compat 16 /* compat since 0x0003020=
2 */
-#define __HYPERVISOR_xen_version          17
-#define __HYPERVISOR_console_io           18
-#define __HYPERVISOR_physdev_op_compat    19 /* compat since 0x00030202 *=
/
-#define __HYPERVISOR_grant_table_op       20
-#define __HYPERVISOR_vm_assist            21
-#define __HYPERVISOR_update_va_mapping_otherdomain 22
-#define __HYPERVISOR_iret                 23 /* x86 only */
-#define __HYPERVISOR_vcpu_op              24
-#define __HYPERVISOR_set_segment_base     25 /* x86/64 only */
-#define __HYPERVISOR_mmuext_op            26
-#define __HYPERVISOR_xsm_op               27
-#define __HYPERVISOR_nmi_op               28
-#define __HYPERVISOR_sched_op             29
-#define __HYPERVISOR_callback_op          30
-#define __HYPERVISOR_xenoprof_op          31
-#define __HYPERVISOR_event_channel_op     32
-#define __HYPERVISOR_physdev_op           33
-#define __HYPERVISOR_hvm_op               34
-#define __HYPERVISOR_sysctl               35
-#define __HYPERVISOR_domctl               36
-#define __HYPERVISOR_kexec_op             37
-#define __HYPERVISOR_tmem_op              38
-#define __HYPERVISOR_xc_reserved_op       39 /* reserved for XenClient */
-#define __HYPERVISOR_xenpmu_op            40
-
-/* Architecture-specific hypercall definitions=2E */
-#define __HYPERVISOR_arch_0               48
-#define __HYPERVISOR_arch_1               49
-#define __HYPERVISOR_arch_2               50
-#define __HYPERVISOR_arch_3               51
-#define __HYPERVISOR_arch_4               52
-#define __HYPERVISOR_arch_5               53
-#define __HYPERVISOR_arch_6               54
-#define __HYPERVISOR_arch_7               55
-
-/* ` } */
-
-/*
- * HYPERCALL COMPATIBILITY=2E
- */
-
-/* New sched_op hypercall introduced in 0x00030101=2E */
-#if __XEN_INTERFACE_VERSION__ < 0x00030101
-#undef __HYPERVISOR_sched_op
-#define __HYPERVISOR_sched_op __HYPERVISOR_sched_op_compat
-#endif
-
-/* New event-channel and physdev hypercalls introduced in 0x00030202=2E *=
/
-#if __XEN_INTERFACE_VERSION__ < 0x00030202
-#undef __HYPERVISOR_event_channel_op
-#define __HYPERVISOR_event_channel_op __HYPERVISOR_event_channel_op_compa=
t
-#undef __HYPERVISOR_physdev_op
-#define __HYPERVISOR_physdev_op __HYPERVISOR_physdev_op_compat
-#endif
-
-/* New platform_op hypercall introduced in 0x00030204=2E */
-#if __XEN_INTERFACE_VERSION__ < 0x00030204
-#define __HYPERVISOR_dom0_op __HYPERVISOR_platform_op
-#endif
-
-/*
- * VIRTUAL INTERRUPTS
- *
- * Virtual interrupts that a guest OS may receive from Xen=2E
- *
- * In the side comments, 'V=2E' denotes a per-VCPU VIRQ while 'G=2E' deno=
tes a
- * global VIRQ=2E The former can be bound once per VCPU and cannot be re-=
bound=2E
- * The latter can be allocated only once per guest: they must initially b=
e
- * allocated to VCPU0 but can subsequently be re-bound=2E
- */
-/* ` enum virq { */
-#define VIRQ_TIMER      0  /* V=2E Timebase update, and/or requested time=
out=2E  */
-#define VIRQ_DEBUG      1  /* V=2E Request guest to dump debug info=2E   =
        */
-#define VIRQ_CONSOLE    2  /* G=2E (DOM0) Bytes received on emergency con=
sole=2E */
-#define VIRQ_DOM_EXC    3  /* G=2E (DOM0) Exceptional event for some doma=
in=2E   */
-#define VIRQ_TBUF       4  /* G=2E (DOM0) Trace buffer has records availa=
ble=2E  */
-#define VIRQ_DEBUGGER   6  /* G=2E (DOM0) A domain has paused for debuggi=
ng=2E   */
-#define VIRQ_XENOPROF   7  /* V=2E XenOprofile interrupt: new sample avai=
lable */
-#define VIRQ_CON_RING   8  /* G=2E (DOM0) Bytes received on console      =
      */
-#define VIRQ_PCPU_STATE 9  /* G=2E (DOM0) PCPU state changed             =
      */
-#define VIRQ_MEM_EVENT  10 /* G=2E (DOM0) A memory event has occured     =
      */
-#define VIRQ_XC_RESERVED 11 /* G=2E Reserved for XenClient               =
      */
-#define VIRQ_ENOMEM     12 /* G=2E (DOM0) Low on heap memory       */
-#define VIRQ_XENPMU     13 /* V=2E  PMC interrupt                        =
      */
-
-/* Architecture-specific VIRQ definitions=2E */
-#define VIRQ_ARCH_0    16
-#define VIRQ_ARCH_1    17
-#define VIRQ_ARCH_2    18
-#define VIRQ_ARCH_3    19
-#define VIRQ_ARCH_4    20
-#define VIRQ_ARCH_5    21
-#define VIRQ_ARCH_6    22
-#define VIRQ_ARCH_7    23
-/* ` } */
-
-#define NR_VIRQS       24
-
-/*
- * ` enum neg_errnoval
- * ` HYPERVISOR_mmu_update(const struct mmu_update reqs[],
- * `                       unsigned count, unsigned *done_out,
- * `                       unsigned foreigndom)
- * `
- * @reqs is an array of mmu_update_t structures ((ptr, val) pairs)=2E
- * @count is the length of the above array=2E
- * @pdone is an output parameter indicating number of completed operation=
s
- * @foreigndom[15:0]: FD, the expected owner of data pages referenced in =
this
- *                    hypercall invocation=2E Can be DOMID_SELF=2E
- * @foreigndom[31:16]: PFD, the expected owner of pagetable pages referen=
ced
- *                     in this hypercall invocation=2E The value of this =
field
- *                     (x) encodes the PFD as follows:
- *                     x =3D=3D 0 =3D> PFD =3D=3D DOMID_SELF
- *                     x !=3D 0 =3D> PFD =3D=3D x - 1
- *
- * Sub-commands: ptr[1:0] specifies the appropriate MMU_* command=2E
- * -------------
- * ptr[1:0] =3D=3D MMU_NORMAL_PT_UPDATE:
- * Updates an entry in a page table belonging to PFD=2E If updating an L1=
 table,
- * and the new table entry is valid/present, the mapped frame must belong=
 to
- * FD=2E If attempting to map an I/O page then the caller assumes the pri=
vilege
- * of the FD=2E
- * FD =3D=3D DOMID_IO: Permit /only/ I/O mappings, at the priv level of t=
he caller=2E
- * FD =3D=3D DOMID_XEN: Map restricted areas of Xen's heap space=2E
- * ptr[:2]  -- Machine address of the page-table entry to modify=2E
- * val      -- Value to write=2E
- *
- * There also certain implicit requirements when using this hypercall=2E =
The
- * pages that make up a pagetable must be mapped read-only in the guest=
=2E
- * This prevents uncontrolled guest updates to the pagetable=2E Xen stric=
tly
- * enforces this, and will disallow any pagetable update which will end u=
p
- * mapping pagetable page RW, and will disallow using any writable page a=
s a
- * pagetable=2E In practice it means that when constructing a page table =
for a
- * process, thread, etc, we MUST be very dilligient in following these ru=
les:
- *  1)=2E Start with top-level page (PGD or in Xen language: L4)=2E Fill =
out
- *      the entries=2E
- *  2)=2E Keep on going, filling out the upper (PUD or L3), and middle (P=
MD
- *      or L2)=2E
- *  3)=2E Start filling out the PTE table (L1) with the PTE entries=2E On=
ce
- *  	done, make sure to set each of those entries to RO (so writeable bit
- *  	is unset)=2E Once that has been completed, set the PMD (L2) for this
- *  	PTE table as RO=2E
- *  4)=2E When completed with all of the PMD (L2) entries, and all of the=
m have
- *  	been set to RO, make sure to set RO the PUD (L3)=2E Do the same
- *  	operation on PGD (L4) pagetable entries that have a PUD (L3) entry=
=2E
- *  5)=2E Now before you can use those pages (so setting the cr3), you MU=
ST also
- *      pin them so that the hypervisor can verify the entries=2E This is=
 done
- *      via the HYPERVISOR_mmuext_op(MMUEXT_PIN_L4_TABLE, guest physical =
frame
- *      number of the PGD (L4))=2E And this point the HYPERVISOR_mmuext_o=
p(
- *      MMUEXT_NEW_BASEPTR, guest physical frame number of the PGD (L4)) =
can be
- *      issued=2E
- * For 32-bit guests, the L4 is not used (as there is less pagetables), s=
o
- * instead use L3=2E
- * At this point the pagetables can be modified using the MMU_NORMAL_PT_U=
PDATE
- * hypercall=2E Also if so desired the OS can also try to write to the PT=
E
- * and be trapped by the hypervisor (as the PTE entry is RO)=2E
- *
- * To deallocate the pages, the operations are the reverse of the steps
- * mentioned above=2E The argument is MMUEXT_UNPIN_TABLE for all levels a=
nd the
- * pagetable MUST not be in use (meaning that the cr3 is not set to it)=
=2E
- *
- * ptr[1:0] =3D=3D MMU_MACHPHYS_UPDATE:
- * Updates an entry in the machine->pseudo-physical mapping table=2E
- * ptr[:2]  -- Machine address within the frame whose mapping to modify=
=2E
- *             The frame must belong to the FD, if one is specified=2E
- * val      -- Value to write into the mapping entry=2E
- *
- * ptr[1:0] =3D=3D MMU_PT_UPDATE_PRESERVE_AD:
- * As MMU_NORMAL_PT_UPDATE above, but A/D bits currently in the PTE are O=
Red
- * with those in @val=2E
- *
- * @val is usually the machine frame number along with some attributes=2E
- * The attributes by default follow the architecture defined bits=2E Mean=
ing that
- * if this is a X86_64 machine and four page table layout is used, the la=
yout
- * of val is:
- *  - 63 if set means No execute (NX)
- *  - 46-13 the machine frame number
- *  - 12 available for guest
- *  - 11 available for guest
- *  - 10 available for guest
- *  - 9 available for guest
- *  - 8 global
- *  - 7 PAT (PSE is disabled, must use hypercall to make 4MB or 2MB pages=
)
- *  - 6 dirty
- *  - 5 accessed
- *  - 4 page cached disabled
- *  - 3 page write through
- *  - 2 userspace accessible
- *  - 1 writeable
- *  - 0 present
- *
- *  The one bits that does not fit with the default layout is the PAGE_PS=
E
- *  also called PAGE_PAT)=2E The MMUEXT_[UN]MARK_SUPER arguments to the
- *  HYPERVISOR_mmuext_op serve as mechanism to set a pagetable to be 4MB
- *  (or 2MB) instead of using the PAGE_PSE bit=2E
- *
- *  The reason that the PAGE_PSE (bit 7) is not being utilized is due to =
Xen
- *  using it as the Page Attribute Table (PAT) bit - for details on it pl=
ease
- *  refer to Intel SDM 10=2E12=2E The PAT allows to set the caching attri=
butes of
- *  pages instead of using MTRRs=2E
- *
- *  The PAT MSR is as follows (it is a 64-bit value, each entry is 8 bits=
):
- *                    PAT4                 PAT0
- *  +-----+-----+----+----+----+-----+----+----+
- *  | UC  | UC- | WC | WB | UC | UC- | WC | WB |  <=3D Linux
- *  +-----+-----+----+----+----+-----+----+----+
- *  | UC  | UC- | WT | WB | UC | UC- | WT | WB |  <=3D BIOS (default when=
 machine boots)
- *  +-----+-----+----+----+----+-----+----+----+
- *  | rsv | rsv | WP | WC | UC | UC- | WT | WB |  <=3D Xen
- *  +-----+-----+----+----+----+-----+----+----+
- *
- *  The lookup of this index table translates to looking up
- *  Bit 7, Bit 4, and Bit 3 of val entry:
- *
- *  PAT/PSE (bit 7) =2E=2E=2E PCD (bit 4) =2E=2E PWT (bit 3)=2E
- *
- *  If all bits are off, then we are using PAT0=2E If bit 3 turned on,
- *  then we are using PAT1, if bit 3 and bit 4, then PAT2=2E=2E
- *
- *  As you can see, the Linux PAT1 translates to PAT4 under Xen=2E Which =
means
- *  that if a guest that follows Linux's PAT setup and would like to set =
Write
- *  Combined on pages it MUST use PAT4 entry=2E Meaning that Bit 7 (PAGE_=
PAT) is
- *  set=2E For example, under Linux it only uses PAT0, PAT1, and PAT2 for=
 the
- *  caching as:
- *
- *   WB =3D none (so PAT0)
- *   WC =3D PWT (bit 3 on)
- *   UC =3D PWT | PCD (bit 3 and 4 are on)=2E
- *
- * To make it work with Xen, it needs to translate the WC bit as so:
- *
- *  PWT (so bit 3 on) --> PAT (so bit 7 is on) and clear bit 3
- *
- * And to translate back it would:
- *
- * PAT (bit 7 on) --> PWT (bit 3 on) and clear bit 7=2E
- */
-#define MMU_NORMAL_PT_UPDATE      0 /* checked '*ptr =3D val'=2E ptr is M=
A=2E      */
-#define MMU_MACHPHYS_UPDATE       1 /* ptr =3D MA of frame to modify entr=
y for */
-#define MMU_PT_UPDATE_PRESERVE_AD 2 /* atomically: *ptr =3D val | (*ptr&(=
A|D)) */
-
-/*
- * MMU EXTENDED OPERATIONS
- *
- * ` enum neg_errnoval
- * ` HYPERVISOR_mmuext_op(mmuext_op_t uops[],
- * `                      unsigned int count,
- * `                      unsigned int *pdone,
- * `                      unsigned int foreigndom)
- */
-/* HYPERVISOR_mmuext_op() accepts a list of mmuext_op structures=2E
- * A foreigndom (FD) can be specified (or DOMID_SELF for none)=2E
- * Where the FD has some effect, it is described below=2E
- *
- * cmd: MMUEXT_(UN)PIN_*_TABLE
- * mfn: Machine frame number to be (un)pinned as a p=2Et=2E page=2E
- *      The frame must belong to the FD, if one is specified=2E
- *
- * cmd: MMUEXT_NEW_BASEPTR
- * mfn: Machine frame number of new page-table base to install in MMU=2E
- *
- * cmd: MMUEXT_NEW_USER_BASEPTR [x86/64 only]
- * mfn: Machine frame number of new page-table base to install in MMU
- *      when in user space=2E
- *
- * cmd: MMUEXT_TLB_FLUSH_LOCAL
- * No additional arguments=2E Flushes local TLB=2E
- *
- * cmd: MMUEXT_INVLPG_LOCAL
- * linear_addr: Linear address to be flushed from the local TLB=2E
- *
- * cmd: MMUEXT_TLB_FLUSH_MULTI
- * vcpumask: Pointer to bitmap of VCPUs to be flushed=2E
- *
- * cmd: MMUEXT_INVLPG_MULTI
- * linear_addr: Linear address to be flushed=2E
- * vcpumask: Pointer to bitmap of VCPUs to be flushed=2E
- *
- * cmd: MMUEXT_TLB_FLUSH_ALL
- * No additional arguments=2E Flushes all VCPUs' TLBs=2E
- *
- * cmd: MMUEXT_INVLPG_ALL
- * linear_addr: Linear address to be flushed from all VCPUs' TLBs=2E
- *
- * cmd: MMUEXT_FLUSH_CACHE
- * No additional arguments=2E Writes back and flushes cache contents=2E
- *
- * cmd: MMUEXT_FLUSH_CACHE_GLOBAL
- * No additional arguments=2E Writes back and flushes cache contents
- * on all CPUs in the system=2E
- *
- * cmd: MMUEXT_SET_LDT
- * linear_addr: Linear address of LDT base (NB=2E must be page-aligned)=
=2E
- * nr_ents: Number of entries in LDT=2E
- *
- * cmd: MMUEXT_CLEAR_PAGE
- * mfn: Machine frame number to be cleared=2E
- *
- * cmd: MMUEXT_COPY_PAGE
- * mfn: Machine frame number of the destination page=2E
- * src_mfn: Machine frame number of the source page=2E
- *
- * cmd: MMUEXT_[UN]MARK_SUPER
- * mfn: Machine frame number of head of superpage to be [un]marked=2E
- */
-/* ` enum mmuext_cmd { */
-#define MMUEXT_PIN_L1_TABLE      0
-#define MMUEXT_PIN_L2_TABLE      1
-#define MMUEXT_PIN_L3_TABLE      2
-#define MMUEXT_PIN_L4_TABLE      3
-#define MMUEXT_UNPIN_TABLE       4
-#define MMUEXT_NEW_BASEPTR       5
-#define MMUEXT_TLB_FLUSH_LOCAL   6
-#define MMUEXT_INVLPG_LOCAL      7
-#define MMUEXT_TLB_FLUSH_MULTI   8
-#define MMUEXT_INVLPG_MULTI      9
-#define MMUEXT_TLB_FLUSH_ALL    10
-#define MMUEXT_INVLPG_ALL       11
-#define MMUEXT_FLUSH_CACHE      12
-#define MMUEXT_SET_LDT          13
-#define MMUEXT_NEW_USER_BASEPTR 15
-#define MMUEXT_CLEAR_PAGE       16
-#define MMUEXT_COPY_PAGE        17
-#define MMUEXT_FLUSH_CACHE_GLOBAL 18
-#define MMUEXT_MARK_SUPER       19
-#define MMUEXT_UNMARK_SUPER     20
-/* ` } */
-
-#ifndef __ASSEMBLY__
-struct mmuext_op {
-    unsigned int cmd; /* =3D> enum mmuext_cmd */
-    union {
-        /* [UN]PIN_TABLE, NEW_BASEPTR, NEW_USER_BASEPTR
-         * CLEAR_PAGE, COPY_PAGE, [UN]MARK_SUPER */
-        xen_pfn_t     mfn;
-        /* INVLPG_LOCAL, INVLPG_ALL, SET_LDT */
-        ULONG_PTR linear_addr;
-    } arg1;
-    union {
-        /* SET_LDT */
-        unsigned int nr_ents;
-        /* TLB_FLUSH_MULTI, INVLPG_MULTI */
-#if __XEN_INTERFACE_VERSION__ >=3D 0x00030205
-        XEN_GUEST_HANDLE(const_void) vcpumask;
-#else
-        const void *vcpumask;
-#endif
-        /* COPY_PAGE */
-        xen_pfn_t src_mfn;
-    } arg2;
-};
-typedef struct mmuext_op mmuext_op_t;
-DEFINE_XEN_GUEST_HANDLE(mmuext_op_t);
-#endif
-
-/*
- * ` enum neg_errnoval
- * ` HYPERVISOR_update_va_mapping(ULONG_PTR va, u64 val,
- * `                              enum uvm_flags flags)
- * `
- * ` enum neg_errnoval
- * ` HYPERVISOR_update_va_mapping_otherdomain(ULONG_PTR va, u64 val,
- * `                                          enum uvm_flags flags,
- * `                                          domid_t domid)
- * `
- * ` @va: The virtual address whose mapping we want to change
- * ` @val: The new page table entry, must contain a machine address
- * ` @flags: Control TLB flushes
- */
-/* These are passed as 'flags' to update_va_mapping=2E They can be ORed=
=2E */
-/* When specifying UVMF_MULTI, also OR in a pointer to a CPU bitmap=2E   =
*/
-/* UVMF_LOCAL is merely UVMF_MULTI with a NULL bitmap pointer=2E         =
*/
-/* ` enum uvm_flags { */
-#define UVMF_NONE           (xen_mk_ulong(0)<<0) /* No flushing at all=2E=
   */
-#define UVMF_TLB_FLUSH      (xen_mk_ulong(1)<<0) /* Flush entire TLB(s)=
=2E  */
-#define UVMF_INVLPG         (xen_mk_ulong(2)<<0) /* Flush only one entry=
=2E */
-#define UVMF_FLUSHTYPE_MASK (xen_mk_ulong(3)<<0)
-#define UVMF_MULTI          (xen_mk_ulong(0)<<2) /* Flush subset of TLBs=
=2E */
-#define UVMF_LOCAL          (xen_mk_ulong(0)<<2) /* Flush local TLB=2E   =
   */
-#define UVMF_ALL            (xen_mk_ulong(1)<<2) /* Flush all TLBs=2E    =
   */
-/* ` } */
-
-/*
- * Commands to HYPERVISOR_console_io()=2E
- */
-#define CONSOLEIO_write         0
-#define CONSOLEIO_read          1
-
-/*
- * Commands to HYPERVISOR_vm_assist()=2E
- */
-#define VMASST_CMD_enable                0
-#define VMASST_CMD_disable               1
-
-/* x86/32 guests: simulate full 4GB segment limits=2E */
-#define VMASST_TYPE_4gb_segments         0
-
-/* x86/32 guests: trap (vector 15) whenever above vmassist is used=2E */
-#define VMASST_TYPE_4gb_segments_notify  1
-
-/*
- * x86 guests: support writes to bottom-level PTEs=2E
- * NB1=2E Page-directory entries cannot be written=2E
- * NB2=2E Guest must continue to remove all writable mappings of PTEs=2E
- */
-#define VMASST_TYPE_writable_pagetables  2
-
-/* x86/PAE guests: support PDPTs above 4GB=2E */
-#define VMASST_TYPE_pae_extended_cr3     3
-
-/*
- * x86 guests: Sane behaviour for virtual iopl
- *  - virtual iopl updated from do_iret() hypercalls=2E
- *  - virtual iopl reported in bounce frames=2E
- *  - guest kernels assumed to be level 0 for the purpose of iopl checks=
=2E
- */
-#define VMASST_TYPE_architectural_iopl   4
-
-/*
- * x86/64 guests: strictly hide M2P from user mode=2E
- * This allows the guest to control respective hypervisor behavior:
- * - when not set, L4 tables get created with the respective slot blank,
- *   and whenever the L4 table gets used as a kernel one the missing
- *   mapping gets inserted,
- * - when set, L4 tables get created with the respective slot initialized
- *   as before, and whenever the L4 table gets used as a user one the
- *   mapping gets zapped=2E
- */
-#define VMASST_TYPE_m2p_strict           32
-
-#if __XEN_INTERFACE_VERSION__ < 0x00040600
-#define MAX_VMASST_TYPE                  3
-#endif
-
-/* Domain ids >=3D DOMID_FIRST_RESERVED cannot be used for ordinary domai=
ns=2E */
-#define DOMID_FIRST_RESERVED xen_mk_uint(0x7FF0)
-
-/* DOMID_SELF is used in certain contexts to refer to oneself=2E */
-#define DOMID_SELF           xen_mk_uint(0x7FF0)
-
-/*
- * DOMID_IO is used to restrict page-table updates to mapping I/O memory=
=2E
- * Although no Foreign Domain need be specified to map I/O pages, DOMID_I=
O
- * is useful to ensure that no mappings to the OS's own heap are accident=
ally
- * installed=2E (e=2Eg=2E, in Linux this could cause havoc as reference c=
ounts
- * aren't adjusted on the I/O-mapping code path)=2E
- * This only makes sense in MMUEXT_SET_FOREIGNDOM, but in that context ca=
n
- * be specified by any calling domain=2E
- */
-#define DOMID_IO             xen_mk_uint(0x7FF1)
-
-/*
- * DOMID_XEN is used to allow privileged domains to map restricted parts =
of
- * Xen's heap space (e=2Eg=2E, the machine_to_phys table)=2E
- * This only makes sense in MMUEXT_SET_FOREIGNDOM, and is only permitted =
if
- * the caller is privileged=2E
- */
-#define DOMID_XEN            xen_mk_uint(0x7FF2)
-
-/*
- * DOMID_COW is used as the owner of sharable pages */
-#define DOMID_COW            xen_mk_uint(0x7FF3)
-
-/* DOMID_INVALID is used to identify pages with unknown owner=2E */
-#define DOMID_INVALID        xen_mk_uint(0x7FF4)
-
-/* Idle domain=2E */
-#define DOMID_IDLE           xen_mk_uint(0x7FFF)
-
-#ifndef __ASSEMBLY__
-
-typedef uint16_t domid_t;
-
-/*
- * Send an array of these to HYPERVISOR_mmu_update()=2E
- * NB=2E The fields are natural pointer/address size for this architectur=
e=2E
- */
-struct mmu_update {
-    uint64_t ptr;       /* Machine address of PTE=2E */
-    uint64_t val;       /* New contents of PTE=2E    */
-};
-typedef struct mmu_update mmu_update_t;
-DEFINE_XEN_GUEST_HANDLE(mmu_update_t);
-
-/*
- * ` enum neg_errnoval
- * ` HYPERVISOR_multicall(multicall_entry_t call_list[],
- * `                      uint32_t nr_calls);
- *
- * NB=2E The fields are logically the natural register size for this
- * architecture=2E In cases where xen_ulong_t is larger than this then
- * any unused bits in the upper portion must be zero=2E
- */
-struct multicall_entry {
-    xen_ulong_t op, result;
-    xen_ulong_t args[6];
-};
-typedef struct multicall_entry multicall_entry_t;
-DEFINE_XEN_GUEST_HANDLE(multicall_entry_t);
-
-#if __XEN_INTERFACE_VERSION__ < 0x00040400
-/*
- * Event channel endpoints per domain (when using the 2-level ABI):
- *  1024 if a LONG_PTR is 32 bits; 4096 if a LONG_PTR is 64 bits=2E
- */
-#define NR_EVENT_CHANNELS EVTCHN_2L_NR_CHANNELS
-#endif
-
-struct vcpu_time_info {
-    /*
-     * Updates to the following values are preceded and followed by an
-     * increment of 'version'=2E The guest can therefore detect updates b=
y
-     * looking for changes to 'version'=2E If the least-significant bit o=
f
-     * the version number is set then an update is in progress and the gu=
est
-     * must wait to read a consistent set of values=2E
-     * The correct way to interact with the version number is similar to
-     * Linux's seqlock: see the implementations of read_seqbegin/read_seq=
retry=2E
-     */
-    uint32_t version;
-    uint32_t pad0;
-    uint64_t tsc_timestamp;   /* TSC at last update of time vals=2E  */
-    uint64_t system_time;     /* Time, in nanosecs, since boot=2E    */
-    /*
-     * Current system time:
-     *   system_time +
-     *   ((((tsc - tsc_timestamp) << tsc_shift) * tsc_to_system_mul) >> 3=
2)
-     * CPU frequency (Hz):
-     *   ((10^9 << 32) / tsc_to_system_mul) >> tsc_shift
-     */
-    uint32_t tsc_to_system_mul;
-    int8_t   tsc_shift;
-#if __XEN_INTERFACE_VERSION__ > 0x040600
-    uint8_t  flags;
-    uint8_t  pad1[2];
-#else
-    int8_t   pad1[3];
-#endif
-}; /* 32 bytes */
-typedef struct vcpu_time_info vcpu_time_info_t;
-
-#define XEN_PVCLOCK_TSC_STABLE_BIT     (1 << 0)
-#define XEN_PVCLOCK_GUEST_STOPPED      (1 << 1)
-
-struct vcpu_info {
-    /*
-     * 'evtchn_upcall_pending' is written non-zero by Xen to indicate
-     * a pending notification for a particular VCPU=2E It is then cleared
-     * by the guest OS /before/ checking for pending work, thus avoiding
-     * a set-and-check race=2E Note that the mask is only accessed by Xen
-     * on the CPU that is currently hosting the VCPU=2E This means that t=
he
-     * pending and mask flags can be updated by the guest without special
-     * synchronisation (i=2Ee=2E, no need for the x86 LOCK prefix)=2E
-     * This may seem suboptimal because if the pending flag is set by
-     * a different CPU then an IPI may be scheduled even when the mask
-     * is set=2E However, note:
-     *  1=2E The task of 'interrupt holdoff' is covered by the per-event-
-     *     channel mask bits=2E A 'noisy' event that is continually being
-     *     triggered can be masked at source at this very precise
-     *     granularity=2E
-     *  2=2E The main purpose of the per-VCPU mask is therefore to restri=
ct
-     *     reentrant execution: whether for concurrency control, or to
-     *     prevent unbounded stack usage=2E Whatever the purpose, we expe=
ct
-     *     that the mask will be asserted only for short periods at a tim=
e,
-     *     and so the likelihood of a 'spurious' IPI is suitably small=2E
-     * The mask is read before making an event upcall to the guest: a
-     * non-zero mask therefore guarantees that the VCPU will not receive
-     * an upcall activation=2E The mask is cleared when the VCPU requests
-     * to block: this avoids wakeup-waiting races=2E
-     */
-    uint8_t evtchn_upcall_pending;
-#ifdef XEN_HAVE_PV_UPCALL_MASK
-    uint8_t evtchn_upcall_mask;
-#else /* XEN_HAVE_PV_UPCALL_MASK */
-    uint8_t pad0;
-#endif /* XEN_HAVE_PV_UPCALL_MASK */
-    xen_ulong_t evtchn_pending_sel;
-    struct arch_vcpu_info arch;
-    struct vcpu_time_info time;
-}; /* 64 bytes (x86) */
-#ifndef __XEN__
-typedef struct vcpu_info vcpu_info_t;
-#endif
-
-/*
- * `incontents 200 startofday_shared Start-of-day shared data structure
- * Xen/kernel shared data -- pointer provided in start_info=2E
- *
- * This structure is defined to be both smaller than a page, and the
- * only data on the shared page, but may vary in actual size even within
- * compatible Xen versions; guests should not rely on the size
- * of this structure remaining constant=2E
- */
-struct shared_info {
-    struct vcpu_info vcpu_info[XEN_LEGACY_MAX_VCPUS];
-
-    /*
-     * A domain can create "event channels" on which it can send and rece=
ive
-     * asynchronous event notifications=2E There are three classes of eve=
nt that
-     * are delivered by this mechanism:
-     *  1=2E Bi-directional inter- and intra-domain connections=2E Domain=
s must
-     *     arrange out-of-band to set up a connection (usually by allocat=
ing
-     *     an unbound 'listener' port and avertising that via a storage s=
ervice
-     *     such as xenstore)=2E
-     *  2=2E Physical interrupts=2E A domain with suitable hardware-acces=
s
-     *     privileges can bind an event-channel port to a physical interr=
upt
-     *     source=2E
-     *  3=2E Virtual interrupts ('events')=2E A domain can bind an event-=
channel
-     *     port to a virtual interrupt source, such as the virtual-timer
-     *     device or the emergency console=2E
-     *
-     * Event channels are addressed by a "port index"=2E Each channel is
-     * associated with two bits of information:
-     *  1=2E PENDING -- notifies the domain that there is a pending notif=
ication
-     *     to be processed=2E This bit is cleared by the guest=2E
-     *  2=2E MASK -- if this bit is clear then a 0->1 transition of PENDI=
NG
-     *     will cause an asynchronous upcall to be scheduled=2E This bit =
is only
-     *     updated by the guest=2E It is read-only within Xen=2E If a cha=
nnel
-     *     becomes pending while the channel is masked then the 'edge' is=
 lost
-     *     (i=2Ee=2E, when the channel is unmasked, the guest must manual=
ly handle
-     *     pending notifications as no upcall will be scheduled by Xen)=
=2E
-     *
-     * To expedite scanning of pending notifications, any 0->1 pending
-     * transition on an unmasked channel causes a corresponding bit in a
-     * per-vcpu selector word to be set=2E Each bit in the selector cover=
s a
-     * 'C LONG_PTR' in the PENDING bitfield array=2E
-     */
-    xen_ulong_t evtchn_pending[sizeof(xen_ulong_t) * 8];
-    xen_ulong_t evtchn_mask[sizeof(xen_ulong_t) * 8];
-
-    /*
-     * Wallclock time: updated only by control software=2E Guests should =
base
-     * their gettimeofday() syscall on this wallclock-base value=2E
-     */
-    uint32_t wc_version;      /* Version counter: see vcpu_time_info_t=2E=
 */
-    uint32_t wc_sec;          /* Secs  00:00:00 UTC, Jan 1, 1970=2E  */
-    uint32_t wc_nsec;         /* Nsecs 00:00:00 UTC, Jan 1, 1970=2E  */
-#if !defined(__i386__)
-    uint32_t wc_sec_hi;
-# define xen_wc_sec_hi wc_sec_hi
-#elif !defined(__XEN__) && !defined(__XEN_TOOLS__)
-# define xen_wc_sec_hi arch=2Ewc_sec_hi
-#endif
-
-    struct arch_shared_info arch;
-
-};
-#ifndef __XEN__
-typedef struct shared_info shared_info_t;
-#endif
-
-/*
- * `incontents 200 startofday Start-of-day memory layout
- *
- *  1=2E The domain is started within contiguous virtual-memory region=2E
- *  2=2E The contiguous region ends on an aligned 4MB boundary=2E
- *  3=2E This the order of bootstrap elements in the initial virtual regi=
on:
- *      a=2E relocated kernel image
- *      b=2E initial ram disk              [mod_start, mod_len]
- *         (may be omitted)
- *      c=2E list of allocated page frames [mfn_list, nr_pages]
- *         (unless relocated due to XEN_ELFNOTE_INIT_P2M)
- *      d=2E start_info_t structure        [register ESI (x86)]
- *         in case of dom0 this page contains the console info, too
- *      e=2E unless dom0: xenstore ring page
- *      f=2E unless dom0: console ring page
- *      g=2E bootstrap page tables         [pt_base and CR3 (x86)]
- *      h=2E bootstrap stack               [register ESP (x86)]
- *  4=2E Bootstrap elements are packed together, but each is 4kB-aligned=
=2E
- *  5=2E The list of page frames forms a contiguous 'pseudo-physical' mem=
ory
- *     layout for the domain=2E In particular, the bootstrap virtual-memo=
ry
- *     region is a 1:1 mapping to the first section of the pseudo-physica=
l map=2E
- *  6=2E All bootstrap elements are mapped read-writable for the guest OS=
=2E The
- *     only exception is the bootstrap page table, which is mapped read-o=
nly=2E
- *  7=2E There is guaranteed to be at least 512kB padding after the final
- *     bootstrap element=2E If necessary, the bootstrap virtual region is
- *     extended by an extra 4MB to ensure this=2E
- *
- * Note: Prior to 25833:bb85bbccb1c9=2E ("x86/32-on-64 adjust Dom0 initia=
l page
- * table layout") a bug caused the pt_base (3=2Eg above) and cr3 to not p=
oint
- * to the start of the guest page tables (it was offset by two pages)=2E
- * This only manifested itself on 32-on-64 dom0 kernels and not 32-on-64 =
domU
- * or 64-bit kernels of any colour=2E The page tables for a 32-on-64 dom0=
 got
- * allocated in the order: 'first L1','first L2', 'first L3', so the offs=
et
- * to the page table base is by two pages back=2E The initial domain if i=
t is
- * 32-bit and runs under a 64-bit hypervisor should _NOT_ use two of the
- * pages preceding pt_base and mark them as reserved/unused=2E
- */
-#ifdef XEN_HAVE_PV_GUEST_ENTRY
-struct start_info {
-    /* THE FOLLOWING ARE FILLED IN BOTH ON INITIAL BOOT AND ON RESUME=2E =
   */
-    char magic[32];             /* "xen-<version>-<platform>"=2E         =
   */
-    ULONG_PTR nr_pages;     /* Total pages allocated to this domain=2E  *=
/
-    ULONG_PTR shared_info;  /* MACHINE address of shared info struct=2E *=
/
-    uint32_t flags;             /* SIF_xxx flags=2E                      =
   */
-    xen_pfn_t store_mfn;        /* MACHINE page number of shared page=2E =
   */
-    uint32_t store_evtchn;      /* Event channel for store communication=
=2E */
-    union {
-        struct {
-            xen_pfn_t mfn;      /* MACHINE page number of console page=2E=
   */
-            uint32_t  evtchn;   /* Event channel for console page=2E     =
   */
-        } domU;
-        struct {
-            uint32_t info_off;  /* Offset of console_info struct=2E      =
   */
-            uint32_t info_size; /* Size of console_info struct from start=
=2E*/
-        } dom0;
-    } console;
-    /* THE FOLLOWING ARE ONLY FILLED IN ON INITIAL BOOT (NOT RESUME)=2E  =
   */
-    ULONG_PTR pt_base;      /* VIRTUAL address of page directory=2E     *=
/
-    ULONG_PTR nr_pt_frames; /* Number of bootstrap p=2Et=2E frames=2E    =
   */
-    ULONG_PTR mfn_list;     /* VIRTUAL address of page-frame list=2E    *=
/
-    ULONG_PTR mod_start;    /* VIRTUAL address of pre-loaded module   */
-                                /* (PFN of pre-loaded module if          =
 */
-                                /*  SIF_MOD_START_PFN set in flags)=2E   =
   */
-    ULONG_PTR mod_len;      /* Size (bytes) of pre-loaded module=2E     *=
/
-#define MAX_GUEST_CMDLINE 1024
-    int8_t cmd_line[MAX_GUEST_CMDLINE];
-    /* The pfn range here covers both page table and p->m table frames=2E=
   */
-    ULONG_PTR first_p2m_pfn;/* 1st pfn forming initial P->M table=2E    *=
/
-    ULONG_PTR nr_p2m_frames;/* # of pfns forming initial P->M table=2E  *=
/
-};
-typedef struct start_info start_info_t;
-
-/*
- * Start of day structure passed to PVH guests in %ebx=2E
- *
- * NOTE: nothing will be loaded at physical address 0, so a 0 value in an=
y
- * of the address fields should be treated as not present=2E
- *
- *  0 +----------------+
- *    | magic          | Contains the magic value XEN_HVM_START_MAGIC_VAL=
UE
- *    |                | ("xEn3" with the 0x80 bit of the "E" set)=2E
- *  4 +----------------+
- *    | version        | Version of this structure=2E Current version is =
0=2E New
- *    |                | versions are guaranteed to be backwards-compatib=
le=2E
- *  8 +----------------+
- *    | flags          | SIF_xxx flags=2E
- * 12 +----------------+
- *    | nr_modules     | Number of modules passed to the kernel=2E
- * 16 +----------------+
- *    | modlist_paddr  | Physical address of an array of modules
- *    |                | (layout of the structure below)=2E
- * 24 +----------------+
- *    | cmdline_paddr  | Physical address of the command line,
- *    |                | a zero-terminated ASCII string=2E
- * 32 +----------------+
- *    | rsdp_paddr     | Physical address of the RSDP ACPI data structure=
=2E
- * 40 +----------------+
- *
- * The layout of each entry in the module structure is the following:
- *
- *  0 +----------------+
- *    | paddr          | Physical address of the module=2E
- *  8 +----------------+
- *    | size           | Size of the module in bytes=2E
- * 16 +----------------+
- *    | cmdline_paddr  | Physical address of the command line,
- *    |                | a zero-terminated ASCII string=2E
- * 24 +----------------+
- *    | reserved       |
- * 32 +----------------+
- *
- * The address and sizes are always a 64bit little endian unsigned intege=
r=2E
- *
- * NB: Xen on x86 will always try to place all the data below the 4GiB
- * boundary=2E
- */
-#define XEN_HVM_START_MAGIC_VALUE 0x336ec578
-
-/* New console union for dom0 introduced in 0x00030203=2E */
-#if __XEN_INTERFACE_VERSION__ < 0x00030203
-#define console_mfn    console=2EdomU=2Emfn
-#define console_evtchn console=2EdomU=2Eevtchn
-#endif
-#endif /* XEN_HAVE_PV_GUEST_ENTRY */
-
-/* These flags are passed in the 'flags' field of start_info_t=2E */
-#define SIF_PRIVILEGED    (1<<0)  /* Is the domain privileged? */
-#define SIF_INITDOMAIN    (1<<1)  /* Is this the initial control domain? =
*/
-#define SIF_MULTIBOOT_MOD (1<<2)  /* Is mod_start a multiboot module? */
-#define SIF_MOD_START_PFN (1<<3)  /* Is mod_start a PFN? */
-#define SIF_VIRT_P2M_4TOOLS (1<<4) /* Do Xen tools understand a virt=2E m=
apped */
-                                   /* P->M making the 3 level tree obsole=
te? */
-#define SIF_PM_MASK       (0xFF<<8) /* reserve 1 byte for xen-pm options =
*/
-
-/*
- * A multiboot module is a package containing modules very similar to a
- * multiboot module array=2E The only differences are:
- * - the array of module descriptors is by convention simply at the begin=
ning
- *   of the multiboot module,
- * - addresses in the module descriptors are based on the beginning of th=
e
- *   multiboot module,
- * - the number of modules is determined by a termination descriptor that=
 has
- *   mod_start =3D=3D 0=2E
- *
- * This permits to both build it statically and reference it in a configu=
ration
- * file, and let the PV guest easily rebase the addresses to virtual addr=
esses
- * and at the same time count the number of modules=2E
- */
-struct xen_multiboot_mod_list
-{
-    /* Address of first byte of the module */
-    uint32_t mod_start;
-    /* Address of last byte of the module (inclusive) */
-    uint32_t mod_end;
-    /* Address of zero-terminated command line */
-    uint32_t cmdline;
-    /* Unused, must be zero */
-    uint32_t pad;
-};
-/*
- * `incontents 200 startofday_dom0_console Dom0_console
- *
- * The console structure in start_info=2Econsole=2Edom0
- *
- * This structure includes a variety of information required to
- * have a working VGA/VESA console=2E
- */
-typedef struct dom0_vga_console_info {
-    uint8_t video_type; /* DOM0_VGA_CONSOLE_??? */
-#define XEN_VGATYPE_TEXT_MODE_3 0x03
-#define XEN_VGATYPE_VESA_LFB    0x23
-#define XEN_VGATYPE_EFI_LFB     0x70
-
-    union {
-        struct {
-            /* Font height, in pixels=2E */
-            uint16_t font_height;
-            /* Cursor location (column, row)=2E */
-            uint16_t cursor_x, cursor_y;
-            /* Number of rows and columns (dimensions in characters)=2E *=
/
-            uint16_t rows, columns;
-        } text_mode_3;
-
-        struct {
-            /* Width and height, in pixels=2E */
-            uint16_t width, height;
-            /* Bytes per scan line=2E */
-            uint16_t bytes_per_line;
-            /* Bits per pixel=2E */
-            uint16_t bits_per_pixel;
-            /* LFB physical address, and size (in units of 64kB)=2E */
-            uint32_t lfb_base;
-            uint32_t lfb_size;
-            /* RGB mask offsets and sizes, as defined by VBE 1=2E2+ */
-            uint8_t  red_pos, red_size;
-            uint8_t  green_pos, green_size;
-            uint8_t  blue_pos, blue_size;
-            uint8_t  rsvd_pos, rsvd_size;
-#if __XEN_INTERFACE_VERSION__ >=3D 0x00030206
-            /* VESA capabilities (offset 0xa, VESA command 0x4f00)=2E */
-            uint32_t gbl_caps;
-            /* Mode attributes (offset 0x0, VESA command 0x4f01)=2E */
-            uint16_t mode_attrs;
-#endif
-        } vesa_lfb;
-    } u;
-} dom0_vga_console_info_t;
-#define xen_vga_console_info dom0_vga_console_info
-#define xen_vga_console_info_t dom0_vga_console_info_t
-
-typedef uint8_t xen_domain_handle_t[16];
-
-__DEFINE_XEN_GUEST_HANDLE(uint8,  uint8_t);
-__DEFINE_XEN_GUEST_HANDLE(uint16, uint16_t);
-__DEFINE_XEN_GUEST_HANDLE(uint32, uint32_t);
-__DEFINE_XEN_GUEST_HANDLE(uint64, uint64_t);
-
-#endif /* !__ASSEMBLY__ */
-
-/* Default definitions for macros used by domctl/sysctl=2E */
-#if defined(__XEN__) || defined(__XEN_TOOLS__)
-
-#ifndef int64_aligned_t
-#define int64_aligned_t int64_t
-#endif
-#ifndef uint64_aligned_t
-#define uint64_aligned_t uint64_t
-#endif
-#ifndef XEN_GUEST_HANDLE_64
-#define XEN_GUEST_HANDLE_64(name) XEN_GUEST_HANDLE(name)
-#endif
-
-#ifndef __ASSEMBLY__
-struct xenctl_bitmap {
-    XEN_GUEST_HANDLE_64(uint8) bitmap;
-    uint32_t nr_bits;
-};
-#endif
-
-#endif /* defined(__XEN__) || defined(__XEN_TOOLS__) */
-
-#endif /* __XEN_PUBLIC_XEN_H__ */
-
-/*
- * Local variables:
- * mode: C
- * c-file-style: "BSD"
- * c-basic-offset: 4
- * tab-width: 4
- * indent-tabs-mode: nil
- * End:
- */
--=20
2=2E55=2E0=2Ewindows=2E3



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.1b.70cc0f548c474c4d.1a11aba96ec.1585278543300875=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 08 09:36:36 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 08 Oct 2026 09:36:36 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1443095.1660477 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xEkYG-00020j-C5; Thu, 08 Oct 2026 09:36:36 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1443095.1660477; Thu, 08 Oct 2026 09:36:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xEkYG-00020b-8l; Thu, 08 Oct 2026 09:36:36 +0000
Received: by outflank-mailman (input) for mailman id 1443095;
 Thu, 08 Oct 2026 09:36:34 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a11adf18420003f66@swg.vates.tech>)
 id 1xEkYE-00020V-Po
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 09:36:34 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xEkYE-00FJYJ-6i
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 11:36:34 +0200
Received: from [10.42.69.9] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a11adf18420003f66@swg.vates.tech>)
 id 6ac7640d-bab6-0a2a0a5309dd-0a2a4509c516-48
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 11:36:34 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-bad1c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a11adf18420003f66@swg.vates.tech>)
 id 6ac76421-be1a-0a2a45090019-b9ff1c22af39-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 11:36:34 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a11adf18420003f66.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 08 Oct 2026 09:36:30 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id D2A7481C51;
 Thu,  8 Oct 2026 11:36:29 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=X2x6Di46ixbCtYCjPREWm9v4rPo6FBx8+RzJur1BdKU=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:feedback-id;
 b=bSPiq9ABIxoxJ2UMJvYqh9/nYaXONaeTgIIDcoBCylxE2GIK64q5efSGGNYOhZU7G0nMslov+
 GdoxjOpCFzrkyJfK+IhX7APvTuyo5kWSeGeDYDAxo47V37lqeBLm2WlE2VSkXgm3t26gKjMu3NM
 eLbchC1kwP2rbhAMnpgGYPohUZqrBRaBCTCrrTEYgXbKvlhIvlgbl9klpXHBFS1xXw1ZaiAXUr2
 uHoYkh7HHUbOLPwPOawocvJdFUVjTgRG9OWDvPebv7JMwttDa/AuqLKya85zOh/DHKpzjK8mD17
 aKPf3LqpbbTL7AMPO0iM/CEDI3XTJE91bL4ODx9tGHBw==
X-Zone-Loop: 50ee46df8fa4930eb9f60901562de19375c19b318d42
x-campaign-type: default
x-transaction-id: f9c51029-e6a0-427f-a76f-29d80edcc73b
x-swg-uid: 01-6a2cf42d-666c-42b7-8306-87ca79cf6580
X-Mailer: Sweego
Message-ID:
 <1791452190.8631fc262581453bbf619ec5b2062170.1a11adf18420003f66@vates.tech>
x-swg-bid: 1791452190.8631fc262581453bbf619ec5b2062170.1a11adf18420003f66
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH] xeniface: Restore FALSE return value in _IsZeroMemory
Date: Thu,  8 Oct 2026 11:36:20 +0200
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.20.c2e1146b8aff8693.1a11adf1535.13b817b40cacc82e=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791452190010
X-purgate-ID: tlsNG-bad1c0/1791452194-BE8D9034-597D86D2/0/0
X-purgate-type: clean
X-purgate-size: 1181

---=Part.20.c2e1146b8aff8693.1a11adf1535.13b817b40cacc82e=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Commit 54d43f78 ("Sync files with xenbus") accidentally changed
the return value in _IsZeroMemory during the conversion=2E
Restore the original FALSE return=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xeniface/assert=2Eh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/xeniface/assert=2Eh b/src/xeniface/assert=2Eh
index 64d72cd=2E=2Edfac6e1 100644
--- a/src/xeniface/assert=2Eh
+++ b/src/xeniface/assert=2Eh
@@ -166,7 +166,7 @@ _IsZeroMemory(
     while (Offset < Length) {
         if (*((PUCHAR)Buffer + Offset) !=3D 0) {
             Error("%s: non-zero byte in %s (0x%p+0x%x)\n", Caller, Name, =
Buffer, Offset);
-            return TRUE;
+            return FALSE;
         }
         Offset++;
     }
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.20.c2e1146b8aff8693.1a11adf1535.13b817b40cacc82e=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 08 09:40:01 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 08 Oct 2026 09:40:01 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1443102.1660479 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xEkbZ-0002GN-K3; Thu, 08 Oct 2026 09:40:01 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1443102.1660479; Thu, 08 Oct 2026 09:40:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xEkbZ-0002GG-HV; Thu, 08 Oct 2026 09:40:01 +0000
Received: by outflank-mailman (input) for mailman id 1443102;
 Thu, 08 Oct 2026 09:39:59 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a11ae237f50003f66@swg.vates.tech>)
 id 1xEkbX-0002GA-U5
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 09:39:59 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xEkbX-0031Xl-Al
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 11:39:59 +0200
Received: from [10.42.69.1] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a11ae237f50003f66@swg.vates.tech>)
 id 6ac764e6-2eae-0a2a0a5409dd-0a2a450188f8-12
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 11:39:59 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a11ae237f50003f66@swg.vates.tech>)
 id 6ac764ee-5984-0a2a45010019-b9ff1c238d45-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 11:39:59 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a11ae237f50003f66.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 08 Oct 2026 09:39:55 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id C2D2981D8F;
 Thu,  8 Oct 2026 11:39:54 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=u/1cSy9Vyoz2LGKvSrfyZ3P66hz+8XDu8MAstj4V3Rg=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:feedback-id;
 b=hC5oAwWshFjEOkxvN5XntMc73PXTWMNtwz7v9toJ7H6aZLHLu4dWCg2t+m9Nxqijin1j+aXLq
 CDqVrVpK5T2HMwNym79l+p2e2FGZRj6AXD0TpVavP8o//wUcxK/8kEHmC0ZrVR7xPASte3Ej/DE
 +DAqrVzkAzdHqfx8702Y/7BNEfYI7VQD1DgKgu1nPFFA8suk6VEZW/WLLu48pof/8MqggO9oel2
 aDiQVrPLDXl7HyPm5FiA3pDHMyZxVxCY+XtLPa99tnnW+qi263HaWwe+O5Y1wg8zDYGmqE4PFrA
 YE6rF0WVcl5vAZS/fiItY8i9qUpZLsNbZmjt1awAIOLw==
X-Zone-Loop: 62a561c433a7655a22455fcdb36770c1a7c44eca376a
x-campaign-type: default
x-transaction-id: d9cefb48-127f-4667-b671-ec20f0befd3a
x-swg-uid: 01-a4a1da86-0554-4ed4-ba64-e732f047053f
X-Mailer: Sweego
Message-ID:
 <1791452395.8631fc262581453bbf619ec5b2062170.1a11ae237f50003f66@vates.tech>
x-swg-bid: 1791452395.8631fc262581453bbf619ec5b2062170.1a11ae237f50003f66
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH] xennet: Restore FALSE return value in _IsZeroMemory
Date: Thu,  8 Oct 2026 11:39:47 +0200
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.21.8a2b0eaeddd8d06a.1a11ae235ba.ed27f4cd7788fa59=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791452394939
X-purgate-ID: tlsNG-d62444/1791452399-1E664757-A5164D56/0/0
X-purgate-type: clean
X-purgate-size: 1179

---=Part.21.8a2b0eaeddd8d06a.1a11ae235ba.ed27f4cd7788fa59=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Last patch set ("Update annotations to SAL 2=2E0") accidentally changed
the return value in _IsZeroMemory during the conversion=2E
Restore the original FALSE return=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xennet/assert=2Eh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/xennet/assert=2Eh b/src/xennet/assert=2Eh
index ef5abe2=2E=2Eac25718 100644
--- a/src/xennet/assert=2Eh
+++ b/src/xennet/assert=2Eh
@@ -166,7 +166,7 @@ _IsZeroMemory(
     while (Offset < Length) {
         if (*((PUCHAR)Buffer + Offset) !=3D 0) {
             Error("%s: non-zero byte in %s (0x%p+0x%x)\n", Caller, Name, =
Buffer, Offset);
-            return TRUE;
+            return FALSE;
         }
         Offset++;
     }
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.21.8a2b0eaeddd8d06a.1a11ae235ba.ed27f4cd7788fa59=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 08 09:40:56 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 08 Oct 2026 09:40:56 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1443103.1660484 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xEkcS-0003Lf-Nd; Thu, 08 Oct 2026 09:40:56 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1443103.1660484; Thu, 08 Oct 2026 09:40:56 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xEkcS-0003LY-L0; Thu, 08 Oct 2026 09:40:56 +0000
Received: by outflank-mailman (input) for mailman id 1443103;
 Thu, 08 Oct 2026 09:40:55 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a11ae30d4b0003f66@swg.vates.tech>)
 id 1xEkcR-0003KJ-7n
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 09:40:55 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xEkcQ-0031wm-Kl
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 11:40:54 +0200
Received: from [10.42.69.5] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a11ae30d4b0003f66@swg.vates.tech>)
 id 6ac76520-8faa-0a2a0a5109dd-0a2a4505c3ea-14
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 11:40:54 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-c201ff.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a11ae30d4b0003f66@swg.vates.tech>)
 id 6ac76526-4cb1-0a2a45050019-b9ff1c238845-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 11:40:54 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a11ae30d4b0003f66.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 08 Oct 2026 09:40:50 +0000
Received: from [192.168.1.61] (142.220.66.37.rev.sfr.net [37.66.220.142])
 (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 584B281C51;
 Thu,  8 Oct 2026 11:40:49 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=4o1WEp7mgXVZ18+w+BMBoqn0D/Oml2+HuiM3+zY+wpE=;
 h=from:subject:date:message-id:to:mime-version:content-type:in-reply-to:references:feedback-id;
 b=U2Qpb2lJafuAers9jBrWZDHSqcNCC7g06Yw5qjqrn9tw9ZRIFiv3Mpk/UMa3VNo8YVLJWsAki
 NxHsS7eTqY4tPxa2ERPrUOBNDFibYT2NuIM9tPja3lPg2RfPxDH5NX1EP4r3FJZc/kvU8zd75CT
 1p7ngAzMiiCt3VD1sacjLShF6mK4k0VvBkpYy8KbP94PSSEw7H8NjOEZerMXfYM4AZ869NSBq4h
 XVWI5sgFjYqmfSUaLohM/1yoAumHOAWw28No5+Z67LOS4I8JX/19Em1LmslTz4MHpEUWiG8WgYY
 ocXmKnEdABD8iWwtHt7nKO7LPVmrpYzSUmNXctuZ6c5w==
X-Zone-Loop: a0d39d49256d29961680230f925c5939715f7067d4b3
x-campaign-type: default
x-transaction-id: 1ffb3aac-47b2-4d23-97cc-cca637194cc0
x-swg-uid: 01-63647214-4fa8-49e9-8087-1e9585c12b9d
X-Mailer: Sweego
Message-ID:
 <1791452450.8631fc262581453bbf619ec5b2062170.1a11ae30d4b0003f66@vates.tech>
x-swg-bid: 1791452450.8631fc262581453bbf619ec5b2062170.1a11ae30d4b0003f66
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
Date: Thu, 8 Oct 2026 11:40:48 +0200
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH] xeniface: Restore FALSE return value in _IsZeroMemory
Content-Language: en-US
To: =?UTF-8?Q?C=C3=A9saire_Mounah?= <cesaire.mounah@vates.tech>,
 win-pv-devel@lists.xenproject.org
References: <1791452190.8631fc262581453bbf619ec5b2062170.1a11adf18420003f66@vates.tech>
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
In-Reply-To: <1791452190.8631fc262581453bbf619ec5b2062170.1a11adf18420003f66@vates.tech>
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.22.3111dce900cd30f1.1a11ae30a85.f4845cd7521aeb12=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791452449413
X-purgate-ID: tlsNG-c201ff/1791452454-24D1E2A1-160D1639/0/0
X-purgate-type: clean
X-purgate-size: 1286

---=Part.22.3111dce900cd30f1.1a11ae30a85.f4845cd7521aeb12=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

On 08/10/2026 11:37, C=C3=A9saire Mounah wrote:
> Commit 54d43f78 ("Sync files with xenbus") accidentally changed
> the return value in _IsZeroMemory during the conversion=2E
> Restore the original FALSE return=2E
>=20
> Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
> ---
>   src/xeniface/assert=2Eh | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
>=20
> diff --git a/src/xeniface/assert=2Eh b/src/xeniface/assert=2Eh
> index 64d72cd=2E=2Edfac6e1 100644
> --- a/src/xeniface/assert=2Eh
> +++ b/src/xeniface/assert=2Eh
> @@ -166,7 +166,7 @@ _IsZeroMemory(
>       while (Offset < Length) {
>           if (*((PUCHAR)Buffer + Offset) !=3D 0) {
>               Error("%s: non-zero byte in %s (0x%p+0x%x)\n", Caller, Nam=
e, Buffer, Offset);
> -            return TRUE;
> +            return FALSE;
>           }
>           Offset++;
>       }

Reviewed-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>


-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.22.3111dce900cd30f1.1a11ae30a85.f4845cd7521aeb12=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 08 09:41:01 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 08 Oct 2026 09:41:01 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1443104.1660487 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xEkcX-0003Nd-Ot; Thu, 08 Oct 2026 09:41:01 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1443104.1660487; Thu, 08 Oct 2026 09:41:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xEkcX-0003NW-MQ; Thu, 08 Oct 2026 09:41:01 +0000
Received: by outflank-mailman (input) for mailman id 1443104;
 Thu, 08 Oct 2026 09:41:00 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a11ae321fc0003f66@swg.vates.tech>)
 id 1xEkcW-0003NE-83
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 09:41:00 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xEkcV-0031wm-Ki
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 11:40:59 +0200
Received: from [10.42.69.5] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a11ae321fc0003f66@swg.vates.tech>)
 id 6ac76520-8faa-0a2a0a5109dd-0a2a4505c3ea-30
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 11:40:59 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-c201ff.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a11ae321fc0003f66@swg.vates.tech>)
 id 6ac76526-4cb1-0a2a45050019-b9ff1c238845-4
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 11:40:59 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a11ae321fc0003f66.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 08 Oct 2026 09:40:55 +0000
Received: from [192.168.1.61] (142.220.66.37.rev.sfr.net [37.66.220.142])
 (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id DBFE881D8F;
 Thu,  8 Oct 2026 11:40:54 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=BxwnHXBaQvpJafq+VVok7OZIf+2lYt8DF0gtjrloWbg=;
 h=from:subject:date:message-id:to:mime-version:content-type:in-reply-to:references:feedback-id;
 b=rAZLMdfAy8fB55H+rOn/CLH1iRAHaNmneWREeYSHxKjSrxnj1JzBUvj8SftReXXBMkUuT5Ya5
 Anwy/Zrxt8cglOi95kVXXIq7ENQDknZ3k2wnhuJ9mFwYzK9uGo098qqlSDpqTaoj6yQMPt3HEyU
 /0LZ3Es9FJ2DO1eBTYFmJH/7t3KtBKM8ls4heZj/lFZ6xRRPebHNf1pu3W5uWc4503sHE0d5cMA
 6EZ8mH+fb9Q0vul+QjpXt/IeVPo0j62T+lhN9kSnPBPj3L+g5NujN2XQfJodZ2JYVcgAuERx6fV
 Y3glVBsFRow+GvesVgBv5yzIk2xf2VxaJyIUmjW1TF2w==
X-Zone-Loop: fcd40cffebff43ff85661b507883189910ebe46a2716
x-campaign-type: default
x-transaction-id: e9b8ea53-e6ea-4cc9-84d0-300df5b2b431
x-swg-uid: 01-7909c849-6c64-4535-a8a7-3be6ac16c931
X-Mailer: Sweego
Message-ID:
 <1791452455.8631fc262581453bbf619ec5b2062170.1a11ae321fc0003f66@vates.tech>
x-swg-bid: 1791452455.8631fc262581453bbf619ec5b2062170.1a11ae321fc0003f66
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
Date: Thu, 8 Oct 2026 11:40:54 +0200
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH] xennet: Restore FALSE return value in _IsZeroMemory
Content-Language: en-US
To: =?UTF-8?Q?C=C3=A9saire_Mounah?= <cesaire.mounah@vates.tech>,
 win-pv-devel@lists.xenproject.org
References: <1791452395.8631fc262581453bbf619ec5b2062170.1a11ae237f50003f66@vates.tech>
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
In-Reply-To: <1791452395.8631fc262581453bbf619ec5b2062170.1a11ae237f50003f66@vates.tech>
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.23.86b9cfce8892986e.1a11ae32056.fb010214f4367809=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791452454998
X-purgate-ID: tlsNG-c201ff/1791452459-F6AB72A1-CE782A70/0/0
X-purgate-type: clean
X-purgate-size: 1284

---=Part.23.86b9cfce8892986e.1a11ae32056.fb010214f4367809=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

On 08/10/2026 11:40, C=C3=A9saire Mounah wrote:
> Last patch set ("Update annotations to SAL 2=2E0") accidentally changed
> the return value in _IsZeroMemory during the conversion=2E
> Restore the original FALSE return=2E
>=20
> Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
> ---
>   src/xennet/assert=2Eh | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
>=20
> diff --git a/src/xennet/assert=2Eh b/src/xennet/assert=2Eh
> index ef5abe2=2E=2Eac25718 100644
> --- a/src/xennet/assert=2Eh
> +++ b/src/xennet/assert=2Eh
> @@ -166,7 +166,7 @@ _IsZeroMemory(
>       while (Offset < Length) {
>           if (*((PUCHAR)Buffer + Offset) !=3D 0) {
>               Error("%s: non-zero byte in %s (0x%p+0x%x)\n", Caller, Nam=
e, Buffer, Offset);
> -            return TRUE;
> +            return FALSE;
>           }
>           Offset++;
>       }

Reviewed-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>


-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.23.86b9cfce8892986e.1a11ae32056.fb010214f4367809=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 08 09:44:55 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 08 Oct 2026 09:44:55 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1443106.1660492 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xEkgJ-0003Z9-31; Thu, 08 Oct 2026 09:44:55 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1443106.1660492; Thu, 08 Oct 2026 09:44:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xEkgI-0003Z2-Vw; Thu, 08 Oct 2026 09:44:54 +0000
Received: by outflank-mailman (input) for mailman id 1443106;
 Thu, 08 Oct 2026 09:44:53 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a11ae6b9460003f66@swg.vates.tech>)
 id 1xEkgH-0003Yw-Bc
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 09:44:53 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xEkgG-000aH8-Ki
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 11:44:52 +0200
Received: from [10.42.69.9] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a11ae6b9460003f66@swg.vates.tech>)
 id 6ac7660f-2eae-0a2a0a5409dd-0a2a4509d24c-2
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 11:44:52 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-bad1c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a11ae6b9460003f66@swg.vates.tech>)
 id 6ac76613-be1a-0a2a45090019-b9ff1c12a0f9-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 11:44:52 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a11ae6b9460003f66.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 08 Oct 2026 09:44:50 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 0D70F81C51;
 Thu,  8 Oct 2026 11:44:50 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=KXXC1WfngSTGeMyy1jc6/IwYNc6L91rbIy2KnG8Y6Og=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:feedback-id;
 b=kEol1+ltJmoth6dfuKI1KmCSkI7OVLcrO8dc2DL3kn7DS5b+7Gt/xpWq09fqs6i1XVPurzzKI
 9F7AcA/PEyRtLY0AO5PpI6nwGeSjV1UxHgkmOGqvBU89ZvvPyKcI+MlmBtvC06/l9UshoaSRZMM
 ab5CPyd5NQJuUjQkaGa5gJcM3op8/EIZNfhw1+cQ5R5SbGukbVS8ED14/0Huc/YCp8u2khW/9xE
 H8bRdeQBnr5JraVMEbEfdBdn4VOr8yfbFJGL7IZeJhtTMjT/PbBM8LbknAdKT9POBV61YsS4nbX
 /7VhxqRw7KDSKkDnPl+RnTTZUP+NETJu/ctCRqn8zx/Q==
X-Zone-Loop: 8978e9c16d9dbd7a58208943eb3605e3b35bed9f9af3
x-campaign-type: default
x-transaction-id: 510cea6b-6632-49ae-9a8f-7ca2586662f0
x-swg-uid: 01-c0d10832-d129-4dcc-907e-2b9c01a48493
X-Mailer: Sweego
Message-ID:
 <1791452690.8631fc262581453bbf619ec5b2062170.1a11ae6b9460003f66@vates.tech>
x-swg-bid: 1791452690.8631fc262581453bbf619ec5b2062170.1a11ae6b9460003f66
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH] xenhid: annotate include files
Date: Thu,  8 Oct 2026 11:44:42 +0200
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.24.e981155d4ba56528.1a11ae6b6f0.7e2a0cb00bf675e8=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791452690161
X-purgate-ID: tlsNG-bad1c0/1791452692-3A8D9034-14C74C87/0/0
X-purgate-type: clean
X-purgate-size: 15267

---=Part.24.e981155d4ba56528.1a11ae6b6f0.7e2a0cb00bf675e8=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

The previous conversion to SAL 2=2E0 left the files in include directory=2E
Update the include files to complete conversion=2E

No functional change=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 include/hid_interface=2Eh     | 108 ++++++++++++++++++------------------
 include/store_interface=2Eh   |  84 ++++++++++++++--------------
 include/suspend_interface=2Eh |  24 ++++----
 3 files changed, 108 insertions(+), 108 deletions(-)

diff --git a/include/hid_interface=2Eh b/include/hid_interface=2Eh
index 2e2d9e6=2E=2E5de30cf 100644
--- a/include/hid_interface=2Eh
+++ b/include/hid_interface=2Eh
@@ -48,7 +48,7 @@
 */ =20
 typedef NTSTATUS
 (*XENHID_HID_ACQUIRE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENHID_HID_RELEASE
@@ -58,7 +58,7 @@ typedef NTSTATUS
 */ =20
 typedef VOID
 (*XENHID_HID_RELEASE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENHID_HID_CALLBACK
@@ -70,9 +70,9 @@ typedef VOID
 */
 typedef BOOLEAN
 (*XENHID_HID_CALLBACK)(
-    IN  PVOID       Argument OPTIONAL,
-    IN  PVOID       Buffer,
-    IN  ULONG       Length
+    _In_opt_ PVOID  Argument,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length
     );
=20
 /*! \typedef XENHID_HID_ENABLE
@@ -87,9 +87,9 @@ typedef BOOLEAN
 */
 typedef NTSTATUS
 (*XENHID_HID_ENABLE)(
-    IN  PINTERFACE          Interface,
-    IN  XENHID_HID_CALLBACK Callback,
-    IN  PVOID               Argument OPTIONAL
+    _In_ PINTERFACE             Interface,
+    _In_ XENHID_HID_CALLBACK    Callback,
+    _In_opt_ PVOID              Argument
     );
=20
 /*! \typedef XENHID_HID_DISABLE
@@ -102,7 +102,7 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENHID_HID_DISABLE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENHID_HID_GET_DEVICE_ATTRIBUTES
@@ -111,10 +111,10 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENHID_HID_GET_DEVICE_ATTRIBUTES)(
-    IN  PINTERFACE      Interface,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length,
-    OUT PULONG          Returned
+    _In_ PINTERFACE Interface,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length,
+    _Out_ PULONG    Returned
     );
=20
 /*! \typedef XENHID_HID_GET_DEVICE_DESCRIPTOR
@@ -127,10 +127,10 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENHID_HID_GET_DEVICE_DESCRIPTOR)(
-    IN  PINTERFACE      Interface,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length,
-    OUT PULONG          Returned
+    _In_ PINTERFACE Interface,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length,
+    _Out_ PULONG    Returned
     );
=20
 /*! \typedef XENHID_HID_GET_REPORT_DESCRIPTOR
@@ -143,10 +143,10 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENHID_HID_GET_REPORT_DESCRIPTOR)(
-    IN  PINTERFACE      Interface,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length,
-    OUT PULONG          Returned
+    _In_ PINTERFACE Interface,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length,
+    _Out_ PULONG    Returned
     );
=20
 /*! \typedef XENHID_HID_GET_STRING
@@ -160,11 +160,11 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENHID_HID_GET_STRING)(
-    IN  PINTERFACE      Interface,
-    IN  ULONG           Identifier,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length,
-    OUT PULONG          Returned
+    _In_ PINTERFACE Interface,
+    _In_ ULONG      Identifier,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length,
+    _Out_ PULONG    Returned
     );
=20
 /*! \typedef XENHID_HID_GET_INDEXED_STRING
@@ -178,11 +178,11 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENHID_HID_GET_INDEXED_STRING)(
-    IN  PINTERFACE      Interface,
-    IN  ULONG           Index,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length,
-    OUT PULONG          Returned
+    _In_ PINTERFACE Interface,
+    _In_ ULONG      Index,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length,
+    _Out_ PULONG    Returned
     );
=20
 /*! \typedef XENHID_HID_GET_FEATURE
@@ -196,11 +196,11 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENHID_HID_GET_FEATURE)(
-    IN  PINTERFACE      Interface,
-    IN  ULONG           ReportId,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length,
-    OUT PULONG          Returned
+    _In_ PINTERFACE Interface,
+    _In_ ULONG      ReportId,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length,
+    _Out_ PULONG    Returned
     );
=20
 /*! \typedef XENHID_HID_SET_FEATURE
@@ -213,10 +213,10 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENHID_HID_SET_FEATURE)(
-    IN  PINTERFACE      Interface,
-    IN  ULONG           ReportId,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length
+    _In_ PINTERFACE Interface,
+    _In_ ULONG      ReportId,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length
     );
=20
 /*! \typedef XENHID_HID_GET_INPUT_REPORT
@@ -230,11 +230,11 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENHID_HID_GET_INPUT_REPORT)(
-    IN  PINTERFACE      Interface,
-    IN  ULONG           ReportId,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length,
-    OUT PULONG          Returned
+    _In_ PINTERFACE Interface,
+    _In_ ULONG      ReportId,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length,
+    _Out_ PULONG    Returned
     );
=20
 /*! \typedef XENHID_HID_SET_OUTPUT_REPORT
@@ -247,10 +247,10 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENHID_HID_SET_OUTPUT_REPORT)(
-    IN  PINTERFACE      Interface,
-    IN  ULONG           ReportId,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length
+    _In_ PINTERFACE Interface,
+    _In_ ULONG      ReportId,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length
     );
=20
 /*! \typedef XENHID_HID_READ_REPORT
@@ -262,7 +262,7 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENHID_HID_READ_REPORT)(
-    IN  PINTERFACE      Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENHID_HID_WRITE_REPORT
@@ -275,10 +275,10 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENHID_HID_WRITE_REPORT)(
-    IN  PINTERFACE      Interface,
-    IN  ULONG           ReportId,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length
+    _In_ PINTERFACE Interface,
+    _In_ ULONG      ReportId,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length
     );
=20
 // {D215E1B5-8C38-420A-AEA6-02520DF3A621}
diff --git a/include/store_interface=2Eh b/include/store_interface=2Eh
index 616bc36=2E=2E0064cc4 100644
--- a/include/store_interface=2Eh
+++ b/include/store_interface=2Eh
@@ -75,7 +75,7 @@ typedef struct _XENBUS_STORE_PERMISSION {
 */
 typedef NTSTATUS
 (*XENBUS_STORE_ACQUIRE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_STORE_RELEASE
@@ -85,7 +85,7 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENBUS_STORE_RELEASE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_STORE_FREE
@@ -96,8 +96,8 @@ typedef VOID
 */
 typedef VOID
 (*XENBUS_STORE_FREE)(
-    IN  PINTERFACE  Interface,
-    IN  PCHAR       Buffer
+    _In_ PINTERFACE Interface,
+    _In_ PCHAR      Buffer
     );
=20
 /*! \typedef XENBUS_STORE_READ
@@ -116,11 +116,11 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENBUS_STORE_READ)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node,
-    OUT PCHAR                       *Buffer
+    _In_ PINTERFACE                     Interface,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PCHAR                      Prefix,
+    _In_ PCHAR                          Node,
+    _Outptr_ PCHAR                      *Buffer
     );
=20
 /*! \typedef XENBUS_STORE_PRINTF
@@ -139,11 +139,11 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENBUS_STORE_PRINTF)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node,
-    IN  const CHAR                  *Format,
+    _In_ PINTERFACE                     Interface,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PCHAR                      Prefix,
+    _In_ PCHAR                          Node,
+    _In_ const CHAR                     *Format,
     =2E=2E=2E
     );
=20
@@ -159,10 +159,10 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENBUS_STORE_REMOVE)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node
+    _In_ PINTERFACE                     Interface,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PCHAR                      Prefix,
+    _In_ PCHAR                          Node
     );
=20
 /*! \typedef XENBUS_STORE_DIRECTORY
@@ -181,11 +181,11 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENBUS_STORE_DIRECTORY)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node,
-    OUT PCHAR                       *Buffer
+    _In_ PINTERFACE                     Interface,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PCHAR                      Prefix,
+    _In_ PCHAR                          Node,
+    _Outptr_ PCHAR                      *Buffer
     );
=20
 /*! \typedef XENBUS_STORE_TRANSACTION_START
@@ -196,8 +196,8 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENBUS_STORE_TRANSACTION_START)(
-    IN  PINTERFACE                  Interface,
-    OUT PXENBUS_STORE_TRANSACTION   *Transaction
+    _In_ PINTERFACE                     Interface,
+    _Outptr_ PXENBUS_STORE_TRANSACTION  *Transaction
     );
=20
 /*! \typedef XENBUS_STORE_TRANSACTION_END
@@ -213,9 +213,9 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENBUS_STORE_TRANSACTION_END)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction,
-    IN  BOOLEAN                     Commit
+    _In_ PINTERFACE                 Interface,
+    _In_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_ BOOLEAN                    Commit
     );
=20
 /*! \typedef XENBUS_STORE_WATCH_ADD
@@ -231,11 +231,11 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENBUS_STORE_WATCH_ADD)(
-    IN  PINTERFACE          Interface,
-    IN  PCHAR               Prefix OPTIONAL,
-    IN  PCHAR               Node,
-    IN  PKEVENT             Event,
-    OUT PXENBUS_STORE_WATCH *Watch
+    _In_ PINTERFACE                 Interface,
+    _In_opt_ PCHAR                  Prefix,
+    _In_ PCHAR                      Node,
+    _In_ PKEVENT                    Event,
+    _Outptr_ PXENBUS_STORE_WATCH    *Watch
     );
=20
 /*! \typedef XENBUS_STORE_WATCH_REMOVE
@@ -246,8 +246,8 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENBUS_STORE_WATCH_REMOVE)(
-    IN  PINTERFACE          Interface,
-    IN  PXENBUS_STORE_WATCH Watch
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_STORE_WATCH    Watch
     );
=20
 /*! \typedef XENBUS_STORE_POLL
@@ -262,7 +262,7 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENBUS_STORE_POLL)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_STORE_PERMISSIONS_SET
@@ -279,12 +279,12 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENBUS_STORE_PERMISSIONS_SET)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node,
-    IN  PXENBUS_STORE_PERMISSION    Permissions,
-    IN  ULONG                       NumberPermissions
+    _In_ PINTERFACE                     Interface,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PCHAR                      Prefix,
+    _In_ PCHAR                          Node,
+    _In_ PXENBUS_STORE_PERMISSION       Permissions,
+    _In_ ULONG                          NumberPermissions
     );
=20
 // {86824C3B-D34E-4753-B281-2F1E3AD214D7}
diff --git a/include/suspend_interface=2Eh b/include/suspend_interface=2Eh
index ee31d95=2E=2Ea20f616 100644
--- a/include/suspend_interface=2Eh
+++ b/include/suspend_interface=2Eh
@@ -62,7 +62,7 @@ typedef struct _XENBUS_SUSPEND_CALLBACK   XENBUS_SUSPEND=
_CALLBACK, *PXENBUS_SUSP
 */
 typedef NTSTATUS
 (*XENBUS_SUSPEND_ACQUIRE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_SUSPEND_RELEASE
@@ -72,7 +72,7 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENBUS_SUSPEND_RELEASE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_SUSPEND_FUNCTION
@@ -87,7 +87,7 @@ typedef VOID
 */
 typedef VOID
 (*XENBUS_SUSPEND_FUNCTION)(
-    IN  PVOID   Argument
+    _In_ PVOID  Argument
     );
=20
 /*! \typedef XENBUS_SUSPEND_REGISTER
@@ -101,11 +101,11 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENBUS_SUSPEND_REGISTER)(
-    IN  PINTERFACE                      Interface,
-    IN  XENBUS_SUSPEND_CALLBACK_TYPE    Type,
-    IN  XENBUS_SUSPEND_FUNCTION         Function,
-    IN  PVOID                           Argument OPTIONAL,
-    OUT PXENBUS_SUSPEND_CALLBACK        *Callback
+    _In_ PINTERFACE                     Interface,
+    _In_ XENBUS_SUSPEND_CALLBACK_TYPE   Type,
+    _In_ XENBUS_SUSPEND_FUNCTION        Function,
+    _In_opt_ PVOID                      Argument,
+    _Outptr_ PXENBUS_SUSPEND_CALLBACK   *Callback
     );
=20
 /*! \typedef XENBUS_SUSPEND_DEREGISTER
@@ -116,8 +116,8 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENBUS_SUSPEND_DEREGISTER)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_SUSPEND_CALLBACK    Callback
+    _In_ PINTERFACE                 Interface,
+    _In_ PXENBUS_SUSPEND_CALLBACK   Callback
     );
=20
 /*! \typedef XENBUS_SUSPEND_TRIGGER
@@ -129,7 +129,7 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENBUS_SUSPEND_TRIGGER)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_SUSPEND_GET_COUNT
@@ -140,7 +140,7 @@ typedef NTSTATUS
 */
 typedef ULONG
 (*XENBUS_SUSPEND_GET_COUNT)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 // {0554F2AF-B510-4C71-AC03-1C503E394238}
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.24.e981155d4ba56528.1a11ae6b6f0.7e2a0cb00bf675e8=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 08 10:18:27 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 08 Oct 2026 10:18:27 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1443140.1660541 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xElCl-0002Ci-Cq; Thu, 08 Oct 2026 10:18:27 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1443140.1660541; Thu, 08 Oct 2026 10:18:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xElCl-0002Cb-A2; Thu, 08 Oct 2026 10:18:27 +0000
Received: by outflank-mailman (input) for mailman id 1443140;
 Thu, 08 Oct 2026 10:18:26 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <owen.smith@citrix.com>) id 1xElCj-0002CN-RM
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 10:18:26 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xElCj-004Jqe-3s
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 12:18:25 +0200
Received: from [10.42.69.11] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ac76de7-e002-0a2a0a5209dd-0a2a450bc52a-18
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 12:18:25 +0200
Received: from [40.107.209.58]
 (helo=PH8PR06CU001.outbound.protection.outlook.com)
 by tlsNG-42698a.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ac76dee-b7e8-0a2a450b0019-286bd13afeea-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 12:18:23 +0200
Received: from SA6PR03MB7760.namprd03.prod.outlook.com (2603:10b6:806:43c::5)
 by LV9PR03MB8464.namprd03.prod.outlook.com (2603:10b6:408:377::8)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.496.17; Thu, 8 Oct
 2026 10:18:20 +0000
Received: from SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38]) by SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38%5]) with mapi id 15.21.0496.015; Thu, 8 Oct 2026
 10:18:20 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:x-ms-exchange-senderadcheck"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
 b=JhL8Vo24UHJOMlFae3bl0ibz1aEE1j4YtrGJFk1TVhRMJKENs+qeVWGas8Mg6wmUhdu3kKQhK6J42fucV6LvhCWDu9jYoJ5udK284Tl0uo8ey2ZRxOiGO6mE0Rm7cC4jCuKFIfwvSmLm/O3snFRyyO3qZkFW4TRk6387Brm0wTeTmF7F2E0aP7MklSnMdUw/dh48FN2fLpJmaHg0AGM/sz7XPA8NHK6RKPJWJUWCWJby4RjITV4ooZxYTxJe9tFtypxQbxUHyGP5ePCZvHC9fA8SlWsBzmBYTa9rAjgHe4QXlTJ6xybd1QrCVMauxAiLrce5o1Sf6kf4KTc7jlRYTA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector10001;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=0QLpJ/lzikb/PLTfI8RvBGU92j5c0ZhqLlvIXAVuUFM=;
 b=bGcZf2nMMEQVU3FvvEOoktO7CQeLtkvrPV59OpaAoHQIeNj9uytlJFJpN80OhHNoNFebbWojqoa9yGxrEfrY3mDba+5O9rXMiPKQ8Yrd7g7AhJHGrV3mJ82p+sgHkTX2XVEp3UkuETBTNpibpF1lULl2CcC6vcFWjX/fMJh79fWto/VFyOV0t3Xjqp0hLyzMH9TwWNEp5luOOovP3ke8v2OS/6uNvxaXuPE3ilHSkIGvu16dL2pViBa8fVDeZF9lGmnLsooF6QpWPV2tBHPUwAYGo4B7/kN6lFzyxnmjao7Hi3IZUPP3240XBw9dPMlZkVdnyXWp5iBVpQvgzIYRWw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=0QLpJ/lzikb/PLTfI8RvBGU92j5c0ZhqLlvIXAVuUFM=;
 b=BSMIGrZqYjlyTF83e/DH/EsmXs7SlgFmhaV0EWQcGmoHEUdhyOkzA9aiF8SRVMEXd96o6p3x1IcxI6i+CorowuMF+i4IKXBsQ26xMCWcRWvzLY0vfl864tmVPHBnh+r5oS73KEAexL5oLfubSVIDzlGDBhCPS93bk312svI+Mmc=
From: Owen Smith <owen.smith@citrix.com>
To: Tu Dinh <ngoc-tu.dinh@vates.tech>, =?iso-8859-1?Q?C=E9saire_Mounah?=
	<cesaire.mounah@vates.tech>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Subject: Re: [PATCH] xeniface: Restore FALSE return value in _IsZeroMemory
Thread-Topic: [PATCH] xeniface: Restore FALSE return value in _IsZeroMemory
Thread-Index: AQHdVwiJMGQ3X1X6Rk6vO8KhZpFb07bzZCEAgAAKZDU=
Date: Thu, 8 Oct 2026 10:18:20 +0000
Message-ID:
 <SA6PR03MB77603D9B2C165B344D467657FE932@SA6PR03MB7760.namprd03.prod.outlook.com>
References:
 <1791452190.8631fc262581453bbf619ec5b2062170.1a11adf18420003f66@vates.tech>
 <1791452450.8631fc262581453bbf619ec5b2062170.1a11ae30d4b0003f66@vates.tech>
In-Reply-To:
 <1791452450.8631fc262581453bbf619ec5b2062170.1a11ae30d4b0003f66@vates.tech>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
msip_labels:
authentication-results: mx.microsoft.com 1; dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=citrix.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: SA6PR03MB7760:EE_|LV9PR03MB8464:EE_
x-ms-office365-filtering-correlation-id: b154884d-1b14-45f1-3351-08df25257a45
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam:
 BCL:0;ARA:13230040|1800799024|366016|376014|23010399003|38070700021|56012099006|4143699003|11063799006|10067099003|22082099003|18002099003;
x-microsoft-antispam-message-info:
 aQwV4o39vymxyt1/b0EZgNwLFpaYZjfbd9PZKK6rT2jyyP2IEQl+6m7uGGhkmiuvgVlkODNc4T/7ZrRerjYyBcWD50ekD+XMiw1SFAWq8gpT9dFXuE/2MEnAgy6jcveSBv6+jQlzDJx/0pMlVCHUbQ5sIe0FwrvxIuudp+3iPPED9p9iQj4lmNIysMI1VaD8MPMinrrGprV53Ky5MZ/JbiVs9pyDBX5/8Vdx27qfc2vWn30/Is4QU393Mcs2ZyStH2Y9UoEDndDm5X2RhLz1OUK2RFOxZcBsKk9LPpKeNIrLW8kuRbzfYFZFi/Xq6sXzybs/BzEm86uokuWs894F5F8L+jteXSBzbon7oNYcMRROmEQtYnPEVRzS+BA8c5j/pd5Rq5O9WwUZrM3NQgkB/MfsxyBEaWOoRwcZWhri+0hgvBkzwhyfKSI5FV0aEJztGlhnJzibsM1tRh0FAcYDVc9ri3+HR3K1Ad4unPcTtPwQ5rwHQxyGZDoNo6vlKP0WUTximx0iJWbRRxngMTGtHN2ld7sO9TMX9WTrSdtTSahuwlX+1edlNH3NqqTqOOSWmciwSTt0yf7busCfPEFZ/aiDkcBAtWhZc6L5JPW5lCoI3QnKCKFHqx6Z8lDXoWic9i9KO6rTChYsROhKax/C1tCk6PdKtcPVsNGJGihS/jo=
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SA6PR03MB7760.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(23010399003)(38070700021)(56012099006)(4143699003)(11063799006)(10067099003)(22082099003)(18002099003);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?iso-8859-1?Q?UtjbVWhFEc+fXiUjSpyKcUN0oP4blspMBXuEShy2tVEQtskp/nUxfScfOO?=
 =?iso-8859-1?Q?5ghbMbz8/YfSABPTpLyHPCPxu/bxSVdLYwP9EdbkPl7Y3lglrYJQrlSDmC?=
 =?iso-8859-1?Q?YBPTo9weXScklMzOj6MeE296Qs0LZqQeR9S39aS0QKvwpQs/ThA2RNdzXj?=
 =?iso-8859-1?Q?TJ0T+m6GUpWEd4F11aa/0sxPWyXx6ARXgBTKkh8pesxtHXm6CVmCqFmPCR?=
 =?iso-8859-1?Q?F0jmF9v/PHvz+XW6pNEL+NJJSpkRmDfrHd9skZDoVMTiKECWpYmW9TewJ/?=
 =?iso-8859-1?Q?FbKFpIcfDuoTqfvo9fVc6euJ9pR3dQlX8MUuDC6vKWF3g5gM8K1KJEF6/4?=
 =?iso-8859-1?Q?bE6IOZPyusSAGLPXRgFTbr91uuCKkjrFpBLxMjbsdngX1L9zKXgEQoCrJ4?=
 =?iso-8859-1?Q?GzmfyRSu+filH1y0pO6Cp4MQaTAII64rXkAkIPyzalizVl0/zMXgbVZCwM?=
 =?iso-8859-1?Q?I4l0+JyUxMoN8LBnW1wgK4sbn74Vn9iYUrRp/O5UDjpjV6HDSgHRZPmwRn?=
 =?iso-8859-1?Q?Qrv0NmimJhbjSFpOv1491lhghkqGwACDCfslCz0quL1GF9fhCYD5mXHGFt?=
 =?iso-8859-1?Q?+FXwcOQMIVQaHOLfpOsITf7fulXzk3TffcdLxleYe/gY8Nhb43Ao2aJ/Ey?=
 =?iso-8859-1?Q?cG4Vxg83oPG4Cr8r9EkswRz0Os4XSbN5+dvwZOHN9b8KtUY9bTn5caUYpC?=
 =?iso-8859-1?Q?dGvSfYPIuXW5ym0JB+IP469jfs6sKYIHDQz01+wx/Fj5+t3+xZgfgy2Rui?=
 =?iso-8859-1?Q?xtEk0pGH3HMYU9ciIKCz3NsJ1J1pQK2N7GEoErYLW7NZFeOmOhYdYu3VJA?=
 =?iso-8859-1?Q?Y0zecHX/Xp600lwZVTECe8ePwRQoTUB1JOSmQGivJ1a0UTPBOlD6UAJHbw?=
 =?iso-8859-1?Q?zY8TNMYOhWetX+vQBCi5GGFHfoaDWLO7M/97aDDJMssp5aT1W1mCEoGM8T?=
 =?iso-8859-1?Q?K96Juy5C1sqGz5qXJG0USZsaUipJ8AIMgQdVL0rp3QUCuFf6BFSqWpgk9a?=
 =?iso-8859-1?Q?dHC0Qvhmle16DXJmL94cywgyWfDhygP5czJBuzOLVrd/UEg6+m+UueCbiI?=
 =?iso-8859-1?Q?f4tim72/7ltBlsNTYLwBmB+BT6W9Kb40Q3dnVe0KSn5hn9y8Jv6BHrkWeS?=
 =?iso-8859-1?Q?0QeJtUNmu90twLAN/NcZNu5rnl73k13O9qaOlnNFasUa9TbgUN9kHPYUd9?=
 =?iso-8859-1?Q?U0qUM+wh6H8RchgNqZddVHVdJ4iN6mQQTuWPEEaB3xW+QL8x/YEf6qIkZM?=
 =?iso-8859-1?Q?scsv3TwB+MI0K0sFDS7vBLieTeKh6eUrB66a4MRM9qH1JLctV1l7/wFKGD?=
 =?iso-8859-1?Q?3iX0G3DIB2tGPFmA+03Mp/6f9X5xgLWrAnyeMhq+tVaiYRgJzTB4EL+7Rn?=
 =?iso-8859-1?Q?YBPVgkXxE+UU4tpBNRFSxo9eGOA9u1LoN5qrGA4vJP0WQHpJJ/DbV+QXT4?=
 =?iso-8859-1?Q?SfF4W78G4xI8dAYivDBsAG0BG3ykf0ISoVpCiZzWS7dsstlZhtQUBYpaOm?=
 =?iso-8859-1?Q?erqAjKcFjO+DOOSShmk6nE7jOMbsE6X2dDxwrQgHoyiPuaNGklu4MJvoUY?=
 =?iso-8859-1?Q?l7UvWaj3UEOdI5Wf2M47M/M/gc9Rx8/8IFkIBVevI3EREz8WddTv4RmIhZ?=
 =?iso-8859-1?Q?swfAehkxc4SgMuK//s9fD1v0SDhj0o+3SYMZzCW3Ya8jXaOAsxKWXbiDF5?=
 =?iso-8859-1?Q?RkRMwMJKKPiChWTk6gmuRjCS0XmHAF3YbReLOokTCecH5EFah0nskGMeXM?=
 =?iso-8859-1?Q?dPzAMGUa0FtCjIUTe5Mh1pngsPyT7NRUc1nUxgjqz+87LX5axISrmRhaXa?=
 =?iso-8859-1?Q?oEastYS0mw=3D=3D?=
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-OriginatorOrg: citrix.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: SA6PR03MB7760.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: b154884d-1b14-45f1-3351-08df25257a45
X-MS-Exchange-CrossTenant-originalarrivaltime: 08 Oct 2026 10:18:20.4701
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: xDeBo5V65oEbtx0cNRHv4tuRqyUxEyFOJhv1nzsMcfvFAJsZDUtsed21gwTg2yK6lW45uOIxkzXyv3CduajkKA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV9PR03MB8464
X-purgate-ID: tlsNG-42698a/1791454704-198C19EA-11AB55B8/0/0
X-purgate-type: clean
X-purgate-size: 1393


Reviewed and applied, thanks
Owen

________________________________________
From: win-pv-devel <win-pv-devel-bounces@lists.xenproject.org> on behalf of=
 Tu Dinh <ngoc-tu.dinh@vates.tech>
Sent: 08 October 2026 10:40 AM
To: C=E9saire Mounah; win-pv-devel@lists.xenproject.org
Subject: Re: [PATCH] xeniface: Restore FALSE return value in _IsZeroMemory

On 08/10/2026 11:37, C=E9saire Mounah wrote:
> Commit 54d43f78 ("Sync files with xenbus") accidentally changed
> the return value in _IsZeroMemory during the conversion.
> Restore the original FALSE return.
>
> Signed-off-by: C=E9saire Mounah <cesaire.mounah@vates.tech>
> ---
>   src/xeniface/assert.h | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/src/xeniface/assert.h b/src/xeniface/assert.h
> index 64d72cd..dfac6e1 100644
> --- a/src/xeniface/assert.h
> +++ b/src/xeniface/assert.h
> @@ -166,7 +166,7 @@ _IsZeroMemory(
>       while (Offset < Length) {
>           if (*((PUCHAR)Buffer + Offset) !=3D 0) {
>               Error("%s: non-zero byte in %s (0x%p+0x%x)\n", Caller, Name=
, Buffer, Offset);
> -            return TRUE;
> +            return FALSE;
>           }
>           Offset++;
>       }

Reviewed-by: Tu Dinh <ngoc-tu.dinh@vates.tech>


--
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates solutions

web: https://vates.tech


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 08 10:21:21 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 08 Oct 2026 10:21:21 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1443144.1660544 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xElFY-0003QN-KG; Thu, 08 Oct 2026 10:21:20 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1443144.1660544; Thu, 08 Oct 2026 10:21:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xElFY-0003QG-Hc; Thu, 08 Oct 2026 10:21:20 +0000
Received: by outflank-mailman (input) for mailman id 1443144;
 Thu, 08 Oct 2026 10:21:19 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <owen.smith@citrix.com>) id 1xElFX-0003QA-3u
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 10:21:19 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xElFW-00FTjT-Co
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 12:21:18 +0200
Received: from [10.42.69.12] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ac76e8a-8faa-0a2a0a5109dd-0a2a450c85a0-48
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 12:21:18 +0200
Received: from [52.101.85.71]
 (helo=BYAPR05CU005.outbound.protection.outlook.com)
 by tlsNG-d25034.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ac76e9c-f479-0a2a450c0019-34655547fab9-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 12:21:17 +0200
Received: from SA6PR03MB7760.namprd03.prod.outlook.com (2603:10b6:806:43c::5)
 by LV9PR03MB8464.namprd03.prod.outlook.com (2603:10b6:408:377::8)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.496.17; Thu, 8 Oct
 2026 10:21:14 +0000
Received: from SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38]) by SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38%5]) with mapi id 15.21.0496.015; Thu, 8 Oct 2026
 10:21:14 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:x-ms-exchange-senderadcheck"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
 b=qtcOpontBvB12BN62Dd9K2BR5++x0/UAa+tSfCS2Z7NPK/IP2E2qd6oUOGjiJAPYwDHD9y4KPZbKmEJ9KL/3GSPlcwU7tfq9Aj9okGzCY+NltKI7tzHACILDL0JsXaPuUNACGWcw3T0UQndiM0Ps3mLVP+8MsTd5nzwkHksJoZcIMFrOEZEc3BkIjJ5499yEkal5G28uYqVUIzKWNA2Al0mTRoxrhzZNGuWuQPalHCN+uqEvytUEzWyTnebAxYuGSCSLW9A7DBBg0i3qzuCI/aTXyTuze+/DimHAaFgwK2zTqRUkZ7Ife+XbkGghpj7Crf+eJxaDmTgN5p7QNNoJlw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector10001;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=pIb85QebIujNVvxQtSe74DfAgFGaeAjdTQcYIDFuzeA=;
 b=Nt3g+7HdJkBCMx+72TPZd2rXDX/RfRW0FsBCuHz7Em2oJf5nRh30FyuD+xIuojtlyoYbNCVQV16bE++TUwT/bQgKiXZ2ZVzfgjxOnaoTjk0cl4JTBcofoq8UgzmsKP+nOZcd1y3XYycrHWXL+lLh4HJ6M5Gs9tAtwqt/+2skqPF03gyFklYlJCGLz93gWPDFV6jjrOnGuRjuEPErUrEFqnkpuKjZhVXxA0TvMc7fRWYTRTgA0Wq+FymtHB3LpbkN+qpAiZfvbTYCbux5DHy9ZZsTVkudACPu2oLw/zVPqhXevfS4EwZUI2zbdIXrDB/bdofaOUx9ClmJttAdCQB/qQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=pIb85QebIujNVvxQtSe74DfAgFGaeAjdTQcYIDFuzeA=;
 b=NnA48x714Kg+5g6u95FQMLlCqXjWk/s2r3qmVGbXWN87TXgoKcuJNKCDCRxI0yjjGkliGEl9crKIivMREGBT76wXy+nXUsnTt55hWB6FHAvhx/I3nf4CeWyuO5TB/vhQ/rjqpt1JP2bI3JIIkuy0UXqblGU85AIXyjEkrH8HlAM=
From: Owen Smith <owen.smith@citrix.com>
To: Tu Dinh <ngoc-tu.dinh@vates.tech>, =?iso-8859-1?Q?C=E9saire_Mounah?=
	<cesaire.mounah@vates.tech>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Subject: Re: [PATCH] xennet: Restore FALSE return value in _IsZeroMemory
Thread-Topic: [PATCH] xennet: Restore FALSE return value in _IsZeroMemory
Thread-Index: AQHdVwkEh/UmhvWXrkehy0EN1fDX1rbzZCcAgAALO9g=
Date: Thu, 8 Oct 2026 10:21:14 +0000
Message-ID:
 <SA6PR03MB7760847755FDED670E799663FE932@SA6PR03MB7760.namprd03.prod.outlook.com>
References:
 <1791452395.8631fc262581453bbf619ec5b2062170.1a11ae237f50003f66@vates.tech>
 <1791452455.8631fc262581453bbf619ec5b2062170.1a11ae321fc0003f66@vates.tech>
In-Reply-To:
 <1791452455.8631fc262581453bbf619ec5b2062170.1a11ae321fc0003f66@vates.tech>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
msip_labels:
authentication-results: mx.microsoft.com 1; dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=citrix.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: SA6PR03MB7760:EE_|LV9PR03MB8464:EE_
x-ms-office365-filtering-correlation-id: 140c3d95-d3d0-4376-2151-08df2525e200
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam:
 BCL:0;ARA:13230040|1800799024|366016|376014|23010399003|38070700021|56012099006|4143699003|11063799006|10067099003|22082099003|18002099003;
x-microsoft-antispam-message-info:
 qt60yaqM8d8jR/R0YbzABWrdFa3mtQLCMYrgSVqhD+tospng3t+VSrxmV2cTAOjWSc0KHwbwuuSFNnALhro9rZg6HYsxTjV17GgRN6P+1/BcI7gJzAuTgzbkHFboh6ytjzIo33P4L4CHCV+QDegS8gT2agDXw6azb/e8Ix74OnQ3omV2gWjOcKsjhUogdFKN6325rESzkUn6gpkto/K+YlKErOvjt/1jptpXe7Hx9F/0tyLByfLC0AXJEQsi2zZ1YTeVzBEeTzYKcaMOxoulK0UsiixJXaQZLP+mYcV+Mh3nEHrdCAXBwlMIIaWZOGvvlk+fjxtx7ydtqXHeZujFAnSQdmHbZNMx2icRkUJ9y2kRk1BocVJzjaLbtpcvXwHa5NCaJus7Cu9K6ivHtIDH2m1nEwmvgnu3T9AFGgypZSQBgZUcTifqThE8+y+cmM3brvZnstTcAGDHrdYX3BxAJOGh9ysKQSWUkUM9xhkygvENvEv/uJV8WYBG7UDgPxBA2SAFa2emL+Wr2PU/SZGx9goDZRmalrOf2ow7nyZ5gk6MUtvvdfjXNen/YFRP9IICOa7vY8kn+ac+z3vydve/H5JjjCca4ue8wxrQAcMnYnJwnzEtnlTMVEScvayvjFcyzwHqpx3g8IsyQsgLuNc6CJ6ELXNO1AA1ibOcxtDPLeg=
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SA6PR03MB7760.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(23010399003)(38070700021)(56012099006)(4143699003)(11063799006)(10067099003)(22082099003)(18002099003);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?iso-8859-1?Q?QKWBySISu8uqAGJgEFXzjzYhy5itw+69IVHmEoQdx3/l+svZ4UeO2HhSvh?=
 =?iso-8859-1?Q?Zzs+v1zFZ3LwiNW5oC1RVWKYB8PqeTw34G1YZJEOIlYSgWUb+0zfuvJpfu?=
 =?iso-8859-1?Q?8mhmGXhwFep2EVLEj7nV05URjIsbS6j+pPlTl4r8zgOFA4+HuQPz0FjwpL?=
 =?iso-8859-1?Q?JTrjjyYY5YYb/7q/zUJ1R5BuZZq348yB/skjtf9YBKzxL8zWclJM4Kdc3V?=
 =?iso-8859-1?Q?hbWvLvBE71XxpxKvUAKJIMlgP/lkYsv3eriC81LexdMBn4pll8ByqE9X2h?=
 =?iso-8859-1?Q?/G4uzFu+dU2rFbRh2dRGxtiJ7rxOOVST1KfQPv+RECGTkChz9oYWumvAtI?=
 =?iso-8859-1?Q?QHC5FTzgZs0O6NuwbAnmafnxRh+Pm7l1CDicwLDzZRG6ar6IzsWZnJqrHz?=
 =?iso-8859-1?Q?BUSMZDaSuBknQlvatm3roWQjrb6Fd95bjhH9VKnDPJHkrpIqmUc2WFyt+e?=
 =?iso-8859-1?Q?ejo6SS/saj37KEMjXzcDUoiTQvNe7apR88R/6IKbFCNWFY5MpAJUBJdmF2?=
 =?iso-8859-1?Q?00lLrs4M/+a7xaw+VkLr0cZhqFYCaGLERfjPgUW3px1CV9lqI6eQkMHjHx?=
 =?iso-8859-1?Q?qXPmFbYDXYPFhP8gY/mtjXEq3g1IJbgR9yNo0EqJ0XDCGylkSk45xQ+g7m?=
 =?iso-8859-1?Q?UdsXL6a8CqzuXfovx4kzyGcioPLvh15/sWm485u0OpAl7a9/OTQDejoMFk?=
 =?iso-8859-1?Q?q9wY3TuLBu7Bbt54nteIXQbFvIIJD29AHjIGNAmAxMf41jFTqruAVEf/J/?=
 =?iso-8859-1?Q?UKHwR/kr2Vs4GNrqyfWaluhDRyAvPDZy8KPPNbPBCyR/1Et04qZ8b0mNxC?=
 =?iso-8859-1?Q?wLH3rByl21sN0aZQzORyQ95a10uzyQNEMdwWdc3yHAyx+O058RWVWqYJNr?=
 =?iso-8859-1?Q?iNt5N0/p9c5OCMKrML88Dy87DvJ9s2v8+NoBTx4C5ajepfGo6N3ZnMYeX4?=
 =?iso-8859-1?Q?821JDlaL1LBjJnIKujiQA59M4ZaTX2kOGPc4cYtpCGbcmitANFhuFgi+n/?=
 =?iso-8859-1?Q?PYN6TnN0NYA0asdnRTy5RnvNE1NDHl9ThGUUEdfsh2bed5a4ADbWPfYUVB?=
 =?iso-8859-1?Q?VoR8a9HVrrhCXsAlpyA4o35raMVxVBB8zbwGvkJpraAmEttcAGvYzf7LnF?=
 =?iso-8859-1?Q?0M4sr4J3WaRqSq3MO3VAoAuWWKYSXoOqpTzAgm2BgEFt9C2sQ+ahaxKK+4?=
 =?iso-8859-1?Q?SxaxwOTvwUu+T850bvQWJKFIT0Gobl1mKwLJEEVH1JdkGJpwAW7dfh3c2l?=
 =?iso-8859-1?Q?OFSrrZsE39yebnqseKiDBOZRNSoiWADXRNdIXG4vr/QMtxP8A8jrwi9oYC?=
 =?iso-8859-1?Q?FVH4mPCRZ4Fws48Dd7Wb7tOQQw/rl4yY0KrXYpTK3Mg20yfLYjvPYyWgm6?=
 =?iso-8859-1?Q?WJ2OlPxvBTi3DU56VQCraEeBndRfFrhfKWS+5iIlmh0fdSuM/ELe/DrQQF?=
 =?iso-8859-1?Q?lxu97fzqVS//B/E8E1qWgqxoEA+hs4j8VPI4jl622bQmm/2nnERhf94/Cn?=
 =?iso-8859-1?Q?V6gLPomR0swU6BcWClss3OPDotZvxzpbuMGXDS2xaWHklPMlhIR3CGLyqK?=
 =?iso-8859-1?Q?s6pcVsHILl34joaXR1lxXGnZjusjk2AUCd9r+LMN6Oqkk70PqRtHjY1lHq?=
 =?iso-8859-1?Q?rJZyLa+aWu+M1RmLMv178GgGOZFUnnXVoDj9DcIiB7esL4ZFcbeIFWkxYN?=
 =?iso-8859-1?Q?xmbZBqNgMPxwQjfoXkROol5/g+iXjGB1UV+n5gpNZIKF/G90TRiq/1g826?=
 =?iso-8859-1?Q?2EmP/rSdHv9dQmI+zvelv6TGxDxmr5e7Vscnl35x3cfMoq?=
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-OriginatorOrg: citrix.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: SA6PR03MB7760.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 140c3d95-d3d0-4376-2151-08df2525e200
X-MS-Exchange-CrossTenant-originalarrivaltime: 08 Oct 2026 10:21:14.4421
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: M9SnHTtcxy+tRjl29PoZe5MEK6hgVQxCsWh33to16KueRCcmfNzfGPsMVQ5t20lpChjyQVU46iF+P/UQ4M0how==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV9PR03MB8464
X-purgate-ID: tlsNG-d25034/1791454878-76CDBA5B-2491A116/0/0
X-purgate-type: clean
X-purgate-size: 1385

Reviewed and applied, thanks
Owen

________________________________________
From: win-pv-devel <win-pv-devel-bounces@lists.xenproject.org> on behalf of=
 Tu Dinh <ngoc-tu.dinh@vates.tech>
Sent: 08 October 2026 10:40 AM
To: C=E9saire Mounah; win-pv-devel@lists.xenproject.org
Subject: Re: [PATCH] xennet: Restore FALSE return value in _IsZeroMemory

On 08/10/2026 11:40, C=E9saire Mounah wrote:
> Last patch set ("Update annotations to SAL 2.0") accidentally changed
> the return value in _IsZeroMemory during the conversion.
> Restore the original FALSE return.
>
> Signed-off-by: C=E9saire Mounah <cesaire.mounah@vates.tech>
> ---
>   src/xennet/assert.h | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/src/xennet/assert.h b/src/xennet/assert.h
> index ef5abe2..ac25718 100644
> --- a/src/xennet/assert.h
> +++ b/src/xennet/assert.h
> @@ -166,7 +166,7 @@ _IsZeroMemory(
>       while (Offset < Length) {
>           if (*((PUCHAR)Buffer + Offset) !=3D 0) {
>               Error("%s: non-zero byte in %s (0x%p+0x%x)\n", Caller, Name=
, Buffer, Offset);
> -            return TRUE;
> +            return FALSE;
>           }
>           Offset++;
>       }

Reviewed-by: Tu Dinh <ngoc-tu.dinh@vates.tech>


--
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates solutions

web: https://vates.tech


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 08 10:24:43 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 08 Oct 2026 10:24:43 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1443147.1660550 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xElIo-0003ZY-TY; Thu, 08 Oct 2026 10:24:42 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1443147.1660550; Thu, 08 Oct 2026 10:24:42 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xElIo-0003ZR-QC; Thu, 08 Oct 2026 10:24:42 +0000
Received: by outflank-mailman (input) for mailman id 1443147;
 Thu, 08 Oct 2026 10:24:40 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <owen.smith@citrix.com>) id 1xElIm-0003ZJ-O0
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 10:24:40 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xElIm-00FUSu-4a
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 12:24:40 +0200
Received: from [10.42.69.8] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ac76f59-e002-0a2a0a5209dd-0a2a450887b4-42
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 12:24:40 +0200
Received: from [40.107.208.62]
 (helo=PH0PR06CU001.outbound.protection.outlook.com)
 by tlsNG-c1860d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ac76f66-f659-0a2a45080019-286bd03ee98a-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 12:24:39 +0200
Received: from SA6PR03MB7760.namprd03.prod.outlook.com (2603:10b6:806:43c::5)
 by LV9PR03MB8464.namprd03.prod.outlook.com (2603:10b6:408:377::8)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.496.17; Thu, 8 Oct
 2026 10:24:36 +0000
Received: from SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38]) by SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38%5]) with mapi id 15.21.0496.015; Thu, 8 Oct 2026
 10:24:36 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:x-ms-exchange-senderadcheck"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
 b=d5quLYotNifrV2JYImwrMK6BUaLFVIBv0L66yb/boAw4P9criu/IKTVZnaBn7ZC+QGiEYghFASSK16Mef83jNW8xt9B6zhNlzTnhtBIihAKTl+E+J2g6VPQj9tLmr7Y/++d2C1SJnLG7nD7XcWbhm3Q2qDe/9vgmdM4KD5AunjLbIDBG1X9FmmlAk6zozy9vPBQpbVSRFg7jVGJfTaI0LWUqqq8oYG0HCzcg/GKmT8DFHssOLycVJWStcZPzMBLo3LNFLW/MAeBEuaUyeW4hy9WZcDYJPDAb0UThvl/gLwo+ByQakqlYaOwSoYO4O0xTPdeKqXbVUP2AOusiamCntA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector10001;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=UcX306JyXAhcigBU0NtmtDcEg1K+bTfV3QuClyu6gvQ=;
 b=mjcUJRIkJjTnr1/LXrqtztAJFiX+iLUkWOA/LrLXO6lQedERiT8D8Kz8KNioT8wQZx7TUQQnJv6ykAqLJhe44ip5q/YxH/Te8gKxYr3uaoUu7rPT2lsNkb+fSzZ5x3fLP0QXOd8bTcUBZWACn9IW1hz4+gv1CHPTEjt3OQeNYzAlOiRBTpXEmgQMJ/C3H9kV4XzNLChpnUe7KOcNDOayVfY/Mw5+A7gtw4eXV2u8abPJhiRVWb6XF3oYMFjRaccrho2Ct2fLPxAQwf9hC7LYVrzY/ktEE8pr3KSAHLAP7wTT0A2sQzgnw5Bbten/LuU0Q7kkI1Sj3y7c+1JEYLjbcQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=UcX306JyXAhcigBU0NtmtDcEg1K+bTfV3QuClyu6gvQ=;
 b=TnlfwDOBlCATZorSou/oZMl50CHOg+QVOKvOyUPkwTFi1Hrksv/zlwJeWILihUfgncn75VlN+4HG5y41KhtZak3eDcSloMASgowqarcY3I76woXDxQx0wqocD+x9nMBV73IprtRHhGOiR2+6QstbWx1ue8pVnTHFu4Rol3OozcU=
From: Owen Smith <owen.smith@citrix.com>
To: =?iso-8859-1?Q?C=E9saire_Mounah?= <cesaire.mounah@vates.tech>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Subject: Re: [PATCH] xenhid: annotate include files
Thread-Topic: [PATCH] xenhid: annotate include files
Thread-Index: AQHdVwmyYwHDsyfBHk2UHmHhM3pl/7bzcBnU
Date: Thu, 8 Oct 2026 10:24:36 +0000
Message-ID:
 <SA6PR03MB7760A20B86419D3F3FBDE28BFE932@SA6PR03MB7760.namprd03.prod.outlook.com>
References:
 <1791452690.8631fc262581453bbf619ec5b2062170.1a11ae6b9460003f66@vates.tech>
In-Reply-To:
 <1791452690.8631fc262581453bbf619ec5b2062170.1a11ae6b9460003f66@vates.tech>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
msip_labels:
authentication-results: mx.microsoft.com 1; dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=citrix.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: SA6PR03MB7760:EE_|LV9PR03MB8464:EE_
x-ms-office365-filtering-correlation-id: 989cda15-e7ac-43a2-9991-08df25265a65
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam:
 BCL:0;ARA:13230040|1800799024|366016|376014|23010399003|38070700021|56012099006|11063799006|10067099003|22082099003|18002099003|6133799003|3023799007;
x-microsoft-antispam-message-info:
 1JTBXrFqNk+p321ZHLI90zWor321BXZOnYwwNRkDYuFFFhZP8Sc2DoM5AJduZ7n4o1C6QFHMOuwtJntuLat1Yzp+CCirlQiFq9Yz8wqUXSnPh3yMjK0ALv5xEEP+7YJYLwGenCdNDM86EXZbh6ay0np2wfKPU7SMlYy0NbwRpQzp47a9eAdC4YhCsLvrhnpUuPmcCZOZ6ScT+AdWVpL2E/7QquwSI+D1t4L470HkIozWP5AmYycIiAa1X0+Wf+zVBEQtwkKjz+crKSoq3jciaZ1d+f03WuGPOO2Mas3MilfVGmEOyLY0nTrydq2sccBuYTqUdNhPfnFA3HFEW2DS1MKCaSI59ooced5aWiHbDSdOvm4lFVyDZHIMxIaLFk8MaH/nbWL5wxJPhtVQ70ufOpxgzeppj96hlCUQ3syW4IEYkyDAEQwwtO2wid2K7ucUHdCZoTAhxCeA9WBE6WsXWEdCQ3doleiwYesLdy1rn5+teV58wKdFzB77U/kdcZK6TirmlGC/pJY0rshFCSJq6Hg9TYB4yYDmBFIqxNNx4VNUiSYqCmnaC35yTZZ5x/XMgNWM05taSpX0TAvn4hh0I/j0kcgpMUx+0amHd+3oG4oQlWOa5lc1c7fHYoh64Lw0xXgG2tmpuK3TE8rN1oyCZk+HXFtpr5Vx5HpXIPwv+2A=
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SA6PR03MB7760.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(23010399003)(38070700021)(56012099006)(11063799006)(10067099003)(22082099003)(18002099003)(6133799003)(3023799007);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?iso-8859-1?Q?U1PRqOJkvkVFpBlo9vntmxBdV/2h+Q+Ff72DkkhRu2V5MvtFPClNs/GtsB?=
 =?iso-8859-1?Q?Vc4xho/GNhSuzuLgbiLU9GfqM4uEfh1n50GFWNYe4iG5p9nfK8C1HkcEpL?=
 =?iso-8859-1?Q?nfUg9Mo/anfJp3674RFXy6WJsNKcmr2tEXXcimEOk7GGhWlmkKrHO90MSh?=
 =?iso-8859-1?Q?+0cioUjF5HCmYHYYf0XK9gSR5TA+PIr9xcKBqpF5t98hZQx/RxGKsc0p5Q?=
 =?iso-8859-1?Q?BiTPNgh8z4bk/hd6rrz3gM36dCFz+hHD/sil7k33aaGioz1GMUVRXtn+2f?=
 =?iso-8859-1?Q?Ri+oO+/4D9lNU2wAUQFom4UxuaPnkBMzjx9rwkOuKolW2yTfOVddJfuHi8?=
 =?iso-8859-1?Q?AjPFO+Zk02pPwYTO0khhUX6j/VmyJ2EqiteJPaua34EXr2T/QJOXBBfH73?=
 =?iso-8859-1?Q?JgPnOvsb1zrIysnIC7lVXArpFjeruKU+opiuTchCWNjKp5mOCE0qAiJJuW?=
 =?iso-8859-1?Q?NiqboagvR7y8j/EGA4POln28nIJanrBBHOQtsagQRRkNW3U3epA4BqSeKQ?=
 =?iso-8859-1?Q?+K6+UHiP96AUeJcHRLYupNJtMEu7d7qkkRGEl6sP/qJVUE7Op1rbHEBHHm?=
 =?iso-8859-1?Q?aC41Huql0+1mFFA7ZzLMF4SvSBq57c6IopW3jVDdmI6REjIQ+uojbHvtdn?=
 =?iso-8859-1?Q?nwx7CI5yPTXjszP8XxmM2yjrrE8vVeTKxvYSjEWIiOo4uZFOr17g+yek7E?=
 =?iso-8859-1?Q?0VeCBJmhIJfD0KFwWsVtf3qW8qn+nwWeKrakFY2eOr8ic/O0EdO+9e41Pg?=
 =?iso-8859-1?Q?7fqw/A5m69XIj73oENmSBsnfCNVRJN+FfYxOsGqLIv/9NpNIwr9RX4R8Cf?=
 =?iso-8859-1?Q?oZFGfw69/Vuu936cE782VX+Z6cyc63s6JX0qqM48yyRaVzSOjBvg6cU6Nq?=
 =?iso-8859-1?Q?UFbEArOPTiS5Rpsfs+yYZbGkHMshXC1JHP7MJZyWK8ZAC8r2Ms2ZTwFoNW?=
 =?iso-8859-1?Q?59P2eloJv9lut21pzYfQA7xhkFcmSVdJl893jk9AJszJVbLf3H2W2BPveN?=
 =?iso-8859-1?Q?w2VZl1Zg7TKl3CrBMcfJyZcW7aOevKFt4R+TgeBKcHI3C5wVGR+JyJGyhK?=
 =?iso-8859-1?Q?NGZSqr3lThqwf/YWKK6IG+5BAAZdb2FZx79RJ3/Zqpi0LfSH2Bc9V+bLVb?=
 =?iso-8859-1?Q?3Q4N0BmHiF/vBhYHYHWsvdNWS0aMVYR74Mm+bAkxmE5kwQ5mGn3GKGpBox?=
 =?iso-8859-1?Q?zT+mq7mavmLGCCMdzsYeCO6YfmeXyCXBdOrhNK7+NWD+fXGE2mSKPukpGZ?=
 =?iso-8859-1?Q?XyimlGl9tdiq46Inhx9gz6rwGU0KpvzA0+ucAJQTA+Y3s6QTZGcR5H/u5d?=
 =?iso-8859-1?Q?18UgwTBKOxkvwvDYTcFgAXNR+mPOnKSeTm0aSTihIuXJ/ZmTObhVHxJU6r?=
 =?iso-8859-1?Q?WffwU31Z7sa1yTdxqNpn2cSeO8cmK0CpoD4dgAuse3ki9QziWgtSyxWZ2T?=
 =?iso-8859-1?Q?fm7tlyUaJFualB3Jy5CiN4Ntb40g31/sN9PqBsSsprFp/oZHMryIzSPYke?=
 =?iso-8859-1?Q?hfs4VHVKJJRc4niApVm1CcI96ZYAfjVyx6/Di54s9pIjR8PfC6mCTqcyn0?=
 =?iso-8859-1?Q?I060lEQfwW2mGQbsUS+jGPOv4bs5L7cjZmmBHS/gz7V5DTrnMUiJiMoG8f?=
 =?iso-8859-1?Q?1uHccAR4uTXLJG94Md5rQAfnJwdSgxyd03Eq3S9BGvkUkOqlYdmNyKM9td?=
 =?iso-8859-1?Q?ae19G+rXKgMkliV8SU5YttYRR3ZgqLoOjRZ5DuDVmltGkwmlPH+2dZFAWX?=
 =?iso-8859-1?Q?spOoY60z4oktJtC7bF75Qzw1hJTCM6YO0mCQOpY0AJx4R/?=
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-OriginatorOrg: citrix.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: SA6PR03MB7760.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 989cda15-e7ac-43a2-9991-08df25265a65
X-MS-Exchange-CrossTenant-originalarrivaltime: 08 Oct 2026 10:24:36.5373
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: 8Feaor7Df/lEgTkQMRXoENOLlIL0N/7jfss4dCI/wSF7IEWkrv+hxlHojU90/BKsVmSGP5iD/uoE4DpmhkK70A==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV9PR03MB8464
X-purgate-ID: tlsNG-c1860d/1791455079-CEB4187B-A0F6DE68/0/0
X-purgate-type: clean
X-purgate-size: 15341

The store_interface.h and suspend_interface.h headers should be synched wit=
h xenbus,
as the xenbus version has made string related changes, e.g. PCHAR to PSTR

Owen

________________________________________
From: win-pv-devel <win-pv-devel-bounces@lists.xenproject.org> on behalf of=
 C=E9saire Mounah <cesaire.mounah@vates.tech>
Sent: 08 October 2026 10:44 AM
To: win-pv-devel@lists.xenproject.org
Cc: C=E9saire Mounah
Subject: [PATCH] xenhid: annotate include files

The previous conversion to SAL 2.0 left the files in include directory.
Update the include files to complete conversion.

No functional change.

Signed-off-by: C=E9saire Mounah <cesaire.mounah@vates.tech>
---
 include/hid_interface.h     | 108 ++++++++++++++++++------------------
 include/store_interface.h   |  84 ++++++++++++++--------------
 include/suspend_interface.h |  24 ++++----
 3 files changed, 108 insertions(+), 108 deletions(-)

diff --git a/include/hid_interface.h b/include/hid_interface.h
index 2e2d9e6..5de30cf 100644
--- a/include/hid_interface.h
+++ b/include/hid_interface.h
@@ -48,7 +48,7 @@
 */
 typedef NTSTATUS
 (*XENHID_HID_ACQUIRE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );

 /*! \typedef XENHID_HID_RELEASE
@@ -58,7 +58,7 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENHID_HID_RELEASE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );

 /*! \typedef XENHID_HID_CALLBACK
@@ -70,9 +70,9 @@ typedef VOID
 */
 typedef BOOLEAN
 (*XENHID_HID_CALLBACK)(
-    IN  PVOID       Argument OPTIONAL,
-    IN  PVOID       Buffer,
-    IN  ULONG       Length
+    _In_opt_ PVOID  Argument,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length
     );

 /*! \typedef XENHID_HID_ENABLE
@@ -87,9 +87,9 @@ typedef BOOLEAN
 */
 typedef NTSTATUS
 (*XENHID_HID_ENABLE)(
-    IN  PINTERFACE          Interface,
-    IN  XENHID_HID_CALLBACK Callback,
-    IN  PVOID               Argument OPTIONAL
+    _In_ PINTERFACE             Interface,
+    _In_ XENHID_HID_CALLBACK    Callback,
+    _In_opt_ PVOID              Argument
     );

 /*! \typedef XENHID_HID_DISABLE
@@ -102,7 +102,7 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENHID_HID_DISABLE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );

 /*! \typedef XENHID_HID_GET_DEVICE_ATTRIBUTES
@@ -111,10 +111,10 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENHID_HID_GET_DEVICE_ATTRIBUTES)(
-    IN  PINTERFACE      Interface,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length,
-    OUT PULONG          Returned
+    _In_ PINTERFACE Interface,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length,
+    _Out_ PULONG    Returned
     );

 /*! \typedef XENHID_HID_GET_DEVICE_DESCRIPTOR
@@ -127,10 +127,10 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENHID_HID_GET_DEVICE_DESCRIPTOR)(
-    IN  PINTERFACE      Interface,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length,
-    OUT PULONG          Returned
+    _In_ PINTERFACE Interface,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length,
+    _Out_ PULONG    Returned
     );

 /*! \typedef XENHID_HID_GET_REPORT_DESCRIPTOR
@@ -143,10 +143,10 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENHID_HID_GET_REPORT_DESCRIPTOR)(
-    IN  PINTERFACE      Interface,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length,
-    OUT PULONG          Returned
+    _In_ PINTERFACE Interface,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length,
+    _Out_ PULONG    Returned
     );

 /*! \typedef XENHID_HID_GET_STRING
@@ -160,11 +160,11 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENHID_HID_GET_STRING)(
-    IN  PINTERFACE      Interface,
-    IN  ULONG           Identifier,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length,
-    OUT PULONG          Returned
+    _In_ PINTERFACE Interface,
+    _In_ ULONG      Identifier,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length,
+    _Out_ PULONG    Returned
     );

 /*! \typedef XENHID_HID_GET_INDEXED_STRING
@@ -178,11 +178,11 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENHID_HID_GET_INDEXED_STRING)(
-    IN  PINTERFACE      Interface,
-    IN  ULONG           Index,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length,
-    OUT PULONG          Returned
+    _In_ PINTERFACE Interface,
+    _In_ ULONG      Index,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length,
+    _Out_ PULONG    Returned
     );

 /*! \typedef XENHID_HID_GET_FEATURE
@@ -196,11 +196,11 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENHID_HID_GET_FEATURE)(
-    IN  PINTERFACE      Interface,
-    IN  ULONG           ReportId,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length,
-    OUT PULONG          Returned
+    _In_ PINTERFACE Interface,
+    _In_ ULONG      ReportId,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length,
+    _Out_ PULONG    Returned
     );

 /*! \typedef XENHID_HID_SET_FEATURE
@@ -213,10 +213,10 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENHID_HID_SET_FEATURE)(
-    IN  PINTERFACE      Interface,
-    IN  ULONG           ReportId,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length
+    _In_ PINTERFACE Interface,
+    _In_ ULONG      ReportId,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length
     );

 /*! \typedef XENHID_HID_GET_INPUT_REPORT
@@ -230,11 +230,11 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENHID_HID_GET_INPUT_REPORT)(
-    IN  PINTERFACE      Interface,
-    IN  ULONG           ReportId,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length,
-    OUT PULONG          Returned
+    _In_ PINTERFACE Interface,
+    _In_ ULONG      ReportId,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length,
+    _Out_ PULONG    Returned
     );

 /*! \typedef XENHID_HID_SET_OUTPUT_REPORT
@@ -247,10 +247,10 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENHID_HID_SET_OUTPUT_REPORT)(
-    IN  PINTERFACE      Interface,
-    IN  ULONG           ReportId,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length
+    _In_ PINTERFACE Interface,
+    _In_ ULONG      ReportId,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length
     );

 /*! \typedef XENHID_HID_READ_REPORT
@@ -262,7 +262,7 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENHID_HID_READ_REPORT)(
-    IN  PINTERFACE      Interface
+    _In_ PINTERFACE Interface
     );

 /*! \typedef XENHID_HID_WRITE_REPORT
@@ -275,10 +275,10 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENHID_HID_WRITE_REPORT)(
-    IN  PINTERFACE      Interface,
-    IN  ULONG           ReportId,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length
+    _In_ PINTERFACE Interface,
+    _In_ ULONG      ReportId,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length
     );

 // {D215E1B5-8C38-420A-AEA6-02520DF3A621}
diff --git a/include/store_interface.h b/include/store_interface.h
index 616bc36..0064cc4 100644
--- a/include/store_interface.h
+++ b/include/store_interface.h
@@ -75,7 +75,7 @@ typedef struct _XENBUS_STORE_PERMISSION {
 */
 typedef NTSTATUS
 (*XENBUS_STORE_ACQUIRE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );

 /*! \typedef XENBUS_STORE_RELEASE
@@ -85,7 +85,7 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENBUS_STORE_RELEASE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );

 /*! \typedef XENBUS_STORE_FREE
@@ -96,8 +96,8 @@ typedef VOID
 */
 typedef VOID
 (*XENBUS_STORE_FREE)(
-    IN  PINTERFACE  Interface,
-    IN  PCHAR       Buffer
+    _In_ PINTERFACE Interface,
+    _In_ PCHAR      Buffer
     );

 /*! \typedef XENBUS_STORE_READ
@@ -116,11 +116,11 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENBUS_STORE_READ)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node,
-    OUT PCHAR                       *Buffer
+    _In_ PINTERFACE                     Interface,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PCHAR                      Prefix,
+    _In_ PCHAR                          Node,
+    _Outptr_ PCHAR                      *Buffer
     );

 /*! \typedef XENBUS_STORE_PRINTF
@@ -139,11 +139,11 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENBUS_STORE_PRINTF)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node,
-    IN  const CHAR                  *Format,
+    _In_ PINTERFACE                     Interface,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PCHAR                      Prefix,
+    _In_ PCHAR                          Node,
+    _In_ const CHAR                     *Format,
     ...
     );

@@ -159,10 +159,10 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENBUS_STORE_REMOVE)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node
+    _In_ PINTERFACE                     Interface,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PCHAR                      Prefix,
+    _In_ PCHAR                          Node
     );

 /*! \typedef XENBUS_STORE_DIRECTORY
@@ -181,11 +181,11 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENBUS_STORE_DIRECTORY)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node,
-    OUT PCHAR                       *Buffer
+    _In_ PINTERFACE                     Interface,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PCHAR                      Prefix,
+    _In_ PCHAR                          Node,
+    _Outptr_ PCHAR                      *Buffer
     );

 /*! \typedef XENBUS_STORE_TRANSACTION_START
@@ -196,8 +196,8 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENBUS_STORE_TRANSACTION_START)(
-    IN  PINTERFACE                  Interface,
-    OUT PXENBUS_STORE_TRANSACTION   *Transaction
+    _In_ PINTERFACE                     Interface,
+    _Outptr_ PXENBUS_STORE_TRANSACTION  *Transaction
     );

 /*! \typedef XENBUS_STORE_TRANSACTION_END
@@ -213,9 +213,9 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENBUS_STORE_TRANSACTION_END)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction,
-    IN  BOOLEAN                     Commit
+    _In_ PINTERFACE                 Interface,
+    _In_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_ BOOLEAN                    Commit
     );

 /*! \typedef XENBUS_STORE_WATCH_ADD
@@ -231,11 +231,11 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENBUS_STORE_WATCH_ADD)(
-    IN  PINTERFACE          Interface,
-    IN  PCHAR               Prefix OPTIONAL,
-    IN  PCHAR               Node,
-    IN  PKEVENT             Event,
-    OUT PXENBUS_STORE_WATCH *Watch
+    _In_ PINTERFACE                 Interface,
+    _In_opt_ PCHAR                  Prefix,
+    _In_ PCHAR                      Node,
+    _In_ PKEVENT                    Event,
+    _Outptr_ PXENBUS_STORE_WATCH    *Watch
     );

 /*! \typedef XENBUS_STORE_WATCH_REMOVE
@@ -246,8 +246,8 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENBUS_STORE_WATCH_REMOVE)(
-    IN  PINTERFACE          Interface,
-    IN  PXENBUS_STORE_WATCH Watch
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_STORE_WATCH    Watch
     );

 /*! \typedef XENBUS_STORE_POLL
@@ -262,7 +262,7 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENBUS_STORE_POLL)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );

 /*! \typedef XENBUS_STORE_PERMISSIONS_SET
@@ -279,12 +279,12 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENBUS_STORE_PERMISSIONS_SET)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node,
-    IN  PXENBUS_STORE_PERMISSION    Permissions,
-    IN  ULONG                       NumberPermissions
+    _In_ PINTERFACE                     Interface,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PCHAR                      Prefix,
+    _In_ PCHAR                          Node,
+    _In_ PXENBUS_STORE_PERMISSION       Permissions,
+    _In_ ULONG                          NumberPermissions
     );

 // {86824C3B-D34E-4753-B281-2F1E3AD214D7}
diff --git a/include/suspend_interface.h b/include/suspend_interface.h
index ee31d95..a20f616 100644
--- a/include/suspend_interface.h
+++ b/include/suspend_interface.h
@@ -62,7 +62,7 @@ typedef struct _XENBUS_SUSPEND_CALLBACK   XENBUS_SUSPEND_=
CALLBACK, *PXENBUS_SUSP
 */
 typedef NTSTATUS
 (*XENBUS_SUSPEND_ACQUIRE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );

 /*! \typedef XENBUS_SUSPEND_RELEASE
@@ -72,7 +72,7 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENBUS_SUSPEND_RELEASE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );

 /*! \typedef XENBUS_SUSPEND_FUNCTION
@@ -87,7 +87,7 @@ typedef VOID
 */
 typedef VOID
 (*XENBUS_SUSPEND_FUNCTION)(
-    IN  PVOID   Argument
+    _In_ PVOID  Argument
     );

 /*! \typedef XENBUS_SUSPEND_REGISTER
@@ -101,11 +101,11 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENBUS_SUSPEND_REGISTER)(
-    IN  PINTERFACE                      Interface,
-    IN  XENBUS_SUSPEND_CALLBACK_TYPE    Type,
-    IN  XENBUS_SUSPEND_FUNCTION         Function,
-    IN  PVOID                           Argument OPTIONAL,
-    OUT PXENBUS_SUSPEND_CALLBACK        *Callback
+    _In_ PINTERFACE                     Interface,
+    _In_ XENBUS_SUSPEND_CALLBACK_TYPE   Type,
+    _In_ XENBUS_SUSPEND_FUNCTION        Function,
+    _In_opt_ PVOID                      Argument,
+    _Outptr_ PXENBUS_SUSPEND_CALLBACK   *Callback
     );

 /*! \typedef XENBUS_SUSPEND_DEREGISTER
@@ -116,8 +116,8 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENBUS_SUSPEND_DEREGISTER)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_SUSPEND_CALLBACK    Callback
+    _In_ PINTERFACE                 Interface,
+    _In_ PXENBUS_SUSPEND_CALLBACK   Callback
     );

 /*! \typedef XENBUS_SUSPEND_TRIGGER
@@ -129,7 +129,7 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENBUS_SUSPEND_TRIGGER)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );

 /*! \typedef XENBUS_SUSPEND_GET_COUNT
@@ -140,7 +140,7 @@ typedef NTSTATUS
 */
 typedef ULONG
 (*XENBUS_SUSPEND_GET_COUNT)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );

 // {0554F2AF-B510-4C71-AC03-1C503E394238}
--
2.55.0.windows.5



--
C=E9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen Orchestra - Vates solutions

web: https://vates.tech


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 08 10:31:33 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 08 Oct 2026 10:31:33 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1443149.1660553 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xElPQ-00051P-De; Thu, 08 Oct 2026 10:31:32 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1443149.1660553; Thu, 08 Oct 2026 10:31:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xElPQ-00051I-AV; Thu, 08 Oct 2026 10:31:32 +0000
Received: by outflank-mailman (input) for mailman id 1443149;
 Thu, 08 Oct 2026 10:31:30 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <owen.smith@citrix.com>) id 1xElPO-000507-M4
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 10:31:30 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xElPM-00C9fE-SY
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 12:31:28 +0200
Received: from [10.42.69.9] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ac770f4-e002-0a2a0a5209dd-0a2a45098a88-26
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 12:31:28 +0200
Received: from [40.107.209.60]
 (helo=PH8PR06CU001.outbound.protection.outlook.com)
 by tlsNG-bad1c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ac770fe-be1a-0a2a45090019-286bd13c4836-4
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 12:31:28 +0200
Received: from SA6PR03MB7760.namprd03.prod.outlook.com (2603:10b6:806:43c::5)
 by PH0PR03MB5926.namprd03.prod.outlook.com (2603:10b6:510:35::9) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.472.20; Thu, 8 Oct
 2026 10:31:24 +0000
Received: from SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38]) by SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38%5]) with mapi id 15.21.0496.015; Thu, 8 Oct 2026
 10:31:24 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:x-ms-exchange-senderadcheck"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
 b=YZMonrkQ9DYRsHgH5Jp9B5twqH30JeMUKqZJuoMC6Qasx/Ul8aUrf9NeC6zcfKtFMhh2rQTezmYDyAZz76HElTF/MTQW7Rtx5bYA/hQjUjippKoCYOpDXXBPZYXl//GhI12oaKcq5zHI8mf25GtK+G52pcWnDGAQtMHPX4aSYr1HA7QO/EO8CQ4zPuaCFGmSJ+c3XNpquVbn2nJ7eji8uO4Id8jvP9Iz7PI3jU5ZFnj8WNm/wOoXU+sDea/O5ChRoR3jzixJpDRX2XX7xwYq3h0AxQuBEVjTv3PGSGxgrmLlDOo0y+D0TYEsQIde0AMFfIIObKBuXE329RFfCx4Kog==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector10001;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=IPtE48CCF/Rsx/u7slGeX1gFsqtzE8YpJDA8s3a1DMc=;
 b=W7l80aNQItgysATT4WfxIcwV+IFhBqb13BaOX5ZkaP5CW/3dyY6dsNtWTlzpLmYF8VM+CDZtc9pHTB0eN00DxL+G3yqk2VqbazbHhIb4TBUxsAqgS2eDbBBnd3wN6WvjwHGpanUFn6Kynj6EW0n2yhLlmoFNa3+/MUt/tI18SEToIMK/IkaB0RMH5fTpCPc2ixSL7tyripS9e2zJHd+hP8EetuTtG2+lNmWd5JTdgX/+zgZCkEseBcHNQTA2sf2FAUBo78JvL0V6LBTkA2v7jTN7NrxBZ/m42gN1Bhlb0M18RxmrFPw0LEcJXoMGoxKbneXJ9aupblCRcUrWakTnKQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=IPtE48CCF/Rsx/u7slGeX1gFsqtzE8YpJDA8s3a1DMc=;
 b=a8p2iK7v4uPEckVF/f2sPhSFa2pw5LvmU3cue67xYHQTojN9RC/TfCitduO/lmnh5pM0IBZQE8bDxILW+AbeW1qaHXr4TiaeDlapPAmsYD/3mZS74/MVMJwusMptbyLMYOUc8vvSNYYUTv/lVO2mnfa8ZEXfwcSEwD7Zwr6CP9E=
From: Owen Smith <owen.smith@citrix.com>
To: Tu Dinh <ngoc-tu.dinh@vates.tech>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Subject: Re: [PATCH 1/2] receiver: Remove dependencies on HVM_MAX_VCPUS
Thread-Topic: [PATCH 1/2] receiver: Remove dependencies on HVM_MAX_VCPUS
Thread-Index: AQHdVwLM5ENtsnaoREG6Oqxrhuc2xbbzcI2D
Date: Thu, 8 Oct 2026 10:31:24 +0000
Message-ID:
 <SA6PR03MB7760A43469DA527FDFD5B525FE932@SA6PR03MB7760.namprd03.prod.outlook.com>
References:
 <1791449722.8631fc262581453bbf619ec5b2062170.1a11ab96ebe0003f66@vates.tech>
In-Reply-To:
 <1791449722.8631fc262581453bbf619ec5b2062170.1a11ab96ebe0003f66@vates.tech>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
msip_labels:
authentication-results: mx.microsoft.com 1; dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=citrix.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: SA6PR03MB7760:EE_|PH0PR03MB5926:EE_
x-ms-office365-filtering-correlation-id: ca814749-9628-474d-e163-08df25274dc5
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam:
 BCL:0;ARA:13230040|366016|1800799024|376014|23010399003|56012099006|38070700021|11063799006|22082099003|18002099003|10067099003;
x-microsoft-antispam-message-info:
 Va9R6K8UuYE6l9bhfI+Irta5BjkntgKHDVmjMJ4MhBTQwfEGRQ+4+nlLxBxkeSdaKd3k/doTu7ciKYo18t5DGLvH5sONoBLwUI8WXmOMx4L009NHNpySzqFBDK7kcAznFk0WLlA/esMRzkiggOEO0xlcfCLnUXi9YxpUZbTO4RFBlUXU56q1N2EYYGi0zpqxkrWpQmLRWtYeo9Skq1NAD/Q1OU7Y1LpH/mck3XZb9jhuWbvtgBVjbH32oc2iWTZQKTzM7JHS+iMcm7Ap9iytLomxMHwGFWcWEoe+1hcEve1VeidWRiUCNmVbGo9hryHrq2qD59hnsGJ0AmxuUsP9o2hfye2MVYAaZOj4Jt4CaNf0jdfQAGUI3WUwyzcQMhViMM4Bw5s8seHSTva2Knm6MalK5+Kucaulxd5BCXScbhP9YSPxuitTj7+2wkt7vyGyVvxettWIf94UZmJfRuFzI/zETC3B35eqg8KiFaSUrD9AGhp8jsUjSBQ1gmwbJH6219hrbOpgGLMJIL4epuhrAWL3oghSZgxPuhW3wKG0nNOwL0Wr7sp+YvziTwwtleYuffIDa1RQhPwzE4rnPPLEI6Cy626mPYF/NJVKLSpRrHUaaFGLi91qYPMj69qShpxOwD86z67frowEDVncLa5P2t47q8Ypm53NPDcieOGR1tgRkBJx8NgHMcb5rK3rEoDs1OgrQYpRxFiNf3bW1WYQtkjHd5mW7hftystGEbTPrkY=
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SA6PR03MB7760.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(23010399003)(56012099006)(38070700021)(11063799006)(22082099003)(18002099003)(10067099003);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?iso-8859-1?Q?v+AgZWdzox7n8g+/k+VykSe5g2LG2G9TiviL6jN7NRUNKRUG+z6h7bv9+t?=
 =?iso-8859-1?Q?1X9kXXXfqnbOINGE+a2cYNF/O/19zK8UtieRNbvQoX1BXEgMtyyhxMkU5A?=
 =?iso-8859-1?Q?ikvUs6TRzLrU5nkNyC1UE5NLLKMcwIpJmgo6fe7ITV6oAZDN9hgebD0E3e?=
 =?iso-8859-1?Q?XWbVQE1zTcBnDG7h3ZOGAae8yVU4pBo7cxhXMvYniaVPVXk5QXH0VXczjW?=
 =?iso-8859-1?Q?OxOooRBn6NGb7ewKycvAI+cWquqaK/Jk/IrlUKkK4aXIuaz0N0//agOqQZ?=
 =?iso-8859-1?Q?+VeUHvJcmSQUg5N2WRwyrsJMkau6nG2lv/E+9DhjJDnfCoAzAVtSxYC6Mg?=
 =?iso-8859-1?Q?Fc07ElYo0vqC6zv5o2gu+i0zRZm0HAA6UJJs3yDsKOQL2geY9l2qo384ju?=
 =?iso-8859-1?Q?lE5WWAQrXkBL9qW/NdvTovI5TUOAncEICrMsV22Sp2xFaqW7tlJhL1xMJ8?=
 =?iso-8859-1?Q?KjgcEWyfXi/1E41Sv9f31usTHYkuhvRbekWV9hIavZjBj26knV74eO2n8T?=
 =?iso-8859-1?Q?rqVd0zOGxlKsSZm9AOfkH+viwZnwJPK650GE4jrRcwtorMeE6G97Tz7k85?=
 =?iso-8859-1?Q?ppl+d2PqmYGHqASJs+4HZvVomGjNLFH+P+JrjIPJqrJGWz/f6P6w2GaypO?=
 =?iso-8859-1?Q?EaB2ppYvuAg/hj4zQ99I/MvqciaMYHzl5rv3o9CRc03TSnvLkCZEpjFrsc?=
 =?iso-8859-1?Q?jahsJoybp+1UWzWMczvWss6qRIEQQR6/ZYfWN4A3UQX8hYvmKdWKim1WXR?=
 =?iso-8859-1?Q?m1k41PofxYI9TEjlBWgEHpDdFyWTj6RxA6dJBh0LMSl3b8Nw98dwdy2pnk?=
 =?iso-8859-1?Q?vV8St3VyxSsgkpBNwxVAVAEyNHFCzFNZTGlb7tCKJe++RG0iR44WnI417g?=
 =?iso-8859-1?Q?XTaeJjTVtvNv6+u4VXYLxGbca8SnYMoYvyL4kQvguSsjf2sspzDg7+wUJP?=
 =?iso-8859-1?Q?jYqRsFwdUsC+JgYUedv5Yx5DIp2BPCvjbRC/nKtqcbP5cujD+RqhDrXfep?=
 =?iso-8859-1?Q?GasiJ9Tpt5PIFmbLq2BdWj/Jk3Qcba0HHkkOmYoTrDZs1ZH34dix+m/8db?=
 =?iso-8859-1?Q?SihtH4X4xhQFJch87e1sQmlU9yTE8R+9w5wCEyF74WEiKoRP3IJi94dNFD?=
 =?iso-8859-1?Q?TQxHCKkXRJ1tmN9VzE0jy02oYe69TP1ezV1IU2P3t6fxEnCZ5lpbjFDEua?=
 =?iso-8859-1?Q?ArgRnbwIvTCtk6cKP4Xrrrf98KvbHI443oYgy8nuXiWqhLFaICNX7xg15H?=
 =?iso-8859-1?Q?8Wab47523cLRpzxCyu2r5+7HWGoTHFN3iJJmWBeCp/9vQvTXSGLsktBQUf?=
 =?iso-8859-1?Q?BZ+F5nEq85BQcn6F9oH/OhS9goyUSB27Xr+dOy+n7TvcXgB17fQoye1HLC?=
 =?iso-8859-1?Q?hFytMTeBDz9nPNGpkZHR7YxAffQYZ0LYY0h9QGjao23BBTtqMZcSa56584?=
 =?iso-8859-1?Q?y0P0pL/v4T4lY6PhfHrPoXQjxKtbvVmgIfiMINrXPIV73CiJztJ5xPhZaI?=
 =?iso-8859-1?Q?o4WPWMjEgVl5GmopzZ0xZMCeE83L8uwBvSfO4rVGEN8/pBmFJfQvjaTaNT?=
 =?iso-8859-1?Q?+HazbXN5gOf1ODQ0JJJOvQSPCVC+UlSo8qS6wR7OcEKoOsRfqLch5+rDui?=
 =?iso-8859-1?Q?ozqOGPytP4gEa1FmWq2wUJXJyAkjD5nEJiVz4WIm6XRoiI9TDL+7PlUdmf?=
 =?iso-8859-1?Q?FInkkKmc6kZk4jbMfMYfnWQ41mkpAjn92kHYbgj1t8ZCbmR+bP9n9JPB1m?=
 =?iso-8859-1?Q?9QZKD4KwpR8q0J8bJQHLC1NQu9NkfxCojqN5ox9Lzki/Le?=
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-OriginatorOrg: citrix.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: SA6PR03MB7760.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: ca814749-9628-474d-e163-08df25274dc5
X-MS-Exchange-CrossTenant-originalarrivaltime: 08 Oct 2026 10:31:24.8618
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: reoOO7AvzaoxAQDvUcZxdM1D6oLjgGTpUBBApanVvT0qfy7UScVMrgEecQF5AOE076/PCswKzEtp5CrOMKweng==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR03MB5926
X-purgate-ID: tlsNG-bad1c0/1791455488-39AC0034-3D608AAE/0/0
X-purgate-type: clean
X-purgate-size: 1322

> diff --git a/src/xennet/receiver.c b/src/xennet/receiver.c=0A=
> index 565d31b..91e344b 100644=0A=
> --- a/src/xennet/receiver.c=0A=
> +++ b/src/xennet/receiver.c=0A=
> @@ -33,7 +33,6 @@=0A=
>  #include <ndis.h>=0A=
>  #include <procgrp.h>=0A=
>  #include <tcpip.h>=0A=
> -#include <xen.h>=0A=
>  #include <ethernet.h>=0A=
> =0A=
>  #include "util.h"=0A=
> @@ -53,8 +52,9 @@ struct _XENNET_RECEIVER {=0A=
>      PXENNET_ADAPTER             Adapter;=0A=
>      NDIS_HANDLE                 NetBufferListPool;=0A=
>      PNET_BUFFER_LIST            PutList;=0A=
> -    PNET_BUFFER_LIST            GetList[HVM_MAX_VCPUS];=0A=
> -    XENNET_RECEIVER_QUEUE       Queue[HVM_MAX_VCPUS];=0A=
> +    ULONG                       Count;=0A=
> +    PNET_BUFFER_LIST            *GetList;=0A=
> +    XENNET_RECEIVER_QUEUE       *Queue;=0A=
>      LONG                        Indicated;=0A=
>      LONG                        Returned;=0A=
>      XENVIF_VIF_OFFLOAD_OPTIONS  OffloadOptions;=0A=
=0A=
It may be useful to group all Queue related fields in the XENNET_RECEIVER_Q=
UEUE=0A=
structure.=0A=
A PutList, GetList, Indicated and Received specific to each queue would hel=
p with multi-queue=0A=
scaling, though it would require stashing the queue index in the NBL reserv=
ed data.=0A=
=0A=
Owen=


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 08 10:35:21 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 08 Oct 2026 10:35:21 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1443159.1660565 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xElT6-0005ix-Vo; Thu, 08 Oct 2026 10:35:20 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1443159.1660565; Thu, 08 Oct 2026 10:35:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xElT6-0005iq-TG; Thu, 08 Oct 2026 10:35:20 +0000
Received: by outflank-mailman (input) for mailman id 1443159;
 Thu, 08 Oct 2026 10:35:20 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a11b14db130003f66@swg.vates.tech>)
 id 1xElT6-0005ii-2o
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 10:35:20 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xElT5-00CAd7-Fh
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 12:35:19 +0200
Received: from [10.42.69.1] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a11b14db130003f66@swg.vates.tech>)
 id 6ac771e4-bab6-0a2a0a5309dd-0a2a45019d0a-16
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 12:35:19 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a11b14db130003f66@swg.vates.tech>)
 id 6ac771e7-5984-0a2a45010019-b9ff1c12a08b-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 12:35:19 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a11b14db130003f66.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 08 Oct 2026 10:35:14 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 37124809FA;
 Thu,  8 Oct 2026 12:35:13 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=m6UfMNzg3Y7BpXyuwERlI3g8kYlmSw3zysumPiA9GKQ=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:feedback-id;
 b=squh3PdASJmxvMHbUGHyCiHPpG3EP2hPTSWd6K/A6oYXOsiYwDjrf4s9z0yUN7ydhWPzEephh
 6Vo+TkkpurcRkytUIyZ73Emx/rOU1BZgi2ZYgLz8E80lMrqVNr3502Ea33EanQAr8D3CyDJgAvA
 DzanqcnVWrv8sDPkOND1MUz7Nscfka1a+VNJYkxkiqzVPfiQ/M3q+YsyQn1kc7SilpYDxDMF/Y1
 pEusy5rml2J418bxUwme+9lqTKfxsOHTu6EZoeyJYCZpA7lG07MAEpv+bJ2jRC5wzdlng6QdXCT
 ZgBUpVnNJm7QRsK/IC0p6Tv/lcfNcfuH03PMSpuXpsDQ==
X-Zone-Loop: da487d15514b3b40c0b78b07288afe4eecec7b84ca9b
x-campaign-type: default
x-transaction-id: 41b0aab6-0e40-47c1-87ef-e1414e259eac
x-swg-uid: 01-66061643-fbae-4db7-96b7-fae11d563404
X-Mailer: Sweego
Message-ID:
 <1791455714.8631fc262581453bbf619ec5b2062170.1a11b14db130003f66@vates.tech>
x-swg-bid: 1791455714.8631fc262581453bbf619ec5b2062170.1a11b14db130003f66
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH v2] xenhid: annotate include files
Date: Thu,  8 Oct 2026 12:35:05 +0200
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.2c.308c2fd718cd5dc.1a11b14d838.a13f65a43bfe63dd=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791455713337
X-purgate-ID: tlsNG-d62444/1791455719-BDC79757-24636982/0/0
X-purgate-type: clean
X-purgate-size: 16469

---=Part.2c.308c2fd718cd5dc.1a11b14d838.a13f65a43bfe63dd=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

The previous conversion to SAL 2=2E0 left the files in include directory=2E
Update the include files to complete conversion=2E

store_interface=2Eh and suspend_interface=2Eh are synced with xenbus inclu=
de
files=2E

No functional change=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 include/hid_interface=2Eh     | 108 ++++++++++++++++++------------------
 include/store_interface=2Eh   |  90 +++++++++++++++---------------
 include/suspend_interface=2Eh |  30 +++++-----
 3 files changed, 114 insertions(+), 114 deletions(-)

diff --git a/include/hid_interface=2Eh b/include/hid_interface=2Eh
index 2e2d9e6=2E=2E5de30cf 100644
--- a/include/hid_interface=2Eh
+++ b/include/hid_interface=2Eh
@@ -48,7 +48,7 @@
 */ =20
 typedef NTSTATUS
 (*XENHID_HID_ACQUIRE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENHID_HID_RELEASE
@@ -58,7 +58,7 @@ typedef NTSTATUS
 */ =20
 typedef VOID
 (*XENHID_HID_RELEASE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENHID_HID_CALLBACK
@@ -70,9 +70,9 @@ typedef VOID
 */
 typedef BOOLEAN
 (*XENHID_HID_CALLBACK)(
-    IN  PVOID       Argument OPTIONAL,
-    IN  PVOID       Buffer,
-    IN  ULONG       Length
+    _In_opt_ PVOID  Argument,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length
     );
=20
 /*! \typedef XENHID_HID_ENABLE
@@ -87,9 +87,9 @@ typedef BOOLEAN
 */
 typedef NTSTATUS
 (*XENHID_HID_ENABLE)(
-    IN  PINTERFACE          Interface,
-    IN  XENHID_HID_CALLBACK Callback,
-    IN  PVOID               Argument OPTIONAL
+    _In_ PINTERFACE             Interface,
+    _In_ XENHID_HID_CALLBACK    Callback,
+    _In_opt_ PVOID              Argument
     );
=20
 /*! \typedef XENHID_HID_DISABLE
@@ -102,7 +102,7 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENHID_HID_DISABLE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENHID_HID_GET_DEVICE_ATTRIBUTES
@@ -111,10 +111,10 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENHID_HID_GET_DEVICE_ATTRIBUTES)(
-    IN  PINTERFACE      Interface,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length,
-    OUT PULONG          Returned
+    _In_ PINTERFACE Interface,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length,
+    _Out_ PULONG    Returned
     );
=20
 /*! \typedef XENHID_HID_GET_DEVICE_DESCRIPTOR
@@ -127,10 +127,10 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENHID_HID_GET_DEVICE_DESCRIPTOR)(
-    IN  PINTERFACE      Interface,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length,
-    OUT PULONG          Returned
+    _In_ PINTERFACE Interface,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length,
+    _Out_ PULONG    Returned
     );
=20
 /*! \typedef XENHID_HID_GET_REPORT_DESCRIPTOR
@@ -143,10 +143,10 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENHID_HID_GET_REPORT_DESCRIPTOR)(
-    IN  PINTERFACE      Interface,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length,
-    OUT PULONG          Returned
+    _In_ PINTERFACE Interface,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length,
+    _Out_ PULONG    Returned
     );
=20
 /*! \typedef XENHID_HID_GET_STRING
@@ -160,11 +160,11 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENHID_HID_GET_STRING)(
-    IN  PINTERFACE      Interface,
-    IN  ULONG           Identifier,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length,
-    OUT PULONG          Returned
+    _In_ PINTERFACE Interface,
+    _In_ ULONG      Identifier,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length,
+    _Out_ PULONG    Returned
     );
=20
 /*! \typedef XENHID_HID_GET_INDEXED_STRING
@@ -178,11 +178,11 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENHID_HID_GET_INDEXED_STRING)(
-    IN  PINTERFACE      Interface,
-    IN  ULONG           Index,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length,
-    OUT PULONG          Returned
+    _In_ PINTERFACE Interface,
+    _In_ ULONG      Index,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length,
+    _Out_ PULONG    Returned
     );
=20
 /*! \typedef XENHID_HID_GET_FEATURE
@@ -196,11 +196,11 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENHID_HID_GET_FEATURE)(
-    IN  PINTERFACE      Interface,
-    IN  ULONG           ReportId,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length,
-    OUT PULONG          Returned
+    _In_ PINTERFACE Interface,
+    _In_ ULONG      ReportId,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length,
+    _Out_ PULONG    Returned
     );
=20
 /*! \typedef XENHID_HID_SET_FEATURE
@@ -213,10 +213,10 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENHID_HID_SET_FEATURE)(
-    IN  PINTERFACE      Interface,
-    IN  ULONG           ReportId,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length
+    _In_ PINTERFACE Interface,
+    _In_ ULONG      ReportId,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length
     );
=20
 /*! \typedef XENHID_HID_GET_INPUT_REPORT
@@ -230,11 +230,11 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENHID_HID_GET_INPUT_REPORT)(
-    IN  PINTERFACE      Interface,
-    IN  ULONG           ReportId,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length,
-    OUT PULONG          Returned
+    _In_ PINTERFACE Interface,
+    _In_ ULONG      ReportId,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length,
+    _Out_ PULONG    Returned
     );
=20
 /*! \typedef XENHID_HID_SET_OUTPUT_REPORT
@@ -247,10 +247,10 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENHID_HID_SET_OUTPUT_REPORT)(
-    IN  PINTERFACE      Interface,
-    IN  ULONG           ReportId,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length
+    _In_ PINTERFACE Interface,
+    _In_ ULONG      ReportId,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length
     );
=20
 /*! \typedef XENHID_HID_READ_REPORT
@@ -262,7 +262,7 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENHID_HID_READ_REPORT)(
-    IN  PINTERFACE      Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENHID_HID_WRITE_REPORT
@@ -275,10 +275,10 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENHID_HID_WRITE_REPORT)(
-    IN  PINTERFACE      Interface,
-    IN  ULONG           ReportId,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length
+    _In_ PINTERFACE Interface,
+    _In_ ULONG      ReportId,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length
     );
=20
 // {D215E1B5-8C38-420A-AEA6-02520DF3A621}
diff --git a/include/store_interface=2Eh b/include/store_interface=2Eh
index 616bc36=2E=2E7772b7f 100644
--- a/include/store_interface=2Eh
+++ b/include/store_interface=2Eh
@@ -36,8 +36,8 @@
     This interface provides access to XenStore
 */
=20
-#ifndef _XENBUS_STORE_INTERFACE_H
-#define _XENBUS_STORE_INTERFACE_H
+#ifndef _XENHID_STORE_INTERFACE_H
+#define _XENHID_STORE_INTERFACE_H
=20
 #ifndef _WINDLL
=20
@@ -75,7 +75,7 @@ typedef struct _XENBUS_STORE_PERMISSION {
 */
 typedef NTSTATUS
 (*XENBUS_STORE_ACQUIRE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_STORE_RELEASE
@@ -85,7 +85,7 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENBUS_STORE_RELEASE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_STORE_FREE
@@ -96,8 +96,8 @@ typedef VOID
 */
 typedef VOID
 (*XENBUS_STORE_FREE)(
-    IN  PINTERFACE  Interface,
-    IN  PCHAR       Buffer
+    _In_ PINTERFACE Interface,
+    _In_ PSTR       Buffer
     );
=20
 /*! \typedef XENBUS_STORE_READ
@@ -116,11 +116,11 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENBUS_STORE_READ)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node,
-    OUT PCHAR                       *Buffer
+    _In_ PINTERFACE                     Interface,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PSTR                       Prefix,
+    _In_ PSTR                           Node,
+    _Outptr_result_z_ PSTR              *Buffer
     );
=20
 /*! \typedef XENBUS_STORE_PRINTF
@@ -139,11 +139,11 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENBUS_STORE_PRINTF)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node,
-    IN  const CHAR                  *Format,
+    _In_ PINTERFACE                     Interface,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PSTR                       Prefix,
+    _In_ PSTR                           Node,
+    _In_ PCSTR                          Format,
     =2E=2E=2E
     );
=20
@@ -159,10 +159,10 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENBUS_STORE_REMOVE)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node
+    _In_ PINTERFACE                     Interface,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PSTR                       Prefix,
+    _In_ PSTR                           Node
     );
=20
 /*! \typedef XENBUS_STORE_DIRECTORY
@@ -181,11 +181,11 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENBUS_STORE_DIRECTORY)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node,
-    OUT PCHAR                       *Buffer
+    _In_ PINTERFACE                     Interface,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PSTR                       Prefix,
+    _In_ PSTR                           Node,
+    _Outptr_result_z_ PSTR              *Buffer
     );
=20
 /*! \typedef XENBUS_STORE_TRANSACTION_START
@@ -196,8 +196,8 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENBUS_STORE_TRANSACTION_START)(
-    IN  PINTERFACE                  Interface,
-    OUT PXENBUS_STORE_TRANSACTION   *Transaction
+    _In_ PINTERFACE                     Interface,
+    _Outptr_ PXENBUS_STORE_TRANSACTION  *Transaction
     );
=20
 /*! \typedef XENBUS_STORE_TRANSACTION_END
@@ -213,9 +213,9 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENBUS_STORE_TRANSACTION_END)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction,
-    IN  BOOLEAN                     Commit
+    _In_ PINTERFACE                 Interface,
+    _In_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_ BOOLEAN                    Commit
     );
=20
 /*! \typedef XENBUS_STORE_WATCH_ADD
@@ -231,11 +231,11 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENBUS_STORE_WATCH_ADD)(
-    IN  PINTERFACE          Interface,
-    IN  PCHAR               Prefix OPTIONAL,
-    IN  PCHAR               Node,
-    IN  PKEVENT             Event,
-    OUT PXENBUS_STORE_WATCH *Watch
+    _In_ PINTERFACE                 Interface,
+    _In_opt_ PSTR                   Prefix,
+    _In_ PSTR                       Node,
+    _In_ PKEVENT                    Event,
+    _Outptr_ PXENBUS_STORE_WATCH    *Watch
     );
=20
 /*! \typedef XENBUS_STORE_WATCH_REMOVE
@@ -246,8 +246,8 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENBUS_STORE_WATCH_REMOVE)(
-    IN  PINTERFACE          Interface,
-    IN  PXENBUS_STORE_WATCH Watch
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_STORE_WATCH    Watch
     );
=20
 /*! \typedef XENBUS_STORE_POLL
@@ -262,7 +262,7 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENBUS_STORE_POLL)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_STORE_PERMISSIONS_SET
@@ -279,12 +279,12 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENBUS_STORE_PERMISSIONS_SET)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node,
-    IN  PXENBUS_STORE_PERMISSION    Permissions,
-    IN  ULONG                       NumberPermissions
+    _In_ PINTERFACE                     Interface,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PSTR                       Prefix,
+    _In_ PSTR                           Node,
+    _In_ PXENBUS_STORE_PERMISSION       Permissions,
+    _In_ ULONG                          NumberPermissions
     );
=20
 // {86824C3B-D34E-4753-B281-2F1E3AD214D7}
@@ -325,4 +325,4 @@ typedef struct _XENBUS_STORE_INTERFACE_V2 XENBUS_STORE=
_INTERFACE, *PXENBUS_STORE
 #define XENBUS_STORE_INTERFACE_VERSION_MIN  2
 #define XENBUS_STORE_INTERFACE_VERSION_MAX  2
=20
-#endif  // _XENBUS_STORE_INTERFACE_H
+#endif  // _XENHID_STORE_INTERFACE_H
diff --git a/include/suspend_interface=2Eh b/include/suspend_interface=2Eh
index ee31d95=2E=2E50b2085 100644
--- a/include/suspend_interface=2Eh
+++ b/include/suspend_interface=2Eh
@@ -36,8 +36,8 @@
     This interface provides primitives to handle VM suspend/resume
 */
=20
-#ifndef _XENBUS_SUSPEND_INTERFACE_H
-#define _XENBUS_SUSPEND_INTERFACE_H
+#ifndef _XENHID_SUSPEND_INTERFACE_H
+#define _XENHID_SUSPEND_INTERFACE_H
=20
 #ifndef _WINDLL
=20
@@ -62,7 +62,7 @@ typedef struct _XENBUS_SUSPEND_CALLBACK   XENBUS_SUSPEND=
_CALLBACK, *PXENBUS_SUSP
 */
 typedef NTSTATUS
 (*XENBUS_SUSPEND_ACQUIRE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_SUSPEND_RELEASE
@@ -72,7 +72,7 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENBUS_SUSPEND_RELEASE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_SUSPEND_FUNCTION
@@ -87,7 +87,7 @@ typedef VOID
 */
 typedef VOID
 (*XENBUS_SUSPEND_FUNCTION)(
-    IN  PVOID   Argument
+    _In_ PVOID  Argument
     );
=20
 /*! \typedef XENBUS_SUSPEND_REGISTER
@@ -101,11 +101,11 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENBUS_SUSPEND_REGISTER)(
-    IN  PINTERFACE                      Interface,
-    IN  XENBUS_SUSPEND_CALLBACK_TYPE    Type,
-    IN  XENBUS_SUSPEND_FUNCTION         Function,
-    IN  PVOID                           Argument OPTIONAL,
-    OUT PXENBUS_SUSPEND_CALLBACK        *Callback
+    _In_ PINTERFACE                     Interface,
+    _In_ XENBUS_SUSPEND_CALLBACK_TYPE   Type,
+    _In_ XENBUS_SUSPEND_FUNCTION        Function,
+    _In_opt_ PVOID                      Argument,
+    _Outptr_ PXENBUS_SUSPEND_CALLBACK   *Callback
     );
=20
 /*! \typedef XENBUS_SUSPEND_DEREGISTER
@@ -116,8 +116,8 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENBUS_SUSPEND_DEREGISTER)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_SUSPEND_CALLBACK    Callback
+    _In_ PINTERFACE                 Interface,
+    _In_ PXENBUS_SUSPEND_CALLBACK   Callback
     );
=20
 /*! \typedef XENBUS_SUSPEND_TRIGGER
@@ -129,7 +129,7 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENBUS_SUSPEND_TRIGGER)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_SUSPEND_GET_COUNT
@@ -140,7 +140,7 @@ typedef NTSTATUS
 */
 typedef ULONG
 (*XENBUS_SUSPEND_GET_COUNT)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 // {0554F2AF-B510-4C71-AC03-1C503E394238}
@@ -174,4 +174,4 @@ typedef struct _XENBUS_SUSPEND_INTERFACE_V1 XENBUS_SUS=
PEND_INTERFACE, *PXENBUS_S
 #define XENBUS_SUSPEND_INTERFACE_VERSION_MIN    1
 #define XENBUS_SUSPEND_INTERFACE_VERSION_MAX    1
=20
-#endif  // _XENBUS_SUSPEND_INTERFACE_H
+#endif  // _XENHID_SUSPEND_INTERFACE_H
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.2c.308c2fd718cd5dc.1a11b14d838.a13f65a43bfe63dd=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 08 10:39:31 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 08 Oct 2026 10:39:31 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1443166.1660579 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xElX9-0006aJ-IR; Thu, 08 Oct 2026 10:39:31 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1443166.1660579; Thu, 08 Oct 2026 10:39:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xElX9-0006aC-Fn; Thu, 08 Oct 2026 10:39:31 +0000
Received: by outflank-mailman (input) for mailman id 1443166;
 Thu, 08 Oct 2026 10:39:30 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <owen.smith@citrix.com>) id 1xElX8-0006a6-3Z
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 10:39:30 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xElX7-00CA1l-GC
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 12:39:29 +0200
Received: from [10.42.69.1] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ac772dc-bab6-0a2a0a5309dd-0a2a45019c50-8
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 12:39:29 +0200
Received: from [40.93.194.25]
 (helo=SN4PR0501CU005.outbound.protection.outlook.com)
 by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ac772df-5984-0a2a45010019-285dc219196a-4
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 12:39:29 +0200
Received: from SA6PR03MB7760.namprd03.prod.outlook.com (2603:10b6:806:43c::5)
 by PH0PR03MB5926.namprd03.prod.outlook.com (2603:10b6:510:35::9) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.472.20; Thu, 8 Oct
 2026 10:39:25 +0000
Received: from SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38]) by SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38%5]) with mapi id 15.21.0496.015; Thu, 8 Oct 2026
 10:39:25 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:x-ms-exchange-senderadcheck"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
 b=lA28iF6mqLm7e7LTBVXpiwTmdZ8UyOAJImpNxQ0Y8R2HPks3I5y3t1tQImGF9uml4xlGkTfTM2vnZGpt2YcUO8+Ts/m1WFh+GZdcflWdgG1SNirNrSyQT4swcnpoBzugDOEOqRSCsCa7xeAaF+MY+s1SnQv6XLCtWWH4m/WnaXSXh2iBdueCkdsSLRoQJDVATK/1lZrzGxUOsa8GKr91J5QOqX+JKT4Q5kRdq+bTD+RTgyrFH4Un7Tt4Q1KiXpvaCBjZf4Bfpwoqi2d1PfWdNoElpxO6LCosvpAc7htCNaummbQfz7OpkEU+cxublLO90tjZKKU4HcGEH1khJD/9AA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector10001;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=9Z/+eGzi9f4gbOAGrjTqo7Uz++GQWDOdRsUZkgwqaJQ=;
 b=tPcIsNZaIYTFY6Wj3vykLAlCh0RRDnrEbgnLbiczXP8YMGTQn74wXxh7epKDZlq3T7TD+E/R9D2CRlFGs4HlnQJPMwzQcEYRk1m0RCm/md6qDE402842qT030b/azcIzSJbf9y3tg6EA8sLZy1T0X35qgJJ3PznHoaI8QAlhNlXzmixBrLxvUDmFn2Vt+/3zBsvbgJzRAdn8mIeUr3QjKcHMUNdxpYCMK/BPcTMWxiYULIWh7VdBg/z3YRb4HcCIutqviH9HqnGagD11AIbmXDOSIAebmuPAumNoTBKEs8qaHQZlgSY/R2mMCmLZr9nU1vSQgGwl88xQLNIdGPjbdw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=9Z/+eGzi9f4gbOAGrjTqo7Uz++GQWDOdRsUZkgwqaJQ=;
 b=YLEUwZrxHDkBgqCZJAFSnDdvihuPqaYRNK7hwD48Jci74ySfhG0jJRSTd/1jqh6G3mKQ+FKTgDe0VNnY+BmHRN0gNHyai7aix4jtYa4bycB1qGc3/hD//ihugrsILLx4mj5UYY7vTNHDSdn9o9JJwav53nryop0WJkft5rOClsM=
From: Owen Smith <owen.smith@citrix.com>
To: =?iso-8859-1?Q?C=E9saire_Mounah?= <cesaire.mounah@vates.tech>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Subject: Re: [PATCH v2] xenhid: annotate include files
Thread-Topic: [PATCH v2] xenhid: annotate include files
Thread-Index: AQHdVxC/cw53lvCBZ06qSYBpjM1+YbbzdGHY
Date: Thu, 8 Oct 2026 10:39:25 +0000
Message-ID:
 <SA6PR03MB776041F9E2E9284880979515FE932@SA6PR03MB7760.namprd03.prod.outlook.com>
References:
 <1791455714.8631fc262581453bbf619ec5b2062170.1a11b14db130003f66@vates.tech>
In-Reply-To:
 <1791455714.8631fc262581453bbf619ec5b2062170.1a11b14db130003f66@vates.tech>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
msip_labels:
authentication-results: mx.microsoft.com 1; dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=citrix.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: SA6PR03MB7760:EE_|PH0PR03MB5926:EE_
x-ms-office365-filtering-correlation-id: ba0bec09-25f9-4216-fc8a-08df25286c29
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam:
 BCL:0;ARA:13230040|376014|23010399003|366016|1800799024|6133799003|22082099003|18002099003|3023799007|10067099003|56012099006|38070700021|11063799006;
x-microsoft-antispam-message-info:
 K9e6+7yupiC7TmFxlzb6UitHWrEQuItqUSFjJocM3wJPeQSvQ7s3oxMZoppcLi9dNP6j8wtCVKZAFp5hRcIgFcuRWao7DMtAPE5iryfa6buwPkLL+y9Tm5SwatGaFNteiHyP7QapvQULD2GcVTJyio1Zm/DMf5PnO2Gx6doesEEzOknLChY/tEqH8wYroSUUfafJV4fAQx498BMMeYRRENptXAQvd1Py/O87zwEQsIPxoMDIPaD90A9wecfYfy7v6KYD0KJYsA7MydijiTmJji2DQhl4W5MT5LPaXIBq5L2VSdseAupRfwnzECCxWCit5oMbAprzMsjQir7kuchnZPOK2GEYPRoE/r+iCKWhkv/Xmu9iHfPrkj1/j1zR0bG8quRLYaJ1PKyX/QGBQjfa7kCSNosqfC9xbP4rMjdEqPIt+urWVreCyDcji6afN2lhhN3ICwDThh5o62sZwYTTif7/OVsozFjbbEiNNYmyfMi4f5Xbvk3Y+9lAVSFlGFADGiBiLO9Stet/JqKmiZB5XUdP3q8eEQySw+9k47bbiY9aN8BLhCVILX3ddY4jfMZseobUHbbSXALoIv/6UGWEW3c8kDMLpe9HXURHsl/Gi1GWfCemlrzHLJAwyKuOiNhwaGXm17aRs7pnaI3LdD1Uy/wCqP7ne4penaaK9YG5yes=
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SA6PR03MB7760.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(23010399003)(366016)(1800799024)(6133799003)(22082099003)(18002099003)(3023799007)(10067099003)(56012099006)(38070700021)(11063799006);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?iso-8859-1?Q?A4K9pvkjXAS4Wnh0lvmCAZczN2QsA+27GPjSAEoLR9nd+S/461y1s62Zv6?=
 =?iso-8859-1?Q?AocFE6stiKom/328rHhIfHwJfWIT1k19txtH2QD7w6Nyrn1Gvl4daI8tKw?=
 =?iso-8859-1?Q?4I2cpu+m5B7gw4zz/b3tVyxH54/gxaJa9bRpTchTarUmAD7LXGlNcwIYCa?=
 =?iso-8859-1?Q?vanKQL7F9r5Ywnxn/cQvVyPosO3EgMGsULcCLgxX3WWWTwMiydKW2wwEE/?=
 =?iso-8859-1?Q?NksyVqKawJtfzxpqwAEYhyNWybgDYX3WvdG7SwMnLdWTAQtcnODowpq2vV?=
 =?iso-8859-1?Q?4fgQvA/wcYKccrK16QLo83QhciS9iIBjSSrE6dIyKpPUp4rCyH90Fvdl4I?=
 =?iso-8859-1?Q?FPJm7kPgdAJ9CMMvTbFG61P01x/13JXEDodOu5nZpUtqWAPNi+NmH7uZYA?=
 =?iso-8859-1?Q?vR0IZp+/EM3lJKaMxjR6Jgfi8U2MEuUMOhGEidsFR7EoT9gGtqxHnK947m?=
 =?iso-8859-1?Q?dxLF2NYssiiEsdczxGLOFA4UfiWEgyKjefsrx9CAcR3Cg7tLywy8AYiUcc?=
 =?iso-8859-1?Q?Pw1u9jdGG5XqaGAMBQPs+zsuLpprMdvTFW3frEhmnPGfO/18pqsNjfe6Dx?=
 =?iso-8859-1?Q?etDueKwoTI56dv75/5dTkZ6mU2bpgGZQ2mMywKi3VkYdfwBUuBsKvZ0dyo?=
 =?iso-8859-1?Q?OLWY1NsXlkFHr9lp7BUk+uX/qKG9RqYiQGLTXXlCnI4g3xIEJR5y8GGC7F?=
 =?iso-8859-1?Q?GSAC+VORqT70foHZ9XWN0ftIOOKFd7HLKYig2vQIX6KhWdeTgf5X3Dk1qe?=
 =?iso-8859-1?Q?GCRfFtwjW9dhnSeQCHe+qIVeSldaTTUmDC55D8MhNGNR/cMG/Emh4au80S?=
 =?iso-8859-1?Q?sqpEjTq47HfTJWiKxYNg3MjHFHaOyW6WHeXL94W05LaAqHWf19BCqlKvr0?=
 =?iso-8859-1?Q?xMg1amDhpyGR3oRVRUZoMIk9CW31xhLBME2tgq+f/iWEmXOFlMWIW+F3lI?=
 =?iso-8859-1?Q?p/8GpibUBd6y4tbI51bjnFatKZJ19I50Xq56MVLaaci5C0DYho47I7NO6l?=
 =?iso-8859-1?Q?nFj7gOTcQXnqDexx/MIBKCJ9LDWb5fMsAwJsGM+7HvnzK1skiyOJkoySZ4?=
 =?iso-8859-1?Q?SkIqtGmBJOwZZ3Ll/zsSAslhznB8MFx9dsn0HSKCayANktkVdvGLk2nv0v?=
 =?iso-8859-1?Q?rOwYtao9tZ5wggx6id2B2efcWBbPA2eYKYCKtNiymmpGSSddWP4Un/vRVU?=
 =?iso-8859-1?Q?j4yNaWcjMaD55PVs9SFA6Z7FBT+5Jt5eKxAktSsK/Objr6RV50B8L88ag1?=
 =?iso-8859-1?Q?6AisEwMj5kwVzOPkiF/BirA1vbdIRNYsf4aYO87I9lW7eRE5WrJPgKl9Y4?=
 =?iso-8859-1?Q?EziScAHpUW+iGyiObVSfguO1JPRZidWvpHhEPxQzqzQkpPzVmcU5d8idxw?=
 =?iso-8859-1?Q?bhdHPapraKG4Gqkml1KNItqT/zSEpTWuROHwREKX3PjZWpD7zRN7Nxd6W+?=
 =?iso-8859-1?Q?K5pfA6A5Ar4Rg0qn3BnxKjJk3Q7o1mr+K+xs3EaQwLVBJSOmZ0y6dRjP2d?=
 =?iso-8859-1?Q?s27kRlrk1NnlDDDkkgQOejb4r3PPj5vy81IqXJtLOpp0YDOKMdQqJEGTim?=
 =?iso-8859-1?Q?QaOIoihpWIjlB9K9HYhlUbVpON70DU2rih85WaoBMnaH70Hqq+QO2NIGZ6?=
 =?iso-8859-1?Q?gydbtZ8Iwhjo7fL5re4rAd5vWKFrwjt7SDcynY10ksDkQORxjJyRiuzkjo?=
 =?iso-8859-1?Q?Pq9jyA0JCZ4h/atPom1kE+LwWoSAGv7uV7c01O4SSJy0wwmMKaGJym5P7I?=
 =?iso-8859-1?Q?VzyOrFdAJAMaRhT1iiqZfTckicwL1YHj+FBlh7geQRPABc?=
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-OriginatorOrg: citrix.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: SA6PR03MB7760.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: ba0bec09-25f9-4216-fc8a-08df25286c29
X-MS-Exchange-CrossTenant-originalarrivaltime: 08 Oct 2026 10:39:25.3201
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: sDEQYttefKzFDtyTDt/KFnw+/oHkyQT+c6b6GivbzoAPFItS8qzWStecM25W2pGqyLPu4VFny72zukfNXU9oGA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR03MB5926
X-purgate-ID: tlsNG-d62444/1791455969-BE07B757-567DB0D6/0/0
X-purgate-type: clean
X-purgate-size: 16392

Reviewed-by: Owen Smith <owen.smith@citrix.com>

________________________________________
From: win-pv-devel <win-pv-devel-bounces@lists.xenproject.org> on behalf of=
 C=E9saire Mounah <cesaire.mounah@vates.tech>
Sent: 08 October 2026 11:35 AM
To: win-pv-devel@lists.xenproject.org
Cc: C=E9saire Mounah
Subject: [PATCH v2] xenhid: annotate include files

The previous conversion to SAL 2.0 left the files in include directory.
Update the include files to complete conversion.

store_interface.h and suspend_interface.h are synced with xenbus include
files.

No functional change.

Signed-off-by: C=E9saire Mounah <cesaire.mounah@vates.tech>
---
 include/hid_interface.h     | 108 ++++++++++++++++++------------------
 include/store_interface.h   |  90 +++++++++++++++---------------
 include/suspend_interface.h |  30 +++++-----
 3 files changed, 114 insertions(+), 114 deletions(-)

diff --git a/include/hid_interface.h b/include/hid_interface.h
index 2e2d9e6..5de30cf 100644
--- a/include/hid_interface.h
+++ b/include/hid_interface.h
@@ -48,7 +48,7 @@
 */
 typedef NTSTATUS
 (*XENHID_HID_ACQUIRE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );

 /*! \typedef XENHID_HID_RELEASE
@@ -58,7 +58,7 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENHID_HID_RELEASE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );

 /*! \typedef XENHID_HID_CALLBACK
@@ -70,9 +70,9 @@ typedef VOID
 */
 typedef BOOLEAN
 (*XENHID_HID_CALLBACK)(
-    IN  PVOID       Argument OPTIONAL,
-    IN  PVOID       Buffer,
-    IN  ULONG       Length
+    _In_opt_ PVOID  Argument,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length
     );

 /*! \typedef XENHID_HID_ENABLE
@@ -87,9 +87,9 @@ typedef BOOLEAN
 */
 typedef NTSTATUS
 (*XENHID_HID_ENABLE)(
-    IN  PINTERFACE          Interface,
-    IN  XENHID_HID_CALLBACK Callback,
-    IN  PVOID               Argument OPTIONAL
+    _In_ PINTERFACE             Interface,
+    _In_ XENHID_HID_CALLBACK    Callback,
+    _In_opt_ PVOID              Argument
     );

 /*! \typedef XENHID_HID_DISABLE
@@ -102,7 +102,7 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENHID_HID_DISABLE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );

 /*! \typedef XENHID_HID_GET_DEVICE_ATTRIBUTES
@@ -111,10 +111,10 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENHID_HID_GET_DEVICE_ATTRIBUTES)(
-    IN  PINTERFACE      Interface,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length,
-    OUT PULONG          Returned
+    _In_ PINTERFACE Interface,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length,
+    _Out_ PULONG    Returned
     );

 /*! \typedef XENHID_HID_GET_DEVICE_DESCRIPTOR
@@ -127,10 +127,10 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENHID_HID_GET_DEVICE_DESCRIPTOR)(
-    IN  PINTERFACE      Interface,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length,
-    OUT PULONG          Returned
+    _In_ PINTERFACE Interface,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length,
+    _Out_ PULONG    Returned
     );

 /*! \typedef XENHID_HID_GET_REPORT_DESCRIPTOR
@@ -143,10 +143,10 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENHID_HID_GET_REPORT_DESCRIPTOR)(
-    IN  PINTERFACE      Interface,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length,
-    OUT PULONG          Returned
+    _In_ PINTERFACE Interface,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length,
+    _Out_ PULONG    Returned
     );

 /*! \typedef XENHID_HID_GET_STRING
@@ -160,11 +160,11 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENHID_HID_GET_STRING)(
-    IN  PINTERFACE      Interface,
-    IN  ULONG           Identifier,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length,
-    OUT PULONG          Returned
+    _In_ PINTERFACE Interface,
+    _In_ ULONG      Identifier,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length,
+    _Out_ PULONG    Returned
     );

 /*! \typedef XENHID_HID_GET_INDEXED_STRING
@@ -178,11 +178,11 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENHID_HID_GET_INDEXED_STRING)(
-    IN  PINTERFACE      Interface,
-    IN  ULONG           Index,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length,
-    OUT PULONG          Returned
+    _In_ PINTERFACE Interface,
+    _In_ ULONG      Index,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length,
+    _Out_ PULONG    Returned
     );

 /*! \typedef XENHID_HID_GET_FEATURE
@@ -196,11 +196,11 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENHID_HID_GET_FEATURE)(
-    IN  PINTERFACE      Interface,
-    IN  ULONG           ReportId,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length,
-    OUT PULONG          Returned
+    _In_ PINTERFACE Interface,
+    _In_ ULONG      ReportId,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length,
+    _Out_ PULONG    Returned
     );

 /*! \typedef XENHID_HID_SET_FEATURE
@@ -213,10 +213,10 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENHID_HID_SET_FEATURE)(
-    IN  PINTERFACE      Interface,
-    IN  ULONG           ReportId,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length
+    _In_ PINTERFACE Interface,
+    _In_ ULONG      ReportId,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length
     );

 /*! \typedef XENHID_HID_GET_INPUT_REPORT
@@ -230,11 +230,11 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENHID_HID_GET_INPUT_REPORT)(
-    IN  PINTERFACE      Interface,
-    IN  ULONG           ReportId,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length,
-    OUT PULONG          Returned
+    _In_ PINTERFACE Interface,
+    _In_ ULONG      ReportId,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length,
+    _Out_ PULONG    Returned
     );

 /*! \typedef XENHID_HID_SET_OUTPUT_REPORT
@@ -247,10 +247,10 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENHID_HID_SET_OUTPUT_REPORT)(
-    IN  PINTERFACE      Interface,
-    IN  ULONG           ReportId,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length
+    _In_ PINTERFACE Interface,
+    _In_ ULONG      ReportId,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length
     );

 /*! \typedef XENHID_HID_READ_REPORT
@@ -262,7 +262,7 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENHID_HID_READ_REPORT)(
-    IN  PINTERFACE      Interface
+    _In_ PINTERFACE Interface
     );

 /*! \typedef XENHID_HID_WRITE_REPORT
@@ -275,10 +275,10 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENHID_HID_WRITE_REPORT)(
-    IN  PINTERFACE      Interface,
-    IN  ULONG           ReportId,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length
+    _In_ PINTERFACE Interface,
+    _In_ ULONG      ReportId,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length
     );

 // {D215E1B5-8C38-420A-AEA6-02520DF3A621}
diff --git a/include/store_interface.h b/include/store_interface.h
index 616bc36..7772b7f 100644
--- a/include/store_interface.h
+++ b/include/store_interface.h
@@ -36,8 +36,8 @@
     This interface provides access to XenStore
 */

-#ifndef _XENBUS_STORE_INTERFACE_H
-#define _XENBUS_STORE_INTERFACE_H
+#ifndef _XENHID_STORE_INTERFACE_H
+#define _XENHID_STORE_INTERFACE_H

 #ifndef _WINDLL

@@ -75,7 +75,7 @@ typedef struct _XENBUS_STORE_PERMISSION {
 */
 typedef NTSTATUS
 (*XENBUS_STORE_ACQUIRE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );

 /*! \typedef XENBUS_STORE_RELEASE
@@ -85,7 +85,7 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENBUS_STORE_RELEASE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );

 /*! \typedef XENBUS_STORE_FREE
@@ -96,8 +96,8 @@ typedef VOID
 */
 typedef VOID
 (*XENBUS_STORE_FREE)(
-    IN  PINTERFACE  Interface,
-    IN  PCHAR       Buffer
+    _In_ PINTERFACE Interface,
+    _In_ PSTR       Buffer
     );

 /*! \typedef XENBUS_STORE_READ
@@ -116,11 +116,11 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENBUS_STORE_READ)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node,
-    OUT PCHAR                       *Buffer
+    _In_ PINTERFACE                     Interface,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PSTR                       Prefix,
+    _In_ PSTR                           Node,
+    _Outptr_result_z_ PSTR              *Buffer
     );

 /*! \typedef XENBUS_STORE_PRINTF
@@ -139,11 +139,11 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENBUS_STORE_PRINTF)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node,
-    IN  const CHAR                  *Format,
+    _In_ PINTERFACE                     Interface,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PSTR                       Prefix,
+    _In_ PSTR                           Node,
+    _In_ PCSTR                          Format,
     ...
     );

@@ -159,10 +159,10 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENBUS_STORE_REMOVE)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node
+    _In_ PINTERFACE                     Interface,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PSTR                       Prefix,
+    _In_ PSTR                           Node
     );

 /*! \typedef XENBUS_STORE_DIRECTORY
@@ -181,11 +181,11 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENBUS_STORE_DIRECTORY)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node,
-    OUT PCHAR                       *Buffer
+    _In_ PINTERFACE                     Interface,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PSTR                       Prefix,
+    _In_ PSTR                           Node,
+    _Outptr_result_z_ PSTR              *Buffer
     );

 /*! \typedef XENBUS_STORE_TRANSACTION_START
@@ -196,8 +196,8 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENBUS_STORE_TRANSACTION_START)(
-    IN  PINTERFACE                  Interface,
-    OUT PXENBUS_STORE_TRANSACTION   *Transaction
+    _In_ PINTERFACE                     Interface,
+    _Outptr_ PXENBUS_STORE_TRANSACTION  *Transaction
     );

 /*! \typedef XENBUS_STORE_TRANSACTION_END
@@ -213,9 +213,9 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENBUS_STORE_TRANSACTION_END)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction,
-    IN  BOOLEAN                     Commit
+    _In_ PINTERFACE                 Interface,
+    _In_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_ BOOLEAN                    Commit
     );

 /*! \typedef XENBUS_STORE_WATCH_ADD
@@ -231,11 +231,11 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENBUS_STORE_WATCH_ADD)(
-    IN  PINTERFACE          Interface,
-    IN  PCHAR               Prefix OPTIONAL,
-    IN  PCHAR               Node,
-    IN  PKEVENT             Event,
-    OUT PXENBUS_STORE_WATCH *Watch
+    _In_ PINTERFACE                 Interface,
+    _In_opt_ PSTR                   Prefix,
+    _In_ PSTR                       Node,
+    _In_ PKEVENT                    Event,
+    _Outptr_ PXENBUS_STORE_WATCH    *Watch
     );

 /*! \typedef XENBUS_STORE_WATCH_REMOVE
@@ -246,8 +246,8 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENBUS_STORE_WATCH_REMOVE)(
-    IN  PINTERFACE          Interface,
-    IN  PXENBUS_STORE_WATCH Watch
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_STORE_WATCH    Watch
     );

 /*! \typedef XENBUS_STORE_POLL
@@ -262,7 +262,7 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENBUS_STORE_POLL)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );

 /*! \typedef XENBUS_STORE_PERMISSIONS_SET
@@ -279,12 +279,12 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENBUS_STORE_PERMISSIONS_SET)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node,
-    IN  PXENBUS_STORE_PERMISSION    Permissions,
-    IN  ULONG                       NumberPermissions
+    _In_ PINTERFACE                     Interface,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PSTR                       Prefix,
+    _In_ PSTR                           Node,
+    _In_ PXENBUS_STORE_PERMISSION       Permissions,
+    _In_ ULONG                          NumberPermissions
     );

 // {86824C3B-D34E-4753-B281-2F1E3AD214D7}
@@ -325,4 +325,4 @@ typedef struct _XENBUS_STORE_INTERFACE_V2 XENBUS_STORE_=
INTERFACE, *PXENBUS_STORE
 #define XENBUS_STORE_INTERFACE_VERSION_MIN  2
 #define XENBUS_STORE_INTERFACE_VERSION_MAX  2

-#endif  // _XENBUS_STORE_INTERFACE_H
+#endif  // _XENHID_STORE_INTERFACE_H
diff --git a/include/suspend_interface.h b/include/suspend_interface.h
index ee31d95..50b2085 100644
--- a/include/suspend_interface.h
+++ b/include/suspend_interface.h
@@ -36,8 +36,8 @@
     This interface provides primitives to handle VM suspend/resume
 */

-#ifndef _XENBUS_SUSPEND_INTERFACE_H
-#define _XENBUS_SUSPEND_INTERFACE_H
+#ifndef _XENHID_SUSPEND_INTERFACE_H
+#define _XENHID_SUSPEND_INTERFACE_H

 #ifndef _WINDLL

@@ -62,7 +62,7 @@ typedef struct _XENBUS_SUSPEND_CALLBACK   XENBUS_SUSPEND_=
CALLBACK, *PXENBUS_SUSP
 */
 typedef NTSTATUS
 (*XENBUS_SUSPEND_ACQUIRE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );

 /*! \typedef XENBUS_SUSPEND_RELEASE
@@ -72,7 +72,7 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENBUS_SUSPEND_RELEASE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );

 /*! \typedef XENBUS_SUSPEND_FUNCTION
@@ -87,7 +87,7 @@ typedef VOID
 */
 typedef VOID
 (*XENBUS_SUSPEND_FUNCTION)(
-    IN  PVOID   Argument
+    _In_ PVOID  Argument
     );

 /*! \typedef XENBUS_SUSPEND_REGISTER
@@ -101,11 +101,11 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENBUS_SUSPEND_REGISTER)(
-    IN  PINTERFACE                      Interface,
-    IN  XENBUS_SUSPEND_CALLBACK_TYPE    Type,
-    IN  XENBUS_SUSPEND_FUNCTION         Function,
-    IN  PVOID                           Argument OPTIONAL,
-    OUT PXENBUS_SUSPEND_CALLBACK        *Callback
+    _In_ PINTERFACE                     Interface,
+    _In_ XENBUS_SUSPEND_CALLBACK_TYPE   Type,
+    _In_ XENBUS_SUSPEND_FUNCTION        Function,
+    _In_opt_ PVOID                      Argument,
+    _Outptr_ PXENBUS_SUSPEND_CALLBACK   *Callback
     );

 /*! \typedef XENBUS_SUSPEND_DEREGISTER
@@ -116,8 +116,8 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENBUS_SUSPEND_DEREGISTER)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_SUSPEND_CALLBACK    Callback
+    _In_ PINTERFACE                 Interface,
+    _In_ PXENBUS_SUSPEND_CALLBACK   Callback
     );

 /*! \typedef XENBUS_SUSPEND_TRIGGER
@@ -129,7 +129,7 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENBUS_SUSPEND_TRIGGER)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );

 /*! \typedef XENBUS_SUSPEND_GET_COUNT
@@ -140,7 +140,7 @@ typedef NTSTATUS
 */
 typedef ULONG
 (*XENBUS_SUSPEND_GET_COUNT)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );

 // {0554F2AF-B510-4C71-AC03-1C503E394238}
@@ -174,4 +174,4 @@ typedef struct _XENBUS_SUSPEND_INTERFACE_V1 XENBUS_SUSP=
END_INTERFACE, *PXENBUS_S
 #define XENBUS_SUSPEND_INTERFACE_VERSION_MIN    1
 #define XENBUS_SUSPEND_INTERFACE_VERSION_MAX    1

-#endif  // _XENBUS_SUSPEND_INTERFACE_H
+#endif  // _XENHID_SUSPEND_INTERFACE_H
--
2.55.0.windows.5



--
C=E9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen Orchestra - Vates solutions

web: https://vates.tech


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 08 12:05:18 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 08 Oct 2026 12:05:18 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1443260.1660637 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xEms9-0004Z4-I8; Thu, 08 Oct 2026 12:05:17 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1443260.1660637; Thu, 08 Oct 2026 12:05:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xEms9-0004Yx-FR; Thu, 08 Oct 2026 12:05:17 +0000
Received: by outflank-mailman (input) for mailman id 1443260;
 Thu, 08 Oct 2026 12:05:16 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <david.preetham@citrix.com>) id 1xEms8-0004Yl-4c
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 12:05:16 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xEms7-004dWz-EB
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 14:05:15 +0200
Received: from [10.42.69.6] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <david.preetham@citrix.com>)
 id 6ac786f7-8faa-0a2a0a5109dd-0a2a4506ee3c-18
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 14:05:15 +0200
Received: from [209.85.218.53] (helo=mail-ej1-f53.google.com)
 by tlsNG-16d1c6.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <david.preetham@citrix.com>)
 id 6ac786fb-195a-0a2a45060019-d155da35b444-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 14:05:15 +0200
Received: by mail-ej1-f53.google.com with SMTP id
 a640c23a62f3a-c263415982eso404995066b.0
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 05:05:15 -0700 (PDT)
Received: from mewpvdipd1063.citrite.net ([52.166.251.127])
 by smtp.gmail.com with ESMTPSA id
 a640c23a62f3a-c317bdb318csm212163866b.3.2026.10.08.05.05.13
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Thu, 08 Oct 2026 05:05:13 -0700 (PDT)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=google header.d=citrix.com header.i="@citrix.com" header.h="Content-Transfer-Encoding:MIME-Version:Message-ID:Date:Subject:Cc:To:From"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=citrix.com; s=google; t=1791461115; x=1792065915; darn=lists.xenproject.org;
        h=content-transfer-encoding:mime-version:message-id:date:subject:cc
         :to:from:from:to:cc:subject:date:message-id:reply-to:content-type;
        bh=W7jHaAMJfcS2WLMjnGNJYMVqkOvmHaBat6j1IQdysJk=;
        b=Iy1zbFxYEBnbyKxS+Rc4PP0jPZxI6anlQ4LG2ANCr+RUY43WRcQWANPv/BwCUKYUEt
         HcKqtz9dxUXhG8xen44NoQoo49zKWR+JygnMge89DwLD3r8BeLJaQ8o0Rg3+rFNABNNy
         3RjDUIfVennK4voPxBZGaHCvaPv+Tz0/dr9sw=
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20260707; t=1791461115; x=1792065915;
        h=content-transfer-encoding:mime-version:message-id:date:subject:cc
         :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date
         :message-id:reply-to:content-type;
        bh=W7jHaAMJfcS2WLMjnGNJYMVqkOvmHaBat6j1IQdysJk=;
        b=Mo2WqctKhfIVg2H2Pqp2OAXFEuMUWaoo0+yfIRyCXDmQ52eivhjoC5bf8uIrZZ/6WN
         hKIjwc/pzXlZu8v3O3uQU8qi1KWRaJm2AP6yVSGq/y4xExbmMIE4kP1BqAPNAIdtaJhf
         rodsui0xraluFiTv+ehfFPGU61zKzjdhpuwsHfBJxn27dpLWvuWXZoYEGKC+A5k05Lg0
         B0UVtQoNYZlkHGODqMdT34ChBoLMSdXnpLToVEG59XSa0TaQMvqdhL1hm8+5KDCZD5pL
         x4nhw5XSMLlWpAs/C/fcz9oGH6ZZ9CafJmrkLw8CVuYry1oChSqufH4r5+ouYiRfyl1C
         G+3Q==
X-Gm-Message-State: AFuF++mev1E/DqOknoY8judOlTe8ofv4yvbbNl9S/S/DWEplYoym5Lb/
	i3CU79n6PhMfKr9bj/A+MqHXAir2xbKtGtkQuvWj/uaK0esfVw6LP6vd4aqb45Iv4Cx2N9gyxJJ
	H/Sz3
X-Gm-Gg: AYBFou0Wt0917eqyMqPQdyqFQJY+h6Q/erT+WqU22FpSwoK50Ep6nbZcMjWc4fxth3G
	uIaKdhuaw7BmfIAfyfHc7G2R7Oar6XvM+ORIe4X2rXcfyohMQv+/ljVdWsXqrohY/3jorGROmRh
	UbEVpXC4TCt5mGhO/pCz2HYaPtmtXXW/ynqTNw/2yxqLGy2tAzFKYeVRbZCfmk0WaltJKPATU1H
	5cQZJ3WUMtpk4MJB4yk8Kdck8S5Libg94LtQOPfv3wo8eUqwMRXbOeKcsig841ODh0t6J6JamY5
	g/uWP8A6j/e1vOjRGMWEWTuGpSEfCcg88l5hzE9XEPARJFOuqwC5Pv1lnEytUTUxLgfdGPKxB7U
	v+4LdasO2jj1n52ggZ0MkJkkiPm2cF1KtfVHcsVIL7E4wQRU0W0OQvbRTMPX+CiTllHtZdVR7DS
	QVpdi8IZZoEirBZD1OHm0Ow0M2wlDbZvSNkSiyaB3523X1J/j3s1JHDNCXhz2kHgs52Kiybv5TT
	NhKdjaig6BAljhYhRtDx2nlCsRF6zNQvqlO/rvdM9bkSY0h7Q==
X-Received: by 2002:a17:907:3d0f:b0:c25:c67d:53cc with SMTP id a640c23a62f3a-c317bd44156mr506107666b.8.1791461114122;
        Thu, 08 Oct 2026 05:05:14 -0700 (PDT)
From: david ambu <david.preetham@citrix.com>
To: win-pv-devel@lists.xenproject.org
Cc: david ambu <david.preetham@citrix.com>
Subject: [PATCH 01/10] xeniface: fix NULL KernelVa dereference in GnttabFreeGrant notify
Date: Thu,  8 Oct 2026 13:01:53 +0100
Message-ID: <20261008120204.859-1-david.preetham@citrix.com>
X-Mailer: git-send-email 2.51.0.windows.1
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-purgate-ID: tlsNG-16d1c6/1791461115-F560A77B-2EC54F79/0/0
X-purgate-type: clean
X-purgate-size: 1278

For V2 grants with user-supplied memory, KernelVa is NULL.
Fall back to UserVa for the notify offset write in that case.

Signed-off-by: david ambu <david.preetham@citrix.com>
Assisted by Claude Sonnet 4.6
---
 src/xeniface/ioctl_gnttab.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/src/xeniface/ioctl_gnttab.c b/src/xeniface/ioctl_gnttab.c
index 770f0dc..35767a2 100644
--- a/src/xeniface/ioctl_gnttab.c
+++ b/src/xeniface/ioctl_gnttab.c
@@ -482,7 +482,17 @@ GnttabFreeGrant(
     ASSERT(KeGetCurrentIrql() <= APC_LEVEL);
 
     if (Context->Flags & XENIFACE_GNTTAB_USE_NOTIFY_OFFSET) {
-        ((PCHAR)Context->KernelVa)[Context->NotifyOffset] = 0;
+        if (Context->KernelVa != NULL) {
+            ((PCHAR)Context->KernelVa)[Context->NotifyOffset] = 0;
+        } else {
+#pragma prefast(suppress:6320)
+            try {
+                ((PCHAR)Context->UserVa)[Context->NotifyOffset] = 0;
+            } except(EXCEPTION_EXECUTE_HANDLER) {
+                Error("Failed to write notify offset 0x%x: 0x%x\n",
+                      Context->NotifyOffset, GetExceptionCode());
+            }
+        }
     }
 
     if (Context->Flags & XENIFACE_GNTTAB_USE_NOTIFY_PORT) {
-- 
2.51.0.windows.1



From win-pv-devel-bounces@lists.xenproject.org Thu Oct 08 12:05:18 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 08 Oct 2026 12:05:18 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1443261.1660639 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xEms9-0004ZI-KZ; Thu, 08 Oct 2026 12:05:17 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1443261.1660639; Thu, 08 Oct 2026 12:05:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xEms9-0004Z8-Ge; Thu, 08 Oct 2026 12:05:17 +0000
Received: by outflank-mailman (input) for mailman id 1443261;
 Thu, 08 Oct 2026 12:05:16 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <david.preetham@citrix.com>) id 1xEms8-0004Ym-84
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 12:05:16 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xEms7-00CRYQ-Kq
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 14:05:15 +0200
Received: from [10.42.69.11] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <david.preetham@citrix.com>)
 id 6ac786f8-bab6-0a2a0a5309dd-0a2a450b940c-14
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 14:05:15 +0200
Received: from [209.85.208.48] (helo=mail-ed1-f48.google.com)
 by tlsNG-42698a.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <david.preetham@citrix.com>)
 id 6ac786fb-b7e8-0a2a450b0019-d155d030a856-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 14:05:15 +0200
Received: by mail-ed1-f48.google.com with SMTP id
 4fb4d7f45d1cf-6af9cc73235so1211065a12.0
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 05:05:15 -0700 (PDT)
Received: from mewpvdipd1063.citrite.net ([52.166.251.127])
 by smtp.gmail.com with ESMTPSA id
 a640c23a62f3a-c317bdb318csm212163866b.3.2026.10.08.05.05.14
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Thu, 08 Oct 2026 05:05:14 -0700 (PDT)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=google header.d=citrix.com header.i="@citrix.com" header.h="Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=citrix.com; s=google; t=1791461115; x=1792065915; darn=lists.xenproject.org;
        h=content-transfer-encoding:mime-version:references:in-reply-to
         :message-id:date:subject:cc:to:from:from:to:cc:subject:date
         :message-id:reply-to:content-type;
        bh=DNnkoTsoW1Mbpw+ukUhBURZRRNneCIFr+kyTkuWtseI=;
        b=pxFq+NTOIkE9Lqkx8VI4YeLO74Vqv0OuDzpOWBpx32I43lnCKBNjrFeO3+pTlXyRYv
         U+RJr4xwdc11XkToIJJ2/a80QuwYbMARJNerel4pgCgGnOvDqmoqFQF3ZOzNJhyc9YX5
         TqzPoYu6LLk+JTSlffLL00/7jiS/PnTzgaTlw=
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20260707; t=1791461115; x=1792065915;
        h=content-transfer-encoding:mime-version:references:in-reply-to
         :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from
         :to:cc:subject:date:message-id:reply-to:content-type;
        bh=DNnkoTsoW1Mbpw+ukUhBURZRRNneCIFr+kyTkuWtseI=;
        b=OtQMt1D5Z+Bgp2HFpPGaeDVR2LZ7Z+rQuIej3vrC9eshIq/rZuo0fMdhXrwtFEPluA
         7juR7a0RilXPsKatEeSAQ0JPhyg4OISh0l4KX3aP21ZkhR3PSBE9bo0UajBA2xIZwnv/
         jozaxIGWGyIuck7xTEhIvpAOsb0PfLNWBA83FM1lcVn8/CdIyAZgDePOQvVKXhnxUg0g
         dA9zW6xV7SwCwMpFy/5lkzT6iYAiWqXeRv3dEuJftR20djGa6ncxdfpVP9/F1nMdjvRQ
         hCXubIPdK/hVpG9XTfPdphKzSmQbKbv3aIJsdUsNYW4dedC48a8pWxeAhpFmYxnbrCC7
         YxvA==
X-Gm-Message-State: AFuF++kn9vIX4+9M56NfACdbOv6Rv0P+lU5zi2xO23rwxc3BuVGAdMRu
	cMaOEGjnjI/XMXsluPL/aaAHbhGnI4bOYot8xtIAd2oTis20h4/+LObCHPASGbc2o3q5d7ASVuG
	BI6EHmLg=
X-Gm-Gg: AYBFou0XnfGhJNjVkWeLpSgjSyEHHh0M7vpuF1zZqJR2lCnLd1C5gW3KLmZjDLuQdqN
	qBLFSoNxTjjvqGofVfaKymUgx+6zEQmGuhKVl7YAdvTtCutiq+zl8Hfe7FfueuhBruXfO5kN1nb
	i9tpioxunAL7ZlgH4h6Q1MYjhSTtn9wHBdO9j7OtLmod6gQDIIuvqr6MBsI7zwmUUXl3Qgn9C1/
	VH16DuC+79s2XRGYZbnm9WbuSGLYkt2jMtH4zR7wHfH9FFi9ClCUH+4nn2KDA3qO4GU8vtkx21F
	1qiFbjz5CS/eMK7Ek/KiMhB/C3GPbsHlU2ZgWq7efBATmpTP3T9zp5gsIAzqWIEaQGKMRxWLj9V
	ScE/zACPvC2xo0Sa6/WmAejnb7Lk+EhzGY3eVYJZolHXihRpHJugNVWSPFigMwnfLP8ULe4q0R1
	UMECe7wb8iPkdN3k8idxRn5zMzVCpq9Q1rorO/wMX5lRMuVhApPC8EpbngGXqetciiZG2mLeh+T
	mQE0KO/XL8GhPZ2M4YMCnch8BxU/B8twW1FE4U=
X-Received: by 2002:a17:907:d386:b0:c25:f7dc:2d9 with SMTP id a640c23a62f3a-c3191db358emr197234366b.26.1791461114866;
        Thu, 08 Oct 2026 05:05:14 -0700 (PDT)
From: david ambu <david.preetham@citrix.com>
To: win-pv-devel@lists.xenproject.org
Cc: david ambu <david.preetham@citrix.com>
Subject: [PATCH 02/10] xeniface: fix V1 grant IOCTL always failing with STATUS_INVALID_PARAMETER
Date: Thu,  8 Oct 2026 13:01:54 +0100
Message-ID: <20261008120204.859-2-david.preetham@citrix.com>
X-Mailer: git-send-email 2.51.0.windows.1
In-Reply-To: <20261008120204.859-1-david.preetham@citrix.com>
References: <20261008120204.859-1-david.preetham@citrix.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-purgate-ID: tlsNG-42698a/1791461115-A84CB9EA-D7F42A29/0/0
X-purgate-type: clean
X-purgate-size: 848

Self-assignment In->NumberPages = In->NumberPages left the field zero.
Should be In->NumberPages = In1->NumberPages.

Signed-off-by: david ambu <david.preetham@citrix.com>
Assisted by Claude Sonnet 4.6
---
 src/xeniface/ioctl_gnttab.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/xeniface/ioctl_gnttab.c b/src/xeniface/ioctl_gnttab.c
index 35767a2..da8008d 100644
--- a/src/xeniface/ioctl_gnttab.c
+++ b/src/xeniface/ioctl_gnttab.c
@@ -345,7 +345,7 @@ IoctlGnttabPermitForeignAccess(
 
         In->RemoteDomain = In1->RemoteDomain;
         In->Address = NULL;
-        In->NumberPages = In->NumberPages;
+        In->NumberPages = In1->NumberPages;
         In->Flags = In1->Flags;
         In->NotifyOffset = In1->NotifyOffset;
         In->NotifyPort = In1->NotifyPort;
-- 
2.51.0.windows.1



From win-pv-devel-bounces@lists.xenproject.org Thu Oct 08 12:05:19 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 08 Oct 2026 12:05:19 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1443262.1660644 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xEmsB-0004cA-KO; Thu, 08 Oct 2026 12:05:19 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1443262.1660644; Thu, 08 Oct 2026 12:05:19 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xEmsB-0004c3-Hr; Thu, 08 Oct 2026 12:05:19 +0000
Received: by outflank-mailman (input) for mailman id 1443262;
 Thu, 08 Oct 2026 12:05:17 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <david.preetham@citrix.com>) id 1xEms9-0004Zm-RH
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 12:05:17 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xEms9-00CRYQ-7x
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 14:05:17 +0200
Received: from [10.42.69.11] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <david.preetham@citrix.com>)
 id 6ac786f8-bab6-0a2a0a5309dd-0a2a450b940c-30
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 14:05:17 +0200
Received: from [209.85.218.50] (helo=mail-ej1-f50.google.com)
 by tlsNG-42698a.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <david.preetham@citrix.com>)
 id 6ac786fd-b7e8-0a2a450b0019-d155da32ac36-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 14:05:17 +0200
Received: by mail-ej1-f50.google.com with SMTP id
 a640c23a62f3a-c2dc63f8d8aso461879366b.0
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 05:05:17 -0700 (PDT)
Received: from mewpvdipd1063.citrite.net ([52.166.251.127])
 by smtp.gmail.com with ESMTPSA id
 a640c23a62f3a-c317bdb318csm212163866b.3.2026.10.08.05.05.15
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Thu, 08 Oct 2026 05:05:15 -0700 (PDT)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=google header.d=citrix.com header.i="@citrix.com" header.h="Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=citrix.com; s=google; t=1791461116; x=1792065916; darn=lists.xenproject.org;
        h=content-transfer-encoding:mime-version:references:in-reply-to
         :message-id:date:subject:cc:to:from:from:to:cc:subject:date
         :message-id:reply-to:content-type;
        bh=LmvEfmnhcbFAOfOviQaiRaT3yqJlvrjiFdWYvSPkkEA=;
        b=Qk2RCOC2h+/ouRyxzAw2f6+MonL2g9QFUeB4R9I0t8IMhaEtvqyYwl2XusO0SXxWht
         QQcrRS1aU2rao6FRgMO8LnpPfbdF9sLVqjuboo4iWg4j3BEpTSYZ7n4NEbAa6DxV9wvS
         1PANIocwkdKAI4+kA/PMl7Vo/et0k1vZLXRbk=
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20260707; t=1791461116; x=1792065916;
        h=content-transfer-encoding:mime-version:references:in-reply-to
         :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from
         :to:cc:subject:date:message-id:reply-to:content-type;
        bh=LmvEfmnhcbFAOfOviQaiRaT3yqJlvrjiFdWYvSPkkEA=;
        b=VJe5v+IOQp2pxc4lRe8dKN7xvFd5xvTxum6RBn9tzbsJLrjuDiGQPdiNtWN/f+ZQ2O
         DtxUCMv9hfUp0J43cbyyDSs1ekyGkpIxEKQU3XG9prn4Fe8LD+wAThZHne1QG5EYPPqB
         1vjrd6cv1frx+XxiuJf4JOVJkE9vw8Oisk1MjpUCnshsIVOqqQPR20ofmSXu7YpaOp6q
         c17tO6IEqAj0Wx3P6Q3w7R2cKYRIWn6yBE+cQH1Hp6u8IIIMR/BvwtFhbrzdMNnAc8Zk
         TnLuuads/pEPXl5wV4UvLVMbTo2DxbaEJm2kbjuHmxQXVIR0GfvrcXSdf27X+dIbxsDN
         gy0A==
X-Gm-Message-State: AFuF++mbE5Lf8F9imCql1p4zErZXv1zgT+6xmTKqP+kjg8UtBttBac6K
	ETirYJRtR7UuYwFkeoqvC7mzzpDl4W+fcb4UDWWjNrhHmnRYq9rAYBiOHf9WQD3rhZbSgHHTA3x
	qSrsx
X-Gm-Gg: AYBFou2gaVYEaEFSWO/ecam62S4M04fm4cx0ccD0cqTBJnRPGNozd/86tvTajRVAgy8
	jx6f/cjBT8JQokQUdyC7xJYMQXlR1tfo4tqO85gl+ch9XHxHNMA76sZH7GTtRcFL0FTwnpcZNq5
	S14f5v9UBLxa+UPTE0gslPcxV4CsafYW1B/vcdNGvmyo7scm4qTyz+TFVekfWZiD0fvYYHW7K9d
	EIXgCtYApPDVWbmDTgbjRVsr7mORVObdo7DbkhzZ6Pj2ErTcLFzKyIHjjpiaJRQueZkg40A9MJy
	as3iBRB/k7lsmjzqerfBqp1uiYI0rXMQ3k7BdRjXGmRSvJLw5ke+KaxR6BKtC+U1zJcXc5PbCDe
	2e45/xr3WwW5WWVNy+kVSwdE6iJAmWAbtpwpSYss2t3NskeTnMyCR3DOiwc9/vSn4UapEDOeYii
	3JYkhjVP3MtOK8z0qz22UxWegxPiFISkafNvcCYPxF2g2ro0WOL1Dr5QLNNvHhq1agkWv0iuO9W
	5Z8o0pkGg6EP3sSnEETCv9PUhgIFaldaGAcUsc=
X-Received: by 2002:a17:907:3d11:b0:c24:87e5:6491 with SMTP id a640c23a62f3a-c317bba31dbmr512017866b.2.1791461116158;
        Thu, 08 Oct 2026 05:05:16 -0700 (PDT)
From: david ambu <david.preetham@citrix.com>
To: win-pv-devel@lists.xenproject.org
Cc: david ambu <david.preetham@citrix.com>
Subject: [PATCH 03/10] xeniface: close thread handle after ObReferenceObjectByHandle in session create
Date: Thu,  8 Oct 2026 13:01:55 +0100
Message-ID: <20261008120204.859-3-david.preetham@citrix.com>
X-Mailer: git-send-email 2.51.0.windows.1
In-Reply-To: <20261008120204.859-1-david.preetham@citrix.com>
References: <20261008120204.859-1-david.preetham@citrix.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-purgate-ID: tlsNG-42698a/1791461117-198C19EA-90BC643D/0/0
X-purgate-type: clean
X-purgate-size: 974

PsCreateSystemThread creates a kernel handle that was never closed.
Add ZwClose(hthread) after taking the object reference via
ObReferenceObjectByHandle, releasing the handle table entry
immediately as it is no longer needed.

Signed-off-by: david ambu <david.preetham@citrix.com>
Assisted by Claude Sonnet 4.6
---
 src/xeniface/wmi.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/xeniface/wmi.c b/src/xeniface/wmi.c
index 3392d3d..f2b4802 100644
--- a/src/xeniface/wmi.c
+++ b/src/xeniface/wmi.c
@@ -1218,7 +1218,8 @@ SessionCreate(
     if (!NT_SUCCESS(status))
         goto fail6;
 
-    ObReferenceObjectByHandle(hthread, THREAD_ALL_ACCESS, NULL, KernelMode,  &Session->WatchThread, NULL);
+    ObReferenceObjectByHandle(hthread, THREAD_ALL_ACCESS, NULL, KernelMode, &Session->WatchThread, NULL);
+    ZwClose(hthread);
     ReleaseMutex(&Fdo->SessionLock);
 
     RtlFreeAnsiString(&ansi);
-- 
2.51.0.windows.1



From win-pv-devel-bounces@lists.xenproject.org Thu Oct 08 12:05:20 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 08 Oct 2026 12:05:20 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1443263.1660649 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xEmsC-0004dy-Lh; Thu, 08 Oct 2026 12:05:20 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1443263.1660649; Thu, 08 Oct 2026 12:05:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xEmsC-0004dp-J1; Thu, 08 Oct 2026 12:05:20 +0000
Received: by outflank-mailman (input) for mailman id 1443263;
 Thu, 08 Oct 2026 12:05:19 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <david.preetham@citrix.com>) id 1xEmsB-0004bk-1v
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 12:05:19 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xEmsA-00Fpyg-Es
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 14:05:18 +0200
Received: from [10.42.69.7] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <david.preetham@citrix.com>)
 id 6ac786f5-e002-0a2a0a5209dd-0a2a4507a676-26
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 14:05:18 +0200
Received: from [209.85.208.48] (helo=mail-ed1-f48.google.com)
 by tlsNG-ef75cf.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <david.preetham@citrix.com>)
 id 6ac786fe-b4ea-0a2a45070019-d155d030c55f-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 14:05:18 +0200
Received: by mail-ed1-f48.google.com with SMTP id
 4fb4d7f45d1cf-6acba4bf65eso1918256a12.1
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 05:05:18 -0700 (PDT)
Received: from mewpvdipd1063.citrite.net ([52.166.251.127])
 by smtp.gmail.com with ESMTPSA id
 a640c23a62f3a-c317bdb318csm212163866b.3.2026.10.08.05.05.16
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Thu, 08 Oct 2026 05:05:16 -0700 (PDT)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=google header.d=citrix.com header.i="@citrix.com" header.h="Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=citrix.com; s=google; t=1791461118; x=1792065918; darn=lists.xenproject.org;
        h=content-transfer-encoding:mime-version:references:in-reply-to
         :message-id:date:subject:cc:to:from:from:to:cc:subject:date
         :message-id:reply-to:content-type;
        bh=vV07QtXhjCXtun43/OzrzvGKm8kr0Hry/LWWn6XYhlA=;
        b=KvkPLPzCxyLjV1aTr/qRuNv/5suIJse+gO/5iSu7qGlbhjkMTalv8jTZlY813GVygN
         /5O7GtJ60uWZ6eujZyN2oASnvlp0bo9sPw4VXjnZKg2ksJ0GkX3o9tahTqOjpkyfkVzv
         OW7fNTUjHIFViv4P7/pP0H26raIHWurivQQCo=
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20260707; t=1791461118; x=1792065918;
        h=content-transfer-encoding:mime-version:references:in-reply-to
         :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from
         :to:cc:subject:date:message-id:reply-to:content-type;
        bh=vV07QtXhjCXtun43/OzrzvGKm8kr0Hry/LWWn6XYhlA=;
        b=c+sH61Gf7DPuPk/paQLwMXo4MLfVPeeywxhvIl+pTrs1FAIOHqm+0esBFeRUfna8lr
         JvlHxQNxK3t8aQpTcstNaDJW6VMsdxWEEzXCYSAqb0uWQN+AXKymlU4xVVdW3ZA2CDnx
         FzR0GRVG/SyAPVv3j+wSxvKdGyn+SqEiknLlOwyq3Ao75ngGu7EEREEsW4kbXgrl6x9X
         33CAP3gwLn7wI3NWMyCBRPaHoRGLzgNSI8LWcqTo2ULMtso4fZ1WoXhb7/zL8dU2BePD
         plv8himoL7YGZ/2mFwsWJn/41k/se68pkuvn7vbP3iH+GG+kiaRIi7c6dCKRXXPHJ/dy
         Hzhw==
X-Gm-Message-State: AFuF++nsNymxlTVbtHaDBk4ShkkdCX9pHVceAPupfND91LQbJj1BAn+9
	Tk1g9mLW5SMPXpH6KInWa/TN36uRw5qOtx2tU3k5f+SAxK2bCd2pnw6axR6aVYOndYpIemCxgmQ
	5mD0O
X-Gm-Gg: AYBFou142sqGQj9z+zyjpwRHUMfe0NBkoUfk7GuWeN+ifZB726+ejf0J8BughTQthNG
	Xo5LRH2b0/FK9HuBmoonQisdnRTUcC5qMd91W6QucQ9BnvUatOPR/9iET1Zz3sXNJJnuWAeXuwS
	kHh3+EaJB6sSFWgXzk9pTgOToLm7OVIaWIm+DGuXvS+s2QLLEPKOGJPTiB1aq+49FfmszCoYAWs
	us6iO1aqT2SGdLyw437P2+OlTzNOGGlMcSwkwU8K7cQT0N+v8EyuhSBvkxw1U2QIK1fVQXpCKdT
	+LKYT7JHywOS7qyR90NBq4OICPNn222ibZDa1C5n/lZSCKiQHWUqEa/g02Vno6Wna8Z9cW+KGeg
	d5KKpUZYsrBCDSlUX+AOWoJqD9znmUwM27pSooz2mvvJBE0PQva7K3tblfCkNVMmizZSP7UYjsN
	q6IeRT6DQLwVb8DaeyrQB/Eqg9ARkaE9JzjS+HFvqCfLqa+/4uY1PZJFQHsfb6CCc+Z7NrpGEKy
	w09ly/rl+NpuMKFqKhNS7Z9LViGqkSFtfhu7lk=
X-Received: by 2002:a17:907:971d:b0:c26:1691:b364 with SMTP id a640c23a62f3a-c317be2171bmr520960166b.29.1791461116822;
        Thu, 08 Oct 2026 05:05:16 -0700 (PDT)
From: david ambu <david.preetham@citrix.com>
To: win-pv-devel@lists.xenproject.org
Cc: david ambu <david.preetham@citrix.com>
Subject: [PATCH 04/10] xeniface: fix __MultiSzLen never incrementing string count
Date: Thu,  8 Oct 2026 13:01:56 +0100
Message-ID: <20261008120204.859-4-david.preetham@citrix.com>
X-Mailer: git-send-email 2.51.0.windows.1
In-Reply-To: <20261008120204.859-1-david.preetham@citrix.com>
References: <20261008120204.859-1-david.preetham@citrix.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-purgate-ID: tlsNG-ef75cf/1791461118-A76D2AE4-E84D464E/0/0
X-purgate-type: clean
X-purgate-size: 778

if (*Count) checked the value which is always 0, so Count
was never incremented and callers always received 0 strings.
Change to if (Count) to guard the pointer as intended.

Signed-off-by: david ambu <david.preetham@citrix.com>
Assisted by Claude Sonnet 4.6
---
 src/xeniface/ioctl_store.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/xeniface/ioctl_store.c b/src/xeniface/ioctl_store.c
index dbe197b..5e422b5 100644
--- a/src/xeniface/ioctl_store.c
+++ b/src/xeniface/ioctl_store.c
@@ -87,7 +87,7 @@ __MultiSzLen(
     do {
         for ( ; *Str; ++Str, ++Length) ;
         ++Str; ++Length;
-        if (*Count) ++(*Count);
+        if (Count) ++(*Count);
     } while (*Str);
     return Length;
 }
-- 
2.51.0.windows.1



From win-pv-devel-bounces@lists.xenproject.org Thu Oct 08 12:05:21 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 08 Oct 2026 12:05:21 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1443264.1660653 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xEmsD-0004fe-NE; Thu, 08 Oct 2026 12:05:21 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1443264.1660653; Thu, 08 Oct 2026 12:05:21 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xEmsD-0004fW-KK; Thu, 08 Oct 2026 12:05:21 +0000
Received: by outflank-mailman (input) for mailman id 1443264;
 Thu, 08 Oct 2026 12:05:19 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <david.preetham@citrix.com>) id 1xEmsB-0004cK-Qm
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 12:05:19 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xEmsB-00CRbe-6y
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 14:05:19 +0200
Received: from [10.42.69.2] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <david.preetham@citrix.com>)
 id 6ac786fd-bab6-0a2a0a5309dd-0a2a4502e878-8
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 14:05:19 +0200
Received: from [209.85.218.52] (helo=mail-ej1-f52.google.com)
 by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <david.preetham@citrix.com>)
 id 6ac786ff-6ca4-0a2a45020019-d155da34d04b-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 14:05:19 +0200
Received: by mail-ej1-f52.google.com with SMTP id
 a640c23a62f3a-c2e4df2e26fso379689766b.2
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 05:05:19 -0700 (PDT)
Received: from mewpvdipd1063.citrite.net ([52.166.251.127])
 by smtp.gmail.com with ESMTPSA id
 a640c23a62f3a-c317bdb318csm212163866b.3.2026.10.08.05.05.17
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Thu, 08 Oct 2026 05:05:17 -0700 (PDT)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=google header.d=citrix.com header.i="@citrix.com" header.h="Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=citrix.com; s=google; t=1791461119; x=1792065919; darn=lists.xenproject.org;
        h=content-transfer-encoding:mime-version:references:in-reply-to
         :message-id:date:subject:cc:to:from:from:to:cc:subject:date
         :message-id:reply-to:content-type;
        bh=VyYXHsVRX5+/ggJQEHUl9jh/oKbsCgAoGU5SPV1u80g=;
        b=GCZgEkjZwOtREt+hz37kofIuSZjWYKwdbp+v1XPH0T7bRdOkwa33YuWYJ/YBcnQZLi
         21mndDAnyFcfzZZC+dH1rQdRbCL7ZM5P4tetHW/e4FMd68iCmta/J+6m7AQqWEvPkH6h
         FMRx5p5IpBStpQTMO+s8ZZS678wkf2CuNInP0=
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20260707; t=1791461119; x=1792065919;
        h=content-transfer-encoding:mime-version:references:in-reply-to
         :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from
         :to:cc:subject:date:message-id:reply-to:content-type;
        bh=VyYXHsVRX5+/ggJQEHUl9jh/oKbsCgAoGU5SPV1u80g=;
        b=rFUzQ9P4++4WkyaA54xhghaqmXfC2J0CuAz7hBeaafHNeWjEMBO0UW0p3C01CEVMou
         gQy68IXocm01UPo6S98IlotgYmoEMIwSSiD1fQBmB1mhNpXmMa9V1Fky1MVRP7tbca6R
         jDbuDPd088kBvRLxCWjHHE+1B4dbVurLlVTAOUhhGOciiEOEyFrZ8fYkCXDX9HrXOxyc
         q4EwranPACduLUOgtIIbLaL81A8aqK4WoLL6jLuB9AMGyJH+w61cGX48fhTaXueYSwt6
         V8yyp0JIW8bKsvs1rwUhY8Mu1mWM8BliIdTVpGqk76sLUr5xFJTZ8Y9smCGCatcrKxjM
         3/cQ==
X-Gm-Message-State: AFuF++nR5jhTe8Uh7uF+XgExBmbToyK/m71BKhgtNBkN2JvRi24KFyNr
	JJUi6lnLrfP+MCfVmTNghy2kBZqqyNsCe0FLnfWJQaBDLtMjBDwGwkBkOx0NmyFFeKDggKmL2Tr
	53d7IzbU=
X-Gm-Gg: AYBFou0bXBuVu7D4OdMZo6c/voYWs1UbwisVdk2PMFIrcJiYc7RiOQ87Zhj+Wbx1FmD
	j9Rx9GnScFXRMxYkmf3ujyXKUoh6bMnlV4FcmoLo1pXX6hXtWbLRTDTcU7oDALKPYd3Xlz0uODy
	HSPq7uZ4u8QymCyON2bsP8MwULXGnFaHs8avShgN49Ii3bGZUIciySFObUXrQWGFc/seulACqdx
	QFE2oXaH0yD0Ao6RNNKhinVpuH7CwrG5ocsjNDY+PJRispHak3vmCLfKB1e+B3Sv7vYAR05xc+k
	3SmkIVbyqHT2WQNx4NkqqbqDSUfH9HrlBbSeQGSojTVSKeS4voDPNy65AojpPBWDvKck2Rl826I
	0bdQk8pwUEjcqFXKGHfAcM6SSeMO37XQ5ODVsesytqAoDWBv5c7UguSC4K9GFMRb/MdyBJ0j0np
	piCmxKJG1UQAo4DN+kUVUS3M0vWj3puZBV7MhlP5clgKsJTPsyfLrUBjmXkcjKHqiGsUyjoiTzQ
	DfgVGYqG7rf3mWWdAU1UyR+HLJ3Hnxjm15DEIq4Y1fDV0VG3g==
X-Received: by 2002:a17:906:c106:b0:c2e:2fb6:ff37 with SMTP id a640c23a62f3a-c317bdb14fbmr498407166b.21.1791461118361;
        Thu, 08 Oct 2026 05:05:18 -0700 (PDT)
From: david ambu <david.preetham@citrix.com>
To: win-pv-devel@lists.xenproject.org
Cc: david ambu <david.preetham@citrix.com>
Subject: [PATCH 05/10] xeniface: fix copy-paste error in fail9 log message in FdoCreate
Date: Thu,  8 Oct 2026 13:01:57 +0100
Message-ID: <20261008120204.859-5-david.preetham@citrix.com>
X-Mailer: git-send-email 2.51.0.windows.1
In-Reply-To: <20261008120204.859-1-david.preetham@citrix.com>
References: <20261008120204.859-1-david.preetham@citrix.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-purgate-ID: tlsNG-720697/1791461119-F06A72AC-3251A2E2/0/0
X-purgate-type: clean
X-purgate-size: 671

fail9 was printing "fail8", masking SharedInfoInterface failures
in debug output.

Signed-off-by: david ambu <david.preetham@citrix.com>
Assisted by Claude Sonnet 4.6
---
 src/xeniface/fdo.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/xeniface/fdo.c b/src/xeniface/fdo.c
index 7f9c471..8911eac 100644
--- a/src/xeniface/fdo.c
+++ b/src/xeniface/fdo.c
@@ -2553,7 +2553,7 @@ fail10:
                   sizeof (XENBUS_SHARED_INFO_INTERFACE));
 
 fail9:
-    Error("fail8\n");
+    Error("fail9\n");
 
     RtlZeroMemory(&Fdo->SuspendInterface,
                   sizeof (XENBUS_SUSPEND_INTERFACE));
-- 
2.51.0.windows.1



From win-pv-devel-bounces@lists.xenproject.org Thu Oct 08 12:05:22 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 08 Oct 2026 12:05:22 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1443265.1660656 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xEmsE-0004hS-OQ; Thu, 08 Oct 2026 12:05:22 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1443265.1660656; Thu, 08 Oct 2026 12:05:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xEmsE-0004hO-La; Thu, 08 Oct 2026 12:05:22 +0000
Received: by outflank-mailman (input) for mailman id 1443265;
 Thu, 08 Oct 2026 12:05:21 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <david.preetham@citrix.com>) id 1xEmsD-0004fE-4c
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 12:05:21 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xEmsC-005W5y-Hk
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 14:05:20 +0200
Received: from [10.42.69.9] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <david.preetham@citrix.com>)
 id 6ac786f8-2eae-0a2a0a5409dd-0a2a4509b130-10
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 14:05:20 +0200
Received: from [209.85.218.52] (helo=mail-ej1-f52.google.com)
 by tlsNG-bad1c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <david.preetham@citrix.com>)
 id 6ac78700-be1a-0a2a45090019-d155da34addb-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 14:05:20 +0200
Received: by mail-ej1-f52.google.com with SMTP id
 a640c23a62f3a-c2acc1e170cso467898566b.1
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 05:05:20 -0700 (PDT)
Received: from mewpvdipd1063.citrite.net ([52.166.251.127])
 by smtp.gmail.com with ESMTPSA id
 a640c23a62f3a-c317bdb318csm212163866b.3.2026.10.08.05.05.18
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Thu, 08 Oct 2026 05:05:18 -0700 (PDT)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=google header.d=citrix.com header.i="@citrix.com" header.h="Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=citrix.com; s=google; t=1791461120; x=1792065920; darn=lists.xenproject.org;
        h=content-transfer-encoding:mime-version:references:in-reply-to
         :message-id:date:subject:cc:to:from:from:to:cc:subject:date
         :message-id:reply-to:content-type;
        bh=nzNwvTU3ziI3iaAiE1q54rdHDHwLFVmp3yK1UZ3wG6Q=;
        b=X+Jb61d4P+f305ji7yiOmyr8N0u7ZNHwsJItAeP0f98uJSEULH4v4XST3CTQU7sfzn
         lp3ouAsuaWgk4dYYpnm+F+9wpFRwDynx60mStTYY4FZFOQmLKneoiN/Dd78jGJFyEMYz
         GmS8c/YfkKoVpqEMzaH5FH7VZiiUCyGBGKeRw=
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20260707; t=1791461120; x=1792065920;
        h=content-transfer-encoding:mime-version:references:in-reply-to
         :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from
         :to:cc:subject:date:message-id:reply-to:content-type;
        bh=nzNwvTU3ziI3iaAiE1q54rdHDHwLFVmp3yK1UZ3wG6Q=;
        b=YBnc+Xis0ikTFE6YoqsbW7Zib33ciOT7hD9Fp5Pf5ngQ/EvEEatrgxmaqFaKlkHGjr
         N3kEXBzjPez1cevYqQwlTIO6KJZ84566yj6uSdCh+Sxr/0bFsOmX+/rLcW1glcFCD/UV
         fCJ9wZCO+0BzB3EW7Vj9LY2iATSaMbc1GOZ7IRjkKMz9lOTExgqP2s/xY/WKcy9nZIKq
         mG/UCHkfK6rAmPpFvKy4kT+hPHgs5wDxKvHrJ5hSImeSujtLgG9Cn2cnvpmQcLBY9K2Z
         nlebRj+V+ng52UoOTCI2IFJy5PpakgxnwvxqVakNfydRTv3lzvXs669GpboGAQXNJfur
         Ns9A==
X-Gm-Message-State: AFuF++mia3zlYvWufBrms+cM93AcN48x3itRFalyO4b+sWmEHO0JM7Eq
	sXkxrF0PE2V6X4x0TNHk6KquGojYyfHSBaPOHnUiWJJvGGI+Q9tII9p3EWDBiWpGKfSaUOPfiha
	QiweXVKg=
X-Gm-Gg: AYBFou1ItMcUkITFLT9sD6TeKTAIVvs2DNUXIGD/qRrgp5mqHAKXYAmrTTrrFGKul7E
	5Dh1jhhNMoT5TfXQT5zGqBdnfQsd8UqXO8zwZO1jqT8cMwwfMJGmk8FZkr695Jpx0lK+xiXZwGo
	ZrYKQPR7WMwRv2/gt7Gi3MrIV+Ccq3Q+oJ3dxHLqfwxr18ADzqQtLpmO1rpXrF6IhV7xVXI7kTY
	ytXTWZhtl71pbGBe6Xf6sP9izQfCcz8I4ZZuwvJnzYX0ZtzMneCPzIYcqUX5rVjAr3jRKMpDMqj
	xOCttRM4jbBhlnqFfpmnj0gZRciQaLmbSktFj80QlrhOdXNgruzqTHpIp9LxtjupF072r9oi7A3
	wqseFQp0TDJgSwtrXM32Joqd7behY3w+2X2bwfajNhNDaG9PHjUYOLG44LJdqbAZBVkSpygDHWS
	2gOlvqwpSLtg217clAbgru7aVMqAiiv+3G8OfXpp0lzNlAVqbbFFPyFBQO9YJZ8rP8z2eWvtqZL
	x2F1XIMJfkOUquESJezX0Tuz/q7O828g9A5q0Y=
X-Received: by 2002:a17:907:6e89:b0:c29:f5d8:9c7c with SMTP id a640c23a62f3a-c317c14ac97mr462802266b.43.1791461119758;
        Thu, 08 Oct 2026 05:05:19 -0700 (PDT)
From: david ambu <david.preetham@citrix.com>
To: win-pv-devel@lists.xenproject.org
Cc: david ambu <david.preetham@citrix.com>
Subject: [PATCH 06/10] xeniface: log error when StoreFreeWatch WatchRemove fails in retail
Date: Thu,  8 Oct 2026 13:01:58 +0100
Message-ID: <20261008120204.859-6-david.preetham@citrix.com>
X-Mailer: git-send-email 2.51.0.windows.1
In-Reply-To: <20261008120204.859-1-david.preetham@citrix.com>
References: <20261008120204.859-1-david.preetham@citrix.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-purgate-ID: tlsNG-bad1c0/1791461120-3BCD7034-CB04BBD2/0/0
X-purgate-type: clean
X-purgate-size: 908

ASSERT is stripped in retail. Add an Error() so teardown failures
are visible in traces without changing behavior.

Signed-off-by: david ambu <david.preetham@citrix.com>
Assisted by Claude Sonnet 4.6
---
 src/xeniface/ioctl_store.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/xeniface/ioctl_store.c b/src/xeniface/ioctl_store.c
index 5e422b5..e0072f0 100644
--- a/src/xeniface/ioctl_store.c
+++ b/src/xeniface/ioctl_store.c
@@ -654,6 +654,9 @@ StoreFreeWatch(
                           Context->Watch);
 
     ASSERT(NT_SUCCESS(status)); // this is fatal since we'd leave an active watch without cleaning it up
+    if (!NT_SUCCESS(status))
+        Error("WatchRemove failed 0x%x: watch %p may fire on freed context %p\n",
+              status, Context->Watch, Context);
 
     ThreadAlert(Context->Thread);
     ThreadJoin(Context->Thread);
-- 
2.51.0.windows.1



From win-pv-devel-bounces@lists.xenproject.org Thu Oct 08 12:05:32 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 08 Oct 2026 12:05:32 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1443266.1660660 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xEmsO-0004oU-Q6; Thu, 08 Oct 2026 12:05:32 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1443266.1660660; Thu, 08 Oct 2026 12:05:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xEmsO-0004oN-Nd; Thu, 08 Oct 2026 12:05:32 +0000
Received: by outflank-mailman (input) for mailman id 1443266;
 Thu, 08 Oct 2026 12:05:31 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <david.preetham@citrix.com>) id 1xEmsN-0004nM-2z
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 12:05:31 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xEmsM-004dcH-Fk
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 14:05:30 +0200
Received: from [10.42.69.5] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <david.preetham@citrix.com>)
 id 6ac78707-bab6-0a2a0a5309dd-0a2a4505a8a0-8
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 14:05:30 +0200
Received: from [209.85.208.43] (helo=mail-ed1-f43.google.com)
 by tlsNG-c201ff.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <david.preetham@citrix.com>)
 id 6ac7870a-4cb1-0a2a45050019-d155d02bcd47-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 14:05:30 +0200
Received: by mail-ed1-f43.google.com with SMTP id
 4fb4d7f45d1cf-6a0a4aa99bdso3933437a12.1
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 05:05:30 -0700 (PDT)
Received: from mewpvdipd1063.citrite.net ([52.166.251.127])
 by smtp.gmail.com with ESMTPSA id
 a640c23a62f3a-c317bdb318csm212163866b.3.2026.10.08.05.05.19
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Thu, 08 Oct 2026 05:05:20 -0700 (PDT)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=google header.d=citrix.com header.i="@citrix.com" header.h="Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=citrix.com; s=google; t=1791461130; x=1792065930; darn=lists.xenproject.org;
        h=content-transfer-encoding:mime-version:references:in-reply-to
         :message-id:date:subject:cc:to:from:from:to:cc:subject:date
         :message-id:reply-to:content-type;
        bh=eAzbGd/vs708Cf36X4NnBnUe26dfqSpRZUoXHu7jy8A=;
        b=raHix2UecLpPlWkxWH/mecbIOkiWlkaFzBffz7C7FS7blBNmQtl81byrE4JLZ3IRpQ
         bzWlT/ML8Azr7haUVwCgD234oTEMDYF+Hh7NLpa16QYwZDfHUltsF75BX6+7Qo0goL3Q
         Zrexu6Musp1ZCY2jhAp4IxWOtKoEuHjxmskm0=
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20260707; t=1791461130; x=1792065930;
        h=content-transfer-encoding:mime-version:references:in-reply-to
         :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from
         :to:cc:subject:date:message-id:reply-to:content-type;
        bh=eAzbGd/vs708Cf36X4NnBnUe26dfqSpRZUoXHu7jy8A=;
        b=WUecOQU9wx4+xnwi5qxiMtFxV2h6sK0a/GXgfGtFL8FXwwt0lyLRq+SaqzAnK1HCTH
         cdqrq5e4Mbgqfcesu+gvccnkaJOB/8wB+LTqzC3klvjZ+RVGQ4YjReTua83W6HiMsSh4
         89zx8Pc2cUK/TuW5lL0/lU0HRdbjjKEXaLuoSyx0ywj5u2HkKSZQXoPXPHG8oAAdQM2u
         W11V8727n0gEMT8xucQZ9jkSGIjN8+80GPmeR6uI73iqdJMXWf2Z+Y8H7IWHfNJtiqjR
         P2GrGzNs2gTKB+NGIJrBKtoJyVZB4Oep22WZBZnozCqQbDfRr6+VUOdNVJYBuBPOruIK
         A8dA==
X-Gm-Message-State: AFuF++naCzEkvA5bWayiFQ4ZwxZrsWMaAPxLeIZi1g2siZXbJXEMPl6a
	k/t8GOzBPkenz8VAPy7RTfTFVR+x/q0zyAKXMTf/sQmdLFjrRq+rX0I2tpmm+5KucZVlX+tTBE+
	VcliD
X-Gm-Gg: AYBFou2caU5g1+/lchCgiAGVPAuLe/qT9RidLChHJXYagzULYx3C7yP5/eyzFL8voRa
	PZwRJtIBvHYv6q2yUcLD4miEJftFuhRaKMnmX/ynbWnqAizpNGk6y9cF6V9b+rBUxSdU5JmAkHI
	AV/ieWyTgjCuKy1jnXKWdpCTdctv6a72iGEya1bZZeLbM5e2k4cp+ivovZ6IZ7dFUuBxE6fpwNi
	zfCUk6PhD1wOT3nvjPn4hgW7ncuJc7EXfQ3PKruX8zuzsIB/DesK9pKsiU+KAPRoBIUp5L/cWvn
	IPggqmeuYJ7ss1FLltl2tQDPQP0O2qbX8gU1LazeulnTZnL+mJoOlGIPQuu+2mwn8yPkTTNFIqn
	w0dkW8nmG/Uuwcx/o6LHc9z27+1JS37CPAFqpmvbifsge/jgtema7tWvqtljWDEfYV9vhrDKg53
	aMvpKG/RPEwg2CoH1CaRB9EGx/OAJzuo5BOZxlg4b6AtLz8mg9Hr7iHkKiJawfWK3ocVasl+Mqc
	rv1fnsnXFGmvToxRIGYsh+Rb9S/9tcgkVYajzI=
X-Received: by 2002:a17:907:9447:b0:c29:4b08:79d with SMTP id a640c23a62f3a-c317bdf1038mr540160366b.26.1791461128987;
        Thu, 08 Oct 2026 05:05:28 -0700 (PDT)
From: david ambu <david.preetham@citrix.com>
To: win-pv-devel@lists.xenproject.org
Cc: david ambu <david.preetham@citrix.com>
Subject: [PATCH 07/10] xeniface: pre-allocate gnttab cancel work item at IRP insertion time
Date: Thu,  8 Oct 2026 13:01:59 +0100
Message-ID: <20261008120204.859-7-david.preetham@citrix.com>
X-Mailer: git-send-email 2.51.0.windows.1
In-Reply-To: <20261008120204.859-1-david.preetham@citrix.com>
References: <20261008120204.859-1-david.preetham@citrix.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-purgate-ID: tlsNG-c201ff/1791461130-F6AB72A1-35BB48F2/0/0
X-purgate-type: clean
X-purgate-size: 4375

IoAllocateWorkItem in CsqCompleteCanceledIrp can be called at
DISPATCH_LEVEL when an IRP is cancelled, but IoAllocateWorkItem
requires PASSIVE_LEVEL and may return NULL under memory pressure,
causing an immediate bugcheck via IoQueueWorkItem(NULL, ...).

Pre-allocate the work item into DriverContext[1] at IRP insertion
time (always PASSIVE_LEVEL) and read it back in the cancel routine.
Free it via IoFreeWorkItem on the normal revoke/unmap path.

Signed-off-by: david ambu <david.preetham@citrix.com>
Assisted by Claude Sonnet 4.6
---
 src/xeniface/ioctl_gnttab.c | 30 ++++++++++++++++++++++++++++--
 src/xeniface/irp_queue.c    |  9 +++------
 2 files changed, 31 insertions(+), 8 deletions(-)

diff --git a/src/xeniface/ioctl_gnttab.c b/src/xeniface/ioctl_gnttab.c
index da8008d..c333034 100644
--- a/src/xeniface/ioctl_gnttab.c
+++ b/src/xeniface/ioctl_gnttab.c
@@ -423,13 +423,25 @@ IoctlGnttabPermitForeignAccess(
 
     // Insert the IRP/context into the pending queue.
     // This also checks (again) if the request ID/address is unique for the calling process.
+    // Pre-allocate the cancel work item now (PASSIVE_LEVEL) so CsqCompleteCanceledIrp
+    // doesn't need to allocate at DISPATCH_LEVEL.
     Irp->Tail.Overlay.DriverContext[0] = Context;
+    Irp->Tail.Overlay.DriverContext[1] = IoAllocateWorkItem(Fdo->Dx->DeviceObject);
+
+    Status = STATUS_INSUFFICIENT_RESOURCES;
+    if (Irp->Tail.Overlay.DriverContext[1] == NULL)
+        goto fail10;
+
     Status = IoCsqInsertIrpEx(&Fdo->IrpQueue, Irp, NULL, Context);
     if (!NT_SUCCESS(Status))
-        goto fail10;
+        goto fail11;
 
     return STATUS_PENDING;
 
+fail11:
+    Error("Fail11\n");
+    IoFreeWorkItem(Irp->Tail.Overlay.DriverContext[1]);
+
 fail10:
     Error("Fail10\n");
 
@@ -553,6 +565,7 @@ IoctlGnttabRevokeForeignAccess(
 
     Context = PendingIrp->Tail.Overlay.DriverContext[0];
     GnttabFreeGrant(Fdo, Context);
+    IoFreeWorkItem(PendingIrp->Tail.Overlay.DriverContext[1]);
 
     PendingIrp->IoStatus.Status = STATUS_SUCCESS;
     PendingIrp->IoStatus.Information = 0;
@@ -733,15 +746,27 @@ IoctlGnttabMapForeignPages(
 
     // Insert the IRP/context into the pending queue.
     // This also checks (again) if the request ID is unique for the calling process.
+    // Pre-allocate the cancel work item now (PASSIVE_LEVEL) so CsqCompleteCanceledIrp
+    // doesn't need to allocate at DISPATCH_LEVEL.
     Irp->Tail.Overlay.DriverContext[0] = Context;
+    Irp->Tail.Overlay.DriverContext[1] = IoAllocateWorkItem(Fdo->Dx->DeviceObject);
+
+    status = STATUS_INSUFFICIENT_RESOURCES;
+    if (Irp->Tail.Overlay.DriverContext[1] == NULL)
+        goto fail14;
+
     status = IoCsqInsertIrpEx(&Fdo->IrpQueue, Irp, NULL, Context);
     if (!NT_SUCCESS(status))
-        goto fail14;
+        goto fail15;
 
     __FreeCapturedBuffer(In);
 
     return STATUS_PENDING;
 
+fail15:
+    Error("Fail15\n");
+    IoFreeWorkItem(Irp->Tail.Overlay.DriverContext[1]);
+
 fail14:
     Error("Fail14\n");
 
@@ -896,6 +921,7 @@ IoctlGnttabUnmapForeignPages(
 
     Context = PendingIrp->Tail.Overlay.DriverContext[0];
     GnttabFreeMap(Fdo, Context);
+    IoFreeWorkItem(PendingIrp->Tail.Overlay.DriverContext[1]);
 
     PendingIrp->IoStatus.Status = STATUS_SUCCESS;
     PendingIrp->IoStatus.Information = 0;
diff --git a/src/xeniface/irp_queue.c b/src/xeniface/irp_queue.c
index 7adf074..420cecf 100644
--- a/src/xeniface/irp_queue.c
+++ b/src/xeniface/irp_queue.c
@@ -154,15 +154,12 @@ CsqCompleteCanceledIrp(
     _In_ PIRP       Irp
     )
 {
-    PXENIFACE_FDO   Fdo = CONTAINING_RECORD(Csq, XENIFACE_FDO, IrpQueue);
+    UNREFERENCED_PARAMETER(Csq);
     PIO_WORKITEM    WorkItem;
 
     Trace("Irp %p, IRQL %d\n", Irp, KeGetCurrentIrql());
 
-    // This is not guaranteed to run at PASSIVE_LEVEL, so queue a work item
-    // to perform actual cleanup/IRP completion.
-
-    WorkItem = IoAllocateWorkItem(Fdo->Dx->DeviceObject);
-    Irp->Tail.Overlay.DriverContext[1] = WorkItem; // store so the work item can free it
+    // Work item was pre-allocated at IRP insertion time (PASSIVE_LEVEL).
+    WorkItem = Irp->Tail.Overlay.DriverContext[1];
     IoQueueWorkItem(WorkItem, CompleteGnttabIrp, DelayedWorkQueue, Irp);
 }
-- 
2.51.0.windows.1



From win-pv-devel-bounces@lists.xenproject.org Thu Oct 08 12:05:38 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 08 Oct 2026 12:05:38 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1443267.1660664 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xEmsU-0004rb-Re; Thu, 08 Oct 2026 12:05:38 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1443267.1660664; Thu, 08 Oct 2026 12:05:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xEmsU-0004rU-P6; Thu, 08 Oct 2026 12:05:38 +0000
Received: by outflank-mailman (input) for mailman id 1443267;
 Thu, 08 Oct 2026 12:05:37 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <david.preetham@citrix.com>) id 1xEmsT-0004qi-1H
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 12:05:37 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xEmsS-004deO-Ad
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 14:05:36 +0200
Received: from [10.42.69.10] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <david.preetham@citrix.com>)
 id 6ac78705-8faa-0a2a0a5109dd-0a2a450aaeb6-32
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 14:05:36 +0200
Received: from [209.85.218.50] (helo=mail-ej1-f50.google.com)
 by tlsNG-4011c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <david.preetham@citrix.com>)
 id 6ac78710-f2d2-0a2a450a0019-d155da32a526-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 14:05:36 +0200
Received: by mail-ej1-f50.google.com with SMTP id
 a640c23a62f3a-c2e7131b94eso41114866b.1
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 05:05:36 -0700 (PDT)
Received: from mewpvdipd1063.citrite.net ([52.166.251.127])
 by smtp.gmail.com with ESMTPSA id
 a640c23a62f3a-c317bdb318csm212163866b.3.2026.10.08.05.05.29
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Thu, 08 Oct 2026 05:05:32 -0700 (PDT)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=google header.d=citrix.com header.i="@citrix.com" header.h="Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=citrix.com; s=google; t=1791461136; x=1792065936; darn=lists.xenproject.org;
        h=content-transfer-encoding:mime-version:references:in-reply-to
         :message-id:date:subject:cc:to:from:from:to:cc:subject:date
         :message-id:reply-to:content-type;
        bh=vJ2FxyqB+hVaTj3tof5ID1W56E3S+9oM+wGFLirkhBA=;
        b=lnooBspHQzwUWhVo085RMG4tFM8VuT5mFjWD09UzgCpM8niIDnWS93VOTWdzWjebwd
         i6jbfxX3v+0OeRRsxOPI2DyK9ufYLt4b7yCUny7I5llehn42Xpr9cgCZq8q/mikp7Df4
         eiEbyzu4AalczI1dFo4/42w1G5jJLXijXo//g=
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20260707; t=1791461136; x=1792065936;
        h=content-transfer-encoding:mime-version:references:in-reply-to
         :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from
         :to:cc:subject:date:message-id:reply-to:content-type;
        bh=vJ2FxyqB+hVaTj3tof5ID1W56E3S+9oM+wGFLirkhBA=;
        b=B8LZLGeq7Ggh6JXo+s48PbBwmyPbROJAjwlguUQDuVk3ucTnzK52XWslnlSJ7u8/9B
         hYRc4ctWEPtgJJ4yR9A6wIfdzxFuixtvnlonfB7PSQWn4xHoGjusXFKJFESVOvcHsSL3
         2qCEOHs3RCInL1Kp+K9pXYTd7yx5gcWATh1rxykdPpPgoppgouUfKdHOMjgfYRN09uR7
         zmi65I2LxIxF+EIhIFknzJh7Urbl0k9qSQCIfABDUiuBtFzIT5fB7VhoNrXWrLmC1Q29
         rfXFVVqeH3u5dgkYX6alQBRybzpLBU2ARweWkr5F6q/3JjkWErzj0/MC0gggT1ih9+6D
         YafA==
X-Gm-Message-State: AFq9FYJgaBN/6/Ilxh/RcJnHP5C1Fds9X/FvqA/nv+H5snXzsZtnJaxW
	1zplwF1JFqUR1Cf1qwHZWIaHPBO7mKLr3qurhyJryg+GEyoaL1faCbRMpCmGJmvhhYQjyo3+Tn7
	IjrAZ
X-Gm-Gg: AYBFou1F/f+nKdbcvII6xf6OhXler7dE0KQvMCV3XP4lmQZoxWqCA/PggvE3MzHpsya
	zmKh3DgAz6VLb7KZtS5TvKinyXpPdiY7Ig+uk56eV8Qmoco97btNC5Mo7nu9uK8NtDHaivUqVBb
	7pG0wPnrIHqfNgyeCsf1FnMaRKLEKaP1Oe/qePnlufe9wjtiuieAa16ftFhN38WYznH98B/xd14
	XN+vi4wxj+DEWmUQhgB9h1tr6npOydtAiMy09rSRCgQenILYVlxQcIHGEUnhTRzlSIMxS+++MGZ
	XwCcDFkPBhxNPiyaAgpnT4ATvpnCnvKMx6pozUltIdEDjSgxdhFsr1cryG/JmrbBuWM27mSlFNz
	GEEB0iTAeNeMvjrxja8zfbvYbPkIqhQRU7j18jtCcjHqBRnICLIGXY2o/pojC43BIRJOHfYvxFk
	Z4rhlE4TrAIDciVNL5mf1Q5ln810vtjaqUGJFa0gziy9WGRTQFxS+xNdyA2Gk4G8xSfCBGQk2OO
	o5sOAMEvxvpB+fEGP/Ut1Gx7ANYrc9z03KS09w=
X-Received: by 2002:a17:907:7211:b0:c2e:6570:6882 with SMTP id a640c23a62f3a-c3191aefe1bmr195218266b.10.1791461135376;
        Thu, 08 Oct 2026 05:05:35 -0700 (PDT)
From: david ambu <david.preetham@citrix.com>
To: win-pv-devel@lists.xenproject.org
Cc: david ambu <david.preetham@citrix.com>
Subject: [PATCH 08/10] xencontrol: fix SetupDiDestroyDeviceInfoList never called in XcOpen
Date: Thu,  8 Oct 2026 13:02:00 +0100
Message-ID: <20261008120204.859-8-david.preetham@citrix.com>
X-Mailer: git-send-email 2.51.0.windows.1
In-Reply-To: <20261008120204.859-1-david.preetham@citrix.com>
References: <20261008120204.859-1-david.preetham@citrix.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-purgate-ID: tlsNG-4011c0/1791461136-532D8CFC-73F53AA5/0/0
X-purgate-type: clean
X-purgate-size: 1399

SetupDiGetClassDevs returns a device info set handle that must be
freed with SetupDiDestroyDeviceInfoList. On all failure paths between
SetupDiGetClassDevs and the end label the handle was leaked. Init
DevInfo to INVALID_HANDLE_VALUE and call SetupDiDestroyDeviceInfoList
at the end label when the handle is valid.

Signed-off-by: david ambu <david.preetham@citrix.com>
Assisted by Claude Sonnet 4.6
---
 src/xencontrol/xencontrol.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/src/xencontrol/xencontrol.c b/src/xencontrol/xencontrol.c
index 1fdfd0b..a68dcf6 100644
--- a/src/xencontrol/xencontrol.c
+++ b/src/xencontrol/xencontrol.c
@@ -89,7 +89,7 @@ XcOpen(
     _Outptr_result_maybenull_ PXENCONTROL_CONTEXT   *Xc
     )
 {
-    HDEVINFO                                        DevInfo;
+    HDEVINFO                                        DevInfo = INVALID_HANDLE_VALUE;
     SP_DEVICE_INTERFACE_DATA                        InterfaceData;
     SP_DEVICE_INTERFACE_DETAIL_DATA                 *DetailData = NULL;
     DWORD                                           BufferSize;
@@ -168,6 +168,9 @@ XcOpen(
 end:
     free(DetailData);
 
+    if (DevInfo != INVALID_HANDLE_VALUE)
+        SetupDiDestroyDeviceInfoList(DevInfo);
+
     if (Status != ERROR_SUCCESS) {
         free(Context);
         *Xc = NULL;
-- 
2.51.0.windows.1



From win-pv-devel-bounces@lists.xenproject.org Thu Oct 08 12:05:38 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 08 Oct 2026 12:05:38 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1443268.1660668 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xEmsU-0004rx-Un; Thu, 08 Oct 2026 12:05:38 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1443268.1660668; Thu, 08 Oct 2026 12:05:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xEmsU-0004ri-QH; Thu, 08 Oct 2026 12:05:38 +0000
Received: by outflank-mailman (input) for mailman id 1443268;
 Thu, 08 Oct 2026 12:05:37 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <david.preetham@citrix.com>) id 1xEmsT-0004r4-9f
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 12:05:37 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xEmsS-004dcH-MX
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 14:05:36 +0200
Received: from [10.42.69.5] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <david.preetham@citrix.com>)
 id 6ac78707-bab6-0a2a0a5309dd-0a2a4505a8a0-44
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 14:05:36 +0200
Received: from [209.85.218.45] (helo=mail-ej1-f45.google.com)
 by tlsNG-c201ff.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <david.preetham@citrix.com>)
 id 6ac78710-4cb1-0a2a45050019-d155da2dccb3-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 14:05:36 +0200
Received: by mail-ej1-f45.google.com with SMTP id
 a640c23a62f3a-c2e8c710847so386120566b.0
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 05:05:36 -0700 (PDT)
Received: from mewpvdipd1063.citrite.net ([52.166.251.127])
 by smtp.gmail.com with ESMTPSA id
 a640c23a62f3a-c317bdb318csm212163866b.3.2026.10.08.05.05.35
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Thu, 08 Oct 2026 05:05:35 -0700 (PDT)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=google header.d=citrix.com header.i="@citrix.com" header.h="Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=citrix.com; s=google; t=1791461136; x=1792065936; darn=lists.xenproject.org;
        h=content-transfer-encoding:mime-version:references:in-reply-to
         :message-id:date:subject:cc:to:from:from:to:cc:subject:date
         :message-id:reply-to:content-type;
        bh=7ak34B+dBdfKv5YE1JEagDAbOtemJrqMRPi8Wcut/PA=;
        b=oSP0oTS8T58mr44qumZGafC7XdxEfhRGIEV0uSMlDiZytky/p4fI6Wx2ftT97iciYp
         RPPbRU71RK+glTRTEO8bHdMFa+/1dRY42iUNoiJuEU1z5b/G2kRsk6vrEgdxlNBhPofX
         QLAAqQfMv6AAxNTRhef0c7DSUOxVWRofIulPI=
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20260707; t=1791461136; x=1792065936;
        h=content-transfer-encoding:mime-version:references:in-reply-to
         :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from
         :to:cc:subject:date:message-id:reply-to:content-type;
        bh=7ak34B+dBdfKv5YE1JEagDAbOtemJrqMRPi8Wcut/PA=;
        b=E44H8/PY1rWhQyEsiOWh0gbGHNeMmgktWK3FpyCCmdD+sOa5GWKN3lfkorCgPlri8g
         9eQ/dicnUMrj4FeLsQ2WWIw8lViH3WD2ZwbD5+Vbhxi5UGVEfDOWBjK1/ig+ejTRxq5n
         Cs2N8CcZDbdiMa7sN/EJNtjLuoPyZUPMeZ9EKy6GN9FXkatpsHDSlfy8mSp/ooluapJb
         VtyDDQZrQYmuSgcjbzlQUMjiSZYlPLcYPkCgyo23dLQ0Ylym5CrDSaGECWaaWGXgOqlM
         z7nN5KIVhh/Lh4tHoJnyvsvHQtUJvaqcIVV4i5pM1iPPhwVcIfLKx47sjgLc/HPwzFH6
         mkzg==
X-Gm-Message-State: AFuF++k/TfHMjCdNo118whMsacxTBa6b2T2kzzerrC88cd8CeWJ17Km/
	BQh/1mSXSWV/9wX+V3tkHSAh+8J99M2HkPm6t3EKY9QDI0PaX1mwvdfoaUJBvd+5BzQeGYo3YGB
	QAaGJvMk=
X-Gm-Gg: AYBFou3q2uhIkESxe6/6ul1bresclDFrXLf+2PO6xZ8nEayDhi6dDaxT95Do/o3yFib
	mx0hZ2ABbskCvWttbg9XE3PseCIfNYAVBdFlL1zHvwRH10xdoJTy9VMtbTExX5S2zEetPQLtDXJ
	L/uO/QJX/NmpLQ0RdA6YpU1BVH3gHg56kB9jyabQX2JrsO5sM05wj5KTer/6P8vG4hlsuLRlUi1
	6b6oBTF7zRlJ+XIoqPgSLW0FyI4LW/gH+OuCPQnqAvTepry+3Q4MBb9Q89G+l8d6MO+LpUK2zeF
	LcCGgHC/dFGcymRlizT/GZ9/Cx94DPPUXl097HOtBZhmcBu7tu+HepAihWcQDaqEmbG55Bwm8yS
	gQpVM6nvFcuORFtD8KnNIAsf/oCjNDFUdyyUoJMnpRxqtd1LryEMg1GjnBJSyCiwv/kmVxmxzT+
	GbFMJInWJ4zooYV3xZGYjXq3YLKWO8kha6QfSsyXg8QqMn/Uzz9020LV3DnAbDZB2u3u3qac8CC
	W7sgX5YZq6/wGykcWVV4lIQ7r6EHhOmmnVomnMR
X-Received: by 2002:a17:907:1c84:b0:c2d:ca8d:435a with SMTP id a640c23a62f3a-c317c081874mr486087366b.38.1791461135920;
        Thu, 08 Oct 2026 05:05:35 -0700 (PDT)
From: david ambu <david.preetham@citrix.com>
To: win-pv-devel@lists.xenproject.org
Cc: david ambu <david.preetham@citrix.com>
Subject: [PATCH 09/10] xeniface: remove dead ProcIndex computation in EvtchnInterruptHandler
Date: Thu,  8 Oct 2026 13:02:01 +0100
Message-ID: <20261008120204.859-9-david.preetham@citrix.com>
X-Mailer: git-send-email 2.51.0.windows.1
In-Reply-To: <20261008120204.859-1-david.preetham@citrix.com>
References: <20261008120204.859-1-david.preetham@citrix.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-purgate-ID: tlsNG-c201ff/1791461136-728B62A1-4F999C0D/0/0
X-purgate-type: clean
X-purgate-size: 1004

ProcNumber and ProcIndex are computed but never used. The DPC is
queued without per-CPU targeting so these two lines are pure dead
code. Remove them.

Signed-off-by: david ambu <david.preetham@citrix.com>
Assisted by Claude Sonnet 4.6
---
 src/xeniface/ioctl_evtchn.c | 5 -----
 1 file changed, 5 deletions(-)

diff --git a/src/xeniface/ioctl_evtchn.c b/src/xeniface/ioctl_evtchn.c
index 0163ba1..d5ef353 100644
--- a/src/xeniface/ioctl_evtchn.c
+++ b/src/xeniface/ioctl_evtchn.c
@@ -82,16 +82,11 @@ EvtchnInterruptHandler(
     )
 {
     PXENIFACE_EVTCHN_CONTEXT    Context = Argument;
-    PROCESSOR_NUMBER            ProcNumber;
-    ULONG                       ProcIndex;
 
     UNREFERENCED_PARAMETER(Interrupt);
 
     ASSERT(Context != NULL);
 
-    (VOID) KeGetCurrentProcessorNumberEx(&ProcNumber);
-    ProcIndex = KeGetProcessorIndexFromNumber(&ProcNumber);
-
     (VOID) KeInsertQueueDpc(&Context->Dpc, NULL, NULL);
 
     return TRUE;
-- 
2.51.0.windows.1



From win-pv-devel-bounces@lists.xenproject.org Thu Oct 08 12:05:39 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 08 Oct 2026 12:05:39 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1443269.1660673 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xEmsV-0004ut-Ux; Thu, 08 Oct 2026 12:05:39 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1443269.1660673; Thu, 08 Oct 2026 12:05:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xEmsV-0004ul-Rj; Thu, 08 Oct 2026 12:05:39 +0000
Received: by outflank-mailman (input) for mailman id 1443269;
 Thu, 08 Oct 2026 12:05:38 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <david.preetham@citrix.com>) id 1xEmsU-0004rH-2C
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 12:05:38 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xEmsT-004dcH-F7
 for win-pv-devel@lists.xenproject.org; Thu, 08 Oct 2026 14:05:37 +0200
Received: from [10.42.69.12] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <david.preetham@citrix.com>)
 id 6ac7870e-bab6-0a2a0a5309dd-0a2a450cbdc6-18
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 14:05:37 +0200
Received: from [209.85.218.51] (helo=mail-ej1-f51.google.com)
 by tlsNG-d25034.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <david.preetham@citrix.com>)
 id 6ac78711-f479-0a2a450c0019-d155da33c8f5-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 14:05:37 +0200
Received: by mail-ej1-f51.google.com with SMTP id
 a640c23a62f3a-c2e2007dd8bso463013366b.2
 for <win-pv-devel@lists.xenproject.org>; Thu, 08 Oct 2026 05:05:37 -0700 (PDT)
Received: from mewpvdipd1063.citrite.net ([52.166.251.127])
 by smtp.gmail.com with ESMTPSA id
 a640c23a62f3a-c317bdb318csm212163866b.3.2026.10.08.05.05.36
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Thu, 08 Oct 2026 05:05:36 -0700 (PDT)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=google header.d=citrix.com header.i="@citrix.com" header.h="Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=citrix.com; s=google; t=1791461137; x=1792065937; darn=lists.xenproject.org;
        h=content-transfer-encoding:mime-version:references:in-reply-to
         :message-id:date:subject:cc:to:from:from:to:cc:subject:date
         :message-id:reply-to:content-type;
        bh=j9APvu8Llji4suL3S0FoimZmRCKBM4r088g1w9aZmuQ=;
        b=BdtY8Bz/HdDbsl91u5WspNTOXSz3YB82kc/MHJeFELh5bq/uz7d98tgDBhLEEbqBYh
         K1/VxdgRXhbAHHteWY092WQzuIzKsF9t7+/Jp9tDnf4EWYVXohWvyUwVrc63i1vO/a6I
         jSF1UtFyca5uSknhfJolRbJwdilZO/EE+RM1E=
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20260707; t=1791461137; x=1792065937;
        h=content-transfer-encoding:mime-version:references:in-reply-to
         :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from
         :to:cc:subject:date:message-id:reply-to:content-type;
        bh=j9APvu8Llji4suL3S0FoimZmRCKBM4r088g1w9aZmuQ=;
        b=BFbKPvii6EzxorbdINXs42ATEbStsTWwNq5kE2gZEv3dmLxQDpFJWwX7E5/+E8CnpM
         2wz0+m+6Cig4IwxZ9XMoNc06VZvfjfZGoSDvn95U8AjDfZuV346XPfEo7WwSKmMf7hX4
         23ymLbFQFHoTwzOBik4on9kVxuMkknuUMW/4d+dkC4Hjh9ZZ3iUPdgU5reBUSwDnRA5y
         sUdzndTlqu3H+EisxYuyIbjVIaXfLo5geBW94ispGjBT/N2vIhww/E1hk9GTclfxkust
         zleGTaIo5Y3CfxCzHLGvCZu1QG/XcNsPAX8d4CNr2p7k3rDgXYRJUWcxS0bmzV2aBV3O
         u4Wg==
X-Gm-Message-State: AFq9FYL/2q208MHDcMit7uNEBfZJpQX6HFGsQxHcyKp5mKNb6RGLbbTE
	gl8iVqmFEfe0L2K0nuBpOBvDnvZ81ODqRMYh6fF8ot/zNU2osbESSMh/sQ2GdmOPb+7/RP+n7vl
	JnpW7mQ0=
X-Gm-Gg: AYBFou0DuYAbrEIUBnafg57llHoCvSjDu/S5irQB1W6qN6OK3aeDAuJbV1xTj62RYJ2
	QfKMTwzB/pG+nqv9GSekeZYY6SboH5QWTE+5po3CM08ejTYVCkSjhVsROfxoD39VcFi9PHTL0Xt
	VEUJTML0W5QJKVhqmst/Ofw3qGsnXHmweeJOK1VZQBrEoYvB8plbjf078pHRu5ZgbdTx+n98FsB
	//JZy7fj7Wk49kEO6sc/naLZGjaTHU3t6SUKj/bx0EJ3Xh5cVYrZ6suYhNIDhJpwA72TZwySnkc
	YsyAouVeweaNNpQk1qAQ4fciDu4CC88d7vU28waQGpX1rXP+jqtxZ8vsb82s+o3gDo9bUQXNnua
	aHobUeRlahMPuoKUUDrPZIPwVQPpDjvHZIJ12HxBXknH2QT+VZybrIfXCgHaulioSFTHr5J51XK
	EtA0zlE4+2Gz33TIQu5g4+gSErhvO6TcwaLe+LOAtZZkRI85sK5K2or0rAeAMKmG5x6ehfG9IPV
	h7yrGZENQiC+VnrAuYTp7R3IxP5ll1Z2aicVxY=
X-Received: by 2002:a17:906:794b:b0:c2e:3b23:1468 with SMTP id a640c23a62f3a-c317c148d36mr603147066b.48.1791461136640;
        Thu, 08 Oct 2026 05:05:36 -0700 (PDT)
From: david ambu <david.preetham@citrix.com>
To: win-pv-devel@lists.xenproject.org
Cc: david ambu <david.preetham@citrix.com>
Subject: [PATCH 10/10] xencontrol: guard against NumberPages overflow in gnttab size calculation
Date: Thu,  8 Oct 2026 13:02:02 +0100
Message-ID: <20261008120204.859-10-david.preetham@citrix.com>
X-Mailer: git-send-email 2.51.0.windows.1
In-Reply-To: <20261008120204.859-1-david.preetham@citrix.com>
References: <20261008120204.859-1-david.preetham@citrix.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-purgate-ID: tlsNG-d25034/1791461137-51538A5B-87BDAFAB/0/0
X-purgate-type: clean
X-purgate-size: 2411

FIELD_OFFSET(T, References[NumberPages]) with a caller-controlled
NumberPages can overflow ULONG, producing a Size smaller than the
actual allocation needed, leading to a heap buffer overrun.

Add a guard rejecting NumberPages == 0 or > XENCONTROL_GNTTAB_MAX_PAGES
(1M pages = 4 GB) in both XcGnttabPermitForeignAccess2 and
XcGnttabMapForeignPages. Define the limit as a named constant in
xencontrol.h.

Signed-off-by: david ambu <david.preetham@citrix.com>
Assisted by Claude Sonnet 4.6
---
 include/xencontrol.h        |  3 +++
 src/xencontrol/xencontrol.c | 10 ++++++++++
 2 files changed, 13 insertions(+)

diff --git a/include/xencontrol.h b/include/xencontrol.h
index 4b916ec..e95e257 100644
--- a/include/xencontrol.h
+++ b/include/xencontrol.h
@@ -163,6 +163,9 @@ XcEvtchnUnmask(
     _In_ ULONG                  LocalPort
     );
 
+/*! Maximum NumberPages accepted by gnttab permit/map functions */
+#define XENCONTROL_GNTTAB_MAX_PAGES (1024 * 1024)
+
 /*! \brief Grant a \a RemoteDomain permission to access local newly allocated memory pages
     \param Xc Xencontrol handle returned by XcOpen()
     \param RemoteDomain ID of a remote domain that is being granted access
diff --git a/src/xencontrol/xencontrol.c b/src/xencontrol/xencontrol.c
index a68dcf6..8f21867 100644
--- a/src/xencontrol/xencontrol.c
+++ b/src/xencontrol/xencontrol.c
@@ -407,6 +407,11 @@ XcGnttabPermitForeignAccess2(
     BOOL                                            Success;
     DWORD                                           Status;
 
+    if (NumberPages == 0 || NumberPages > XENCONTROL_GNTTAB_MAX_PAGES) {
+        Log(XLL_ERROR, L"Invalid NumberPages %lu", NumberPages);
+        return ERROR_INVALID_PARAMETER;
+    }
+
     In.RemoteDomain = RemoteDomain;
     In.Address = Address;
     In.NumberPages = NumberPages;
@@ -508,6 +513,11 @@ XcGnttabMapForeignPages(
     BOOL                                        Success;
     DWORD                                       Status = ERROR_OUTOFMEMORY;
 
+    if (NumberPages == 0 || NumberPages > XENCONTROL_GNTTAB_MAX_PAGES) {
+        Log(XLL_ERROR, L"Invalid NumberPages %lu", NumberPages);
+        return ERROR_INVALID_PARAMETER;
+    }
+
     Size = (ULONG)FIELD_OFFSET(XENIFACE_GNTTAB_MAP_FOREIGN_PAGES_IN_V2, References[NumberPages]);
     In = malloc(Size);
     if (!In)
-- 
2.51.0.windows.1



From win-pv-devel-bounces@lists.xenproject.org Fri Oct 09 10:11:07 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 09 Oct 2026 10:11:07 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1444198.1661166 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xF7ZC-0006ks-10; Fri, 09 Oct 2026 10:11:06 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1444198.1661166; Fri, 09 Oct 2026 10:11:05 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xF7ZB-0006kl-UJ; Fri, 09 Oct 2026 10:11:05 +0000
Received: by outflank-mailman (input) for mailman id 1444198;
 Fri, 09 Oct 2026 10:11:05 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12024fd4a00080d7@swg.vates.tech>)
 id 1xF7ZA-0006kf-Rv
 for win-pv-devel@lists.xenproject.org; Fri, 09 Oct 2026 10:11:05 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xF7Z9-001IE0-Ib
 for win-pv-devel@lists.xenproject.org; Fri, 09 Oct 2026 12:11:03 +0200
Received: from [10.42.69.2] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12024fd4a00080d7@swg.vates.tech>)
 id 6ac8bdad-2eae-0a2a0a5409dd-0a2a4502a042-40
 for <win-pv-devel@lists.xenproject.org>; Fri, 09 Oct 2026 12:11:03 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12024fd4a00080d7@swg.vates.tech>)
 id 6ac8bdb6-6ca4-0a2a45020019-b9ff1c23ac5f-3
 for <win-pv-devel@lists.xenproject.org>; Fri, 09 Oct 2026 12:11:03 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a12024fd4a00080d7.002 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Fri, 09 Oct 2026 10:10:57 +0000
Received: from [192.168.1.61] (142.220.66.37.rev.sfr.net [37.66.220.142])
 (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id CCF9181F2B;
 Fri,  9 Oct 2026 12:10:56 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=xyF1SGT08d5Q/XucfTrORreFDNY0tqkFnIoA2RYzpE8=;
 h=from:subject:date:message-id:to:mime-version:content-type:in-reply-to:references:feedback-id;
 b=DLk3oyLYAmuSPJmzr0LjAOCxFK98SiIoXC+uUjQaAwMc6D6lIA4hl44j5O6YcVP3xPjvuJZzQ
 unsVEuNlzpW2+M0CqO/rh68dcm1dqDu956sugS1F0sqKVs1FX8mEvOQ03Ogn6wjXUwWgjWP/luK
 NhtWjYMkm/SQDYvTYyIeImp1DkRhgN4WMKrRLww+8AlcASNBH9N2eA5oFtAK2azy8MDw3iOo3Vb
 nnOUillV/ZULTwbudwg0Sju1YzPcJTpEbyqdEAOXBvDT1G3NroAmejyhBzy0xoK2z84oxVN8wsp
 Q1f60VxbCOrCYIOF1biXMJ1KBobG9GBQdsNullRMubqg==
X-Zone-Loop: f8fde4f21a1c825999589795141979e13ebcf61a4d61
x-campaign-type: default
x-transaction-id: c7ead973-bb23-40f7-8d68-9ba905c48c18
x-swg-uid: 01-2d833463-d1a9-4312-aff1-6984357c2b00
X-Mailer: Sweego
Message-ID:
 <1791540657.8631fc262581453bbf619ec5b2062170.1a12024fd4a00080d7@vates.tech>
x-swg-bid: 1791540657.8631fc262581453bbf619ec5b2062170.1a12024fd4a00080d7
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
Date: Fri, 9 Oct 2026 12:10:56 +0200
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH 10/10] xencontrol: guard against NumberPages overflow in
 gnttab size calculation
Content-Language: en-US
To: david ambu <david.preetham@citrix.com>, win-pv-devel@lists.xenproject.org
References: <20261008120204.859-1-david.preetham@citrix.com>
 <20261008120204.859-10-david.preetham@citrix.com>
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
In-Reply-To: <20261008120204.859-10-david.preetham@citrix.com>
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.79.fdbabb5dc541071c.1a12024fb04.f0805036f03dfc2a=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791540656901
X-purgate-ID: tlsNG-720697/1791540663-F0EA32AC-7721C03D/0/0
X-purgate-type: clean
X-purgate-size: 3203

---=Part.79.fdbabb5dc541071c.1a12024fb04.f0805036f03dfc2a=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

On 08/10/2026 14:05, david ambu wrote:
> FIELD_OFFSET(T, References[NumberPages]) with a caller-controlled
> NumberPages can overflow ULONG, producing a Size smaller than the
> actual allocation needed, leading to a heap buffer overrun=2E
>=20
> Add a guard rejecting NumberPages =3D=3D 0 or > XENCONTROL_GNTTAB_MAX_PA=
GES
> (1M pages =3D 4 GB) in both XcGnttabPermitForeignAccess2 and
> XcGnttabMapForeignPages=2E Define the limit as a named constant in
> xencontrol=2Eh=2E
>=20
> Signed-off-by: david ambu <david=2Epreetham@citrix=2Ecom>
> Assisted by Claude Sonnet 4=2E6
> ---
>   include/xencontrol=2Eh        |  3 +++
>   src/xencontrol/xencontrol=2Ec | 10 ++++++++++
>   2 files changed, 13 insertions(+)
>=20
> diff --git a/include/xencontrol=2Eh b/include/xencontrol=2Eh
> index 4b916ec=2E=2Ee95e257 100644
> --- a/include/xencontrol=2Eh
> +++ b/include/xencontrol=2Eh
> @@ -163,6 +163,9 @@ XcEvtchnUnmask(
>       _In_ ULONG                  LocalPort
>       );
>  =20
> +/*! Maximum NumberPages accepted by gnttab permit/map functions */
> +#define XENCONTROL_GNTTAB_MAX_PAGES (1024 * 1024)
> +
>   /*! \brief Grant a \a RemoteDomain permission to access local newly al=
located memory pages
>       \param Xc Xencontrol handle returned by XcOpen()
>       \param RemoteDomain ID of a remote domain that is being granted ac=
cess
> diff --git a/src/xencontrol/xencontrol=2Ec b/src/xencontrol/xencontrol=
=2Ec
> index a68dcf6=2E=2E8f21867 100644
> --- a/src/xencontrol/xencontrol=2Ec
> +++ b/src/xencontrol/xencontrol=2Ec
> @@ -407,6 +407,11 @@ XcGnttabPermitForeignAccess2(
>       BOOL                                            Success;
>       DWORD                                           Status;
>  =20
> +    if (NumberPages =3D=3D 0 || NumberPages > XENCONTROL_GNTTAB_MAX_PAG=
ES) {

I believe the boundary condition of NumberPages =3D=3D=20
XENCONTROL_GNTTAB_MAX_PAGES still causes an overflow? So=20
XENCONTROL_GNTTAB_MAX_PAGES should be (1024 * 1024 - 1) instead=2E

> +        Log(XLL_ERROR, L"Invalid NumberPages %lu", NumberPages);
> +        return ERROR_INVALID_PARAMETER;
> +    }
> +
>       In=2ERemoteDomain =3D RemoteDomain;
>       In=2EAddress =3D Address;
>       In=2ENumberPages =3D NumberPages;
> @@ -508,6 +513,11 @@ XcGnttabMapForeignPages(
>       BOOL                                        Success;
>       DWORD                                       Status =3D ERROR_OUTOF=
MEMORY;
>  =20
> +    if (NumberPages =3D=3D 0 || NumberPages > XENCONTROL_GNTTAB_MAX_PAG=
ES) {
> +        Log(XLL_ERROR, L"Invalid NumberPages %lu", NumberPages);
> +        return ERROR_INVALID_PARAMETER;
> +    }
> +
>       Size =3D (ULONG)FIELD_OFFSET(XENIFACE_GNTTAB_MAP_FOREIGN_PAGES_IN_=
V2, References[NumberPages]);
>       In =3D malloc(Size);
>       if (!In)



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.79.fdbabb5dc541071c.1a12024fb04.f0805036f03dfc2a=---


From win-pv-devel-bounces@lists.xenproject.org Fri Oct 09 10:41:49 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 09 Oct 2026 10:41:49 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1444218.1661170 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xF82u-0002SG-3U; Fri, 09 Oct 2026 10:41:48 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1444218.1661170; Fri, 09 Oct 2026 10:41:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xF82u-0002S9-0v; Fri, 09 Oct 2026 10:41:48 +0000
Received: by outflank-mailman (input) for mailman id 1444218;
 Fri, 09 Oct 2026 10:41:46 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <owen.smith@citrix.com>) id 1xF82s-0002Rx-Oz
 for win-pv-devel@lists.xenproject.org; Fri, 09 Oct 2026 10:41:46 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xF82s-007cXW-2I
 for win-pv-devel@lists.xenproject.org; Fri, 09 Oct 2026 12:41:46 +0200
Received: from [10.42.69.11] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ac8c4e3-bab6-0a2a0a5309dd-0a2a450b84ec-6
 for <win-pv-devel@lists.xenproject.org>; Fri, 09 Oct 2026 12:41:45 +0200
Received: from [160.101.131.8] (helo=na1pdmzitismtp01.tibco.com)
 by tlsNG-42698a.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ac8c4e8-b7e8-0a2a450b0019-a06583089432-3
 for <win-pv-devel@lists.xenproject.org>; Fri, 09 Oct 2026 12:41:45 +0200
Received: from mewpvdipd2033.citrite.net (unknown [10.113.48.64])
 by na1pdmzitismtp01.tibco.com (Postfix) with ESMTP id CDE09471EA94;
 Fri,  9 Oct 2026 06:39:33 -0400 (EDT)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; none
From: Owen Smith <owen.smith@citrix.com>
To: win-pv-devel@lists.xenproject.org
Cc: Owen Smith <owen.smith@citrix.com>
Subject: [PATCH v2 1/2] Avoid ASSERT(IsZeroMemory()) in checked builds
Date: Fri,  9 Oct 2026 11:41:39 +0100
Message-ID: <20261009104141.1228-1-owen.smith@citrix.com>
X-Mailer: git-send-email 2.51.2.windows.1
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-purgate-ID: tlsNG-42698a/1791542505-198C19EA-418758D1/0/0
X-purgate-type: clean
X-purgate-size: 4359

* Zero Srb counters in BlkifRingDestroy
* NULL Path pointer in BlkifRingCreate fail path
* Zero embedded structures and values in FrontendDestroy
* Zero TargetPath and FrontendPath on FrontendCreate fail path
* Zero any Page80/83 overrides on FrontendConnect fail path
* NULL TargetList entry in AdapterTeardown

Signed-off-by: Owen Smith <owen.smith@citrix.com>
---
 src/xenvbd/adapter.c  |  1 +
 src/xenvbd/frontend.c | 40 +++++++++++++++++++++++++++++-----------
 src/xenvbd/ring.c     |  6 +++++-
 3 files changed, 35 insertions(+), 12 deletions(-)

diff --git a/src/xenvbd/adapter.c b/src/xenvbd/adapter.c
index 0f9500c..a0be841 100644
--- a/src/xenvbd/adapter.c
+++ b/src/xenvbd/adapter.c
@@ -1507,6 +1507,7 @@ AdapterTeardown(
         TargetSetMissing(Target, "AdapterTeardown");
         // drop ref-count acquired in __AdapterGetTarget *before* destroying Target
         TargetDestroy(Target);
+        Adapter->TargetList[TargetId] = NULL;
     }
 
     Adapter->BootEmulated = FALSE;
diff --git a/src/xenvbd/frontend.c b/src/xenvbd/frontend.c
index 3b078da..5311dd5 100644
--- a/src/xenvbd/frontend.c
+++ b/src/xenvbd/frontend.c
@@ -1287,6 +1287,19 @@ abort:
 fail7:
     Error("Fail7\n");
     RtlZeroMemory(&Frontend->Features, sizeof(XENVBD_FEATURES));
+
+    if (Frontend->Page80.Data)
+        Base64Free(Frontend->Page80.Data);
+    Frontend->Page80.Data = NULL;
+    Frontend->Page80.Size = 0;
+
+    if (Frontend->Page83.Data)
+        Base64Free(Frontend->Page83.Data);
+    Frontend->Page83.Data = NULL;
+    Frontend->Page83.Size = 0;
+
+    RtlZeroMemory(&Frontend->DiskInfo, sizeof(XENVBD_DISKINFO));
+
 fail6:
     Error("Fail6\n");
 fail5:
@@ -1923,8 +1936,10 @@ fail5:
     Frontend->Ring = NULL;
 fail4:
     Error("fail4\n");
+    RtlZeroMemory(Frontend->TargetPath, sizeof(Frontend->TargetPath));
 fail3:
     Error("fail3\n");
+    RtlZeroMemory(Frontend->FrontendPath, sizeof(Frontend->FrontendPath));
 fail2:
     Error("Fail2\n");
     Frontend->Target = NULL;
@@ -1951,16 +1966,6 @@ FrontendDestroy(
 
     Trace("Target[%d] @ (%d) =====>\n", TargetId, KeGetCurrentIrql());
 
-    if (Frontend->Page80.Data)
-        Base64Free(Frontend->Page80.Data);
-    Frontend->Page80.Data = NULL;
-    Frontend->Page80.Size = 0;
-
-    if (Frontend->Page83.Data)
-        Base64Free(Frontend->Page83.Data);
-    Frontend->Page83.Data = NULL;
-    Frontend->Page83.Size = 0;
-
     ThreadAlert(Frontend->BackendThread);
     ThreadJoin(Frontend->BackendThread);
     Frontend->BackendThread = NULL;
@@ -1971,11 +1976,24 @@ FrontendDestroy(
     RingDestroy(Frontend->Ring);
     Frontend->Ring = NULL;
 
-    Frontend->MaxQueues = 0;
+    RtlZeroMemory(&Frontend->StateLock, sizeof(KSPIN_LOCK));
+
+    RtlZeroMemory(Frontend->TargetPath, sizeof(Frontend->TargetPath));
+    RtlZeroMemory(Frontend->FrontendPath, sizeof(Frontend->FrontendPath));
+    RtlZeroMemory(&Frontend->DiskInfo, sizeof(XENVBD_DISKINFO));
+    RtlZeroMemory(&Frontend->Caps, sizeof(XENVBD_CAPS));
 
     ASSERT3P(Frontend->BackendPath, ==, NULL);
     ASSERT3P(Frontend->BackendWatch, ==, NULL);
 
+    Frontend->Target = NULL;
+    Frontend->TargetId = 0;
+    Frontend->DeviceId = 0;
+    Frontend->State = XENVBD_STATE_INVALID; // 0
+    Frontend->BackendDomain = 0;
+    Frontend->MaxQueues = 0;
+
+    ASSERT(IsZeroMemory(Frontend, sizeof(XENVBD_FRONTEND)));
     __FrontendFree(Frontend);
     Trace("Target[%d] @ (%d) <=====\n", TargetId, KeGetCurrentIrql());
 }
diff --git a/src/xenvbd/ring.c b/src/xenvbd/ring.c
index 0b56831..ffbd18a 100644
--- a/src/xenvbd/ring.c
+++ b/src/xenvbd/ring.c
@@ -1917,7 +1917,7 @@ fail4:
     RtlZeroMemory(&(*BlkifRing)->SrbQueue, sizeof(LIST_ENTRY));
 
     __RingFree((*BlkifRing)->Path);
-    (*BlkifRing)->Path;
+    (*BlkifRing)->Path = NULL;
     (*BlkifRing)->Index = 0;
     (*BlkifRing)->Ring = NULL;
 
@@ -1957,6 +1957,10 @@ BlkifRingDestroy(
     ASSERT(IsListEmpty(&BlkifRing->ShutdownQueue));
     RtlZeroMemory(&BlkifRing->ShutdownQueue, sizeof(LIST_ENTRY));
 
+    BlkifRing->SrbsQueued = 0;
+    BlkifRing->SrbsCompleted = 0;
+    BlkifRing->SrbsFailed = 0;
+
     __RingFree(BlkifRing->Path);
     BlkifRing->Path = NULL;
     BlkifRing->Index = 0;
-- 
2.51.2.windows.1



From win-pv-devel-bounces@lists.xenproject.org Fri Oct 09 10:41:49 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 09 Oct 2026 10:41:49 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1444219.1661174 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xF82v-0002TR-4t; Fri, 09 Oct 2026 10:41:49 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1444219.1661174; Fri, 09 Oct 2026 10:41:49 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xF82v-0002TK-21; Fri, 09 Oct 2026 10:41:49 +0000
Received: by outflank-mailman (input) for mailman id 1444219;
 Fri, 09 Oct 2026 10:41:47 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <owen.smith@citrix.com>) id 1xF82t-0002S3-EX
 for win-pv-devel@lists.xenproject.org; Fri, 09 Oct 2026 10:41:47 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xF82s-00FVf3-Q9
 for win-pv-devel@lists.xenproject.org; Fri, 09 Oct 2026 12:41:46 +0200
Received: from [10.42.69.4] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ac8c4de-8faa-0a2a0a5109dd-0a2a45049a0e-48
 for <win-pv-devel@lists.xenproject.org>; Fri, 09 Oct 2026 12:41:46 +0200
Received: from [160.101.131.8] (helo=na1pdmzitismtp01.tibco.com)
 by tlsNG-ebf023.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ac8c4e9-b57f-0a2a45040019-a0658308d9f0-3
 for <win-pv-devel@lists.xenproject.org>; Fri, 09 Oct 2026 12:41:46 +0200
Received: from mewpvdipd2033.citrite.net (unknown [10.113.48.64])
 by na1pdmzitismtp01.tibco.com (Postfix) with ESMTP id B6B7D471EA95;
 Fri,  9 Oct 2026 06:39:34 -0400 (EDT)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; none
From: Owen Smith <owen.smith@citrix.com>
To: win-pv-devel@lists.xenproject.org
Cc: Owen Smith <owen.smith@citrix.com>
Subject: [PATCH v2 2/2] Clear SRB queue and Shutdown queue on reset
Date: Fri,  9 Oct 2026 11:41:40 +0100
Message-ID: <20261009104141.1228-2-owen.smith@citrix.com>
X-Mailer: git-send-email 2.51.2.windows.1
In-Reply-To: <20261009104141.1228-1-owen.smith@citrix.com>
References: <20261009104141.1228-1-owen.smith@citrix.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-purgate-ID: tlsNG-ebf023/1791542506-526CAB50-C75BAABF/0/0
X-purgate-type: clean
X-purgate-size: 3409

Fix a potential hang during TargetReset.
When the ring is disabled, any SRBs queued, but not submitted were left
in the queues. These SRBs would only be recovered when StorPort's internal
timeout triggered.
When the ring is scheduled and disabled, abort any SRBs that were not sent
to the backend, so that StorPort is responsible for requeueing any when the
ring is re-enabled. Disabling the ring will schedule the ring, aborting the
SRBs with SRB_STATUS_ABORTED, which will inform StorPort to re-issue the
requests when the target has recovered, rather than failing them.

Assisted-by: Claude:claude-opus-4.8
Signed-off-by: Owen Smith <owen.smith@citrix.com>
---
 src/xenvbd/ring.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 51 insertions(+), 1 deletion(-)

diff --git a/src/xenvbd/ring.c b/src/xenvbd/ring.c
index ffbd18a..0875ce9 100644
--- a/src/xenvbd/ring.c
+++ b/src/xenvbd/ring.c
@@ -1362,6 +1362,52 @@ BlkifRingSwizzle(
     }
 }
 
+static FORCEINLINE VOID
+__BlkifRingAbortQueues(
+    _In_ PXENVBD_BLKIF_RING BlkifRing
+    )
+{
+    ASSERT(!BlkifRing->Enabled);
+
+    // Complete any SRBs that were queued but never made it as far as the
+    // backend. Now that the ring is disabled the schedule thread will not
+    // run again, so without this these requests would be left stuck until
+    // StorPort times them out. First drain the atomic packet list into the
+    // SRB queue so that nothing accepted from a concurrent submitter is
+    // missed, then fail everything still pending. SRB_STATUS_ABORTED lets
+    // StorPort re-issue them once the target has recovered.
+
+    while (!IsListEmpty(&BlkifRing->SrbQueue)) {
+        PLIST_ENTRY ListEntry;
+        PXENVBD_SRBEXT SrbExt;
+        PSCSI_REQUEST_BLOCK Srb;
+
+        ListEntry = RemoveHeadList(&BlkifRing->SrbQueue);
+        ASSERT3P(ListEntry, !=, &BlkifRing->SrbQueue);
+
+        RtlZeroMemory(ListEntry, sizeof(LIST_ENTRY));
+
+        SrbExt = CONTAINING_RECORD(ListEntry, XENVBD_SRBEXT, ListEntry);
+        Srb = SrbExt->Srb;
+        Srb->SrbStatus = SRB_STATUS_ABORTED;
+        __BlkifRingCompleteSrb(BlkifRing, SrbExt);
+    }
+
+    while (!IsListEmpty(&BlkifRing->ShutdownQueue)) {
+        PLIST_ENTRY ListEntry;
+        PXENVBD_SRBEXT SrbExt;
+        PSCSI_REQUEST_BLOCK Srb;
+
+        ListEntry = RemoveHeadList(&BlkifRing->ShutdownQueue);
+        ASSERT3P(ListEntry, !=, &BlkifRing->ShutdownQueue);
+
+        SrbExt = CONTAINING_RECORD(ListEntry, XENVBD_SRBEXT, ListEntry);
+        Srb = SrbExt->Srb;
+        Srb->SrbStatus = SRB_STATUS_ABORTED;
+        __BlkifRingCompleteSrb(BlkifRing, SrbExt);
+    }
+}
+
 static DECLSPEC_NOINLINE VOID
 BlkifRingSchedule(
     IN  PXENVBD_BLKIF_RING  BlkifRing
@@ -1369,8 +1415,10 @@ BlkifRingSchedule(
 {
     BOOLEAN                 Polled;
 
-    if (!BlkifRing->Enabled)
+    if (!BlkifRing->Enabled) {
+        __BlkifRingAbortQueues(BlkifRing);
         return;
+    }
 
     Polled = FALSE;
 
@@ -2273,6 +2321,8 @@ BlkifRingDisable(
 
     BlkifRing->Stopped = FALSE;
 
+    // __BlkifRingReleaseLock will call __BlkifRingAbortQueues now that
+    // Enabled = FALSE, completing unsubmitted SRBs with SRB_STATUS_ABORTED
     __BlkifRingReleaseLock(BlkifRing);
 
     Trace("<==== %u\n", BlkifRing->Index);
-- 
2.51.2.windows.1



From win-pv-devel-bounces@lists.xenproject.org Fri Oct 09 10:50:19 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 09 Oct 2026 10:50:19 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1444237.1661177 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xF8B8-0004Eq-Nz; Fri, 09 Oct 2026 10:50:18 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1444237.1661177; Fri, 09 Oct 2026 10:50:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xF8B8-0004Ej-LS; Fri, 09 Oct 2026 10:50:18 +0000
Received: by outflank-mailman (input) for mailman id 1444237;
 Fri, 09 Oct 2026 10:50:17 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12048e91e00080d7@swg.vates.tech>)
 id 1xF8B7-0004Ed-6e
 for win-pv-devel@lists.xenproject.org; Fri, 09 Oct 2026 10:50:17 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xF8B6-00Ffmg-F6
 for win-pv-devel@lists.xenproject.org; Fri, 09 Oct 2026 12:50:16 +0200
Received: from [10.42.69.3] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12048e91e00080d7@swg.vates.tech>)
 id 6ac8c6e2-8faa-0a2a0a5109dd-0a2a4503b7d2-26
 for <win-pv-devel@lists.xenproject.org>; Fri, 09 Oct 2026 12:50:16 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-33051d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12048e91e00080d7@swg.vates.tech>)
 id 6ac8c6e7-fae8-0a2a45030019-b9ff1c128f3d-3
 for <win-pv-devel@lists.xenproject.org>; Fri, 09 Oct 2026 12:50:15 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a12048e91e00080d7.002 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Fri, 09 Oct 2026 10:50:11 +0000
Received: from [192.168.1.61] (142.220.66.37.rev.sfr.net [37.66.220.142])
 (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id AFA9A815FF;
 Fri,  9 Oct 2026 12:50:10 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=FSbX2IM0LAb1dggQy2UGItGQlKh7cTUYIXKahDPX880=;
 h=from:subject:date:message-id:to:mime-version:content-type:in-reply-to:references:feedback-id;
 b=YDO75CBC+VxvhZ+t4PL18XcPWY5nr77S/1ftxFldp2OxLu3wSSpYpVIOSHgWUvHMqaNctAZCo
 Zi8N9ADZg6J47mTVQA5QcsxQd3OhJjuuhX6HvKKrAA9bOnU9lmpmffZHCizmbPKttU8PyMKmJN+
 YREqMexyZWp9G6UVaycGL+yrI6mRw4Umye6vjCiBP2g6QUV6s84xwMGDzXGGUnIovwwSgumm6nV
 TCxuL/pgIRnsDBTnQ28KncEUZQkQchH+XqfJfyhQ892ehq2+tTbY15njAvPaJ7KLYZsxa0BzKx8
 RsPLfKdbjGlYjlkuc2UAXSe/Kd9XxQzJRZr6lxzkkwCw==
X-Zone-Loop: 630e4596dca27032301397ff9c5b866a2a6d31ee1e64
x-campaign-type: default
x-transaction-id: 35c3eede-013d-4548-b128-19fa77d0de71
x-swg-uid: 01-d8ad761c-aefd-458b-bde3-74bde84a378c
X-Mailer: Sweego
Message-ID:
 <1791543011.8631fc262581453bbf619ec5b2062170.1a12048e91e00080d7@vates.tech>
x-swg-bid: 1791543011.8631fc262581453bbf619ec5b2062170.1a12048e91e00080d7
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
Date: Fri, 9 Oct 2026 12:50:10 +0200
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH v2 1/2] Avoid ASSERT(IsZeroMemory()) in checked builds
Content-Language: en-US
To: Owen Smith <owen.smith@citrix.com>, win-pv-devel@lists.xenproject.org
References: <20261009104141.1228-1-owen.smith@citrix.com>
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
In-Reply-To: <20261009104141.1228-1-owen.smith@citrix.com>
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.7b.31a8589d385d11ec.1a12048e5d8.271d5ac03525541c=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791543010776
X-purgate-ID: tlsNG-33051d/1791543015-6E2D04E9-DD3F5FBA/0/0
X-purgate-type: clean
X-purgate-size: 5294

---=Part.7b.31a8589d385d11ec.1a12048e5d8.271d5ac03525541c=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

On 09/10/2026 12:42, Owen Smith wrote:
> * Zero Srb counters in BlkifRingDestroy
> * NULL Path pointer in BlkifRingCreate fail path
> * Zero embedded structures and values in FrontendDestroy
> * Zero TargetPath and FrontendPath on FrontendCreate fail path
> * Zero any Page80/83 overrides on FrontendConnect fail path
> * NULL TargetList entry in AdapterTeardown
>=20
> Signed-off-by: Owen Smith <owen=2Esmith@citrix=2Ecom>

Both patches:

Reviewed-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>

> ---
>   src/xenvbd/adapter=2Ec  |  1 +
>   src/xenvbd/frontend=2Ec | 40 +++++++++++++++++++++++++++++-----------
>   src/xenvbd/ring=2Ec     |  6 +++++-
>   3 files changed, 35 insertions(+), 12 deletions(-)
>=20
> diff --git a/src/xenvbd/adapter=2Ec b/src/xenvbd/adapter=2Ec
> index 0f9500c=2E=2Ea0be841 100644
> --- a/src/xenvbd/adapter=2Ec
> +++ b/src/xenvbd/adapter=2Ec
> @@ -1507,6 +1507,7 @@ AdapterTeardown(
>           TargetSetMissing(Target, "AdapterTeardown");
>           // drop ref-count acquired in __AdapterGetTarget *before* dest=
roying Target
>           TargetDestroy(Target);
> +        Adapter->TargetList[TargetId] =3D NULL;
>       }
>  =20
>       Adapter->BootEmulated =3D FALSE;
> diff --git a/src/xenvbd/frontend=2Ec b/src/xenvbd/frontend=2Ec
> index 3b078da=2E=2E5311dd5 100644
> --- a/src/xenvbd/frontend=2Ec
> +++ b/src/xenvbd/frontend=2Ec
> @@ -1287,6 +1287,19 @@ abort:
>   fail7:
>       Error("Fail7\n");
>       RtlZeroMemory(&Frontend->Features, sizeof(XENVBD_FEATURES));
> +
> +    if (Frontend->Page80=2EData)
> +        Base64Free(Frontend->Page80=2EData);
> +    Frontend->Page80=2EData =3D NULL;
> +    Frontend->Page80=2ESize =3D 0;
> +
> +    if (Frontend->Page83=2EData)
> +        Base64Free(Frontend->Page83=2EData);
> +    Frontend->Page83=2EData =3D NULL;
> +    Frontend->Page83=2ESize =3D 0;
> +
> +    RtlZeroMemory(&Frontend->DiskInfo, sizeof(XENVBD_DISKINFO));
> +
>   fail6:
>       Error("Fail6\n");
>   fail5:
> @@ -1923,8 +1936,10 @@ fail5:
>       Frontend->Ring =3D NULL;
>   fail4:
>       Error("fail4\n");
> +    RtlZeroMemory(Frontend->TargetPath, sizeof(Frontend->TargetPath));
>   fail3:
>       Error("fail3\n");
> +    RtlZeroMemory(Frontend->FrontendPath, sizeof(Frontend->FrontendPath=
));
>   fail2:
>       Error("Fail2\n");
>       Frontend->Target =3D NULL;
> @@ -1951,16 +1966,6 @@ FrontendDestroy(
>  =20
>       Trace("Target[%d] @ (%d) =3D=3D=3D=3D=3D>\n", TargetId, KeGetCurre=
ntIrql());
>  =20
> -    if (Frontend->Page80=2EData)
> -        Base64Free(Frontend->Page80=2EData);
> -    Frontend->Page80=2EData =3D NULL;
> -    Frontend->Page80=2ESize =3D 0;
> -
> -    if (Frontend->Page83=2EData)
> -        Base64Free(Frontend->Page83=2EData);
> -    Frontend->Page83=2EData =3D NULL;
> -    Frontend->Page83=2ESize =3D 0;
> -
>       ThreadAlert(Frontend->BackendThread);
>       ThreadJoin(Frontend->BackendThread);
>       Frontend->BackendThread =3D NULL;
> @@ -1971,11 +1976,24 @@ FrontendDestroy(
>       RingDestroy(Frontend->Ring);
>       Frontend->Ring =3D NULL;
>  =20
> -    Frontend->MaxQueues =3D 0;
> +    RtlZeroMemory(&Frontend->StateLock, sizeof(KSPIN_LOCK));
> +
> +    RtlZeroMemory(Frontend->TargetPath, sizeof(Frontend->TargetPath));
> +    RtlZeroMemory(Frontend->FrontendPath, sizeof(Frontend->FrontendPath=
));
> +    RtlZeroMemory(&Frontend->DiskInfo, sizeof(XENVBD_DISKINFO));
> +    RtlZeroMemory(&Frontend->Caps, sizeof(XENVBD_CAPS));
>  =20
>       ASSERT3P(Frontend->BackendPath, =3D=3D, NULL);
>       ASSERT3P(Frontend->BackendWatch, =3D=3D, NULL);
>  =20
> +    Frontend->Target =3D NULL;
> +    Frontend->TargetId =3D 0;
> +    Frontend->DeviceId =3D 0;
> +    Frontend->State =3D XENVBD_STATE_INVALID; // 0
> +    Frontend->BackendDomain =3D 0;
> +    Frontend->MaxQueues =3D 0;
> +
> +    ASSERT(IsZeroMemory(Frontend, sizeof(XENVBD_FRONTEND)));
>       __FrontendFree(Frontend);
>       Trace("Target[%d] @ (%d) <=3D=3D=3D=3D=3D\n", TargetId, KeGetCurre=
ntIrql());
>   }
> diff --git a/src/xenvbd/ring=2Ec b/src/xenvbd/ring=2Ec
> index 0b56831=2E=2Effbd18a 100644
> --- a/src/xenvbd/ring=2Ec
> +++ b/src/xenvbd/ring=2Ec
> @@ -1917,7 +1917,7 @@ fail4:
>       RtlZeroMemory(&(*BlkifRing)->SrbQueue, sizeof(LIST_ENTRY));
>  =20
>       __RingFree((*BlkifRing)->Path);
> -    (*BlkifRing)->Path;
> +    (*BlkifRing)->Path =3D NULL;
>       (*BlkifRing)->Index =3D 0;
>       (*BlkifRing)->Ring =3D NULL;
>  =20
> @@ -1957,6 +1957,10 @@ BlkifRingDestroy(
>       ASSERT(IsListEmpty(&BlkifRing->ShutdownQueue));
>       RtlZeroMemory(&BlkifRing->ShutdownQueue, sizeof(LIST_ENTRY));
>  =20
> +    BlkifRing->SrbsQueued =3D 0;
> +    BlkifRing->SrbsCompleted =3D 0;
> +    BlkifRing->SrbsFailed =3D 0;
> +
>       __RingFree(BlkifRing->Path);
>       BlkifRing->Path =3D NULL;
>       BlkifRing->Index =3D 0;



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.7b.31a8589d385d11ec.1a12048e5d8.271d5ac03525541c=---


From win-pv-devel-bounces@lists.xenproject.org Fri Oct 09 11:25:34 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 09 Oct 2026 11:25:34 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1444263.1661200 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xF8jG-00018n-Eu; Fri, 09 Oct 2026 11:25:34 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1444263.1661200; Fri, 09 Oct 2026 11:25:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xF8jG-00018e-Bz; Fri, 09 Oct 2026 11:25:34 +0000
Received: by outflank-mailman (input) for mailman id 1444263;
 Fri, 09 Oct 2026 11:25:33 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a120693d8200080d7@swg.vates.tech>)
 id 1xF8jF-00018W-OU
 for win-pv-devel@lists.xenproject.org; Fri, 09 Oct 2026 11:25:33 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xF8jF-002RWY-51
 for win-pv-devel@lists.xenproject.org; Fri, 09 Oct 2026 13:25:33 +0200
Received: from [10.42.69.11] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a120693d8200080d7@swg.vates.tech>)
 id 6ac8cf2a-2eae-0a2a0a5409dd-0a2a450b981a-8
 for <win-pv-devel@lists.xenproject.org>; Fri, 09 Oct 2026 13:25:33 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-42698a.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a120693d8200080d7@swg.vates.tech>)
 id 6ac8cf2c-b7e8-0a2a450b0019-b9ff1c12ab4d-3
 for <win-pv-devel@lists.xenproject.org>; Fri, 09 Oct 2026 13:25:33 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a120693d8200080d7.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Fri, 09 Oct 2026 11:25:30 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 27DDC8116A;
 Fri,  9 Oct 2026 13:25:29 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=ISsjsxT+7XlHho9Y6NbuQPHb+s5NDMErVGxJWgDLsrc=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:feedback-id;
 b=qnm0cbRfZ8mlIVrPCatsQf08wh+wNZJ/A6t12LUdwH0dL5Wxo/ss1H8ozEzCHyewv0s/SdMw8
 +BivlMHP+d2MTdn/8m2aiBHYlooDpe5MLRy1/F1ricq1kxyh0rpOxh4VYfESJT3UsrLiwD+fQtB
 xBEBiXZTHoUYL5shghCv9CTbLqDxTTBV8JGja5u86cCZE+9+ioDaaloqT40gpe60BM69Mjeqq/S
 KY1q0Gg3eRPWKvbanL6STZVD9iQIZ6mmp22tpVywMswjWltEXxVsafhgLQ0DcrYy8hlqTrc0DXJ
 7LMVDZ6RWcydJwPkyo5PzeDsBbRT0Q6ZPcmowjGmE4wQ==
X-Zone-Loop: 81d3ecf57009818680878f7c4f1c2a6824fa28b75c81
x-campaign-type: default
x-transaction-id: 9e14a0b3-ea68-462d-a632-451ba83dc5ad
x-swg-uid: 01-46109570-623c-4465-89b9-5e3acbcbfc18
X-Mailer: Sweego
Message-ID:
 <1791545130.8631fc262581453bbf619ec5b2062170.1a120693d8200080d7@vates.tech>
x-swg-bid: 1791545130.8631fc262581453bbf619ec5b2062170.1a120693d8200080d7
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [PATCH 1/2] Check Process and UseRequestId in CsqPeekNextIrp
Date: Fri,  9 Oct 2026 13:25:20 +0200
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.7c.3a536c95a8712a6f.1a12069390a.def58a2acb018ffb=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791545129226
X-purgate-ID: tlsNG-42698a/1791545133-196C29EA-443D36FF/0/0
X-purgate-type: clean
X-purgate-size: 1700

---=Part.7c.3a536c95a8712a6f.1a12069390a.def58a2acb018ffb=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Each Context object may be associated with a different process and a
different API (V1/V2)=2E We must check for these settings when looking for
a matching IRP=2E

Assisted-by: LLM
Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 src/xeniface/irp_queue=2Ec | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/src/xeniface/irp_queue=2Ec b/src/xeniface/irp_queue=2Ec
index 420cecf=2E=2E511a36a 100644
--- a/src/xeniface/irp_queue=2Ec
+++ b/src/xeniface/irp_queue=2Ec
@@ -98,9 +98,12 @@ CsqPeekNextIrp(
         if (PeekContext) {
             Context =3D NextIrp->Tail=2EOverlay=2EDriverContext[0];
=20
-            BOOL Match =3D TargetContext->Type =3D=3D Context->Type;
+            BOOL Match =3D TargetContext->Type =3D=3D Context->Type &&
+                         TargetContext->Process =3D=3D Context->Process;
             if (TargetContext->UseRequestId)
-                Match =3D Match && (TargetContext->RequestId =3D=3D Conte=
xt->RequestId);
+                Match =3D Match &&
+                        TargetContext->UseRequestId =3D=3D Context->UseRe=
questId &&
+                        TargetContext->RequestId =3D=3D Context->RequestI=
d;
             else
                 Match =3D Match && (TargetContext->UserVa =3D=3D Context-=
>UserVa);
=20
--=20
2=2E55=2E0=2Ewindows=2E3



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.7c.3a536c95a8712a6f.1a12069390a.def58a2acb018ffb=---


From win-pv-devel-bounces@lists.xenproject.org Fri Oct 09 11:26:35 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 09 Oct 2026 11:26:35 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1444266.1661204 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xF8kF-0001Jb-IU; Fri, 09 Oct 2026 11:26:35 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1444266.1661204; Fri, 09 Oct 2026 11:26:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xF8kF-0001JU-FZ; Fri, 09 Oct 2026 11:26:35 +0000
Received: by outflank-mailman (input) for mailman id 1444266;
 Fri, 09 Oct 2026 11:26:34 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1206a2ea400080d7@swg.vates.tech>)
 id 1xF8kE-0001JO-8V
 for win-pv-devel@lists.xenproject.org; Fri, 09 Oct 2026 11:26:34 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xF8kD-001WFW-LJ
 for win-pv-devel@lists.xenproject.org; Fri, 09 Oct 2026 13:26:33 +0200
Received: from [10.42.69.3] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1206a2ea400080d7@swg.vates.tech>)
 id 6ac8cf68-2eae-0a2a0a5409dd-0a2a45039032-6
 for <win-pv-devel@lists.xenproject.org>; Fri, 09 Oct 2026 13:26:33 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-33051d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1206a2ea400080d7@swg.vates.tech>)
 id 6ac8cf68-fae8-0a2a45030019-b9ff1c2282ab-3
 for <win-pv-devel@lists.xenproject.org>; Fri, 09 Oct 2026 13:26:33 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1206a2ea400080d7.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Fri, 09 Oct 2026 11:26:32 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id E83C2820CC;
 Fri,  9 Oct 2026 13:26:30 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=vsFs+wjEmrL9TOpmNN1WouYADIdsMIcahrxuTYEm9gI=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=nN+oCj+IcNomnvdl9F+OIWBMcDgDGI/OBAUN+C2rDAgzf8fkwgf3LLoyGxbeQA8zY4VmUJuU7
 KOzWeY7cOh4j/PBaDWw30bLH3VHeF8PFISleMB4JrG0NNmPdr1WSu4Fchdb5plTs8cnn6KRBeHR
 GgFzSdhnOZSEXfdqjEdk7TK9PoumgSuqYGuUBE94IQSLxkJAN99gI0L9vc/5pbKxPOSuHVReIqf
 9Tl6+ZkFTpIj3T29t26+etMhuBaKHSiz5/dDnWqvOtH9zL43tBNXC3ZRLBpeZg2ceHUPLZ+8WoB
 WrEtOtCf+XTuMCh76UO2YaJEJpAVB8EdEs/dFIFwd0dA==
X-Zone-Loop: 6dfb9c788c3c46c7f10c07329f22bcba5e3bb6cec847
x-campaign-type: default
x-transaction-id: 2e2d07c6-b315-471f-965a-8a42a3958e4f
x-swg-uid: 01-d9652dae-52f5-46bd-8ab0-bfac895e9229
X-Mailer: Sweego
Message-ID:
 <1791545192.8631fc262581453bbf619ec5b2062170.1a1206a2ea400080d7@vates.tech>
x-swg-bid: 1791545192.8631fc262581453bbf619ec5b2062170.1a1206a2ea400080d7
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [PATCH 2/2] gnttab: Hold a reference to Context->Process
Date: Fri,  9 Oct 2026 13:26:26 +0200
In-Reply-To: <1791545130.8631fc262581453bbf619ec5b2062170.1a120693d8200080d7@vates.tech>
References: <1791545130.8631fc262581453bbf619ec5b2062170.1a120693d8200080d7@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.7d.405b1f511dd05073.1a1206a2a5b.4ae2d91fa24471ea=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791545191003
X-purgate-ID: tlsNG-33051d/1791545193-770F64E9-4C941DF0/0/0
X-purgate-type: clean
X-purgate-size: 4235

---=Part.7d.405b1f511dd05073.1a1206a2a5b.4ae2d91fa24471ea=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Context->Process is used in a long-running fashion=2E Particularly, gnttab
IRPs stay pending as long as the permit/map request still lives=2E

In this case, we should hold a reference to the process concerned=2E

Assisted-by: LLM
Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 src/xeniface/ioctl_gnttab=2Ec | 18 +++++++++++++++---
 1 file changed, 15 insertions(+), 3 deletions(-)

diff --git a/src/xeniface/ioctl_gnttab=2Ec b/src/xeniface/ioctl_gnttab=2Ec
index c333034=2E=2Eb903387 100644
--- a/src/xeniface/ioctl_gnttab=2Ec
+++ b/src/xeniface/ioctl_gnttab=2Ec
@@ -49,6 +49,7 @@ CompleteGnttabIrp(
     PIRP                        Irp =3D Context;
     PXENIFACE_GNTTAB_CONTEXT    GnttabContext;
     PIO_WORKITEM                WorkItem;
+    PEPROCESS                   Process;
     KAPC_STATE                  ApcState;
     BOOLEAN                     ChangeProcess;
=20
@@ -56,13 +57,17 @@ CompleteGnttabIrp(
=20
     GnttabContext =3D Irp->Tail=2EOverlay=2EDriverContext[0];
     WorkItem =3D Irp->Tail=2EOverlay=2EDriverContext[1];
+    Process =3D GnttabContext->Process;
+
+    // The context is freed before we detach, so hold another process ref=
erence=2E
+    ObReferenceObject(Process);
=20
     // We are not guaranteed to be in the context of the process that ini=
tiated the IRP,
     // but we need to be there to unmap memory=2E
-    ChangeProcess =3D PsGetCurrentProcess() !=3D GnttabContext->Process;
+    ChangeProcess =3D PsGetCurrentProcess() !=3D Process;
     if (ChangeProcess) {
-        Trace("Changing process from %p to %p\n", PsGetCurrentProcess(), =
GnttabContext->Process);
-        KeStackAttachProcess(GnttabContext->Process, &ApcState);
+        Trace("Changing process from %p to %p\n", PsGetCurrentProcess(), =
Process);
+        KeStackAttachProcess(Process, &ApcState);
     }
=20
     Trace("Irp %p, Process %p, Id %lu, Type %d, IRQL %d\n",
@@ -85,6 +90,7 @@ CompleteGnttabIrp(
     if (ChangeProcess)
         KeUnstackDetachProcess(&ApcState);
=20
+    ObDereferenceObject(Process);
     IoFreeWorkItem(WorkItem);
=20
     Irp->IoStatus=2EStatus =3D STATUS_CANCELLED;
@@ -376,6 +382,7 @@ IoctlGnttabPermitForeignAccess(
=20
     Context->Type =3D XENIFACE_GNTTAB_CONTEXT_GRANT;
     Context->Process =3D PsGetCurrentProcess();
+    ObReferenceObject(Context->Process);
     Context->RemoteDomain =3D In->RemoteDomain;
     Context->UserVa =3D In->Address;
     Context->NumberPages =3D In->NumberPages;
@@ -451,6 +458,7 @@ fail9:
=20
 fail8:
     Error("Fail8\n");
+    ObDereferenceObject(Context->Process);
     RtlZeroMemory(Context, sizeof(*Context));
     __FreePoolWithTag(Context, XENIFACE_POOL_TAG);
=20
@@ -516,6 +524,7 @@ GnttabFreeGrant(
=20
     GnttabStopSharing(Fdo, Context, Context->NumberPages);
=20
+    ObDereferenceObject(Context->Process);
     RtlZeroMemory(Context, sizeof(*Context));
     __FreePoolWithTag(Context, XENIFACE_POOL_TAG);
 }
@@ -609,6 +618,7 @@ IoctlGnttabMapForeignPages(
=20
     Context->Type =3D XENIFACE_GNTTAB_CONTEXT_MAP;
     Context->Process =3D PsGetCurrentProcess();
+    ObReferenceObject(Context->Process);
=20
     // This IOCTL uses METHOD_NEITHER so we directly access user memory=
=2E
     if (ControlCode =3D=3D IOCTL_XENIFACE_GNTTAB_MAP_FOREIGN_PAGES) {
@@ -814,6 +824,7 @@ fail3:
=20
 fail2:
     Error("Fail2\n");
+    ObDereferenceObject(Context->Process);
     RtlZeroMemory(Context, sizeof(*Context));
     __FreePoolWithTag(Context, XENIFACE_POOL_TAG);
=20
@@ -865,6 +876,7 @@ GnttabFreeMap(
             Error("failed to notify port %lu: 0x%x\n", Context->NotifyPor=
t, status);
     }
=20
+    ObDereferenceObject(Context->Process);
     RtlZeroMemory(Context, sizeof(*Context));
     __FreePoolWithTag(Context, XENIFACE_POOL_TAG);
 }
--=20
2=2E55=2E0=2Ewindows=2E3



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.7d.405b1f511dd05073.1a1206a2a5b.4ae2d91fa24471ea=---


From win-pv-devel-bounces@lists.xenproject.org Fri Oct 09 11:36:10 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 09 Oct 2026 11:36:10 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1444276.1661218 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xF8tW-000359-Jd; Fri, 09 Oct 2026 11:36:10 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1444276.1661218; Fri, 09 Oct 2026 11:36:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xF8tW-000350-Fg; Fri, 09 Oct 2026 11:36:10 +0000
Received: by outflank-mailman (input) for mailman id 1444276;
 Fri, 09 Oct 2026 11:36:09 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <owen.smith@citrix.com>) id 1xF8tV-00034i-GL
 for win-pv-devel@lists.xenproject.org; Fri, 09 Oct 2026 11:36:09 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xF8tT-002UBY-PT
 for win-pv-devel@lists.xenproject.org; Fri, 09 Oct 2026 13:36:07 +0200
Received: from [10.42.69.10] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ac8d19c-8faa-0a2a0a5109dd-0a2a450aa79e-42
 for <win-pv-devel@lists.xenproject.org>; Fri, 09 Oct 2026 13:36:07 +0200
Received: from [52.101.62.30]
 (helo=DM5PR21CU001.outbound.protection.outlook.com)
 by tlsNG-4011c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ac8d1a6-f2d2-0a2a450a0019-34653e1ecb91-3
 for <win-pv-devel@lists.xenproject.org>; Fri, 09 Oct 2026 13:36:07 +0200
Received: from SA6PR03MB7760.namprd03.prod.outlook.com (2603:10b6:806:43c::5)
 by BY1PR03MB7947.namprd03.prod.outlook.com (2603:10b6:a03:5b8::19)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.496.17; Fri, 9 Oct
 2026 11:35:40 +0000
Received: from SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38]) by SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38%5]) with mapi id 15.21.0496.015; Fri, 9 Oct 2026
 11:35:40 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:x-ms-exchange-senderadcheck"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
 b=bqKNu7mYRhXPRVzbIceMNEn76cMm/x/4IiY8Pe35Ov2E/cArtj81DnlbOOxpkKa816LsopyiLPMMfsMdA1qhsHk8ris1Z1JuNzDmWtVdZDqByofyMhujGTbMaqXEQuQrMHo7TU0+FCR8J2r9tGp8psx2HPgqklZKZyzeU8GpovIaiWJsPEozsu121QnCj+fZmHvcQ50hiOHTY2O7EbHfhF4PGTAfnRqUClSfdFIPlARY/Ycg496llQtQtkoNyX8apWWi5CPsN8IvZrQ6kW3kUA7a1Ef1mxPToJAoAP54aWLcwpjhHpY7MG8nMDUgS5U48KgCnUGqykHP1KGHHEjL0Q==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector10001;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=FOns39y/OCprrFbpEa3DJ0mHnkPM2c86xIKBZOK4upc=;
 b=nbbsinIk/vYjMM3jxR+T0lvnu0r3jYiCAuGvRiGe11/EcOcOzXGZC8E62Ns2sVlmht1CnbgjrVcx1g3UXh2o/KCiKUHNQRQqma3O9sRUoCnq4F8DikXLlYbYeK3kldg+TZuAhvcALAB4d1+j4yQ+YcyeTJEaeMUnKTOoKtA5HloSEtJtvY/Ub/A10dohkW7ccUZmmKvS5Uq8mFMvNLhgpcysB1ovDBV8fUVZWwCafgs+2YvkzGYi9awCyGGEW8lTA8EvAWJpQWIn7DCYzRULKF+kan7f/RBsMXA603mUxQbj/yPideitiYkvM0ms/s9ae19tA7nVAAsVNBtGTR2/bw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=FOns39y/OCprrFbpEa3DJ0mHnkPM2c86xIKBZOK4upc=;
 b=uOh+kJavhQ5zBZocWof+Y49/R1eiPTqCMrRWnGVOTuWd9ku67RptSeIy2QOypzyVbuimxGOBxLtqVgFD/awfxcJt1lr/qB7xEzE+R/hXZnI/u20qx9It//BNmKp7C+4c4tJQTgFeLvD3q5pXfaqQig+riPYNbcNVr/mDlc/Weic=
From: Owen Smith <owen.smith@citrix.com>
To: Tu Dinh <ngoc-tu.dinh@vates.tech>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Subject: Re: [PATCH 1/2] Check Process and UseRequestId in CsqPeekNextIrp
Thread-Topic: [PATCH 1/2] Check Process and UseRequestId in CsqPeekNextIrp
Thread-Index: AQHdV+DtP3K2Yr2NmkK9ejqfWsEr77b1FMnE
Date: Fri, 9 Oct 2026 11:35:39 +0000
Message-ID:
 <SA6PR03MB7760FDF2E3454382DD8BA910FE922@SA6PR03MB7760.namprd03.prod.outlook.com>
References:
 <1791545130.8631fc262581453bbf619ec5b2062170.1a120693d8200080d7@vates.tech>
In-Reply-To:
 <1791545130.8631fc262581453bbf619ec5b2062170.1a120693d8200080d7@vates.tech>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
msip_labels:
authentication-results: mx.microsoft.com 1; dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=citrix.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: SA6PR03MB7760:EE_|BY1PR03MB7947:EE_
x-ms-office365-filtering-correlation-id: d894b716-81a7-4691-126d-08df25f97210
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam:
 BCL:0;ARA:13230040|1800799024|366016|376014|23010399003|18002099003|10067099003|22082099003|11063799006|38070700021|56012099006;
x-microsoft-antispam-message-info:
 MNo0YoQA7qiuxZ86pqvzimiggOyhQu+2bd15OY10YDGTJfxuaDWUi0XQMknyciC1OzY3GfIo0tkZ7lKqq9oCwRbAsz26Mg9VzX1Ty+0qujiQ7OZP+zCfd2NiWZAFnZE7o+eqTkUXpGg8gN1yxa5C+5n/WQ/DdOPMt3yZmq7wreBPL8STgs4NsCpEO6swEA2yrgIkNBAKFb/95oMC2zNQ67QRBLJu+Xy9t6O1j06DuSwqt5udqCrjSAZ4/gSyRghjns7uBGvNBBEHsGJXGuM4OCZNLMaiXcGaQNfi9ecsczk0+Gxn20PPHMVmD0SYH6b2fxJAdSA62KGkGvK97BJaP4kbp6ZIHinKYqTfR++jidcf3VdjYGaZpB9ZocgFIwmr1vZ4IupaR46ISZs++tMcjgEB2Dhl/T10VkFKs5KQovokx4eS0Z94Z4mXQkVDVJWWb6SaPm4K50Yrp1KlqKFY07Cy1PtSK9l36kv1R9XT/D3Ykr2hGm2MWyr9qNkPW8C4MsGv9aOlrZn6dY7ji1LHsGslX9PHt5njrPa9aGSIqis3ZiAryWumoKVmhONNqHtjDR/5PzhSotNNMq9jjhuU6CAazjb25AkEa+tNrZyEyUbOrNVAdP5aHvyQikvADn/OVWPGuBjF+CbSAR4jeoCPJtPA2RY04ZY0t8rdqNDCbPo=
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SA6PR03MB7760.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(23010399003)(18002099003)(10067099003)(22082099003)(11063799006)(38070700021)(56012099006);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?us-ascii?Q?6NGrpzmpB/BUO0zEak/1SRa8rTLMrZULUXgPNwmUcOO+n80PJig6UoT+O0Gr?=
 =?us-ascii?Q?di12m+i+2qh2ozLgj6hDtf//sWvunwEhAksXOXwJUPECP2namaFMQbcBCpqd?=
 =?us-ascii?Q?f9mK1MJj8cA/drrJuQ4MGmw2XAAvPwFtqOOJphI9Pff/Is0GCVsH+jC9HaU4?=
 =?us-ascii?Q?DWV6SA1fhFGO6+izys+jAYD3nWXm+tswBiV5cDskwbBuMhaLTI4QlZZsrWlY?=
 =?us-ascii?Q?GjrJ93W8+gqMiGsmXcApCiOp8lAdKK2wk94fwCn1wQSwNWbfJhA3jkKz/nPS?=
 =?us-ascii?Q?dirvBfhafoaz64H+TmncKOvyaXUDwSQ3phju8irA1JjCJSE9loQIHUewpfU4?=
 =?us-ascii?Q?G0A/jhm9Nkrt8XjeA+Z+UYBnG3VWmIBvTd57HGFfO2Ljq2dcirIeBDchFJDS?=
 =?us-ascii?Q?xM+JFZ8GtssnTHbv2+13HvgA1gxiyPSW4sEV0rxaP4Afvol0hx7vx9/Nzidn?=
 =?us-ascii?Q?GZNoYC5R/X+m+0pK0eK6j+nGPOSyYqJTddS0APb2ctA/evvR8YINfXY8mIBW?=
 =?us-ascii?Q?pHG6ueGD4dso64VAjtgG3Tl6bIeAVgWsUMCxy6SAe7bRq81PICPb2zndiDtD?=
 =?us-ascii?Q?9CVBEv5nOlOBDSYX47kc4PdyarnmNdDrAU0Xf4vm3yxsknw258OSgBNYXuVF?=
 =?us-ascii?Q?NaFSOakkIN1P1E4qvryQPpwAvhVoAu0uF2pJGAPoF6qUdEwPd7k71bYOOgHF?=
 =?us-ascii?Q?ya7Wwc9cxy45xeif2FcYXIQBofgLyXN9OOBdbVxa9Lr26vq4QCrFT18GMh08?=
 =?us-ascii?Q?qnre2W3YwriyEsXr2/HOzV0qNflLetuOpCZJI0FTtpvtcnro6mUe7x5Uopfo?=
 =?us-ascii?Q?8RshUDOYKwI/3k7Rfaus0G6NrBlhax7Kh7j8JJmyM7Xpthwof+d+NN+D3tA+?=
 =?us-ascii?Q?NPqanJXimCo6tFJ8WsfEDVEPMU4FcTJ8sL55g/hyPPT7lA61KPHqRdKyYrR9?=
 =?us-ascii?Q?rB0RvLU4JeP2ew+lgKJPR2lazj0XBjR+v0YHzVrewdAt3VTBCoxyhBd2Sl1C?=
 =?us-ascii?Q?op60ZjAkBzS6T1dqC/q+2LHDa6xbldAwfFMzhIib0HJl8Z5aCfNW6Ke0iwMx?=
 =?us-ascii?Q?csm5gLZ6jrE9hvtwpyCR1gwb14sSTbtiSIQScWlRNmLmoles30XWOq0PY8LU?=
 =?us-ascii?Q?OzqkF3elNzNYZP+8Y5u08J4FYaPnB40qFLUmuNR252W4T67u622GOKx3x2zW?=
 =?us-ascii?Q?uMzil3WdLxhrzeWTIUt5VX5bQcpFXEE7t84fe/TCKDoQWCWSGfes9XI9PaEd?=
 =?us-ascii?Q?8EZHU12pU3pZxDOnBOenG0uRTHA/jmDLqmNN7ePF/4XA7bbuPIxyAGlx/QMS?=
 =?us-ascii?Q?wCsxe8iRPzvktb1aCdxm/mcb+O/d4mZgTJYA7aoHChWyfXt/SnpHURED9I5o?=
 =?us-ascii?Q?5XKKBD+6LVWqjj/wOHeU4CEFZ5R9qISY+xZIGGLNNAjRQxephvkdt1SJfNn+?=
 =?us-ascii?Q?D34KxDWGtabaURvWyhuJxPYMZO0f7hIfXr+UvcWdknBINInAd6tBZ8gEO+Kg?=
 =?us-ascii?Q?oa+CTNrNHL8ufosXIdJTeDvHC51TbbWE/QKjtnwO3nzHH6cePZJOKvKJoNxr?=
 =?us-ascii?Q?bWJo3SsccRGSDkMq7c7GjTTAxwxQ9UE+81iomuaiU4NBTyjdSgInofjmBvt7?=
 =?us-ascii?Q?52OnsJoZ7TTYFT/+c1Il5EpX01Y7riO0ZmgB+8pfbAoGIhptPHPdUBZkUGd+?=
 =?us-ascii?Q?mt9FbasbMn6gUAEjAGi6e/U9IzT1ER1e2lMEcq9LOqdRQ+Ld?=
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-OriginatorOrg: citrix.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: SA6PR03MB7760.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: d894b716-81a7-4691-126d-08df25f97210
X-MS-Exchange-CrossTenant-originalarrivaltime: 09 Oct 2026 11:35:39.9429
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: ne3CTqb10+H52JErvK463p+LhTwtq3pKLRogEHvOXnYrGlzb/dSS9DmcfBwE9H0/tg10iTH7mVqFGguZ+uO9tg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR03MB7947
X-purgate-ID: tlsNG-4011c0/1791545767-585CBCFC-1E135F07/0/0
X-purgate-type: clean
X-purgate-size: 1803

Reviewed-by: Owen Smith <owen.smith@citrix.com>

________________________________________
From: win-pv-devel <win-pv-devel-bounces@lists.xenproject.org> on behalf of=
 Tu Dinh <ngoc-tu.dinh@vates.tech>
Sent: 09 October 2026 12:25 PM
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh
Subject: [PATCH 1/2] Check Process and UseRequestId in CsqPeekNextIrp

Each Context object may be associated with a different process and a
different API (V1/V2). We must check for these settings when looking for
a matching IRP.

Assisted-by: LLM
Signed-off-by: Tu Dinh <ngoc-tu.dinh@vates.tech>
---
 src/xeniface/irp_queue.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/src/xeniface/irp_queue.c b/src/xeniface/irp_queue.c
index 420cecf..511a36a 100644
--- a/src/xeniface/irp_queue.c
+++ b/src/xeniface/irp_queue.c
@@ -98,9 +98,12 @@ CsqPeekNextIrp(
         if (PeekContext) {
             Context =3D NextIrp->Tail.Overlay.DriverContext[0];

-            BOOL Match =3D TargetContext->Type =3D=3D Context->Type;
+            BOOL Match =3D TargetContext->Type =3D=3D Context->Type &&
+                         TargetContext->Process =3D=3D Context->Process;
             if (TargetContext->UseRequestId)
-                Match =3D Match && (TargetContext->RequestId =3D=3D Contex=
t->RequestId);
+                Match =3D Match &&
+                        TargetContext->UseRequestId =3D=3D Context->UseReq=
uestId &&
+                        TargetContext->RequestId =3D=3D Context->RequestId=
;
             else
                 Match =3D Match && (TargetContext->UserVa =3D=3D Context->=
UserVa);

--
2.55.0.windows.3



--
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates solutions

web: https://vates.tech


From win-pv-devel-bounces@lists.xenproject.org Fri Oct 09 11:36:10 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 09 Oct 2026 11:36:10 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1444277.1661222 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xF8tW-00035T-MD; Fri, 09 Oct 2026 11:36:10 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1444277.1661222; Fri, 09 Oct 2026 11:36:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xF8tW-00035C-H2; Fri, 09 Oct 2026 11:36:10 +0000
Received: by outflank-mailman (input) for mailman id 1444277;
 Fri, 09 Oct 2026 11:36:09 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <owen.smith@citrix.com>) id 1xF8tV-00034j-Gt
 for win-pv-devel@lists.xenproject.org; Fri, 09 Oct 2026 11:36:09 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xF8tU-002U97-Px
 for win-pv-devel@lists.xenproject.org; Fri, 09 Oct 2026 13:36:08 +0200
Received: from [10.42.69.10] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ac8d1a8-2eae-0a2a0a5409dd-0a2a450a9ed0-4
 for <win-pv-devel@lists.xenproject.org>; Fri, 09 Oct 2026 13:36:08 +0200
Received: from [52.101.62.30]
 (helo=DM5PR21CU001.outbound.protection.outlook.com)
 by tlsNG-4011c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ac8d1a6-f2d2-0a2a450a0019-34653e1ecb91-4
 for <win-pv-devel@lists.xenproject.org>; Fri, 09 Oct 2026 13:36:08 +0200
Received: from SA6PR03MB7760.namprd03.prod.outlook.com (2603:10b6:806:43c::5)
 by BY1PR03MB7947.namprd03.prod.outlook.com (2603:10b6:a03:5b8::19)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.496.17; Fri, 9 Oct
 2026 11:35:44 +0000
Received: from SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38]) by SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38%5]) with mapi id 15.21.0496.015; Fri, 9 Oct 2026
 11:35:44 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:x-ms-exchange-senderadcheck"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
 b=holL34nr1PKThKevcGkZD9tJYE55N20VnnZKLKKi42RVwTiHCIPAPeLILq0LYQ2AbjMix/hZhwmG9gbrmRHm0ABDGj881g9KJimhDoaMj2s5TlrTfD1v0SyyJxBnGnAVU1JXcrwAoIBxrhhaquZfcDQNMvg5puChRRcLVGGHfpTxVnLb6+IzxotnFBMw8kx3iONT05b+3WbQL3onBqf4vO4bhEqSP921h9poi6Kh2fUgf4yhiHpFw57+2gbDgbb3pDQ7pgrmEDFvQVmOay9526/6xTrS+Dxhjr7RkXaxYQp7MeSaHJf1e3ojbFZU0idAIzj4WD5IYIN32NhXIsJa4A==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector10001;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=Mgxd82MkaFnzTdnLEGWP1QdxyMko31jhCDUwlWf2Dto=;
 b=YA4Q3M4GAj1iMRxghRPbUjxGr/NqXgLVFxzMhHa9Z1cNutsiB55fi+QNy7h6jaOYtoOwCqil3j8al0k//bTZT2TeRZe7JzKMZ0r4+4varg3/0KUgtqD2WNT8LFisIw8D0CTevhT1hEbGplrkpvEBPGbcRAI8fFW9qMSSXi5fMTwEFDA/xCiwP5WTjuwA2w2TrBAWpJyqEGzSjDUmhsp31tCxHByWPz7nSbLDO6c0iEROt+Db0iDBRjIK2eZVsP2/t3ZGtsC2Iiz8vTBnBouCPJ/j/xvMuFuZDUd19sB6Ezu92pferYi149fkGD7oM6Glf6FFDmkAj6cok8qVb72rXA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Mgxd82MkaFnzTdnLEGWP1QdxyMko31jhCDUwlWf2Dto=;
 b=p2NS3HQ9b/9xZk+XTXsfsac00hUV2pvdU93MfC1xif2Hqc9ihFSgJ2vLlmLOW90vZcuDYcshaw+O47EtA7x6wKBgiCKYTUqDGB6dDRnE4w19xOLP65fKCK7gD6qrQ/0WjE6IxiqOX6lLWE3jpA9pvDwkr5tHJaA5bY90W6G4/GQ=
From: Owen Smith <owen.smith@citrix.com>
To: Tu Dinh <ngoc-tu.dinh@vates.tech>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Subject: Re: [PATCH 2/2] gnttab: Hold a reference to Context->Process
Thread-Topic: [PATCH 2/2] gnttab: Hold a reference to Context->Process
Thread-Index: AQHdV+ERS2Mi0loh5UyF3pZquyLbDbb1FN+P
Date: Fri, 9 Oct 2026 11:35:44 +0000
Message-ID:
 <SA6PR03MB7760B34AE88922572502E9CFFE922@SA6PR03MB7760.namprd03.prod.outlook.com>
References:
 <1791545130.8631fc262581453bbf619ec5b2062170.1a120693d8200080d7@vates.tech>
 <1791545192.8631fc262581453bbf619ec5b2062170.1a1206a2ea400080d7@vates.tech>
In-Reply-To:
 <1791545192.8631fc262581453bbf619ec5b2062170.1a1206a2ea400080d7@vates.tech>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
msip_labels:
authentication-results: mx.microsoft.com 1; dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=citrix.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: SA6PR03MB7760:EE_|BY1PR03MB7947:EE_
x-ms-office365-filtering-correlation-id: 937285eb-ccfc-4799-77d3-08df25f97481
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam:
 BCL:0;ARA:13230040|1800799024|366016|376014|23010399003|18002099003|10067099003|22082099003|4143699003|11063799006|38070700021|56012099006;
x-microsoft-antispam-message-info:
 nwWTGvyVkzfoaH1ygkZBTHE6unmV7/Hl4Aevoj3qC9yNahFhsTwLdItXydKpkCYNerXsXNdZQVF9fhw1UcUJVFeQF/gHDvMsdsN6XPGzW4Fc3a7PEAKt5yeLYAit4aau4y4iaNhoofZAZBL1UZ7ySPd6tki/TgiuavvGlKXrWJnAgbNdr3Nltxh1OB7Twm4q2a6Y0sI4fVrAcQI/ooGvgaJ3zUiKJOYvx3zp1O+De3ShQ6Uiz6cHlJOMwUQoZCygT/C+KFu2eK7Ln5HK4AyOM5kityCwDlTg02N5wG7/KABRbW+5QMYTpeH+BhnhFObHBGuhxcQ5Gz7DbpSWpz+JVIWCT+NJmZ4XEhgCef8K47ioqGMbSO3ny6LwEPOLAR0ON1+G1s3Nxnsdl8BqXFMPUMLOOnplpVL4ypvcksCyS3bHEocTa7Ap7OZUcQ3C8D+FWJS2xpUtywOkAg36RpawIeQQFp8uOimuiMJAfrN3oS6lbJGJl49uBw94ZwLXvDEhkd/DA0B79CUDQ1W2DxEhMMV/SnaMWxGJ3hD0w8502GdgXBvKcrzzrigwoYD3P3ON0M8i/gIT+/7SIS0JrXaOMPt5a28tsEvDUWCmc+hzXnz3eVwRBbbH4e5CfTMMqUUfkTmT37aSODX+BN6uZS/Afe2Jz9J18DQtdzGF1bXjPLk=
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SA6PR03MB7760.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(23010399003)(18002099003)(10067099003)(22082099003)(4143699003)(11063799006)(38070700021)(56012099006);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?us-ascii?Q?X30pQsadpE88jHVbaue3f3pcrWua4MhhAn9wQUmatfhSa3JN6zGfvxYr5781?=
 =?us-ascii?Q?3FO+7ryWx3HXlMkPi3eCGEtvB95vGMSJznLiEuv9qQd1TXXcBzoV8n6FavBx?=
 =?us-ascii?Q?x2Pawpd0nmIqY9oeWKmQbmYc00y0p0jpIzx8d5eQr4AYthPf6mrfkmwlUUPx?=
 =?us-ascii?Q?IZfp5WuWuZSn2ZrPThV/alOfe5vhA7+Eq3T59e+0nChierllxdN2dMWONrY3?=
 =?us-ascii?Q?/uPi0VXoWflZfe+qLvn66hRvdAxyIH/S/IKoPahkBTJMOozrb4Covh/y3Zab?=
 =?us-ascii?Q?sB2iYAcN2dnKUcJ3XA6W1CF0RvFOWOAdLua8s87aOi7hTy7/0n7r306LOS7+?=
 =?us-ascii?Q?D2znqwXLYe46mjTuRdqKt2KklPtyexgGpdmhjIPu9wsY0RO/zlMn9mbXBeE6?=
 =?us-ascii?Q?eZVXstgV5TsB4SZHxF9nNSEZEn0BVKBgAAehQVF1tz5NZ+2Ta8ZuuGHc+zKa?=
 =?us-ascii?Q?CZRWI7CUnmZ4zbt6b4+0iwcZnfCFqyoPOXKluT+G5mIzV0nkQSjTJwJiRwSs?=
 =?us-ascii?Q?bOxlV5ZbOojJolc8+S92DJ4raV9of6wJfjtm++KASCkJit53LLBnvG3vsO34?=
 =?us-ascii?Q?rijME2zkVYYSahijPtzHn1ncAqy4gMqEwjW8vN0kKGyZ08ngN02a5C8cXE7s?=
 =?us-ascii?Q?ub1kRkG0hlsCfjKJreFSBESYvU8TX/f/Og+WZ6tie0qqc6fT89X9s6ca+A7T?=
 =?us-ascii?Q?lMG/2bCihJijGjLPvAGaroTnrlqxoCmuR6O6ztazjKPhuSEvSGI/fD+jSGIq?=
 =?us-ascii?Q?QBvdcTDC3HiaE2QAq+koKv7d3iCfbRdmkNAR+D3wu1knxy7iRdKre9N0GDqQ?=
 =?us-ascii?Q?sTAvh9CWyFNwz48eVT4D6+97TGo6ssGa2tO3mnovsfR5tMC46KHhvd8qe3zw?=
 =?us-ascii?Q?/ZIpmn1mq8RGH2GW5hYwDS2kBcPIb1IXXRBvJIlsyznnmcvnuLLPIqzKYY0S?=
 =?us-ascii?Q?bg2v5KVv6gYiyX5skak9/U4EFO/TlJabWkYIlezoRbgr//1ZqQrDvT+W9bxs?=
 =?us-ascii?Q?HOMJDVjckPLsFk4Z5Lh5HHUVkB0x87sUd3rzwUriHFQEW7xbRkL6Hm8MeDVo?=
 =?us-ascii?Q?PDbRCJixBHOQ6jnD4ng8Vb3PZ2O4+VBKWHULjcV8A5jYQ04KDuLaqtC3l5lG?=
 =?us-ascii?Q?Y+/fT+arC3vdxD9PXid3U2vuudsqox22HzgJB1VFqyZbnuspc4GlbXxk3rr5?=
 =?us-ascii?Q?0pAbQWmFecqtFvqJWWvm+UndeYFvvAVw2k+zjC7rcCYqNUG/fISvft1Cxf48?=
 =?us-ascii?Q?xT196ARsIk2eKg4B3+Z2t+M6G4FfParXjhW16gdP82j17VgbgQZx7CgWwZYz?=
 =?us-ascii?Q?/pjGSw7IVh6XpsnhvAl/p+xZLsxQIZ50Wy0D6WYwdlAf5ft2M4QAhMTbxhLc?=
 =?us-ascii?Q?Npz/Bx+1sGfn301OGZW8DtaghiSvgyPoAkWOjed78KfBtiFK46W6RDwDewPt?=
 =?us-ascii?Q?SdBvvMoE2dc8lA9jmtJtvKg4zywiPFHiJ7i9ErKIEvWRlzA2GxNQDlHh0EYL?=
 =?us-ascii?Q?7S7CtDhJ2o2dkJ4Fu5RBQrqaK0c7MJ7UjSkDSZmjM6gim+c5gn/aCpIfhPss?=
 =?us-ascii?Q?dYGjD11FaevQUFmJmsXE+ptTm/F3VV74yHgcCs5RCKCZNaN0J3TSYWhOwB7t?=
 =?us-ascii?Q?fmH3oahBsKF26XS3nHjHuCbDBj3R6eVCeMlyrWWGtjCFN9Nl8gxryQ+kzhiy?=
 =?us-ascii?Q?5gJwid448dit3UH6ODtYFuVv8qrUNSBkL1vQJ/7IRCfaVpbV?=
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-OriginatorOrg: citrix.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: SA6PR03MB7760.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 937285eb-ccfc-4799-77d3-08df25f97481
X-MS-Exchange-CrossTenant-originalarrivaltime: 09 Oct 2026 11:35:44.1155
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: AEsH4suqn/REvnAL7T+vxUMkolnzsT/ArgzzciETToPKUry5IQfQ2fMtdxFUXlk378LsUaK3p6EK/Ny9f/zJ7g==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR03MB7947
X-purgate-ID: tlsNG-4011c0/1791545768-58BC8CFC-A112A199/0/0
X-purgate-type: clean
X-purgate-size: 4275

Reviewed-by: Owen Smith <owen.smith@citrix.com>

________________________________________
From: win-pv-devel <win-pv-devel-bounces@lists.xenproject.org> on behalf of=
 Tu Dinh <ngoc-tu.dinh@vates.tech>
Sent: 09 October 2026 12:26 PM
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh
Subject: [PATCH 2/2] gnttab: Hold a reference to Context->Process

Context->Process is used in a long-running fashion. Particularly, gnttab
IRPs stay pending as long as the permit/map request still lives.

In this case, we should hold a reference to the process concerned.

Assisted-by: LLM
Signed-off-by: Tu Dinh <ngoc-tu.dinh@vates.tech>
---
 src/xeniface/ioctl_gnttab.c | 18 +++++++++++++++---
 1 file changed, 15 insertions(+), 3 deletions(-)

diff --git a/src/xeniface/ioctl_gnttab.c b/src/xeniface/ioctl_gnttab.c
index c333034..b903387 100644
--- a/src/xeniface/ioctl_gnttab.c
+++ b/src/xeniface/ioctl_gnttab.c
@@ -49,6 +49,7 @@ CompleteGnttabIrp(
     PIRP                        Irp =3D Context;
     PXENIFACE_GNTTAB_CONTEXT    GnttabContext;
     PIO_WORKITEM                WorkItem;
+    PEPROCESS                   Process;
     KAPC_STATE                  ApcState;
     BOOLEAN                     ChangeProcess;

@@ -56,13 +57,17 @@ CompleteGnttabIrp(

     GnttabContext =3D Irp->Tail.Overlay.DriverContext[0];
     WorkItem =3D Irp->Tail.Overlay.DriverContext[1];
+    Process =3D GnttabContext->Process;
+
+    // The context is freed before we detach, so hold another process refe=
rence.
+    ObReferenceObject(Process);

     // We are not guaranteed to be in the context of the process that init=
iated the IRP,
     // but we need to be there to unmap memory.
-    ChangeProcess =3D PsGetCurrentProcess() !=3D GnttabContext->Process;
+    ChangeProcess =3D PsGetCurrentProcess() !=3D Process;
     if (ChangeProcess) {
-        Trace("Changing process from %p to %p\n", PsGetCurrentProcess(), G=
nttabContext->Process);
-        KeStackAttachProcess(GnttabContext->Process, &ApcState);
+        Trace("Changing process from %p to %p\n", PsGetCurrentProcess(), P=
rocess);
+        KeStackAttachProcess(Process, &ApcState);
     }

     Trace("Irp %p, Process %p, Id %lu, Type %d, IRQL %d\n",
@@ -85,6 +90,7 @@ CompleteGnttabIrp(
     if (ChangeProcess)
         KeUnstackDetachProcess(&ApcState);

+    ObDereferenceObject(Process);
     IoFreeWorkItem(WorkItem);

     Irp->IoStatus.Status =3D STATUS_CANCELLED;
@@ -376,6 +382,7 @@ IoctlGnttabPermitForeignAccess(

     Context->Type =3D XENIFACE_GNTTAB_CONTEXT_GRANT;
     Context->Process =3D PsGetCurrentProcess();
+    ObReferenceObject(Context->Process);
     Context->RemoteDomain =3D In->RemoteDomain;
     Context->UserVa =3D In->Address;
     Context->NumberPages =3D In->NumberPages;
@@ -451,6 +458,7 @@ fail9:

 fail8:
     Error("Fail8\n");
+    ObDereferenceObject(Context->Process);
     RtlZeroMemory(Context, sizeof(*Context));
     __FreePoolWithTag(Context, XENIFACE_POOL_TAG);

@@ -516,6 +524,7 @@ GnttabFreeGrant(

     GnttabStopSharing(Fdo, Context, Context->NumberPages);

+    ObDereferenceObject(Context->Process);
     RtlZeroMemory(Context, sizeof(*Context));
     __FreePoolWithTag(Context, XENIFACE_POOL_TAG);
 }
@@ -609,6 +618,7 @@ IoctlGnttabMapForeignPages(

     Context->Type =3D XENIFACE_GNTTAB_CONTEXT_MAP;
     Context->Process =3D PsGetCurrentProcess();
+    ObReferenceObject(Context->Process);

     // This IOCTL uses METHOD_NEITHER so we directly access user memory.
     if (ControlCode =3D=3D IOCTL_XENIFACE_GNTTAB_MAP_FOREIGN_PAGES) {
@@ -814,6 +824,7 @@ fail3:

 fail2:
     Error("Fail2\n");
+    ObDereferenceObject(Context->Process);
     RtlZeroMemory(Context, sizeof(*Context));
     __FreePoolWithTag(Context, XENIFACE_POOL_TAG);

@@ -865,6 +876,7 @@ GnttabFreeMap(
             Error("failed to notify port %lu: 0x%x\n", Context->NotifyPort=
, status);
     }

+    ObDereferenceObject(Context->Process);
     RtlZeroMemory(Context, sizeof(*Context));
     __FreePoolWithTag(Context, XENIFACE_POOL_TAG);
 }
--
2.55.0.windows.3



--
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates solutions

web: https://vates.tech


From win-pv-devel-bounces@lists.xenproject.org Fri Oct 09 11:39:37 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 09 Oct 2026 11:39:37 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1444281.1661225 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xF8wq-0003IG-Sb; Fri, 09 Oct 2026 11:39:36 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1444281.1661225; Fri, 09 Oct 2026 11:39:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xF8wq-0003I9-Pj; Fri, 09 Oct 2026 11:39:36 +0000
Received: by outflank-mailman (input) for mailman id 1444281;
 Fri, 09 Oct 2026 11:39:35 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1207616d100080d7@swg.vates.tech>)
 id 1xF8wp-0003I3-P7
 for win-pv-devel@lists.xenproject.org; Fri, 09 Oct 2026 11:39:35 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xF8wo-00EVfP-JH
 for win-pv-devel@lists.xenproject.org; Fri, 09 Oct 2026 13:39:34 +0200
Received: from [10.42.69.4] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1207616d100080d7@swg.vates.tech>)
 id 6ac8d25c-2eae-0a2a0a5409dd-0a2a4504a824-40
 for <win-pv-devel@lists.xenproject.org>; Fri, 09 Oct 2026 13:39:34 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-ebf023.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1207616d100080d7@swg.vates.tech>)
 id 6ac8d275-b57f-0a2a45040019-b9ff1c12ac89-3
 for <win-pv-devel@lists.xenproject.org>; Fri, 09 Oct 2026 13:39:34 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1207616d100080d7.002 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Fri, 09 Oct 2026 11:39:32 +0000
Received: from [192.168.1.61] (142.220.66.37.rev.sfr.net [37.66.220.142])
 (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id A0288820CE;
 Fri,  9 Oct 2026 13:39:31 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=JlOFYErt/psY/yho50JOx9Db031XIBgA0yPh9cUCx00=;
 h=from:subject:date:message-id:to:mime-version:content-type:in-reply-to:references:feedback-id;
 b=MFjmnZkCy9Egac/eIRCJjVta8XqesLdI/l+ucwT/C5CiCouEmr/QYnbyIMkHLDe4UNs0Dsy2C
 2lGSiBc5xtYARrO8KhMttsu6sThdswXbLeWm0gVybfrDeChxBtaaAyzTtcjfQbar2+s6k12NbT5
 ECCuHFsrbgb8mTzA2eWbz6Kyl5q+Kq6IbEu323Jd00bj1wzs1FC4q4F1z9WEi5m5KcAGsWlLQdk
 pbJS/3HE49R77MncFZ21LrAItsdnIlmNzUBA2SwspNuZxXFEshKDesSMkXO9h0Nws40DYPGBakI
 IKW0owbFxmuUA1LR4HqcrCtabiilLm9ZWXVlSBC95zFQ==
X-Zone-Loop: bf60de5af4d5d6aa882c05814181f7770c7ba4994922
x-campaign-type: default
x-transaction-id: e2349fdf-0920-4474-97d6-7c48a1fcc481
x-swg-uid: 01-31bbd2ab-9d32-475b-bd91-ae9ea5e42b5f
X-Mailer: Sweego
Message-ID:
 <1791545972.8631fc262581453bbf619ec5b2062170.1a1207616d100080d7@vates.tech>
x-swg-bid: 1791545972.8631fc262581453bbf619ec5b2062170.1a1207616d100080d7
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
Date: Fri, 9 Oct 2026 13:39:31 +0200
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH 1/2] receiver: Remove dependencies on HVM_MAX_VCPUS
Content-Language: en-US
To: Owen Smith <owen.smith@citrix.com>,
 "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <1791449722.8631fc262581453bbf619ec5b2062170.1a11ab96ebe0003f66@vates.tech>
 <SA6PR03MB7760A43469DA527FDFD5B525FE932@SA6PR03MB7760.namprd03.prod.outlook.com>
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
In-Reply-To: <SA6PR03MB7760A43469DA527FDFD5B525FE932@SA6PR03MB7760.namprd03.prod.outlook.com>
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.7f.952eff2869e54d60.1a120761403.f17ee1cf0f04f9d6=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791545971715
X-purgate-ID: tlsNG-ebf023/1791545974-C32CCB50-6A826F45/0/0
X-purgate-type: clean
X-purgate-size: 2147

---=Part.7f.952eff2869e54d60.1a120761403.f17ee1cf0f04f9d6=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

On 08/10/2026 12:32, Owen Smith wrote:
>> diff --git a/src/xennet/receiver=2Ec b/src/xennet/receiver=2Ec
>> index 565d31b=2E=2E91e344b 100644
>> --- a/src/xennet/receiver=2Ec
>> +++ b/src/xennet/receiver=2Ec
>> @@ -33,7 +33,6 @@
>>   #include <ndis=2Eh>
>>   #include <procgrp=2Eh>
>>   #include <tcpip=2Eh>
>> -#include <xen=2Eh>
>>   #include <ethernet=2Eh>
>>
>>   #include "util=2Eh"
>> @@ -53,8 +52,9 @@ struct _XENNET_RECEIVER {
>>       PXENNET_ADAPTER             Adapter;
>>       NDIS_HANDLE                 NetBufferListPool;
>>       PNET_BUFFER_LIST            PutList;
>> -    PNET_BUFFER_LIST            GetList[HVM_MAX_VCPUS];
>> -    XENNET_RECEIVER_QUEUE       Queue[HVM_MAX_VCPUS];
>> +    ULONG                       Count;
>> +    PNET_BUFFER_LIST            *GetList;
>> +    XENNET_RECEIVER_QUEUE       *Queue;
>>       LONG                        Indicated;
>>       LONG                        Returned;
>>       XENVIF_VIF_OFFLOAD_OPTIONS  OffloadOptions;
>=20
> It may be useful to group all Queue related fields in the XENNET_RECEIVE=
R_QUEUE
> structure=2E
> A PutList, GetList, Indicated and Received specific to each queue would =
help with multi-queue
> scaling, though it would require stashing the queue index in the NBL res=
erved data=2E
>=20
> Owen

I've done some initial prototyping, and realized that currently GetList=20
is a per-CPU quantity, while Queue is a per-queue quantity=2E Moving=20
GetList into a per-queue structure would change the semantics (per-queue=
=20
instead of per-CPU as it currently is) and require synchronization using=
=20
the XENNET_RECEIVER_QUEUE spinlock=2E I'll need to do some analysis to see=
=20
if this will help or hurt performance=2E

I'd appreciate your input on this matter as well=2E


-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.7f.952eff2869e54d60.1a120761403.f17ee1cf0f04f9d6=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 12 10:19:40 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 12 Oct 2026 10:19:40 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1446073.1662038 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGD87-0002yu-0F; Mon, 12 Oct 2026 10:19:39 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1446073.1662038; Mon, 12 Oct 2026 10:19:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGD86-0002yn-Tf; Mon, 12 Oct 2026 10:19:38 +0000
Received: by outflank-mailman (input) for mailman id 1446073;
 Mon, 12 Oct 2026 10:19:37 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@swg.vates.tech>)
 id 1xGD85-0002yh-Gx
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 10:19:37 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGD84-00FlwT-Pp
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 12:19:36 +0200
Received: from [10.42.69.2] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@swg.vates.tech>)
 id 6accb42d-bab6-0a2a0a5309dd-0a2a4502af1a-32
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 12:19:36 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@swg.vates.tech>)
 id 6accb438-6ca4-0a2a45020019-b9ff1c12a879-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 12:19:36 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a12f9fe86400080d7.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 12 Oct 2026 10:19:31 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 6316F81EBB;
 Mon, 12 Oct 2026 12:19:30 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=B5Bog3rpBo4cGAnZNWorkv30T9fh5WI9ATBGqQSiMIY=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:feedback-id;
 b=QuCzFGb+X1GscZwZJNCzCNn08EJM8/cCtsUZrPK9BPxaz+wTKytnEagoq1qqDGbuNR2p4IsuX
 tqquqniUlWGMjuOfKgkQgH9VpTlbX37E23TXI8fvCsoSCkuLE8pqIu5RD3Lzd/wc3lh9X7Tl/Eu
 m4DTJ50cBJ3l7FuMS1YY1t7KT4y5NH/48tP2t3zWnRpEtHlgxm64pp3TtI7OtVMnOqT5rD1ay3P
 cN8ftnjPbdvHxLTaQFlBTc5Hl902P2zPQVFOQq0fohTsePGA0tuC2pvXvWaa7rOXqkEWkImtESQ
 UOA2jRSliFJ9YWPkfRkOictkCetevrYrnwa9Lo3aZf0Q==
X-Zone-Loop: 979933620599c7e6e904f008ece5b36436584dceeed9
x-campaign-type: default
x-transaction-id: 7a2b05e2-81a0-46e6-8ebe-f4900078fd43
x-swg-uid: 01-80288196-8b7b-4430-bfcc-bb8129072b3b
X-Mailer: Sweego
Message-ID:
 <1791800371.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@vates.tech>
x-swg-bid: 1791800371.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 00/21] xenvif: update annotations to SAL 2.0
Date: Mon, 12 Oct 2026 12:19:24 +0200
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.cc.ac81af271b1ac3c9.1a12f9fe550.5db7149bc1f5afe9=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791800370516
X-purgate-ID: tlsNG-720697/1791800376-F2AB52AC-E7791264/0/0
X-purgate-type: clean
X-purgate-size: 5239

---=Part.cc.ac81af271b1ac3c9.1a12f9fe550.5db7149bc1f5afe9=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

This patch series updates the xenvif driver to use SAL 2=2E0 annotations an=
d=20
fixes the issues found after code analysis=2E

It is organized into three parts: updating annotations to SAL 2=2E0,=20
fixing annotation issues, and minor fixes after code analysis=2E

Part 1: Update annotations to SAL 2=2E0
* xenvif: sync common helper files from xeniface and xenbus
* xenvif: convert to SAL 2=2E0 annotations
* Update string typedefs

Part 2: Fix annotation issues
* xenvif: fix direction annotations on written parameters
* xenvif: Annotate unannotated functions
* xenvif: Annotate buffer and array parameters with their sizes
* driver: fix annotations on nullable parameters
* driver: fix Dispatch() annotation
* fdo: fix str annotation of __FdoMultiSzToUpcaseAnsi
* driver: fix annotation of __FdoEnumerate
* fdo: annotate macro-defined functions
* xenvif: fix inconsistent annotation between declarations and
    definitions
* settings: fix annotation of SettingsSave and SettingsRestore
* pdo: fix annotation of __PdoSetPower
* receiver: fix annotation errors:
* transmitter,controller: fix some annotations
* vif: fix the annotation of typedef XENVIF_VIF_CALLBACK
* controller: fix annotations

Part 3: Minor fixes after code analysis
* fdo: suppress uninitialized memory '*Interface'
* xenvif: Assert non-NULL pointers that code analysis cannot prove
* xenvif: Check the statistic name in frontend

C=C3=A9saire Mounah (21):
  xenvif: sync common helper files from xeniface and xenbus
  xenvif: convert to SAL 2=2E0 annotations
  Update string typedefs
  xenvif: fix direction annotations on written parameters
  xenvif: Annotate unannotated functions
  xenvif: Annotate buffer and array parameters with their sizes
  driver: fix annotations on nullable parameters
  driver: fix Dispatch() annotation
  fdo: fix str annotation of __FdoMultiSzToUpcaseAnsi
  driver: fix annotation of __FdoEnumerate
  fdo: suppress uninitialized memory '*Interface'
  fdo: annotate macro-defined functions
  xenvif: fix inconsistent annotation between declarations and
    definitions
  settings: fix annotation of SettingsSave and SettingsRestore
  pdo: fix annotation of __PdoSetPower
  receiver: fix annotation errors:
  transmitter,controller: fix some annotations
  vif: fix the annotation of typedef XENVIF_VIF_CALLBACK
  xenvif: Assert non-NULL pointers that code analysis cannot prove
  xenvif: Check the statistic name in frontend
  controller: fix annotations

 include/cache_interface=2Eh     | 130 ++++-----
 include/debug_interface=2Eh     |  88 +++---
 include/evtchn_interface=2Eh    | 136 ++++-----
 include/gnttab_interface=2Eh    | 148 +++++-----
 include/range_set_interface=2Eh |  38 +--
 include/store_interface=2Eh     |  84 +++---
 include/suspend_interface=2Eh   |  24 +-
 include/unplug_interface=2Eh    |  20 +-
 include/vif_interface=2Eh       | 158 +++++-----
 src/xenvif/assert=2Eh           | 116 ++++----
 src/xenvif/bus=2Ec              |  68 ++---
 src/xenvif/bus=2Eh              |   6 +-
 src/xenvif/checksum=2Ec         |  80 +++---
 src/xenvif/checksum=2Eh         |  50 ++--
 src/xenvif/controller=2Ec       | 146 +++++-----
 src/xenvif/controller=2Eh       |  52 ++--
 src/xenvif/dbg_print=2Eh        |  39 +--
 src/xenvif/driver=2Ec           |  38 +--
 src/xenvif/fdo=2Ec              | 525 +++++++++++++++++-----------------
 src/xenvif/fdo=2Eh              |  70 ++---
 src/xenvif/frontend=2Ec         | 296 +++++++++----------
 src/xenvif/frontend=2Eh         | 104 +++----
 src/xenvif/link=2Ec             |  14 +-
 src/xenvif/link=2Eh             |   6 +-
 src/xenvif/mac=2Ec              | 120 ++++----
 src/xenvif/mac=2Eh              |  70 ++---
 src/xenvif/mrsw=2Eh             |   6 +-
 src/xenvif/mutex=2Eh            |  10 +-
 src/xenvif/names=2Eh            |  60 ++--
 src/xenvif/parse=2Ec            | 142 ++++-----
 src/xenvif/parse=2Eh            |  20 +-
 src/xenvif/pdo=2Ec              | 414 +++++++++++++--------------
 src/xenvif/pdo=2Eh              |  96 +++----
 src/xenvif/receiver=2Ec         | 434 ++++++++++++++--------------
 src/xenvif/receiver=2Eh         |  64 ++---
 src/xenvif/registry=2Ec         | 436 ++++++++++++++++++----------
 src/xenvif/registry=2Eh         | 198 +++++++------
 src/xenvif/settings=2Ec         |  78 ++---
 src/xenvif/settings=2Eh         |  20 +-
 src/xenvif/thread=2Ec           |  36 +--
 src/xenvif/thread=2Eh           |  18 +-
 src/xenvif/transmitter=2Ec      | 406 +++++++++++++-------------
 src/xenvif/transmitter=2Eh      |  80 +++---
 src/xenvif/util=2Eh             | 102 ++++---
 src/xenvif/vif=2Ec              | 258 +++++++++--------
 src/xenvif/vif=2Eh              |  48 ++--
 46 files changed, 2885 insertions(+), 2667 deletions(-)

--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.cc.ac81af271b1ac3c9.1a12f9fe550.5db7149bc1f5afe9=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 12 10:23:50 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 12 Oct 2026 10:23:50 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1446087.1662077 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGDCA-0005Lm-3q; Mon, 12 Oct 2026 10:23:50 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1446087.1662077; Mon, 12 Oct 2026 10:23:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGDCA-0005Lf-0B; Mon, 12 Oct 2026 10:23:50 +0000
Received: by outflank-mailman (input) for mailman id 1446087;
 Mon, 12 Oct 2026 10:23:48 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3be0300080d7@swg.vates.tech>)
 id 1xGDC7-0005Km-OS
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 10:23:48 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGDC7-00Fmsh-5B
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 12:23:47 +0200
Received: from [10.42.69.11] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3be0300080d7@swg.vates.tech>)
 id 6accb52f-8faa-0a2a0a5109dd-0a2a450bde56-14
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 12:23:47 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-42698a.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3be0300080d7@swg.vates.tech>)
 id 6accb532-b7e8-0a2a450b0019-b9ff1c22b35b-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 12:23:46 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a12fa3be0300080d7.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 12 Oct 2026 10:23:42 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id A7053829C4;
 Mon, 12 Oct 2026 12:23:41 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=hf6wPStBGNmD4p5MfYy9XQFUsnRJuJzpiV95Se7k+Gc=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=HC+SVyD4WQe9MIK6aJ2AKqN4p8L5L2uwxM15ZqX0bXp/p64FXxwJ/X4EsTiG4Eprr1pNH0zPu
 +Di08zukE3z9Z5YcgHL/XYJwI/nGsehTx2lXvFQvDUwLM6eVieg+5i7JRshjJK2D+f0+I9T7qu1
 mpT+T8xKcTX1/sHpN9CwZRw9/ua1+BwSR+MhRPn5dvgKGHmJcJgX6Q88TAPL/M2AEui8mYoD5nD
 /G/lzVDTegNa67onqBi6dySwedMmjSVr9pFLGq6qQLF6wqtN8f4LEIeUCU34yaaxX2Hf9dMEVuX
 ZY6i0hEd92J+TzPyYGBPiceEtJlejC3+/2KB0KSccu1w==
X-Zone-Loop: 93e2421f92d63f7786e7b796f23e855cb254c2d54bd4
x-campaign-type: default
x-transaction-id: 678c0172-8e72-43ab-ba1e-ec764cb6a8c8
x-swg-uid: 01-db60cfca-1d00-4aff-9880-324760a47a95
X-Mailer: Sweego
Message-ID:
 <1791800622.8631fc262581453bbf619ec5b2062170.1a12fa3be0300080d7@vates.tech>
x-swg-bid: 1791800622.8631fc262581453bbf619ec5b2062170.1a12fa3be0300080d7
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 01/21] xenvif: sync common helper files from xeniface and xenbus
Date: Mon, 12 Oct 2026 12:23:13 +0200
In-Reply-To: <1791800371.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@vates.tech>
References: <1791800371.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.cd.8531a6fc85823253.1a12fa3bb5d.e0ad5436212709b7=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791800621918
X-purgate-ID: tlsNG-42698a/1791800627-1AAD8A4A-2FB40864/0/0
X-purgate-type: clean
X-purgate-size: 100962

---=Part.cd.8531a6fc85823253.1a12fa3bb5d.e0ad5436212709b7=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Some common files shared between the drivers are already correctly
annotated in xeniface and xenbus=2E
They should be synced with xenvif=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 include/cache_interface=2Eh   | 130 ++++++------
 include/debug_interface=2Eh   |  88 ++++----
 include/evtchn_interface=2Eh  | 136 ++++++------
 include/gnttab_interface=2Eh  | 148 ++++++-------
 include/store_interface=2Eh   |  84 ++++----
 include/suspend_interface=2Eh |  24 +--
 src/xenvif/assert=2Eh         | 114 +++++-----
 src/xenvif/dbg_print=2Eh      |  39 ++--
 src/xenvif/names=2Eh          |  52 +++--
 src/xenvif/registry=2Ec       | 412 ++++++++++++++++++++++++------------
 src/xenvif/registry=2Eh       | 198 +++++++++--------
 src/xenvif/thread=2Ec         |  36 ++--
 src/xenvif/thread=2Eh         |  18 +-
 src/xenvif/util=2Eh           | 102 +++++----
 14 files changed, 886 insertions(+), 695 deletions(-)

diff --git a/include/cache_interface=2Eh b/include/cache_interface=2Eh
index 97fa315=2E=2Ee5f4ce9 100644
--- a/include/cache_interface=2Eh
+++ b/include/cache_interface=2Eh
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -51,20 +51,20 @@ typedef struct _XENBUS_CACHE    XENBUS_CACHE, *PXENBUS=
_CACHE;
     \brief Acquire a reference to the CACHE interface
=20
     \param Interface The interface header
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_CACHE_ACQUIRE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_CACHE_RELEASE
     \brief Release a reference to the CACHE interface
=20
     \param Interface The interface header
-*/ =20
+*/
 typedef VOID
 (*XENBUS_CACHE_RELEASE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_CACHE_CTOR
@@ -79,8 +79,8 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENBUS_CACHE_CTOR)(
-    IN  PVOID   Argument,
-    IN  PVOID   Object
+    _In_ PVOID  Argument,
+    _In_ PVOID  Object
     );
=20
 /*! \typedef XENBUS_CACHE_DTOR
@@ -94,8 +94,8 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENBUS_CACHE_DTOR)(
-    IN  PVOID   Argument,
-    IN  PVOID   Object
+    _In_ PVOID  Argument,
+    _In_ PVOID  Object
     );
=20
 /*! \typedef XENBUS_CACHE_ACQUIRE_LOCK
@@ -108,7 +108,7 @@ typedef VOID
 */
 typedef VOID
 (*XENBUS_CACHE_ACQUIRE_LOCK)(
-    IN  PVOID   Argument
+    _In_ PVOID  Argument
     );
=20
 /*! \typedef XENBUS_CACHE_RELEASE_LOCK
@@ -121,21 +121,21 @@ typedef VOID
 */
 typedef VOID
 (*XENBUS_CACHE_RELEASE_LOCK)(
-    IN  PVOID   Argument
+    _In_ PVOID  Argument
     );
=20
 typedef NTSTATUS
 (*XENBUS_CACHE_CREATE_V1)(
-    IN  PINTERFACE                  Interface,
-    IN  const CHAR                  *Name,
-    IN  ULONG                       Size,
-    IN  ULONG                       Reservation,
-    IN  XENBUS_CACHE_CTOR           Ctor,
-    IN  XENBUS_CACHE_DTOR           Dtor,
-    IN  XENBUS_CACHE_ACQUIRE_LOCK   AcquireLock,
-    IN  XENBUS_CACHE_RELEASE_LOCK   ReleaseLock,
-    IN  PVOID                       Argument OPTIONAL,
-    OUT PXENBUS_CACHE               *Cache
+    _In_ PINTERFACE                 Interface,
+    _In_ PCSTR                      Name,
+    _In_ ULONG                      Size,
+    _In_ ULONG                      Reservation,
+    _In_ XENBUS_CACHE_CTOR          Ctor,
+    _In_ XENBUS_CACHE_DTOR          Dtor,
+    _In_ XENBUS_CACHE_ACQUIRE_LOCK  AcquireLock,
+    _In_ XENBUS_CACHE_RELEASE_LOCK  ReleaseLock,
+    _In_opt_ PVOID                  Argument,
+    _Outptr_ PXENBUS_CACHE          *Cache
     );
=20
 /*! \typedef XENBUS_CACHE_CREATE
@@ -155,20 +155,20 @@ typedef NTSTATUS
=20
     If a non-zero \a Reservation is specified then this method will fail
     unless that number of objects can be immediately created=2E
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_CACHE_CREATE)(
-    IN  PINTERFACE                  Interface,
-    IN  const CHAR                  *Name,
-    IN  ULONG                       Size,
-    IN  ULONG                       Reservation,
-    IN  ULONG                       Cap,
-    IN  XENBUS_CACHE_CTOR           Ctor,
-    IN  XENBUS_CACHE_DTOR           Dtor,
-    IN  XENBUS_CACHE_ACQUIRE_LOCK   AcquireLock,
-    IN  XENBUS_CACHE_RELEASE_LOCK   ReleaseLock,
-    IN  PVOID                       Argument OPTIONAL,
-    OUT PXENBUS_CACHE               *Cache
+    _In_ PINTERFACE                 Interface,
+    _In_ PCSTR                      Name,
+    _In_ ULONG                      Size,
+    _In_ ULONG                      Reservation,
+    _In_ ULONG                      Cap,
+    _In_ XENBUS_CACHE_CTOR          Ctor,
+    _In_ XENBUS_CACHE_DTOR          Dtor,
+    _In_ XENBUS_CACHE_ACQUIRE_LOCK  AcquireLock,
+    _In_ XENBUS_CACHE_RELEASE_LOCK  ReleaseLock,
+    _In_opt_ PVOID                  Argument,
+    _Outptr_ PXENBUS_CACHE          *Cache
     );
=20
 /*! \typedef XENBUS_CACHE_GET
@@ -181,9 +181,9 @@ typedef NTSTATUS
 */
 typedef PVOID
 (*XENBUS_CACHE_GET)(
-    IN  PINTERFACE      Interface,
-    IN  PXENBUS_CACHE   Cache,
-    IN  BOOLEAN         Locked
+    _In_ PINTERFACE     Interface,
+    _In_ PXENBUS_CACHE  Cache,
+    _In_ BOOLEAN        Locked
     );
=20
 /*! \typedef XENBUS_CACHE_PUT
@@ -196,10 +196,10 @@ typedef PVOID
 */
 typedef VOID
 (*XENBUS_CACHE_PUT)(
-    IN  PINTERFACE      Interface,
-    IN  PXENBUS_CACHE   Cache,
-    IN  PVOID           Object,
-    IN  BOOLEAN         Locked
+    _In_ PINTERFACE     Interface,
+    _In_ PXENBUS_CACHE  Cache,
+    _In_ PVOID          Object,
+    _In_ BOOLEAN        Locked
     );
=20
 /*! \typedef XENBUS_CACHE_DESTROY
@@ -212,12 +212,12 @@ typedef VOID
 */
 typedef VOID
 (*XENBUS_CACHE_DESTROY)(
-    IN  PINTERFACE      Interface,
-    IN  PXENBUS_CACHE   Cache
+    _In_ PINTERFACE     Interface,
+    _In_ PXENBUS_CACHE  Cache
     );
=20
 // {A98DFD78-416A-4949-92A5-E084F2F4B44E}
-DEFINE_GUID(GUID_XENBUS_CACHE_INTERFACE,=20
+DEFINE_GUID(GUID_XENBUS_CACHE_INTERFACE,
 0xa98dfd78, 0x416a, 0x4949, 0x92, 0xa5, 0xe0, 0x84, 0xf2, 0xf4, 0xb4, 0x4=
e);
=20
 /*! \struct _XENBUS_CACHE_INTERFACE_V1
diff --git a/include/debug_interface=2Eh b/include/debug_interface=2Eh
index 79729c7=2E=2E251902c 100644
--- a/include/debug_interface=2Eh
+++ b/include/debug_interface=2Eh
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -50,20 +50,20 @@ typedef struct _XENBUS_DEBUG_CALLBACK   XENBUS_DEBUG_C=
ALLBACK, *PXENBUS_DEBUG_CA
     \brief Acquire a reference to the DEBUG interface
=20
     \param Interface The interface header
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_DEBUG_ACQUIRE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_DEBUG_RELEASE
     \brief Release a reference to the DEBUG interface
=20
     \param Interface The interface header
-*/ =20
+*/
 typedef VOID
 (*XENBUS_DEBUG_RELEASE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_DEBUG_FUNCTION
@@ -74,11 +74,11 @@ typedef VOID
     part of pre-crash logging
=20
     Debug callback functions are always invoked with IRQL =3D=3D HIGH_LEV=
EL
-*/ =20
+*/
 typedef VOID
 (*XENBUS_DEBUG_FUNCTION)(
-    IN  PVOID   Argument,
-    IN  BOOLEAN Crashing
+    _In_ PVOID      Argument,
+    _In_ BOOLEAN    Crashing
     );
=20
 /*! \typedef XENBUS_DEBUG_REGISTER
@@ -89,14 +89,14 @@ typedef VOID
     \param Function The callback function
     \param Argument An optional context argument passed to the callback
     \param Callback A pointer to a callback handle to be initialized
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_DEBUG_REGISTER)(
-    IN  PINTERFACE              Interface,
-    IN  PCHAR                   Prefix,
-    IN  XENBUS_DEBUG_FUNCTION   Function,
-    IN  PVOID                   Argument OPTIONAL,
-    OUT PXENBUS_DEBUG_CALLBACK  *Callback
+    _In_ PINTERFACE                 Interface,
+    _In_ PSTR                       Prefix,
+    _In_ XENBUS_DEBUG_FUNCTION      Function,
+    _In_opt_ PVOID                  Argument,
+    _Outptr_ PXENBUS_DEBUG_CALLBACK *Callback
     );
=20
 /*! \typedef XENBUS_DEBUG_PRINTF
@@ -108,11 +108,11 @@ typedef NTSTATUS
=20
     This method must only be invoked from the context of a debug
     callback
-*/ =20
+*/
 typedef VOID
 (*XENBUS_DEBUG_PRINTF)(
-    IN  PINTERFACE              Interface,
-    IN  const CHAR              *Format,
+    _In_ PINTERFACE             Interface,
+    _In_ PCSTR                  Format,
     =2E=2E=2E
     );
=20
@@ -124,8 +124,8 @@ typedef VOID
 */
 typedef VOID
 (*XENBUS_DEBUG_DEREGISTER)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_DEBUG_CALLBACK  Callback
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_DEBUG_CALLBACK Callback
     );
=20
 /*! \typedef XENBUS_DEBUG_TRIGGER
@@ -137,12 +137,12 @@ typedef VOID
 */
 typedef VOID
 (*XENBUS_DEBUG_TRIGGER)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_DEBUG_CALLBACK  Callback OPTIONAL
+    _In_ PINTERFACE                 Interface,
+    _In_opt_ PXENBUS_DEBUG_CALLBACK Callback
     );
=20
 // {0DF600AE-6B20-4227-BF94-03DA9A26A114}
-DEFINE_GUID(GUID_XENBUS_DEBUG_INTERFACE,=20
+DEFINE_GUID(GUID_XENBUS_DEBUG_INTERFACE,
 0xdf600ae, 0x6b20, 0x4227, 0xbf, 0x94, 0x3, 0xda, 0x9a, 0x26, 0xa1, 0x14)=
;
=20
 /*! \struct _XENBUS_DEBUG_INTERFACE_V1
diff --git a/include/evtchn_interface=2Eh b/include/evtchn_interface=2Eh
index ef67487=2E=2E5c46f97 100644
--- a/include/evtchn_interface=2Eh
+++ b/include/evtchn_interface=2Eh
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -54,27 +54,27 @@ typedef enum _XENBUS_EVTCHN_TYPE {
=20
 /*! \typedef XENBUS_EVTCHN_CHANNEL
     \brief Event channel handle
-*/ =20
+*/
 typedef struct _XENBUS_EVTCHN_CHANNEL XENBUS_EVTCHN_CHANNEL, *PXENBUS_EVT=
CHN_CHANNEL;
=20
 /*! \typedef XENBUS_EVTCHN_ACQUIRE
     \brief Acquire a reference to the EVTCHN interface
=20
     \param Interface The interface header
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_EVTCHN_ACQUIRE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_EVTCHN_RELEASE
     \brief Release a reference to the EVTCHN interface
=20
     \param Interface The interface header
-*/ =20
+*/
 typedef VOID
 (*XENBUS_EVTCHN_RELEASE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_EVTCHN_OPEN
@@ -105,13 +105,13 @@ typedef VOID
     \param Number The relative number of the CPU that should handle the V=
IRQ
=20
     \return Event channel handle
-*/ =20
+*/
 typedef PXENBUS_EVTCHN_CHANNEL
 (*XENBUS_EVTCHN_OPEN)(
-    IN  PINTERFACE          Interface,
-    IN  XENBUS_EVTCHN_TYPE  Type,
-    IN  PKSERVICE_ROUTINE   Function,
-    IN  PVOID               Argument OPTIONAL,
+    _In_ PINTERFACE         Interface,
+    _In_ XENBUS_EVTCHN_TYPE Type,
+    _In_ PKSERVICE_ROUTINE  Function,
+    _In_opt_ PVOID          Argument,
     =2E=2E=2E
     );
=20
@@ -125,17 +125,17 @@ typedef PXENBUS_EVTCHN_CHANNEL
 */
 typedef NTSTATUS
 (*XENBUS_EVTCHN_BIND)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_EVTCHN_CHANNEL  Channel,
-    IN  USHORT                  Group,
-    IN  UCHAR                   Number
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_EVTCHN_CHANNEL Channel,
+    _In_ USHORT                 Group,
+    _In_ UCHAR                  Number
     );
=20
 typedef VOID
 (*XENBUS_EVTCHN_UNMASK_V4)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_EVTCHN_CHANNEL  Channel,
-    IN  BOOLEAN                 InCallback
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_EVTCHN_CHANNEL Channel,
+    _In_ BOOLEAN                InCallback
     );
=20
 /*! \typedef XENBUS_EVTCHN_UNMASK
@@ -148,16 +148,16 @@ typedef VOID
 */
 typedef BOOLEAN
 (*XENBUS_EVTCHN_UNMASK)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_EVTCHN_CHANNEL  Channel,
-    IN  BOOLEAN                 InCallback,
-    IN  BOOLEAN                 Force
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_EVTCHN_CHANNEL Channel,
+    _In_ BOOLEAN                InCallback,
+    _In_ BOOLEAN                Force
     );
=20
 typedef VOID
 (*XENBUS_EVTCHN_SEND_V1)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_EVTCHN_CHANNEL  Channel
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_EVTCHN_CHANNEL Channel
     );
=20
 /*! \typedef XENBUS_EVTCHN_SEND
@@ -168,11 +168,11 @@ typedef VOID
=20
     \param Interface The interface header
     \param Channel The channel handle
-*/ =20
+*/
 typedef VOID
 (*XENBUS_EVTCHN_SEND)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_EVTCHN_CHANNEL  Channel
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_EVTCHN_CHANNEL Channel
     );
=20
 /*! \typedef XENBUS_EVTCHN_TRIGGER
@@ -180,11 +180,11 @@ typedef VOID
=20
     \param Interface The interface header
     \param Channel The channel handle
-*/ =20
+*/
 typedef VOID
 (*XENBUS_EVTCHN_TRIGGER)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_EVTCHN_CHANNEL  Channel
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_EVTCHN_CHANNEL Channel
     );
=20
 /*! \typedef XENBUS_EVTCHN_GET_COUNT
@@ -196,15 +196,15 @@ typedef VOID
 */
 typedef ULONG
 (*XENBUS_EVTCHN_GET_COUNT)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_EVTCHN_CHANNEL  Channel
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_EVTCHN_CHANNEL Channel
     );
=20
 typedef NTSTATUS
 (*XENBUS_EVTCHN_WAIT_V5)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_EVTCHN_CHANNEL  Channel,
-    IN  PLARGE_INTEGER          Timeout OPTIONAL
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_EVTCHN_CHANNEL Channel,
+    _In_opt_ PLARGE_INTEGER     Timeout
     );
=20
 /*! \typedef XENBUS_EVTCHN_WAIT
@@ -217,10 +217,10 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENBUS_EVTCHN_WAIT)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_EVTCHN_CHANNEL  Channel,
-    IN  ULONG                   Count,
-    IN  PLARGE_INTEGER          Timeout OPTIONAL
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_EVTCHN_CHANNEL Channel,
+    _In_ ULONG                  Count,
+    _In_opt_ PLARGE_INTEGER     Timeout
     );
=20
 /*! \typedef XENBUS_EVTCHN_GET_PORT
@@ -229,11 +229,11 @@ typedef NTSTATUS
     \param Interface The interface header
     \param Channel The channel handle
     \return The port number
-*/ =20
+*/
 typedef ULONG
 (*XENBUS_EVTCHN_GET_PORT)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_EVTCHN_CHANNEL  Channel
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_EVTCHN_CHANNEL Channel
     );
=20
 /*! \typedef XENBUS_EVTCHN_CLOSE
@@ -241,15 +241,15 @@ typedef ULONG
=20
     \param Interface The interface header
     \param Channel The channel handle
-*/ =20
+*/
 typedef VOID
 (*XENBUS_EVTCHN_CLOSE)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_EVTCHN_CHANNEL  Channel
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_EVTCHN_CHANNEL Channel
     );
=20
 // {BE2440AC-1098-4150-AF4D-452FADCEF923}
-DEFINE_GUID(GUID_XENBUS_EVTCHN_INTERFACE,=20
+DEFINE_GUID(GUID_XENBUS_EVTCHN_INTERFACE,
 0xbe2440ac, 0x1098, 0x4150, 0xaf, 0x4d, 0x45, 0x2f, 0xad, 0xce, 0xf9, 0x2=
3);
=20
 /*! \struct _XENBUS_EVTCHN_INTERFACE_V5
diff --git a/include/gnttab_interface=2Eh b/include/gnttab_interface=2Eh
index 4fc8f1f=2E=2E41c8444 100644
--- a/include/gnttab_interface=2Eh
+++ b/include/gnttab_interface=2Eh
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -57,31 +57,31 @@ typedef struct _XENBUS_GNTTAB_CACHE XENBUS_GNTTAB_CACH=
E, *PXENBUS_GNTTAB_CACHE;
     \brief Acquire a reference to the GNTTAB interface
=20
     \param Interface The interface header
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_GNTTAB_ACQUIRE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_GNTTAB_RELEASE
     \brief Release a reference to the GNTTAB interface
=20
     \param Interface The interface header
-*/ =20
+*/
 typedef VOID
 (*XENBUS_GNTTAB_RELEASE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 typedef NTSTATUS
 (*XENBUS_GNTTAB_CREATE_CACHE_V1)(
-    IN  PINTERFACE                  Interface,
-    IN  const CHAR                  *Name,
-    IN  ULONG                       Reservation,
-    IN  XENBUS_CACHE_ACQUIRE_LOCK   AcquireLock,
-    IN  XENBUS_CACHE_RELEASE_LOCK   ReleaseLock,
-    IN  PVOID                       Argument OPTIONAL,
-    OUT PXENBUS_GNTTAB_CACHE        *Cache
+    _In_ PINTERFACE                 Interface,
+    _In_ PCSTR                      Name,
+    _In_ ULONG                      Reservation,
+    _In_ XENBUS_CACHE_ACQUIRE_LOCK  AcquireLock,
+    _In_ XENBUS_CACHE_RELEASE_LOCK  ReleaseLock,
+    _In_opt_ PVOID                  Argument,
+    _Outptr_ PXENBUS_GNTTAB_CACHE   *Cache
     );
=20
 /*! \typedef XENBUS_GNTTAB_CREATE_CACHE
@@ -95,17 +95,17 @@ typedef NTSTATUS
     \param ReleaseLock A callback invoked to release the spinlock
     \param Argument An optional context argument passed to the callbacks
     \param Cache A pointer to a grant table cache handle to be initialize=
d
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_GNTTAB_CREATE_CACHE)(
-    IN  PINTERFACE                  Interface,
-    IN  const CHAR                  *Name,
-    IN  ULONG                       Reservation,
-    IN  ULONG                       Cap,
-    IN  XENBUS_CACHE_ACQUIRE_LOCK   AcquireLock,
-    IN  XENBUS_CACHE_RELEASE_LOCK   ReleaseLock,
-    IN  PVOID                       Argument OPTIONAL,
-    OUT PXENBUS_GNTTAB_CACHE        *Cache
+    _In_ PINTERFACE                 Interface,
+    _In_ PCSTR                      Name,
+    _In_ ULONG                      Reservation,
+    _In_ ULONG                      Cap,
+    _In_ XENBUS_CACHE_ACQUIRE_LOCK  AcquireLock,
+    _In_ XENBUS_CACHE_RELEASE_LOCK  ReleaseLock,
+    _In_opt_ PVOID                  Argument,
+    _Outptr_ PXENBUS_GNTTAB_CACHE   *Cache
     );
=20
 /*! \typedef XENBUS_GNTTAB_PERMIT_FOREIGN_ACCESS
@@ -123,13 +123,13 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENBUS_GNTTAB_PERMIT_FOREIGN_ACCESS)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_GNTTAB_CACHE        Cache,
-    IN  BOOLEAN                     Locked,
-    IN  USHORT                      Domain,
-    IN  PFN_NUMBER                  Pfn,
-    IN  BOOLEAN                     ReadOnly,
-    OUT PXENBUS_GNTTAB_ENTRY        *Entry
+    _In_ PINTERFACE                 Interface,
+    _In_ PXENBUS_GNTTAB_CACHE       Cache,
+    _In_ BOOLEAN                    Locked,
+    _In_ USHORT                     Domain,
+    _In_ PFN_NUMBER                 Pfn,
+    _In_ BOOLEAN                    ReadOnly,
+    _Outptr_ PXENBUS_GNTTAB_ENTRY   *Entry
     );
=20
 /*! \typedef XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS
@@ -143,10 +143,10 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_GNTTAB_CACHE        Cache,
-    IN  BOOLEAN                     Locked,
-    IN  PXENBUS_GNTTAB_ENTRY        Entry
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_GNTTAB_CACHE   Cache,
+    _In_ BOOLEAN                Locked,
+    _In_ PXENBUS_GNTTAB_ENTRY   Entry
     );
=20
 /*! \typedef XENBUS_GNTTAB_GET_REFERENCE
@@ -155,11 +155,11 @@ typedef NTSTATUS
     \param Interface The interface header
     \param Entry The grant table entry handle
     \return The reference number
-*/ =20
+*/
 typedef ULONG
 (*XENBUS_GNTTAB_GET_REFERENCE)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_GNTTAB_ENTRY        Entry
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_GNTTAB_ENTRY   Entry
     );
=20
 /*! \typedef XENBUS_GNTTAB_QUERY_REFERENCE
@@ -172,10 +172,10 @@ typedef ULONG
 */
 typedef NTSTATUS
 (*XENBUS_GNTTAB_QUERY_REFERENCE)(
-    IN  PINTERFACE  Interface,
-    IN  ULONG       Reference,
-    OUT PPFN_NUMBER Pfn OPTIONAL,
-    OUT PBOOLEAN    ReadOnly OPTIONAL
+    _In_ PINTERFACE             Interface,
+    _In_ ULONG                  Reference,
+    _Out_opt_ PPFN_NUMBER       Pfn,
+    _Out_opt_ PBOOLEAN          ReadOnly
     );
=20
 #define XENBUS_GNTTAB_CONSOLE_REFERENCE 0
@@ -189,12 +189,12 @@ typedef NTSTATUS
     \param Cache The grant table cache handle
=20
     All grant table entries must have been revoked prior to destruction
-    of the cache=20
-*/ =20
+    of the cache
+*/
 typedef VOID
 (*XENBUS_GNTTAB_DESTROY_CACHE)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_GNTTAB_CACHE    Cache
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_GNTTAB_CACHE   Cache
     );
=20
 /*! \typedef XENBUS_GNTTAB_MAP_FOREIGN_PAGES
@@ -210,12 +210,12 @@ typedef VOID
=20
 typedef NTSTATUS
 (*XENBUS_GNTTAB_MAP_FOREIGN_PAGES)(
-    IN  PINTERFACE              Interface,
-    IN  USHORT                  Domain,
-    IN  ULONG                   NumberPages,
-    IN  PULONG                  References,
-    IN  BOOLEAN                 ReadOnly,
-    OUT PHYSICAL_ADDRESS        *Address
+    _In_ PINTERFACE         Interface,
+    _In_ USHORT             Domain,
+    _In_ ULONG              NumberPages,
+    _In_ PULONG             References,
+    _In_ BOOLEAN            ReadOnly,
+    _Out_ PHYSICAL_ADDRESS  *Address
     );
=20
 /*! \typedef XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES
@@ -226,12 +226,12 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES)(
-    IN  PINTERFACE              Interface,
-    IN  PHYSICAL_ADDRESS        Address
+    _In_ PINTERFACE         Interface,
+    _In_ PHYSICAL_ADDRESS   Address
     );
=20
 // {763679C5-E5C2-4A6D-8B88-6BB02EC42D8E}
-DEFINE_GUID(GUID_XENBUS_GNTTAB_INTERFACE,=20
+DEFINE_GUID(GUID_XENBUS_GNTTAB_INTERFACE,
 0x763679c5, 0xe5c2, 0x4a6d, 0x8b, 0x88, 0x6b, 0xb0, 0x2e, 0xc4, 0x2d, 0x8=
e);
=20
 /*! \struct _XENBUS_GNTTAB_INTERFACE_V2
diff --git a/include/store_interface=2Eh b/include/store_interface=2Eh
index ca883bd=2E=2E83a76a1 100644
--- a/include/store_interface=2Eh
+++ b/include/store_interface=2Eh
@@ -75,7 +75,7 @@ typedef struct _XENBUS_STORE_PERMISSION {
 */ =20
 typedef NTSTATUS
 (*XENBUS_STORE_ACQUIRE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_STORE_RELEASE
@@ -85,7 +85,7 @@ typedef NTSTATUS
 */ =20
 typedef VOID
 (*XENBUS_STORE_RELEASE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_STORE_FREE
@@ -96,8 +96,8 @@ typedef VOID
 */ =20
 typedef VOID
 (*XENBUS_STORE_FREE)(
-    IN  PINTERFACE  Interface,
-    IN  PCHAR       Buffer
+    _In_ PINTERFACE Interface,
+    _In_ PSTR       Buffer
     );
=20
 /*! \typedef XENBUS_STORE_READ
@@ -116,11 +116,11 @@ typedef VOID
 */ =20
 typedef NTSTATUS
 (*XENBUS_STORE_READ)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node,
-    OUT PCHAR                       *Buffer
+    _In_ PINTERFACE                     Interface,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PSTR                       Prefix,
+    _In_ PSTR                           Node,
+    _Outptr_ PCHAR                      *Buffer
     );
=20
 /*! \typedef XENBUS_STORE_PRINTF
@@ -139,11 +139,11 @@ typedef NTSTATUS
 */ =20
 typedef NTSTATUS
 (*XENBUS_STORE_PRINTF)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node,
-    IN  const CHAR                  *Format,
+    _In_ PINTERFACE                     Interface,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PSTR                       Prefix,
+    _In_ PSTR                           Node,
+    _In_ PCSTR                          Format,
     =2E=2E=2E
     );
=20
@@ -159,10 +159,10 @@ typedef NTSTATUS
 */ =20
 typedef NTSTATUS
 (*XENBUS_STORE_REMOVE)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node
+    _In_ PINTERFACE                     Interface,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PSTR                       Prefix,
+    _In_ PSTR                           Node
     );
=20
 /*! \typedef XENBUS_STORE_DIRECTORY
@@ -181,11 +181,11 @@ typedef NTSTATUS
 */ =20
 typedef NTSTATUS
 (*XENBUS_STORE_DIRECTORY)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node,
-    OUT PCHAR                       *Buffer
+    _In_ PINTERFACE                     Interface,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PSTR                       Prefix,
+    _In_ PSTR                           Node,
+    _Outptr_ PCHAR                      *Buffer
     );
=20
 /*! \typedef XENBUS_STORE_TRANSACTION_START
@@ -196,8 +196,8 @@ typedef NTSTATUS
 */ =20
 typedef NTSTATUS
 (*XENBUS_STORE_TRANSACTION_START)(
-    IN  PINTERFACE                  Interface,
-    OUT PXENBUS_STORE_TRANSACTION   *Transaction
+    _In_ PINTERFACE                     Interface,
+    _Outptr_ PXENBUS_STORE_TRANSACTION  *Transaction
     );
=20
 /*! \typedef XENBUS_STORE_TRANSACTION_END
@@ -213,9 +213,9 @@ typedef NTSTATUS
 */ =20
 typedef NTSTATUS
 (*XENBUS_STORE_TRANSACTION_END)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction,
-    IN  BOOLEAN                     Commit
+    _In_ PINTERFACE                 Interface,
+    _In_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_ BOOLEAN                    Commit
     );
=20
 /*! \typedef XENBUS_STORE_WATCH_ADD
@@ -231,11 +231,11 @@ typedef NTSTATUS
 */ =20
 typedef NTSTATUS
 (*XENBUS_STORE_WATCH_ADD)(
-    IN  PINTERFACE          Interface,
-    IN  PCHAR               Prefix OPTIONAL,
-    IN  PCHAR               Node,
-    IN  PKEVENT             Event,
-    OUT PXENBUS_STORE_WATCH *Watch
+    _In_ PINTERFACE                 Interface,
+    _In_opt_ PSTR                   Prefix,
+    _In_ PSTR                       Node,
+    _In_ PKEVENT                    Event,
+    _Outptr_ PXENBUS_STORE_WATCH    *Watch
     );
=20
 /*! \typedef XENBUS_STORE_WATCH_REMOVE
@@ -246,8 +246,8 @@ typedef NTSTATUS
 */ =20
 typedef NTSTATUS
 (*XENBUS_STORE_WATCH_REMOVE)(
-    IN  PINTERFACE          Interface,
-    IN  PXENBUS_STORE_WATCH Watch
+    _In_ PINTERFACE                 Interface,
+    _In_opt_ PXENBUS_STORE_WATCH    Watch
     );
=20
 /*! \typedef XENBUS_STORE_POLL
@@ -262,7 +262,7 @@ typedef NTSTATUS
 */ =20
 typedef VOID
 (*XENBUS_STORE_POLL)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_STORE_PERMISSIONS_SET
@@ -279,12 +279,12 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENBUS_STORE_PERMISSIONS_SET)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node,
-    IN  PXENBUS_STORE_PERMISSION    Permissions,
-    IN  ULONG                       NumberPermissions
+    _In_ PINTERFACE                     Interface,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PSTR                       Prefix,
+    _In_ PSTR                           Node,
+    _In_ PXENBUS_STORE_PERMISSION       Permissions,
+    _In_ ULONG                          NumberPermissions
     );
=20
 // {86824C3B-D34E-4753-B281-2F1E3AD214D7}
diff --git a/include/suspend_interface=2Eh b/include/suspend_interface=2Eh
index 4176dc3=2E=2E414bca5 100644
--- a/include/suspend_interface=2Eh
+++ b/include/suspend_interface=2Eh
@@ -62,7 +62,7 @@ typedef struct _XENBUS_SUSPEND_CALLBACK   XENBUS_SUSPEND=
_CALLBACK, *PXENBUS_SUSP
 */ =20
 typedef NTSTATUS
 (*XENBUS_SUSPEND_ACQUIRE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_SUSPEND_RELEASE
@@ -72,7 +72,7 @@ typedef NTSTATUS
 */ =20
 typedef VOID
 (*XENBUS_SUSPEND_RELEASE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_SUSPEND_FUNCTION
@@ -87,7 +87,7 @@ typedef VOID
 */ =20
 typedef VOID
 (*XENBUS_SUSPEND_FUNCTION)(
-    IN  PVOID   Argument
+    _In_ PVOID  Argument
     );
=20
 /*! \typedef XENBUS_SUSPEND_REGISTER
@@ -101,11 +101,11 @@ typedef VOID
 */ =20
 typedef NTSTATUS
 (*XENBUS_SUSPEND_REGISTER)(
-    IN  PINTERFACE                      Interface,
-    IN  XENBUS_SUSPEND_CALLBACK_TYPE    Type,
-    IN  XENBUS_SUSPEND_FUNCTION         Function,
-    IN  PVOID                           Argument OPTIONAL,
-    OUT PXENBUS_SUSPEND_CALLBACK        *Callback
+    _In_ PINTERFACE                     Interface,
+    _In_ XENBUS_SUSPEND_CALLBACK_TYPE   Type,
+    _In_ XENBUS_SUSPEND_FUNCTION        Function,
+    _In_opt_ PVOID                      Argument,
+    _Outptr_ PXENBUS_SUSPEND_CALLBACK   *Callback
     );
=20
 /*! \typedef XENBUS_SUSPEND_DEREGISTER
@@ -116,8 +116,8 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENBUS_SUSPEND_DEREGISTER)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_SUSPEND_CALLBACK    Callback
+    _In_ PINTERFACE                 Interface,
+    _In_ PXENBUS_SUSPEND_CALLBACK   Callback
     );
=20
 /*! \typedef XENBUS_SUSPEND_TRIGGER
@@ -129,7 +129,7 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENBUS_SUSPEND_TRIGGER)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_SUSPEND_GET_COUNT
@@ -140,7 +140,7 @@ typedef NTSTATUS
 */
 typedef ULONG
 (*XENBUS_SUSPEND_GET_COUNT)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 // {0554F2AF-B510-4C71-AC03-1C503E394238}
diff --git a/src/xenvif/assert=2Eh b/src/xenvif/assert=2Eh
index c41dfed=2E=2Ee3b2c49 100644
--- a/src/xenvif/assert=2Eh
+++ b/src/xenvif/assert=2Eh
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -39,11 +39,11 @@
=20
 static FORCEINLINE VOID
 __Bug(
-    IN  ULONG       Code,
-    IN  ULONG_PTR   Parameter1,
-    IN  ULONG_PTR   Parameter2,
-    IN  ULONG_PTR   Parameter3,
-    IN  ULONG_PTR   Parameter4
+    _In_ ULONG      Code,
+    _In_ ULONG_PTR  Parameter1,
+    _In_ ULONG_PTR  Parameter2,
+    _In_ ULONG_PTR  Parameter3,
+    _In_ ULONG_PTR  Parameter4
     )
 {
 #pragma prefast(suppress:28159)
@@ -58,8 +58,8 @@ __Bug(
=20
 #define BUG(_TEXT)                                              \
         do {                                                    \
-            const CHAR  *_Text =3D (_TEXT);                       \
-            const CHAR  *_File =3D __FILE__;                      \
+            PCSTR       _Text =3D (_TEXT);                       \
+            PCSTR       _File =3D __FILE__;                      \
             ULONG       _Line =3D __LINE__;                       \
                                                                 \
             Error("BUG: " _TEXT "\n");                          \
@@ -77,17 +77,19 @@ __Bug(
=20
 #if DBG
=20
-#define __ASSERT_FAIL(_EXP)                                     \
+#define __NT_ASSERT(_EXP)                                       \
+        ((!(_EXP)) ?                                            \
         (Error("ASSERTION FAILED: " #_EXP "\n"),                \
          __annotation(L"Debug", L"AssertFail", L#_EXP),         \
-         DbgRaiseAssertionFailure())
-
-#define ASSERT(_EXP)                     \
-        do {                             \
-            if (!(_EXP)) {               \
-                __ASSERT_FAIL(_EXP);     \
-                __analysis_assume(_EXP); \
-            }                            \
+         DbgRaiseAssertionFailure(), FALSE) :                   \
+        TRUE)
+
+#define __ASSERT(_EXP)  __NT_ASSERT(_EXP)
+
+#define ASSERT(_EXP)                    \
+        do {                            \
+            __ASSERT(_EXP);             \
+            _Analysis_assume_(_EXP);    \
         } while (FALSE)
=20
 #define ASSERT3U(_X, _OP, _Y)                       \
@@ -97,8 +99,7 @@ __Bug(
             if (!(_Lval _OP _Rval)) {               \
                 Error("%s =3D %llu\n", #_X, _Lval);   \
                 Error("%s =3D %llu\n", #_Y, _Rval);   \
-                __ASSERT_FAIL(_X _OP _Y);           \
-                __analysis_assume(_Lval _OP _Rval); \
+                ASSERT((_X) _OP (_Y));              \
             }                                       \
         } while (FALSE)
=20
@@ -109,8 +110,7 @@ __Bug(
             if (!(_Lval _OP _Rval)) {               \
                 Error("%s =3D %lld\n", #_X, _Lval);   \
                 Error("%s =3D %lld\n", #_Y, _Rval);   \
-                __ASSERT_FAIL(_X _OP _Y);           \
-                __analysis_assume(_Lval _OP _Rval); \
+                ASSERT((_X) _OP (_Y));              \
             }                                       \
         } while (FALSE)
=20
@@ -121,8 +121,7 @@ __Bug(
             if (!(_Lval _OP _Rval)) {               \
                 Error("%s =3D %p\n", #_X, _Lval);     \
                 Error("%s =3D %p\n", #_Y, _Rval);     \
-                __ASSERT_FAIL(_X _OP _Y);           \
-                __analysis_assume(_Lval _OP _Rval); \
+                ASSERT((_X) _OP (_Y));              \
             }                                       \
         } while (FALSE)
=20
@@ -133,17 +132,17 @@ __Bug(
=20
 #define ASSERT(_EXP)                    \
         do {                            \
-            __analysis_assume(_EXP);    \
+            _Analysis_assume_(_EXP);    \
         } while (FALSE)
=20
 #define ASSERT3U(_X, _OP, _Y)           \
-        ASSERT((ULONGLONG)(_X) _OP (ULONGLONG)(_Y))
+        ASSERT((_X) _OP (_Y))
=20
 #define ASSERT3S(_X, _OP, _Y)           \
-        ASSERT((LONGLONG)(_X) _OP (LONGLONG)(_Y))
+        ASSERT((_X) _OP (_Y))
=20
 #define ASSERT3P(_X, _OP, _Y)           \
-        ASSERT((PVOID)(_X) _OP (PVOID)(_Y))
+        ASSERT((_X) _OP (_Y))
=20
 #endif  // DBG
=20
@@ -155,10 +154,10 @@ __Bug(
=20
 static __inline BOOLEAN
 _IsZeroMemory(
-    IN  const PCHAR Caller,
-    IN  const PCHAR Name,
-    IN  PVOID       Buffer,
-    IN  ULONG       Length
+    _In_ PCSTR      Caller,
+    _In_ PCSTR      Name,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length
     )
 {
     ULONG           Offset;
@@ -179,10 +178,10 @@ _IsZeroMemory(
=20
 static __inline BOOLEAN
 _IsZeroMemory(
-    IN  const PCHAR Caller,
-    IN  const PCHAR Name,
-    IN  PVOID       Buffer,
-    IN  ULONG       Length
+    _In_ PCSTR  Caller,
+    _In_ PCSTR  Name,
+    _In_ PVOID  Buffer,
+    _In_ ULONG  Length
     )
 {
     UNREFERENCED_PARAMETER(Caller);
@@ -202,3 +201,4 @@ _IsZeroMemory(
 #define EQUIV(_X, _Y)   (IMPLY((_X), (_Y)) && IMPLY((_Y), (_X)))
=20
 #endif  // _XENVIF_ASSERT_H
+   =20
\ No newline at end of file
diff --git a/src/xenvif/dbg_print=2Eh b/src/xenvif/dbg_print=2Eh
index e39a50c=2E=2E21bea0c 100644
--- a/src/xenvif/dbg_print=2Eh
+++ b/src/xenvif/dbg_print=2Eh
@@ -36,16 +36,16 @@
 #include <ntddk=2Eh>
 #include <stdarg=2Eh>
=20
+#pragma warning(disable:4127)   // conditional expression is constant
+
 #define stringify_literal(_text) #_text
 #define stringify(_text) stringify_literal(_text)
 #define __MODULE__ stringify(PROJECT)
=20
-#pragma warning(disable:4127)   // conditional expression is constant
-
 static __inline VOID
 __Error(
-    IN  const CHAR  *Prefix,
-    IN  const CHAR  *Format,
+    _In_ PCSTR      Prefix,
+    _In_ PCSTR      Format,
     =2E=2E=2E
     )
 {
@@ -67,8 +67,8 @@ __Error(
=20
 static __inline VOID
 __Warning(
-    IN  const CHAR  *Prefix,
-    IN  const CHAR  *Format,
+    _In_ PCSTR      Prefix,
+    _In_ PCSTR      Format,
     =2E=2E=2E
     )
 {
@@ -89,11 +89,10 @@ __Warning(
         __Warning(__MODULE__ "|" __FUNCTION__ ": ", __VA_ARGS__)
=20
 #if DBG
-
 static __inline VOID
 __Trace(
-    IN  const CHAR  *Prefix,
-    IN  const CHAR  *Format,
+    _In_ PCSTR      Prefix,
+    _In_ PCSTR      Format,
     =2E=2E=2E
     )
 {
@@ -110,28 +109,16 @@ __Trace(
     va_end(Arguments);
 }
=20
-#else   // DBG
-
-static __inline VOID
-__Trace(
-    IN  const CHAR  *Prefix,
-    IN  const CHAR  *Format,
-    =2E=2E=2E
-    )
-{
-    UNREFERENCED_PARAMETER(Prefix);
-    UNREFERENCED_PARAMETER(Format);
-}
-
-#endif  // DBG
-
 #define Trace(=2E=2E=2E)  \
         __Trace(__MODULE__ "|" __FUNCTION__ ": ", __VA_ARGS__)
+#else   // DBG
+#define Trace(=2E=2E=2E)  (VOID)(__VA_ARGS__)
+#endif  // DBG
=20
 static __inline VOID
 __Info(
-    IN  const CHAR  *Prefix,
-    IN  const CHAR  *Format,
+    _In_ PCSTR      Prefix,
+    _In_ PCSTR      Format,
     =2E=2E=2E
     )
 {
diff --git a/src/xenvif/names=2Eh b/src/xenvif/names=2Eh
index 9f8ff91=2E=2Ebbd1517 100644
--- a/src/xenvif/names=2Eh
+++ b/src/xenvif/names=2Eh
@@ -36,14 +36,16 @@
 #include <ntddk=2Eh>
 #include <xen=2Eh>
=20
+#include "types=2Eh"
+
 static FORCEINLINE const CHAR *
 PowerTypeName(
-    IN  POWER_STATE_TYPE    Type
+    _In_ POWER_STATE_TYPE   Type
     )
 {
 #define _POWER_TYPE_NAME(_Type) \
     case _Type:                 \
-        return #_Type;
+            return #_Type;
=20
     switch (Type) {
     _POWER_TYPE_NAME(SystemPowerState);
@@ -58,12 +60,12 @@ PowerTypeName(
=20
 static FORCEINLINE const CHAR *
 PowerSystemStateName(
-    IN  SYSTEM_POWER_STATE State
+    _In_ SYSTEM_POWER_STATE State
     )
 {
 #define _POWER_SYSTEM_STATE_NAME(_State)    \
     case PowerSystem ## _State:             \
-        return #_State;
+            return #_State;
=20
     switch (State) {
     _POWER_SYSTEM_STATE_NAME(Unspecified);
@@ -84,7 +86,7 @@ PowerSystemStateName(
=20
 static FORCEINLINE const CHAR *
 PowerDeviceStateName(
-    IN  DEVICE_POWER_STATE State
+    _In_ DEVICE_POWER_STATE State
     )
 {
 #define _POWER_DEVICE_STATE_NAME(_State)    \
@@ -108,12 +110,12 @@ PowerDeviceStateName(
=20
 static FORCEINLINE const CHAR *
 PowerActionName(
-    IN  POWER_ACTION    Type
+    _In_ POWER_ACTION   Type
     )
 {
 #define _POWER_ACTION_NAME(_Type)   \
     case PowerAction ## _Type:      \
-        return #_Type;
+            return #_Type;
=20
     switch (Type) {
     _POWER_ACTION_NAME(None);
@@ -134,7 +136,7 @@ PowerActionName(
=20
 static FORCEINLINE const CHAR *
 PowerMinorFunctionName(
-    IN  ULONG   MinorFunction
+    _In_ ULONG  MinorFunction
     )
 {
 #define _POWER_MINOR_FUNCTION_NAME(_Function)   \
@@ -146,18 +148,44 @@ PowerMinorFunctionName(
     _POWER_MINOR_FUNCTION_NAME(POWER_SEQUENCE);
     _POWER_MINOR_FUNCTION_NAME(SET_POWER);
     _POWER_MINOR_FUNCTION_NAME(QUERY_POWER);
+   =20
+    default:
+        return "UNKNOWN";
+    }
+
+#undef  _POWER_MINOR_FUNCTION_NAME
+}
+
+static FORCEINLINE const CHAR *
+PnpDeviceStateName(
+    _In_ DEVICE_PNP_STATE   State
+    )
+{
+#define _PNP_DEVICE_STATE_NAME(_State) \
+    case  _State:               \
+        return #_State;
+
+    switch (State) {
+    _PNP_DEVICE_STATE_NAME(Invalid);
+    _PNP_DEVICE_STATE_NAME(Added);
+    _PNP_DEVICE_STATE_NAME(Started);
+    _PNP_DEVICE_STATE_NAME(StopPending);
+    _PNP_DEVICE_STATE_NAME(Stopped);
+    _PNP_DEVICE_STATE_NAME(RemovePending);
+    _PNP_DEVICE_STATE_NAME(SurpriseRemovePending);
+    _PNP_DEVICE_STATE_NAME(Deleted);
     default:
         break;
     }
=20
     return "UNKNOWN";
=20
-#undef  _POWER_MINOR_FUNCTION_NAME
+#undef  _STATE_NAME
 }
=20
 static FORCEINLINE const CHAR *
 PnpMinorFunctionName(
-    IN  ULONG   Function
+    _In_ ULONG  Function
     )
 {
 #define _PNP_MINOR_FUNCTION_NAME(_Function) \
@@ -200,7 +228,7 @@ PnpMinorFunctionName(
=20
 static FORCEINLINE const CHAR *
 PartialResourceDescriptorTypeName(
-    IN  UCHAR   Type
+    _In_ UCHAR  Type
     )
 {
 #define _PARTIAL_RESOURCE_DESCRIPTOR_TYPE_NAME(_Type)   \
@@ -229,7 +257,7 @@ PartialResourceDescriptorTypeName(
=20
 static FORCEINLINE const CHAR *
 DeviceUsageTypeName(
-    IN  DEVICE_USAGE_NOTIFICATION_TYPE  Type
+    _In_ DEVICE_USAGE_NOTIFICATION_TYPE Type
     )
 {
 #define _DEVICE_USAGE_TYPE_NAME(_Type)  \
diff --git a/src/xenvif/registry=2Ec b/src/xenvif/registry=2Ec
index e498497=2E=2E09b61cd 100644
--- a/src/xenvif/registry=2Ec
+++ b/src/xenvif/registry=2Ec
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -38,11 +38,16 @@
=20
 #define REGISTRY_TAG 'GERX'
=20
+static PDRIVER_OBJECT   RegistryDriverObject;
 static UNICODE_STRING   RegistryPath;
=20
+typedef NTSTATUS(*IOOPENDRIVERREGISTRYKEY)(PDRIVER_OBJECT, DRIVER_REGKEY_=
TYPE, ACCESS_MASK, ULONG, PHANDLE);
+
+static IOOPENDRIVERREGISTRYKEY __IoOpenDriverRegistryKey;
+
 static FORCEINLINE PVOID
 __RegistryAllocate(
-    IN  ULONG   Length
+    _In_ ULONG  Length
     )
 {
     return __AllocatePoolWithTag(NonPagedPool, Length, REGISTRY_TAG);
@@ -50,7 +55,7 @@ __RegistryAllocate(
=20
 static FORCEINLINE VOID
 __RegistryFree(
-    IN  PVOID   Buffer
+    _In_ PVOID  Buffer
     )
 {
     __FreePoolWithTag(Buffer, REGISTRY_TAG);
@@ -58,10 +63,10 @@ __RegistryFree(
=20
 NTSTATUS
 RegistryInitialize(
-    IN PUNICODE_STRING  Path
+    _In_ PUNICODE_STRING    Path
     )
 {
-    NTSTATUS            status;
+    NTSTATUS                status;
=20
     ASSERT3P(RegistryPath=2EBuffer, =3D=3D, NULL);
=20
@@ -82,17 +87,69 @@ RegistryTeardown(
     VOID
     )
 {
+    __IoOpenDriverRegistryKey =3D NULL;
+
+    RegistryDriverObject =3D NULL;
+
     RtlFreeUnicodeString(&RegistryPath);
     RegistryPath=2EBuffer =3D NULL;
     RegistryPath=2EMaximumLength =3D RegistryPath=2ELength =3D 0;
 }
=20
+NTSTATUS
+RegistryOpenParametersKey(
+    _In_ ACCESS_MASK    DesiredAccess,
+    _Out_ PHANDLE       Key
+    )
+{
+    HANDLE              ServiceKey;
+    NTSTATUS            status;
+
+    if (__IoOpenDriverRegistryKey !=3D NULL) {
+        status =3D __IoOpenDriverRegistryKey(RegistryDriverObject,
+                                           DriverRegKeyParameters,
+                                           DesiredAccess,
+                                           0,
+                                           Key);
+        if (!NT_SUCCESS(status))
+            goto fail1;
+
+        goto done;
+    }
+
+    status =3D RegistryOpenKey(NULL, &RegistryPath, DesiredAccess, &Servi=
ceKey);
+    if (!NT_SUCCESS(status))
+        goto fail2;
+
+    status =3D RegistryOpenSubKey(ServiceKey, "Parameters", DesiredAccess=
, Key);
+    if (!NT_SUCCESS(status))
+        goto fail3;
+
+    RegistryCloseKey(ServiceKey);
+
+done:
+    return STATUS_SUCCESS;
+
+fail3:
+    Error("fail3\n");
+
+    RegistryCloseKey(ServiceKey);
+
+fail2:
+    Error("fail2\n");
+
+fail1:
+    Error("fail1 %08x\n", status);
+
+    return status;
+}
+
 NTSTATUS
 RegistryOpenKey(
-    IN  HANDLE          Parent,
-    IN  PUNICODE_STRING Path,
-    IN  ACCESS_MASK     DesiredAccess,
-    OUT PHANDLE         Key
+    _In_opt_ HANDLE         Parent,
+    _In_ PUNICODE_STRING    Path,
+    _In_ ACCESS_MASK        DesiredAccess,
+    _Out_ PHANDLE           Key
     )
 {
     OBJECT_ATTRIBUTES   Attributes;
@@ -118,15 +175,15 @@ fail1:
=20
 static NTSTATUS
 RegistryOpenRoot(
-    IN  PWCHAR          Path,
-    OUT PHANDLE         Parent,
-    OUT PWCHAR          *ChildPath
+    _In_ PWSTR              Path,
+    _Out_ PHANDLE           Parent,
+    _Outptr_result_z_ PWSTR *ChildPath
     )
 {
-    const WCHAR         Prefix[] =3D L"\\Registry\\Machine\\";
-    ULONG               Length;
-    UNICODE_STRING      Unicode;
-    NTSTATUS            status;
+    PCWSTR                  Prefix =3D L"\\Registry\\Machine\\";
+    ULONG                   Length;
+    UNICODE_STRING          Unicode;
+    NTSTATUS                status;
=20
     Length =3D (ULONG)wcslen(Prefix);
=20
@@ -151,17 +208,17 @@ fail1:
=20
 NTSTATUS
 RegistryCreateKey(
-    IN  HANDLE          Parent,
-    IN  PUNICODE_STRING Path,
-    IN  ULONG           Options,
-    OUT PHANDLE         Key
+    _In_opt_ HANDLE         Parent,
+    _In_ PUNICODE_STRING    Path,
+    _In_ ULONG              Options,
+    _Out_ PHANDLE           Key
     )
 {
-    PWCHAR              Buffer;
+    PWSTR               Buffer;
     HANDLE              Root;
-    PWCHAR              ChildPath;
-    PWCHAR              ChildName;
-    PWCHAR              Context;
+    PWSTR               ChildPath;
+    PWSTR               ChildName;
+    PWSTR               Context;
     HANDLE              Child;
     NTSTATUS            status;
=20
@@ -251,8 +308,8 @@ fail1:
=20
 NTSTATUS
 RegistryOpenServiceKey(
-    IN  ACCESS_MASK     DesiredAccess,
-    OUT PHANDLE         Key
+    _In_ ACCESS_MASK    DesiredAccess,
+    _Out_ PHANDLE       Key
     )
 {
     return RegistryOpenKey(NULL, &RegistryPath, DesiredAccess, Key);
@@ -260,7 +317,7 @@ RegistryOpenServiceKey(
=20
 NTSTATUS
 RegistryCreateServiceKey(
-    OUT PHANDLE         Key
+    _Out_ PHANDLE       Key
     )
 {
     return RegistryCreateKey(NULL, &RegistryPath, REG_OPTION_NON_VOLATILE=
, Key);
@@ -268,9 +325,9 @@ RegistryCreateServiceKey(
=20
 NTSTATUS
 RegistryOpenSoftwareKey(
-    IN  PDEVICE_OBJECT  DeviceObject,
-    IN  ACCESS_MASK     DesiredAccess,
-    OUT PHANDLE         Key
+    _In_ PDEVICE_OBJECT DeviceObject,
+    _In_ ACCESS_MASK    DesiredAccess,
+    _Out_ PHANDLE       Key
     )
 {
     NTSTATUS            status;
@@ -290,15 +347,15 @@ fail1:
=20
 NTSTATUS
 RegistryOpenHardwareKey(
-    IN  PDEVICE_OBJECT      DeviceObject,
-    IN  ACCESS_MASK         DesiredAccess,
-    OUT PHANDLE             Key
+    _In_ PDEVICE_OBJECT     DeviceObject,
+    _In_ ACCESS_MASK        DesiredAccess,
+    _Out_ PHANDLE           Key
     )
 {
     HANDLE                  SubKey;
     ULONG                   Length;
     PKEY_NAME_INFORMATION   Info;
-    PWCHAR                  Cursor;
+    PWSTR                   Cursor;
     UNICODE_STRING          Unicode;
     NTSTATUS                status;
=20
@@ -315,11 +372,11 @@ RegistryOpenHardwareKey(
                         NULL,
                         0,
                         &Length);
-    if (status !=3D STATUS_BUFFER_OVERFLOW &&
+    if (!NT_SUCCESS(status) &&
+        status !=3D STATUS_BUFFER_OVERFLOW &&
         status !=3D STATUS_BUFFER_TOO_SMALL)
         goto fail2;
=20
-#pragma prefast(suppress:6102)
     Info =3D __RegistryAllocate(Length + sizeof (WCHAR));
=20
     status =3D STATUS_NO_MEMORY;
@@ -340,7 +397,7 @@ RegistryOpenHardwareKey(
     ASSERT(Cursor !=3D NULL);
=20
     *Cursor =3D L'\0';
-   =20
+
     RtlInitUnicodeString(&Unicode, Info->Name);
=20
     status =3D RegistryOpenKey(NULL, &Unicode, DesiredAccess, Key);
@@ -367,10 +424,10 @@ fail1:
=20
 NTSTATUS
 RegistryOpenSubKey(
-    IN  PHANDLE         Key,
-    IN  PCHAR           Name,
-    IN  ACCESS_MASK     DesiredAccess,
-    OUT PHANDLE         SubKey
+    _In_opt_ PHANDLE    Key,
+    _In_ PSTR           Name,
+    _In_ ACCESS_MASK    DesiredAccess,
+    _Out_ PHANDLE       SubKey
     )
 {
     ANSI_STRING         Ansi;
@@ -400,10 +457,10 @@ fail1:
=20
 NTSTATUS
 RegistryCreateSubKey(
-    IN  PHANDLE         Key,
-    IN  PCHAR           Name,
-    IN  ULONG           Options,
-    OUT PHANDLE         SubKey
+    _In_opt_ HANDLE     Key,
+    _In_ PSTR           Name,
+    _In_ ULONG          Options,
+    _Out_ PHANDLE       SubKey
     )
 {
     ANSI_STRING         Ansi;
@@ -433,8 +490,8 @@ fail1:
=20
 NTSTATUS
 RegistryDeleteSubKey(
-    IN  PHANDLE         Key,
-    IN  PCHAR           Name
+    _In_ PHANDLE        Key,
+    _In_ PSTR           Name
     )
 {
     ANSI_STRING         Ansi;
@@ -474,9 +531,9 @@ fail1:
=20
 NTSTATUS
 RegistryEnumerateSubKeys(
-    IN  HANDLE              Key,
-    IN  NTSTATUS            (*Callback)(PVOID, HANDLE, PANSI_STRING),
-    IN  PVOID               Context
+    _In_ HANDLE             Key,
+    _In_ NTSTATUS           (*Callback)(PVOID, HANDLE, PANSI_STRING),
+    _In_ PVOID              Context
     )
 {
     ULONG                   Size;
@@ -494,7 +551,6 @@ RegistryEnumerateSubKeys(
         status !=3D STATUS_BUFFER_TOO_SMALL)
         goto fail1;
=20
-#pragma prefast(suppress:6102)
     Full =3D __RegistryAllocate(Size);
=20
     status =3D STATUS_NO_MEMORY;
@@ -545,7 +601,7 @@ RegistryEnumerateSubKeys(
         status =3D RtlUnicodeStringToAnsiString(&Ansi, &Unicode, FALSE);
         ASSERT(NT_SUCCESS(status));
=20
-        Ansi=2ELength =3D (USHORT)(strlen(Ansi=2EBuffer) * sizeof (CHAR))=
;       =20
+        Ansi=2ELength =3D (USHORT)(strlen(Ansi=2EBuffer) * sizeof (CHAR))=
;
=20
         status =3D Callback(Context, Key, &Ansi);
=20
@@ -570,7 +626,7 @@ fail5:
 fail4:
 fail3:
     __RegistryFree(Full);
-   =20
+
 fail2:
 fail1:
     return status;
@@ -578,9 +634,9 @@ fail1:
=20
 NTSTATUS
 RegistryEnumerateValues(
-    IN  HANDLE                      Key,
-    IN  NTSTATUS                    (*Callback)(PVOID, HANDLE, PANSI_STRI=
NG, ULONG),
-    IN  PVOID                       Context
+    _In_ HANDLE                     Key,
+    _In_ NTSTATUS                   (*Callback)(PVOID, HANDLE, PANSI_STRI=
NG, ULONG),
+    _In_ PVOID                      Context
     )
 {
     ULONG                           Size;
@@ -598,7 +654,6 @@ RegistryEnumerateValues(
         status !=3D STATUS_BUFFER_TOO_SMALL)
         goto fail1;
=20
-#pragma prefast(suppress:6102)
     Full =3D __RegistryAllocate(Size);
=20
     status =3D STATUS_NO_MEMORY;
@@ -642,17 +697,24 @@ RegistryEnumerateValues(
         Ansi=2EMaximumLength =3D (USHORT)((Basic->NameLength / sizeof (WC=
HAR)) + sizeof (CHAR));
         Ansi=2EBuffer =3D __RegistryAllocate(Ansi=2EMaximumLength);
=20
+        status =3D STATUS_NO_MEMORY;
+        if (Ansi=2EBuffer =3D=3D NULL)
+            goto fail6;
+
         status =3D RtlUnicodeStringToAnsiString(&Ansi, &Unicode, FALSE);
-        ASSERT(NT_SUCCESS(status));
+        if (!NT_SUCCESS(status)) {
+            __RegistryFree(Ansi=2EBuffer);
+            goto fail7;
+        }
=20
-        Ansi=2ELength =3D (USHORT)(strlen(Ansi=2EBuffer) * sizeof (CHAR))=
;       =20
+        Ansi=2ELength =3D (USHORT)(strlen(Ansi=2EBuffer) * sizeof (CHAR))=
;
=20
         status =3D Callback(Context, Key, &Ansi, Basic->Type);
=20
         __RegistryFree(Ansi=2EBuffer);
=20
         if (!NT_SUCCESS(status))
-            goto fail6;
+            goto fail8;
     }
=20
     __RegistryFree(Basic);
@@ -661,6 +723,8 @@ RegistryEnumerateValues(
=20
     return STATUS_SUCCESS;
=20
+fail8:
+fail7:
 fail6:
 fail5:
     __RegistryFree(Basic);
@@ -668,7 +732,7 @@ fail5:
 fail4:
 fail3:
     __RegistryFree(Full);
-   =20
+
 fail2:
 fail1:
     return status;
@@ -676,8 +740,8 @@ fail1:
=20
 NTSTATUS
 RegistryDeleteValue(
-    IN  PHANDLE         Key,
-    IN  PCHAR           Name
+    _In_ PHANDLE        Key,
+    _In_ PSTR           Name
     )
 {
     ANSI_STRING         Ansi;
@@ -707,9 +771,9 @@ fail1:
=20
 NTSTATUS
 RegistryQueryDwordValue(
-    IN  HANDLE                      Key,
-    IN  PCHAR                       Name,
-    OUT PULONG                      Value
+    _In_ HANDLE                     Key,
+    _In_ PSTR                       Name,
+    _Out_ PULONG                    Value
     )
 {
     ANSI_STRING                     Ansi;
@@ -723,18 +787,18 @@ RegistryQueryDwordValue(
     status =3D RtlAnsiStringToUnicodeString(&Unicode, &Ansi, TRUE);
     if (!NT_SUCCESS(status))
         goto fail1;
-       =20
+
     status =3D ZwQueryValueKey(Key,
                              &Unicode,
                              KeyValuePartialInformation,
                              NULL,
                              0,
                              &Size);
-    if (status !=3D STATUS_BUFFER_OVERFLOW &&
+    if (!NT_SUCCESS(status) &&
+        status !=3D STATUS_BUFFER_OVERFLOW &&
         status !=3D STATUS_BUFFER_TOO_SMALL)
         goto fail2;
=20
-#pragma prefast(suppress:6102)
     Partial =3D __RegistryAllocate(Size);
=20
     status =3D STATUS_NO_MEMORY;
@@ -755,7 +819,77 @@ RegistryQueryDwordValue(
         Partial->DataLength !=3D sizeof (ULONG))
         goto fail5;
=20
-    *Value =3D *(PULONG)Partial->Data;           =20
+    *Value =3D *(PULONG)Partial->Data;
+
+    __RegistryFree(Partial);
+
+    RtlFreeUnicodeString(&Unicode);
+
+    return STATUS_SUCCESS;
+
+fail5:
+fail4:
+    __RegistryFree(Partial);
+
+fail3:
+fail2:
+    RtlFreeUnicodeString(&Unicode);
+
+fail1:
+    return status;
+}
+
+NTSTATUS
+RegistryQueryQwordValue(
+    _In_ HANDLE                     Key,
+    _In_ PSTR                       Name,
+    _Out_ PULONGLONG                Value
+    )
+{
+    ANSI_STRING                     Ansi;
+    UNICODE_STRING                  Unicode;
+    PKEY_VALUE_PARTIAL_INFORMATION  Partial;
+    ULONG                           Size;
+    NTSTATUS                        status;
+
+    RtlInitAnsiString(&Ansi, Name);
+
+    status =3D RtlAnsiStringToUnicodeString(&Unicode, &Ansi, TRUE);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    status =3D ZwQueryValueKey(Key,
+                             &Unicode,
+                             KeyValuePartialInformation,
+                             NULL,
+                             0,
+                             &Size);
+    if (!NT_SUCCESS(status) &&
+        status !=3D STATUS_BUFFER_OVERFLOW &&
+        status !=3D STATUS_BUFFER_TOO_SMALL)
+        goto fail2;
+
+    Partial =3D __RegistryAllocate(Size);
+
+    status =3D STATUS_NO_MEMORY;
+    if (Partial =3D=3D NULL)
+        goto fail3;
+
+    status =3D ZwQueryValueKey(Key,
+                             &Unicode,
+                             KeyValuePartialInformation,
+                             Partial,
+                             Size,
+                             &Size);
+    if (!NT_SUCCESS(status))
+        goto fail4;
+
+    status =3D STATUS_INVALID_PARAMETER;
+    if (Partial->Type !=3D REG_QWORD ||
+        Partial->DataLength !=3D sizeof (ULONGLONG))
+        goto fail5;
+
+    *Value =3D *(PULONGLONG)Partial->Data;
=20
     __RegistryFree(Partial);
=20
@@ -777,9 +911,9 @@ fail1:
=20
 NTSTATUS
 RegistryUpdateDwordValue(
-    IN  HANDLE                      Key,
-    IN  PCHAR                       Name,
-    IN  ULONG                       Value
+    _In_ HANDLE                     Key,
+    _In_ PSTR                       Name,
+    _In_ ULONG                      Value
     )
 {
     ANSI_STRING                     Ansi;
@@ -792,7 +926,7 @@ RegistryUpdateDwordValue(
     status =3D RtlAnsiStringToUnicodeString(&Unicode, &Ansi, TRUE);
     if (!NT_SUCCESS(status))
         goto fail1;
-       =20
+
     Partial =3D __RegistryAllocate(FIELD_OFFSET(KEY_VALUE_PARTIAL_INFORMA=
TION, Data) +
                                  sizeof (ULONG));
=20
@@ -803,7 +937,7 @@ RegistryUpdateDwordValue(
     Partial->TitleIndex =3D 0;
     Partial->Type =3D REG_DWORD;
     Partial->DataLength =3D sizeof (ULONG);
-    *(PULONG)Partial->Data =3D Value;           =20
+    *(PULONG)Partial->Data =3D Value;
=20
     status =3D ZwSetValueKey(Key,
                            &Unicode,
@@ -833,7 +967,7 @@ fail1:
=20
 static PANSI_STRING
 RegistrySzToAnsi(
-    IN  PWCHAR      Buffer
+    _In_ PWSTR      Buffer
     )
 {
     PANSI_STRING    Ansi;
@@ -872,7 +1006,7 @@ fail1:
=20
 static PANSI_STRING
 RegistryMultiSzToAnsi(
-    IN  PWCHAR      Buffer
+    _In_ PWSTR      Buffer
     )
 {
     PANSI_STRING    Ansi;
@@ -934,10 +1068,10 @@ fail1:
=20
 NTSTATUS
 RegistryQuerySzValue(
-    IN  HANDLE                      Key,
-    IN  PCHAR                       Name,
-    OUT PULONG                      Type OPTIONAL,
-    OUT PANSI_STRING                *Array
+    _In_ HANDLE                     Key,
+    _In_ PSTR                       Name,
+    _Out_opt_ PULONG                Type,
+    _Outptr_ PANSI_STRING           *Array
     )
 {
     ANSI_STRING                     Ansi;
@@ -951,18 +1085,18 @@ RegistryQuerySzValue(
     status =3D RtlAnsiStringToUnicodeString(&Unicode, &Ansi, TRUE);
     if (!NT_SUCCESS(status))
         goto fail1;
-       =20
+
     status =3D ZwQueryValueKey(Key,
                              &Unicode,
                              KeyValuePartialInformation,
                              NULL,
                              0,
                              &Size);
-    if (status !=3D STATUS_BUFFER_OVERFLOW &&
+    if (!NT_SUCCESS(status) &&
+        status !=3D STATUS_BUFFER_OVERFLOW &&
         status !=3D STATUS_BUFFER_TOO_SMALL)
         goto fail2;
=20
-#pragma prefast(suppress:6102)
     Value =3D __RegistryAllocate(Size);
=20
     status =3D STATUS_NO_MEMORY;
@@ -981,12 +1115,12 @@ RegistryQuerySzValue(
     switch (Value->Type) {
     case REG_SZ:
         status =3D STATUS_NO_MEMORY;
-        *Array =3D RegistrySzToAnsi((PWCHAR)Value->Data);
+        *Array =3D RegistrySzToAnsi((PWSTR)Value->Data);
         break;
=20
     case REG_MULTI_SZ:
         status =3D STATUS_NO_MEMORY;
-        *Array =3D RegistryMultiSzToAnsi((PWCHAR)Value->Data);
+        *Array =3D RegistryMultiSzToAnsi((PWSTR)Value->Data);
         break;
=20
     default:
@@ -1021,10 +1155,10 @@ fail1:
=20
 NTSTATUS
 RegistryQueryBinaryValue(
-    IN  HANDLE                      Key,
-    IN  PCHAR                       Name,
-    OUT PVOID                       *Buffer,
-    OUT PULONG                      Length
+    _In_ HANDLE                     Key,
+    _In_ PSTR                       Name,
+    _Outptr_ PVOID                  *Buffer,
+    _Out_ PULONG                    Length
     )
 {
     ANSI_STRING                     Ansi;
@@ -1045,11 +1179,11 @@ RegistryQueryBinaryValue(
                              NULL,
                              0,
                              &Size);
-    if (status !=3D STATUS_BUFFER_OVERFLOW &&
+    if (!NT_SUCCESS(status) &&
+        status !=3D STATUS_BUFFER_OVERFLOW &&
         status !=3D STATUS_BUFFER_TOO_SMALL)
         goto fail2;
=20
-#pragma prefast(suppress:6102)
     Partial =3D __RegistryAllocate(Size);
=20
     status =3D STATUS_NO_MEMORY;
@@ -1106,10 +1240,10 @@ fail1:
=20
 NTSTATUS
 RegistryUpdateBinaryValue(
-    IN  HANDLE                      Key,
-    IN  PCHAR                       Name,
-    IN  PVOID                       Buffer,
-    IN  ULONG                       Length
+    _In_ HANDLE                     Key,
+    _In_ PSTR                       Name,
+    _In_ PVOID                      Buffer,
+    _In_ ULONG                      Length
     )
 {
     ANSI_STRING                     Ansi;
@@ -1163,8 +1297,8 @@ fail1:
=20
 NTSTATUS
 RegistryQueryKeyName(
-    IN  HANDLE              Key,
-    OUT PANSI_STRING        *Array
+    _In_ HANDLE             Key,
+    _Outptr_ PANSI_STRING   *Array
     )
 {
     PKEY_NAME_INFORMATION   Value;
@@ -1176,12 +1310,12 @@ RegistryQueryKeyName(
                         NULL,
                         0,
                         &Size);
-    if (status !=3D STATUS_BUFFER_OVERFLOW &&
+    if (!NT_SUCCESS(status) &&
+        status !=3D STATUS_BUFFER_OVERFLOW &&
         status !=3D STATUS_BUFFER_TOO_SMALL)
         goto fail1;
=20
     // Name information is not intrinsically NULL terminated
-#pragma prefast(suppress:6102)
     Value =3D __RegistryAllocate(Size + sizeof (WCHAR));
=20
     status =3D STATUS_NO_MEMORY;
@@ -1197,7 +1331,7 @@ RegistryQueryKeyName(
         goto fail3;
=20
     Value->Name[Value->NameLength / sizeof (WCHAR)] =3D L'\0';
-    *Array =3D RegistrySzToAnsi((PWCHAR)Value->Name);
+    *Array =3D RegistrySzToAnsi((PWSTR)Value->Name);
=20
     status =3D STATUS_NO_MEMORY;
     if (*Array =3D=3D NULL)
@@ -1218,20 +1352,20 @@ fail1:
=20
 NTSTATUS
 RegistryQuerySystemStartOption(
-    IN  PCHAR                       Prefix,
-    OUT PANSI_STRING                *Value
+    _In_ PSTR                       Prefix,
+    _Outptr_ PANSI_STRING           *Value
     )
 {
     UNICODE_STRING                  Unicode;
     HANDLE                          Key;
     PANSI_STRING                    Ansi;
     ULONG                           Length;
-    PCHAR                           Option;
-    PCHAR                           Context;
+    PSTR                            Option;
+    PSTR                            Context;
     NTSTATUS                        status;
=20
     RtlInitUnicodeString(&Unicode, L"\\Registry\\Machine\\SYSTEM\\Current=
ControlSet\\Control");
-   =20
+
     status =3D RegistryOpenKey(NULL, &Unicode, KEY_READ, &Key);
     if (!NT_SUCCESS(status))
         goto fail1;
@@ -1401,10 +1535,10 @@ fail1:
=20
 NTSTATUS
 RegistryUpdateSzValue(
-    IN  HANDLE                      Key,
-    IN  PCHAR                       Name,
-    IN  ULONG                       Type,
-    IN  PANSI_STRING                Array
+    _In_ HANDLE                     Key,
+    _In_ PSTR                       Name,
+    _In_ ULONG                      Type,
+    _In_ PANSI_STRING               Array
     )
 {
     ANSI_STRING                     Ansi;
@@ -1465,7 +1599,7 @@ fail1:
=20
 VOID
 RegistryFreeSzValue(
-    IN  PANSI_STRING    Array
+    _In_ PANSI_STRING   Array
     )
 {
     ULONG               Index;
@@ -1481,7 +1615,7 @@ RegistryFreeSzValue(
=20
 VOID
 RegistryFreeBinaryValue(
-    IN  PVOID   Buffer
+    _In_ PVOID  Buffer
     )
 {
     __RegistryFree(Buffer);
@@ -1489,8 +1623,16 @@ RegistryFreeBinaryValue(
=20
 VOID
 RegistryCloseKey(
-    IN  HANDLE  Key
+    _In_ HANDLE Key
     )
 {
     ZwClose(Key);
 }
+
+PUNICODE_STRING
+RegistryGetPath(
+    VOID
+    )
+{
+    return &RegistryPath;
+}
\ No newline at end of file
diff --git a/src/xenvif/registry=2Eh b/src/xenvif/registry=2Eh
index c656806=2E=2E8fa10b7 100644
--- a/src/xenvif/registry=2Eh
+++ b/src/xenvif/registry=2Eh
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -37,7 +37,7 @@
=20
 extern NTSTATUS
 RegistryInitialize(
-    IN PUNICODE_STRING  Path
+    _In_ PUNICODE_STRING    Path
     );
=20
 extern VOID
@@ -45,160 +45,178 @@ RegistryTeardown(
     VOID
     );
=20
+extern NTSTATUS
+RegistryOpenParametersKey(
+    _In_ ACCESS_MASK    DesiredAccess,
+    _Out_ PHANDLE       Key
+    );
+
 extern NTSTATUS
 RegistryOpenKey(
-    IN  HANDLE          Parent,
-    IN  PUNICODE_STRING Path,
-    IN  ACCESS_MASK     DesiredAccess,
-    OUT PHANDLE         Key
+    _In_opt_ HANDLE         Parent,
+    _In_ PUNICODE_STRING    Path,
+    _In_ ACCESS_MASK        DesiredAccess,
+    _Out_ PHANDLE           Key
     );
=20
 extern NTSTATUS
 RegistryCreateKey(
-    IN  HANDLE          Parent,
-    IN  PUNICODE_STRING Path,
-    IN  ULONG           Options,
-    OUT PHANDLE         Key
+    _In_opt_ HANDLE         Parent,
+    _In_ PUNICODE_STRING    Path,
+    _In_ ULONG              Options,
+    _Out_ PHANDLE           Key
     );
=20
 extern NTSTATUS
 RegistryOpenServiceKey(
-    IN  ACCESS_MASK DesiredAccess,
-    OUT PHANDLE     Key
+    _In_ ACCESS_MASK    DesiredAccess,
+    _Out_ PHANDLE       Key
     );
=20
 extern NTSTATUS
 RegistryCreateServiceKey(
-    OUT PHANDLE     Key
+    _Out_ PHANDLE   Key
     );
=20
 extern NTSTATUS
 RegistryOpenSoftwareKey(
-    IN  PDEVICE_OBJECT  DeviceObject,
-    IN  ACCESS_MASK     DesiredAccess,
-    OUT PHANDLE         Key
+    _In_ PDEVICE_OBJECT DeviceObject,
+    _In_ ACCESS_MASK    DesiredAccess,
+    _Out_ PHANDLE       Key
     );
=20
 extern NTSTATUS
 RegistryOpenHardwareKey(
-    IN  PDEVICE_OBJECT  DeviceObject,
-    IN  ACCESS_MASK     DesiredAccess,
-    OUT PHANDLE         Key
+    _In_ PDEVICE_OBJECT DeviceObject,
+    _In_ ACCESS_MASK    DesiredAccess,
+    _Out_ PHANDLE       Key
     );
=20
 extern NTSTATUS
 RegistryOpenSubKey(
-    IN  HANDLE      Key,
-    IN  PCHAR       Name,
-    IN  ACCESS_MASK DesiredAccess,
-    OUT PHANDLE     SubKey
+    _In_opt_ HANDLE     Key,
+    _In_ PSTR           Name,
+    _In_ ACCESS_MASK    DesiredAccess,
+    _Out_ PHANDLE       SubKey
     );
=20
 extern NTSTATUS
 RegistryCreateSubKey(
-    IN  HANDLE      Key,
-    IN  PCHAR       Name,
-    IN  ULONG       Options,
-    OUT PHANDLE     SubKey
+    _In_opt_ HANDLE Key,
+    _In_ PSTR       Name,
+    _In_ ULONG      Options,
+    _Out_ PHANDLE   SubKey
     );
=20
 extern NTSTATUS
 RegistryDeleteSubKey(
-    IN  HANDLE      Key,
-    IN  PCHAR       Name
+    _In_ HANDLE     Key,
+    _In_ PSTR       Name
     );
=20
 extern NTSTATUS
 RegistryEnumerateSubKeys(
-    IN  HANDLE      Key,
-    IN  NTSTATUS    (*Callback)(PVOID, HANDLE, PANSI_STRING),
-    IN  PVOID       Context
+    _In_ HANDLE     Key,
+    _In_ NTSTATUS   (*Callback)(PVOID, HANDLE, PANSI_STRING),
+    _In_ PVOID      Context
     );
=20
 extern NTSTATUS
 RegistryEnumerateValues(
-    IN  HANDLE      Key,
-    IN  NTSTATUS    (*Callback)(PVOID, HANDLE, PANSI_STRING, ULONG),
-    IN  PVOID       Context
+    _In_ HANDLE     Key,
+    _In_ NTSTATUS   (*Callback)(PVOID, HANDLE, PANSI_STRING, ULONG),
+    _In_ PVOID      Context
     );
=20
 extern NTSTATUS
 RegistryDeleteValue(
-    IN  HANDLE      Key,
-    IN  PCHAR       Name
+    _In_ HANDLE     Key,
+    _In_ PSTR       Name
     );
=20
 extern NTSTATUS
 RegistryQueryDwordValue(
-    IN  HANDLE          Key,
-    IN  PCHAR           Name,
-    OUT PULONG          Value
+    _In_ HANDLE         Key,
+    _In_ PSTR           Name,
+    _Out_ PULONG        Value
     );
-   =20
+
+extern NTSTATUS
+RegistryQueryQwordValue(
+    _In_ HANDLE         Key,
+    _In_ PSTR           Name,
+    _Out_ PULONGLONG    Value
+    );
+
 extern NTSTATUS
 RegistryUpdateDwordValue(
-    IN  HANDLE          Key,
-    IN  PCHAR           Name,
-    IN  ULONG           Value
+    _In_ HANDLE         Key,
+    _In_ PSTR           Name,
+    _In_ ULONG          Value
     );
-   =20
+
 extern NTSTATUS
 RegistryQuerySzValue(
-    IN  HANDLE          Key,
-    IN  PCHAR           Name,
-    OUT PULONG          Type OPTIONAL,
-    OUT PANSI_STRING    *Array
+    _In_ HANDLE             Key,
+    _In_ PSTR               Name,
+    _Out_opt_ PULONG        Type,
+    _Outptr_ PANSI_STRING   *Array
     );
=20
 extern NTSTATUS
 RegistryQueryBinaryValue(
-    IN  HANDLE          Key,
-    IN  PCHAR           Name,
-    OUT PVOID           *Buffer,
-    OUT PULONG          Length
+    _In_ HANDLE         Key,
+    _In_ PSTR           Name,
+    _Outptr_ PVOID      *Buffer,
+    _Out_ PULONG        Length
     );
=20
 extern NTSTATUS
 RegistryUpdateBinaryValue(
-    IN  HANDLE          Key,
-    IN  PCHAR           Name,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length
+    _In_ HANDLE         Key,
+    _In_ PSTR           Name,
+    _In_ PVOID          Buffer,
+    _In_ ULONG          Length
     );
=20
 extern NTSTATUS
 RegistryQueryKeyName(
-    IN  HANDLE              Key,
-    OUT PANSI_STRING        *Array
+    _In_ HANDLE             Key,
+    _Outptr_ PANSI_STRING   *Array
     );
=20
 extern NTSTATUS
 RegistryQuerySystemStartOption(
-    IN  PCHAR           Name,
-    OUT PANSI_STRING    *Option
+    _In_ PSTR               Name,
+    _Outptr_ PANSI_STRING   *Option
     );
=20
 extern VOID
 RegistryFreeSzValue(
-    IN  PANSI_STRING    Array
+    _In_ PANSI_STRING   Array
     );
=20
 extern VOID
 RegistryFreeBinaryValue(
-    IN  PVOID           Buffer
+    _In_ PVOID          Buffer
     );
=20
 extern NTSTATUS
 RegistryUpdateSzValue(
-    IN  HANDLE          Key,
-    IN  PCHAR           Name,
-    IN  ULONG           Type,
-    IN  PANSI_STRING    Array
+    _In_ HANDLE         Key,
+    _In_ PSTR           Name,
+    _In_ ULONG          Type,
+    _In_ PANSI_STRING   Array
     );
=20
 extern VOID
 RegistryCloseKey(
-    IN  HANDLE  Key
+    _In_ HANDLE Key
+    );
+
+extern PUNICODE_STRING
+RegistryGetPath(
+    VOID
     );
=20
 #endif  // _XENVIF_REGISTRY_H
diff --git a/src/xenvif/thread=2Ec b/src/xenvif/thread=2Ec
index dae2214=2E=2Eb510c9e 100644
--- a/src/xenvif/thread=2Ec
+++ b/src/xenvif/thread=2Ec
@@ -50,7 +50,7 @@ struct _XENVIF_THREAD {
=20
 static FORCEINLINE PVOID
 __ThreadAllocate(
-    IN  ULONG   Length
+    _In_ ULONG  Length
     )
 {
     return __AllocatePoolWithTag(NonPagedPool, Length, THREAD_POOL);
@@ -58,7 +58,7 @@ __ThreadAllocate(
=20
 static FORCEINLINE VOID
 __ThreadFree(
-    IN  PVOID   Buffer
+    _In_ PVOID  Buffer
     )
 {
     __FreePoolWithTag(Buffer, THREAD_POOL);
@@ -66,7 +66,7 @@ __ThreadFree(
=20
 static FORCEINLINE VOID
 __ThreadWake(
-    IN  PXENVIF_THREAD  Thread
+    _In_ PXENVIF_THREAD Thread
     )
 {
     KeSetEvent(&Thread->Event, IO_NO_INCREMENT, FALSE);
@@ -74,7 +74,7 @@ __ThreadWake(
=20
 VOID
 ThreadWake(
-    IN  PXENVIF_THREAD  Thread
+    _In_ PXENVIF_THREAD Thread
     )
 {
     __ThreadWake(Thread);
@@ -82,7 +82,7 @@ ThreadWake(
=20
 static FORCEINLINE VOID
 __ThreadAlert(
-    IN  PXENVIF_THREAD  Thread
+    _In_ PXENVIF_THREAD Thread
     )
 {
     Thread->Alerted =3D TRUE;
@@ -91,7 +91,7 @@ __ThreadAlert(
=20
 VOID
 ThreadAlert(
-    IN  PXENVIF_THREAD  Thread
+    _In_ PXENVIF_THREAD Thread
     )
 {
     __ThreadAlert(Thread);
@@ -101,11 +101,11 @@ KSTART_ROUTINE  ThreadFunction;
=20
 VOID
 ThreadFunction(
-    IN  PVOID       Argument
+    _In_ PVOID          Argument
     )
 {
-    PXENVIF_THREAD  Self =3D Argument;
-    NTSTATUS        status;
+    PXENVIF_THREAD      Self =3D Argument;
+    NTSTATUS            status;
=20
     status =3D Self->Function(Self, Self->Context);
=20
@@ -116,12 +116,12 @@ ThreadFunction(
     // NOT REACHED
 }
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 ThreadCreate(
-    IN  XENVIF_THREAD_FUNCTION  Function,
-    IN  PVOID                   Context,
-    OUT PXENVIF_THREAD          *Thread
+    _In_ XENVIF_THREAD_FUNCTION Function,
+    _In_ PVOID                  Context,
+    _Outptr_ PXENVIF_THREAD     *Thread
     )
 {
     HANDLE                      Handle;
@@ -131,6 +131,8 @@ ThreadCreate(
=20
     (*Thread) =3D __ThreadAllocate(sizeof (XENVIF_THREAD));
=20
+    Trace("Create thread %p %p\n", Function, Thread);
+
     status =3D STATUS_NO_MEMORY;
     if (*Thread =3D=3D NULL)
         goto fail1;
@@ -189,7 +191,7 @@ fail1:
=20
 PKEVENT
 ThreadGetEvent(
-    IN  PXENVIF_THREAD  Thread
+    _In_ PXENVIF_THREAD Thread
     )
 {
     return &Thread->Event;
@@ -197,7 +199,7 @@ ThreadGetEvent(
=20
 BOOLEAN
 ThreadIsAlerted(
-    IN  PXENVIF_THREAD  Thread
+    _In_ PXENVIF_THREAD Thread
     )
 {
     return Thread->Alerted;
@@ -205,10 +207,10 @@ ThreadIsAlerted(
=20
 VOID
 ThreadJoin(
-    IN  PXENVIF_THREAD  Thread
+    _In_ PXENVIF_THREAD     Thread
     )
 {
-    LONG                References;
+    LONG                    References;
=20
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, PASSIVE_LEVEL);
     ASSERT3P(KeGetCurrentThread(), !=3D, Thread->Thread);
diff --git a/src/xenvif/thread=2Eh b/src/xenvif/thread=2Eh
index 1029e2f=2E=2E5926a6f 100644
--- a/src/xenvif/thread=2Eh
+++ b/src/xenvif/thread=2Eh
@@ -39,37 +39,37 @@ typedef struct _XENVIF_THREAD XENVIF_THREAD, *PXENVIF_=
THREAD;
=20
 typedef NTSTATUS (*XENVIF_THREAD_FUNCTION)(PXENVIF_THREAD, PVOID);
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 ThreadCreate(
-    IN  XENVIF_THREAD_FUNCTION  Function,
-    IN  PVOID                   Context,
-    OUT PXENVIF_THREAD          *Thread
+    _In_ XENVIF_THREAD_FUNCTION Function,
+    _In_ PVOID                  Context,
+    _Outptr_ PXENVIF_THREAD     *Thread
     );
=20
 extern PKEVENT
 ThreadGetEvent(
-    IN  PXENVIF_THREAD  Self
+    _In_ PXENVIF_THREAD Self
     );
=20
 extern BOOLEAN
 ThreadIsAlerted(
-    IN  PXENVIF_THREAD  Self
+    _In_ PXENVIF_THREAD Self
     );
=20
 extern VOID
 ThreadWake(
-    IN  PXENVIF_THREAD  Thread
+    _In_ PXENVIF_THREAD Thread
     );
=20
 extern VOID
 ThreadAlert(
-    IN  PXENVIF_THREAD  Thread
+    _In_ PXENVIF_THREAD Thread
     );
=20
 extern VOID
 ThreadJoin(
-    IN  PXENVIF_THREAD  Thread
+    _In_ PXENVIF_THREAD Thread
     );
=20
 #endif  // _XENVIF_THREAD_H
diff --git a/src/xenvif/util=2Eh b/src/xenvif/util=2Eh
index b085842=2E=2E7973be3 100644
--- a/src/xenvif/util=2Eh
+++ b/src/xenvif/util=2Eh
@@ -38,12 +38,12 @@
=20
 #include "assert=2Eh"
=20
-#define	P2ROUNDUP(_x, _a)   \
-        (-(-(_x) & -(_a)))
+#define	P2ROUNDUP(_t, _x, _a)   \
+        (-(-((_t)(_x)) & -(((_t)(_a)))))
=20
 static FORCEINLINE LONG
 __ffs(
-    IN  unsigned long long  mask
+    _In_ unsigned long long mask
     )
 {
     unsigned char           *array =3D (unsigned char *)&mask;
@@ -82,14 +82,14 @@ __ffs(
=20
 static FORCEINLINE VOID
 __CpuId(
-    IN  ULONG   Leaf,
-    OUT PULONG  EAX OPTIONAL,
-    OUT PULONG  EBX OPTIONAL,
-    OUT PULONG  ECX OPTIONAL,
-    OUT PULONG  EDX OPTIONAL
+    _In_ ULONG          Leaf,
+    _Out_opt_ PULONG    EAX,
+    _Out_opt_ PULONG    EBX,
+    _Out_opt_ PULONG    ECX,
+    _Out_opt_ PULONG    EDX
     )
 {
-    int         Value[4] =3D {0};
+    int                 Value[4] =3D {0};
=20
     __cpuid(Value, Leaf);
=20
@@ -108,12 +108,12 @@ __CpuId(
=20
 static FORCEINLINE LONG
 __InterlockedAdd(
-    IN  LONG    *Value,
-    IN  LONG    Delta
+    _Inout_ LONG    *Value,
+    _In_ LONG       Delta
     )
 {
-    LONG        New;
-    LONG        Old;
+    LONG            New;
+    LONG            Old;
=20
     do {
         Old =3D *Value;
@@ -125,12 +125,12 @@ __InterlockedAdd(
=20
 static FORCEINLINE LONG
 __InterlockedSubtract(
-    IN  LONG    *Value,
-    IN  LONG    Delta
+    _Inout_ LONG    *Value,
+    _In_ LONG       Delta
     )
 {
-    LONG        New;
-    LONG        Old;
+    LONG            New;
+    LONG            Old;
=20
     do {
         Old =3D *Value;
@@ -140,23 +140,24 @@ __InterlockedSubtract(
     return New;
 }
=20
-__checkReturn
+_Check_return_
 static FORCEINLINE PVOID
 __AllocatePoolWithTag(
-    IN  POOL_TYPE   PoolType,
-    IN  SIZE_T      NumberOfBytes,
-    IN  ULONG       Tag
+    _In_ POOL_TYPE  PoolType,
+    _In_ SIZE_T     NumberOfBytes,
+    _In_ ULONG      Tag
     )
 {
     PUCHAR          Buffer;
=20
-    __analysis_assume(PoolType =3D=3D NonPagedPool ||
+    _Analysis_assume_(PoolType =3D=3D NonPagedPool ||
                       PoolType =3D=3D PagedPool);
=20
     if (NumberOfBytes =3D=3D 0)
         return NULL;
=20
 #if (_MSC_VER >=3D 1928) // VS 16=2E9 (EWDK 20344 or later)
+#pragma warning(suppress:28160) // annotation error
     Buffer =3D ExAllocatePoolUninitialized(PoolType, NumberOfBytes, Tag);
 #else
 #pragma warning(suppress:28160) // annotation error
@@ -171,8 +172,8 @@ __AllocatePoolWithTag(
=20
 static FORCEINLINE VOID
 __FreePoolWithTag(
-    IN  PVOID   Buffer,
-    IN  ULONG   Tag
+    _In_ PVOID  Buffer,
+    _In_ ULONG  Tag
     )
 {
     ExFreePoolWithTag(Buffer, Tag);
@@ -180,28 +181,37 @@ __FreePoolWithTag(
=20
 static FORCEINLINE PMDL
 __AllocatePages(
-    IN  ULONG           Count
+    _In_ ULONG          Count,
+    _In_ BOOLEAN        Contiguous
     )
 {
     PHYSICAL_ADDRESS    LowAddress;
     PHYSICAL_ADDRESS    HighAddress;
     LARGE_INTEGER       SkipBytes;
     SIZE_T              TotalBytes;
+    ULONG               Flags;
     PMDL                Mdl;
     PUCHAR              MdlMappedSystemVa;
     NTSTATUS            status;
=20
     LowAddress=2EQuadPart =3D 0ull;
     HighAddress=2EQuadPart =3D ~0ull;
-    SkipBytes=2EQuadPart =3D 0ull;
     TotalBytes =3D (SIZE_T)PAGE_SIZE * Count;
=20
+    if (Contiguous) {
+        SkipBytes=2EQuadPart =3D TotalBytes;
+        Flags =3D MM_ALLOCATE_REQUIRE_CONTIGUOUS_CHUNKS;
+    } else {
+        SkipBytes=2EQuadPart =3D 0ull;
+        Flags =3D MM_ALLOCATE_FULLY_REQUIRED;
+    }
+
     Mdl =3D MmAllocatePagesForMdlEx(LowAddress,
                                   HighAddress,
                                   SkipBytes,
                                   TotalBytes,
                                   MmCached,
-                                  MM_ALLOCATE_FULLY_REQUIRED);
+                                  Flags);
=20
     status =3D STATUS_NO_MEMORY;
     if (Mdl =3D=3D NULL)
@@ -245,14 +255,14 @@ fail1:
     return NULL;
 }
=20
-#define __AllocatePage()    __AllocatePages(1)
+#define __AllocatePage()    __AllocatePages(1, FALSE)
=20
 static FORCEINLINE VOID
 __FreePages(
-    IN	PMDL	Mdl
+    _In_ PMDL   Mdl
     )
 {
-    PUCHAR	MdlMappedSystemVa;
+    PUCHAR      MdlMappedSystemVa;
=20
     ASSERT(Mdl->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA);
     MdlMappedSystemVa =3D Mdl->MappedSystemVa;
@@ -265,15 +275,17 @@ __FreePages(
=20
 #define __FreePage(_Mdl)    __FreePages(_Mdl)
=20
-static FORCEINLINE PCHAR
+static FORCEINLINE PSTR
 __strtok_r(
-    IN      PCHAR   Buffer,
-    IN      PCHAR   Delimiter,
-    IN OUT  PCHAR   *Context
+    _Inout_opt_ PSTR    Buffer,
+    _In_ PSTR           Delimiter,
+    _When_(Buffer !=3D NULL, _Outptr_)
+    _When_(Buffer =3D=3D NULL, _Inout_)
+    PSTR                *Context
     )
 {
-    PCHAR           Token;
-    PCHAR           End;
+    PSTR                Token;
+    PSTR                End;
=20
     if (Buffer !=3D NULL)
         *Context =3D Buffer;
@@ -303,15 +315,17 @@ __strtok_r(
     return Token;
 }
=20
-static FORCEINLINE PWCHAR
+static FORCEINLINE PWSTR
 __wcstok_r(
-    IN      PWCHAR  Buffer,
-    IN      PWCHAR  Delimiter,
-    IN OUT  PWCHAR  *Context
+    _Inout_opt_ PWSTR   Buffer,
+    _In_ PWSTR          Delimiter,
+    _When_(Buffer !=3D NULL, _Outptr_)
+    _When_(Buffer =3D=3D NULL, _Inout_)
+    PWSTR               *Context
     )
 {
-    PWCHAR          Token;
-    PWCHAR          End;
+    PWSTR               Token;
+    PWSTR               End;
=20
     if (Buffer !=3D NULL)
         *Context =3D Buffer;
@@ -343,7 +357,7 @@ __wcstok_r(
=20
 static FORCEINLINE CHAR
 __toupper(
-    IN  CHAR    Character
+    _In_ CHAR   Character
     )
 {
     if (Character < 'a' || Character > 'z')
@@ -354,7 +368,7 @@ __toupper(
=20
 static FORCEINLINE CHAR
 __tolower(
-    IN  CHAR    Character
+    _In_ CHAR   Character
     )
 {
     if (Character < 'A' || Character > 'Z')
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.cd.8531a6fc85823253.1a12fa3bb5d.e0ad5436212709b7=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 12 10:23:54 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 12 Oct 2026 10:23:54 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1446089.1662080 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGDCE-0005Qi-6p; Mon, 12 Oct 2026 10:23:54 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1446089.1662080; Mon, 12 Oct 2026 10:23:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGDCE-0005QY-3T; Mon, 12 Oct 2026 10:23:54 +0000
Received: by outflank-mailman (input) for mailman id 1446089;
 Mon, 12 Oct 2026 10:23:53 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3d14000080d7@swg.vates.tech>)
 id 1xGDCC-0005Ou-W0
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 10:23:53 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGDCC-00Fmsh-Ce
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 12:23:52 +0200
Received: from [10.42.69.11] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3d14000080d7@swg.vates.tech>)
 id 6accb52f-8faa-0a2a0a5109dd-0a2a450bde56-28
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 12:23:52 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-42698a.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3d14000080d7@swg.vates.tech>)
 id 6accb532-b7e8-0a2a450b0019-b9ff1c22b35b-4
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 12:23:52 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a12fa3d14000080d7.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 12 Oct 2026 10:23:47 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 00EDE82A4E;
 Mon, 12 Oct 2026 12:23:46 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=MRkqkX4NDGrPvDH5TjhNyRmHcXW0vrwaxLYvPA9MiXA=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=DsfX/xgrLM0Tmxt1AerA4XnznQWJMv4iWpmPb9oIZB/HQdG7cZn1AYMSdHjTE3kR63uS2kYrf
 5fJNKh+/oaGhhKBwLlEq4fcSp0tJzvQJUrIOgFfBZEodJczzwRSy2sL0u+IQGuBAY1vDg1CpoHv
 NnEDZPBQdNxWmuephULfWn/KMVPn+hAEJi6wqMNfvwF73JmhLFr4slvVCR5zrVfdaSZOqkSJGD8
 DdU4HuWvPDC4OebZ7JKxLkQnMGJKBjTotMZ0DGgXIbJYLooggmMLmlGPw5P3vqtx3rpC1KL9VuO
 DxZ5BIycT+UTOdbnnElpnCsoLZs8CvQcTJv/PdAYWHSQ==
X-Zone-Loop: b73feeac631f1ed727c9b4c49cbb4af4347ccf3ab532
x-campaign-type: default
x-transaction-id: d9ac4714-f4da-4c41-9dc9-50e57568af5d
x-swg-uid: 01-5e28817e-2af7-41e1-9221-b22c15ee4fa5
X-Mailer: Sweego
Message-ID:
 <1791800627.8631fc262581453bbf619ec5b2062170.1a12fa3d14000080d7@vates.tech>
x-swg-bid: 1791800627.8631fc262581453bbf619ec5b2062170.1a12fa3d14000080d7
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 05/21] xenvif: Annotate unannotated functions
Date: Mon, 12 Oct 2026 12:23:17 +0200
In-Reply-To: <1791800371.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@vates.tech>
References: <1791800371.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.d1.70a05cc2112ca1aa.1a12fa3cf93.efb719ea4cb39113=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791800627092
X-purgate-ID: tlsNG-42698a/1791800632-AB0DD9EA-C36107E8/0/0
X-purgate-type: clean
X-purgate-size: 5895

---=Part.d1.70a05cc2112ca1aa.1a12fa3cf93.efb719ea4cb39113=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Some functions had pointer parameters with no SAL annotation at all=2E
We add annotations describing each parameter's actual use=2E

TranslatedAddress in BusTranslateAddress is not a **T type so we fix
the annotation to _Out_=2E

No functional change=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xenvif/bus=2Ec      |  2 +-
 src/xenvif/fdo=2Ec      |  8 ++++----
 src/xenvif/frontend=2Ec | 22 +++++++++++-----------
 src/xenvif/registry=2Ec |  4 ++--
 src/xenvif/vif=2Ec      |  2 +-
 5 files changed, 19 insertions(+), 19 deletions(-)

diff --git a/src/xenvif/bus=2Ec b/src/xenvif/bus=2Ec
index 4017e7c=2E=2E07e8c24 100644
--- a/src/xenvif/bus=2Ec
+++ b/src/xenvif/bus=2Ec
@@ -94,7 +94,7 @@ BusTranslateAddress(
     _In_ PHYSICAL_ADDRESS       BusAddress,
     _In_ ULONG                  Length,
     _Inout_ PULONG              AddressSpace,
-    _Outptr_ PPHYSICAL_ADDRESS  TranslatedAddress
+    _Out_ PPHYSICAL_ADDRESS     TranslatedAddress
     )
 {
     PXENVIF_BUS_CONTEXT         Context =3D _Context;
diff --git a/src/xenvif/fdo=2Ec b/src/xenvif/fdo=2Ec
index 46ac5b7=2E=2E91e4141 100644
--- a/src/xenvif/fdo=2Ec
+++ b/src/xenvif/fdo=2Ec
@@ -926,8 +926,8 @@ __FdoFreeAnsi(
=20
 static NTSTATUS
 FdoScan(
-    PXENVIF_THREAD      Self,
-    PVOID               Context
+    _In_ PXENVIF_THREAD Self,
+    _In_ PVOID          Context
     )
 {
     PXENVIF_FDO         Fdo =3D Context;
@@ -3205,8 +3205,8 @@ fail1:
 #define DEFINE_FDO_GET_INTERFACE(_Interface, _Type)                     \
 VOID                                                                    \
 FdoGet ## _Interface ## Interface(                                      \
-    IN  PXENVIF_FDO Fdo,                                                \
-    OUT _Type       _Interface ## Interface                             \
+    _In_  PXENVIF_FDO Fdo,                                               =
 \
+    _Out_ _Type       _Interface ## Interface                            =
 \
     )                                                                   \
 {                                                                       \
     * ## _Interface ## Interface =3D Fdo-> ## _Interface ## Interface;   =
 \
diff --git a/src/xenvif/frontend=2Ec b/src/xenvif/frontend=2Ec
index 313631d=2E=2Ebe0fccd 100644
--- a/src/xenvif/frontend=2Ec
+++ b/src/xenvif/frontend=2Ec
@@ -329,7 +329,7 @@ FrontendFreePath(
 #define DEFINE_FRONTEND_GET_FUNCTION(_Function, _Type)  \
 static FORCEINLINE _Type                                \
 __FrontendGet ## _Function(                             \
-    IN  PXENVIF_FRONTEND    Frontend                    \
+    _In_  PXENVIF_FRONTEND    Frontend                    \
     )                                                   \
 {                                                       \
     return Frontend-> ## _Function;                     \
@@ -337,7 +337,7 @@ __FrontendGet ## _Function(                           =
  \
                                                         \
 _Type                                                   \
 FrontendGet ## _Function(                               \
-    IN  PXENVIF_FRONTEND    Frontend                    \
+    _In_ PXENVIF_FRONTEND    Frontend                   \
     )                                                   \
 {                                                       \
     return __FrontendGet ## _Function ## (Frontend);    \
@@ -2052,17 +2052,17 @@ FrontendIsSplit(
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE NTSTATUS
 __FrontendUpdateHash(
-    PXENVIF_FRONTEND        Frontend,
-    PXENVIF_FRONTEND_HASH   Hash
+    _In_ PXENVIF_FRONTEND       Frontend,
+    _In_ PXENVIF_FRONTEND_HASH  Hash
     )
 {
-    PXENVIF_CONTROLLER      Controller;
-    ULONG                   Zero =3D 0;
-    ULONG                   NetifAlgorithm;
-    ULONG                   Size;
-    PULONG                  Mapping;
-    ULONG                   Flags;
-    NTSTATUS                status;
+    PXENVIF_CONTROLLER          Controller;
+    ULONG                       Zero =3D 0;
+    ULONG                       NetifAlgorithm;
+    ULONG                       Size;
+    PULONG                      Mapping;
+    ULONG                       Flags;
+    NTSTATUS                    status;
=20
     Controller =3D __FrontendGetController(Frontend);
=20
diff --git a/src/xenvif/registry=2Ec b/src/xenvif/registry=2Ec
index 119c697=2E=2E4586079 100644
--- a/src/xenvif/registry=2Ec
+++ b/src/xenvif/registry=2Ec
@@ -1430,7 +1430,7 @@ fail1:
=20
 static PKEY_VALUE_PARTIAL_INFORMATION
 RegistryAnsiToSz(
-    PANSI_STRING                    Ansi
+    _In_ PANSI_STRING               Ansi
     )
 {
     ULONG                           Length;
@@ -1476,7 +1476,7 @@ fail1:
=20
 static PKEY_VALUE_PARTIAL_INFORMATION
 RegistryAnsiToMultiSz(
-    PANSI_STRING                    Ansi
+    _In_ PANSI_STRING               Ansi
     )
 {
     ULONG                           Length;
diff --git a/src/xenvif/vif=2Ec b/src/xenvif/vif=2Ec
index 3c7dd41=2E=2E279df15 100644
--- a/src/xenvif/vif=2Ec
+++ b/src/xenvif/vif=2Ec
@@ -939,7 +939,7 @@ VifTransmitterQueryRingSize(
=20
 static NTSTATUS
 VifAcquire(
-    PINTERFACE              Interface
+    _In_ PINTERFACE         Interface
     )
 {
     PXENVIF_VIF_CONTEXT     Context =3D Interface->Context;
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.d1.70a05cc2112ca1aa.1a12fa3cf93.efb719ea4cb39113=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 12 10:23:54 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 12 Oct 2026 10:23:54 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1446090.1662083 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGDCE-0005R0-9s; Mon, 12 Oct 2026 10:23:54 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1446090.1662083; Mon, 12 Oct 2026 10:23:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGDCE-0005Qm-5G; Mon, 12 Oct 2026 10:23:54 +0000
Received: by outflank-mailman (input) for mailman id 1446090;
 Mon, 12 Oct 2026 10:23:53 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3cedf00080d7@swg.vates.tech>)
 id 1xGDCD-0005Oy-4x
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 10:23:53 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGDCC-00Fmsh-Hv
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 12:23:52 +0200
Received: from [10.42.69.3] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3cedf00080d7@swg.vates.tech>)
 id 6accb536-8faa-0a2a0a5109dd-0a2a4503e17e-8
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 12:23:52 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-33051d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3cedf00080d7@swg.vates.tech>)
 id 6accb538-fae8-0a2a45030019-b9ff1c12b6ed-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 12:23:52 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a12fa3cedf00080d7.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 12 Oct 2026 10:23:46 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 63F0182A1C;
 Mon, 12 Oct 2026 12:23:46 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=U61kxjIw9K21viOm5z/Lh+TXcFtnJn1Sx/rUQxDvSpE=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=s96JIWATr134604WRo9bEunqck3hY4cWP9b8O3fBvk+1srcszfBXYYBhm3URfiWF6iV+TIuaJ
 zHoRHfejMLA4a9bYjCbjmqyCDVQ4tNLNKd2SEItk5g/oXSYbn1xQZ1zBm8yZ1EXxZnX4IkVfSZo
 2J3+rHtCClPLbnGjI2ZuiBNM1TSsaFBkrF5uLeOWPGUJttYlNAEjNMHFKLmoQPETjfw5tnvRrpc
 mqfCra+BljqrSOF0b8igeCp5v6RwILJt6ORMuctd02rnfyQL0z/LYNu87dOmnWrJf9h5I/lCRP6
 ZB12IZbV/CtYOqG+UqRCheinhPbkw7jlq3dOvF20c3AQ==
X-Zone-Loop: 2df254ee8a2e059201b2911f67db7fa1a420141a4386
x-campaign-type: default
x-transaction-id: d7932154-70c1-4a89-a86f-ccd9cf4acfa9
x-swg-uid: 01-8d6712b0-cd0a-4a14-80d4-0326d3deaa96
X-Mailer: Sweego
Message-ID:
 <1791800626.8631fc262581453bbf619ec5b2062170.1a12fa3cedf00080d7@vates.tech>
x-swg-bid: 1791800626.8631fc262581453bbf619ec5b2062170.1a12fa3cedf00080d7
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 03/21] Update string typedefs
Date: Mon, 12 Oct 2026 12:23:15 +0200
In-Reply-To: <1791800371.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@vates.tech>
References: <1791800371.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.cf.9aa1644e4eff5f5.1a12fa3cd40.964d99f6d9232580=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791800626496
X-purgate-ID: tlsNG-33051d/1791800632-74C884E9-8CD9B766/0/0
X-purgate-type: clean
X-purgate-size: 12799

---=Part.cf.9aa1644e4eff5f5.1a12fa3cd40.964d99f6d9232580=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Mechanical pass, no functional change=2E

Types:
  const CHAR */CHAR *  -> PCSTR/PSTR
  const WCHAR */WCHAR* -> PCWSTR
  const PCHAR          -> PCSTR
  PCHAR                -> PSTR

PCSTR/PCWSTR are _Null_terminated_ in ntdef=2Eh, so the type gives the
analyser the buffer extent; PCHAR does not=2E  "const PCHAR" qualified
the pointer rather than the characters and so asserted nothing=2E
Buffers that are not single strings keep PCHAR=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 include/debug_interface=2Eh     |  4 ++--
 include/range_set_interface=2Eh |  2 +-
 include/unplug_interface=2Eh    |  2 +-
 src/xenvif/fdo=2Ec              |  4 ++--
 src/xenvif/frontend=2Ec         |  2 +-
 src/xenvif/frontend=2Eh         |  2 +-
 src/xenvif/link=2Ec             |  6 +++---
 src/xenvif/link=2Eh             |  4 ++--
 src/xenvif/pdo=2Ec              | 10 ++++-----
 src/xenvif/pdo=2Eh              |  4 ++--
 src/xenvif/registry=2Ec         | 20 +++++++++---------
 src/xenvif/registry=2Eh         | 38 +++++++++++++++++------------------
 src/xenvif/settings=2Ec         | 18 ++++++++---------
 src/xenvif/settings=2Eh         | 12 +++++------
 14 files changed, 64 insertions(+), 64 deletions(-)

diff --git a/include/debug_interface=2Eh b/include/debug_interface=2Eh
index 251902c=2E=2E25cf58c 100644
--- a/include/debug_interface=2Eh
+++ b/include/debug_interface=2Eh
@@ -111,8 +111,8 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENBUS_DEBUG_PRINTF)(
-    _In_ PINTERFACE             Interface,
-    _In_ PCSTR                  Format,
+    _In_ PINTERFACE Interface,
+    _In_ PCSTR      Format,
     =2E=2E=2E
     );
=20
diff --git a/include/range_set_interface=2Eh b/include/range_set_interface=
=2Eh
index dde916b=2E=2E14df7cf 100644
--- a/include/range_set_interface=2Eh
+++ b/include/range_set_interface=2Eh
@@ -77,7 +77,7 @@ typedef VOID
 typedef NTSTATUS
 (*XENBUS_RANGE_SET_CREATE)(
     _In_ PINTERFACE             Interface,
-    _In_ const CHAR             *Name,
+    _In_ PCSTR                  Name,
     _Outptr_ PXENBUS_RANGE_SET  *RangeSet
     );
=20
diff --git a/include/unplug_interface=2Eh b/include/unplug_interface=2Eh
index 5881ab6=2E=2E131496d 100644
--- a/include/unplug_interface=2Eh
+++ b/include/unplug_interface=2Eh
@@ -118,7 +118,7 @@ typedef BOOLEAN
 typedef VOID
 (*XENBUS_UNPLUG_REBOOT)(
     _In_ PINTERFACE Interface,
-    _In_ PCHAR      Module
+    _In_ PSTR       Module
     );
=20
 // {73db6517-3d06-4937-989f-199b7501e229}
diff --git a/src/xenvif/fdo=2Ec b/src/xenvif/fdo=2Ec
index 8d20c86=2E=2E0a0e44f 100644
--- a/src/xenvif/fdo=2Ec
+++ b/src/xenvif/fdo=2Ec
@@ -848,7 +848,7 @@ done:
=20
 static FORCEINLINE PANSI_STRING
 __FdoMultiSzToUpcaseAnsi(
-    _In_ PCHAR      Buffer
+    _In_ PSTR       Buffer
     )
 {
     PANSI_STRING    Ansi;
@@ -1103,7 +1103,7 @@ FdoParseResources(
 static FORCEINLINE BOOLEAN
 __FdoMatchDistribution(
     _In_ PXENVIF_FDO    Fdo,
-    _In_ PCHAR          Buffer
+    _In_ PSTR           Buffer
     )
 {
     PCHAR               Vendor;
diff --git a/src/xenvif/frontend=2Ec b/src/xenvif/frontend=2Ec
index 675e419=2E=2Ec11f85c 100644
--- a/src/xenvif/frontend=2Ec
+++ b/src/xenvif/frontend=2Ec
@@ -318,7 +318,7 @@ fail1:
 VOID
 FrontendFreePath(
     _In_ PXENVIF_FRONTEND   Frontend,
-    _In_ PCHAR              Path
+    _In_ PSTR               Path
     )
 {
     UNREFERENCED_PARAMETER(Frontend);
diff --git a/src/xenvif/frontend=2Eh b/src/xenvif/frontend=2Eh
index caa84f9=2E=2Ee2ddac6 100644
--- a/src/xenvif/frontend=2Eh
+++ b/src/xenvif/frontend=2Eh
@@ -150,7 +150,7 @@ FrontendFormatPath(
 extern VOID
 FrontendFreePath(
     _In_ PXENVIF_FRONTEND   Frontend,
-    _In_ PCHAR              Path
+    _In_ PSTR               Path
     );
=20
 #include "mac=2Eh"
diff --git a/src/xenvif/link=2Ec b/src/xenvif/link=2Ec
index 1f95000=2E=2E72c1766 100644
--- a/src/xenvif/link=2Ec
+++ b/src/xenvif/link=2Ec
@@ -59,7 +59,7 @@ __LinkFree(
=20
 static FORCEINLINE NTSTATUS
 __LinkGetImageBase(
-    _In_ const CHAR             *ModuleName,
+    _In_ PCSTR                  ModuleName,
     _Outptr_ PVOID              *ImageBase
     )
 {
@@ -151,8 +151,8 @@ fail1:
=20
 NTSTATUS
 LinkGetRoutineAddress(
-    _In_ const CHAR *ModuleName,
-    _In_ const CHAR *FunctionName,
+    _In_ PCSTR      ModuleName,
+    _In_ PCSTR      FunctionName,
     _Outptr_ PVOID  *Address
     )
 {
diff --git a/src/xenvif/link=2Eh b/src/xenvif/link=2Eh
index 570414c=2E=2E5a35eee 100644
--- a/src/xenvif/link=2Eh
+++ b/src/xenvif/link=2Eh
@@ -35,8 +35,8 @@
=20
 extern NTSTATUS
 LinkGetRoutineAddress(
-    _In_ const CHAR *ModuleName,
-    _In_ const CHAR *FunctionName,
+    _In_ PCSTR      ModuleName,
+    _In_ PCSTR      FunctionName,
     _Outptr_ PVOID  *Address
      );
=20
diff --git a/src/xenvif/pdo=2Ec b/src/xenvif/pdo=2Ec
index 66d3a32=2E=2E09f6d9d 100644
--- a/src/xenvif/pdo=2Ec
+++ b/src/xenvif/pdo=2Ec
@@ -212,7 +212,7 @@ __PdoGetDevicePowerState(
 static FORCEINLINE VOID
 __PdoSetMissing(
     _In_ PXENVIF_PDO    Pdo,
-    _In_ const CHAR     *Reason
+    _In_ PCSTR          Reason
     )
 {
     Pdo->Reason =3D Reason;
@@ -222,7 +222,7 @@ __PdoSetMissing(
 VOID
 PdoSetMissing(
     _In_ PXENVIF_PDO    Pdo,
-    _In_ const CHAR     *Reason
+    _In_ PCSTR          Reason
     )
 {
     __PdoSetMissing(Pdo, Reason);
@@ -662,7 +662,7 @@ PdoGetVifContext(
=20
 static FORCEINLINE NTSTATUS
 __PdoParseAddress(
-    _In_ PCHAR              Buffer,
+    _In_ PSTR               Buffer,
     _Out_ PETHERNET_ADDRESS Address
     )
 {
@@ -731,7 +731,7 @@ fail1:
 static FORCEINLINE NTSTATUS
 __PdoSetPermanentAddress(
     _In_ PXENVIF_PDO    Pdo,
-    _In_ PCHAR          Buffer
+    _In_ PSTR           Buffer
     )
 {
     ANSI_STRING         Ansi[2];
@@ -2705,7 +2705,7 @@ NTSTATUS
 PdoCreate(
     _In_ PXENVIF_FDO    Fdo,
     _In_ ULONG          Number,
-    _In_ PCHAR          Address
+    _In_ PSTR           Address
     )
 {
     PDEVICE_OBJECT      PhysicalDeviceObject;
diff --git a/src/xenvif/pdo=2Eh b/src/xenvif/pdo=2Eh
index cb8e29b=2E=2E086edef 100644
--- a/src/xenvif/pdo=2Eh
+++ b/src/xenvif/pdo=2Eh
@@ -54,7 +54,7 @@ PdoGetDevicePnpState(
 extern VOID
 PdoSetMissing(
     _In_ PXENVIF_PDO    Pdo,
-    _In_ const CHAR     *Reason
+    _In_ PCSTR          Reason
     );
=20
 extern BOOLEAN
@@ -142,7 +142,7 @@ extern NTSTATUS
 PdoCreate(
     _In_ PXENVIF_FDO    Fdo,
     _In_ ULONG          Number,
-    _In_ PCHAR          Address
+    _In_ PSTR           Address
     );
=20
 extern NTSTATUS
diff --git a/src/xenvif/registry=2Ec b/src/xenvif/registry=2Ec
index 09b61cd=2E=2E119c697 100644
--- a/src/xenvif/registry=2Ec
+++ b/src/xenvif/registry=2Ec
@@ -152,8 +152,8 @@ RegistryOpenKey(
     _Out_ PHANDLE           Key
     )
 {
-    OBJECT_ATTRIBUTES   Attributes;
-    NTSTATUS            status;
+    OBJECT_ATTRIBUTES       Attributes;
+    NTSTATUS                status;
=20
     InitializeObjectAttributes(&Attributes,
                                Path,
@@ -214,13 +214,13 @@ RegistryCreateKey(
     _Out_ PHANDLE           Key
     )
 {
-    PWSTR               Buffer;
-    HANDLE              Root;
-    PWSTR               ChildPath;
-    PWSTR               ChildName;
-    PWSTR               Context;
-    HANDLE              Child;
-    NTSTATUS            status;
+    PWSTR                   Buffer;
+    HANDLE                  Root;
+    PWSTR                   ChildPath;
+    PWSTR                   ChildName;
+    PWSTR                   Context;
+    HANDLE                  Child;
+    NTSTATUS                status;
=20
     //
     // UNICODE_STRINGs are not guaranteed to have NUL terminated
@@ -317,7 +317,7 @@ RegistryOpenServiceKey(
=20
 NTSTATUS
 RegistryCreateServiceKey(
-    _Out_ PHANDLE       Key
+    _Out_ PHANDLE   Key
     )
 {
     return RegistryCreateKey(NULL, &RegistryPath, REG_OPTION_NON_VOLATILE=
, Key);
diff --git a/src/xenvif/registry=2Eh b/src/xenvif/registry=2Eh
index 8fa10b7=2E=2Eb77e4fb 100644
--- a/src/xenvif/registry=2Eh
+++ b/src/xenvif/registry=2Eh
@@ -110,8 +110,8 @@ RegistryCreateSubKey(
=20
 extern NTSTATUS
 RegistryDeleteSubKey(
-    _In_ HANDLE     Key,
-    _In_ PSTR       Name
+    _In_ HANDLE Key,
+    _In_ PSTR   Name
     );
=20
 extern NTSTATUS
@@ -130,15 +130,15 @@ RegistryEnumerateValues(
=20
 extern NTSTATUS
 RegistryDeleteValue(
-    _In_ HANDLE     Key,
-    _In_ PSTR       Name
+    _In_ HANDLE Key,
+    _In_ PSTR   Name
     );
=20
 extern NTSTATUS
 RegistryQueryDwordValue(
-    _In_ HANDLE         Key,
-    _In_ PSTR           Name,
-    _Out_ PULONG        Value
+    _In_ HANDLE     Key,
+    _In_ PSTR       Name,
+    _Out_ PULONG    Value
     );
=20
 extern NTSTATUS
@@ -150,9 +150,9 @@ RegistryQueryQwordValue(
=20
 extern NTSTATUS
 RegistryUpdateDwordValue(
-    _In_ HANDLE         Key,
-    _In_ PSTR           Name,
-    _In_ ULONG          Value
+    _In_ HANDLE Key,
+    _In_ PSTR   Name,
+    _In_ ULONG  Value
     );
=20
 extern NTSTATUS
@@ -165,18 +165,18 @@ RegistryQuerySzValue(
=20
 extern NTSTATUS
 RegistryQueryBinaryValue(
-    _In_ HANDLE         Key,
-    _In_ PSTR           Name,
-    _Outptr_ PVOID      *Buffer,
-    _Out_ PULONG        Length
+    _In_ HANDLE     Key,
+    _In_ PSTR       Name,
+    _Outptr_ PVOID  *Buffer,
+    _Out_ PULONG    Length
     );
=20
 extern NTSTATUS
 RegistryUpdateBinaryValue(
-    _In_ HANDLE         Key,
-    _In_ PSTR           Name,
-    _In_ PVOID          Buffer,
-    _In_ ULONG          Length
+    _In_ HANDLE Key,
+    _In_ PSTR   Name,
+    _In_ PVOID  Buffer,
+    _In_ ULONG  Length
     );
=20
 extern NTSTATUS
@@ -198,7 +198,7 @@ RegistryFreeSzValue(
=20
 extern VOID
 RegistryFreeBinaryValue(
-    _In_ PVOID          Buffer
+    _In_ PVOID  Buffer
     );
=20
 extern NTSTATUS
diff --git a/src/xenvif/settings=2Ec b/src/xenvif/settings=2Ec
index 1bf1dd8=2E=2Eb619da4 100644
--- a/src/xenvif/settings=2Ec
+++ b/src/xenvif/settings=2Ec
@@ -309,8 +309,8 @@ SettingsCopyInterfaceValue(
=20
 static NTSTATUS
 SettingsCopyInterface(
-    _In_ PCHAR          InterfacePath,
-    _In_ PCHAR          InterfacePrefix,
+    _In_ PSTR           InterfacePath,
+    _In_ PSTR           InterfacePrefix,
     _In_ PANSI_STRING   OldGuid,
     _In_ PANSI_STRING   NewGuid
     )
@@ -458,7 +458,7 @@ fail1:
=20
 static NTSTATUS
 SettingsCopy(
-    _In_ PCHAR          SubKeyName,
+    _In_ PSTR           SubKeyName,
     _In_ PANSI_STRING   OldGuid,
     _In_ PNET_LUID      OldLuid,
     _In_ PANSI_STRING   NewGuid,
@@ -530,9 +530,9 @@ fail1:
=20
 NTSTATUS
 SettingsSave(
-    _In_ PCHAR      SubKeyName,
-    _In_ PWCHAR     Alias,
-    _In_ PWCHAR     Description,
+    _In_ PSTR       SubKeyName,
+    _In_ PWSTR      Alias,
+    _In_ PWSTR      Description,
     _In_ LPGUID     InterfaceGuid,
     _In_ PNET_LUID  InterfaceLuid
     )
@@ -601,9 +601,9 @@ fail1:
=20
 NTSTATUS
 SettingsRestore(
-    _In_ PCHAR      SubKeyName,
-    _In_ PWCHAR     Alias,
-    _In_ PWCHAR     Description,
+    _In_ PSTR       SubKeyName,
+    _In_ PWSTR      Alias,
+    _In_ PWSTR      Description,
     _In_ LPGUID     InterfaceGuid,
     _In_ PNET_LUID  InterfaceLuid
     )
diff --git a/src/xenvif/settings=2Eh b/src/xenvif/settings=2Eh
index 4d88235=2E=2Ee3a340c 100644
--- a/src/xenvif/settings=2Eh
+++ b/src/xenvif/settings=2Eh
@@ -35,18 +35,18 @@
=20
 extern NTSTATUS
 SettingsSave(
-    _In_ PCHAR      SubKeyName,
-    _In_ PWCHAR     Alias,
-    _In_ PWCHAR     Description,
+    _In_ PSTR       SubKeyName,
+    _In_ PWSTR      Alias,
+    _In_ PWSTR      Description,
     _In_ LPGUID     InterfaceGuid,
     _In_ PNET_LUID  InterfaceLuid
     );
=20
 extern NTSTATUS
 SettingsRestore(
-    _In_ PCHAR      SubKeyName,
-    _In_ PWCHAR     Alias,
-    _In_ PWCHAR     Description,
+    _In_ PSTR       SubKeyName,
+    _In_ PWSTR      Alias,
+    _In_ PWSTR      Description,
     _In_ LPGUID     InterfaceGuid,
     _In_ PNET_LUID  InterfaceLuid
     );
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.cf.9aa1644e4eff5f5.1a12fa3cd40.964d99f6d9232580=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 12 10:23:54 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 12 Oct 2026 10:23:54 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1446092.1662089 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGDCE-0005Ry-HX; Mon, 12 Oct 2026 10:23:54 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1446092.1662089; Mon, 12 Oct 2026 10:23:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGDCE-0005R3-9O; Mon, 12 Oct 2026 10:23:54 +0000
Received: by outflank-mailman (input) for mailman id 1446092;
 Mon, 12 Oct 2026 10:23:53 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3cdda00080d7@swg.vates.tech>)
 id 1xGDCC-0005Ov-W6
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 10:23:53 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGDCC-00ECpK-CX
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 12:23:52 +0200
Received: from [10.42.69.2] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3cdda00080d7@swg.vates.tech>)
 id 6accb535-e002-0a2a0a5209dd-0a2a4502a988-14
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 12:23:52 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3cdda00080d7@swg.vates.tech>)
 id 6accb537-6ca4-0a2a45020019-b9ff1c23b483-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 12:23:52 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a12fa3cdda00080d7.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 12 Oct 2026 10:23:46 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id A9F48821E9;
 Mon, 12 Oct 2026 12:23:45 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=SiT8gC9wI8FTmpHvAkQPVIiTUftqOWg0bUIrxo9EXWo=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=tJ0yeUv6lnTTFozhM7gduYySsdSFVilSHYF8xx7EPFFkNnUpai9mdykZl8bT0M9Q/jTL05e1R
 umbOKyZfVx6qR3dQgrxFi5ssE1OuWweqDt8feT9zE6bS4TIvnvO8XBfOcIyaI3V7PSmwaNC2021
 1gQfDC5GeN0wjOimPWaGVjYBGG0gSIh5Zhqp8Qm5erAI3IKiKupUJKwcLljKr4MMVbMjeqPWv1k
 Lrlu1cZbcKR1gkjPEar7AbJD6Zku25NJzjpcoI0GNo0uX5QW9XpKm/SXQ83ilq/Sv4pLyEbSdHL
 JE8HM2gb5ibkvwBCN4nh0G1QvTZ8jv5rCNb3Qc1FGvzQ==
X-Zone-Loop: 304234c1d7b44f8ba6d63aff97512009ed784a3c7085
x-campaign-type: default
x-transaction-id: bd99bcad-22ff-4ff9-932b-52f891d27f00
x-swg-uid: 01-f7ef7981-a85f-45fa-9df4-c5dba7839e58
X-Mailer: Sweego
Message-ID:
 <1791800626.8631fc262581453bbf619ec5b2062170.1a12fa3cdda00080d7@vates.tech>
x-swg-bid: 1791800626.8631fc262581453bbf619ec5b2062170.1a12fa3cdda00080d7
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 02/21] xenvif: convert to SAL 2.0 annotations
Date: Mon, 12 Oct 2026 12:23:14 +0200
In-Reply-To: <1791800371.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@vates.tech>
References: <1791800371.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.ce.c1028a50f1fe5133.1a12fa3cc19.aaa300125be0af86=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791800626202
X-purgate-ID: tlsNG-720697/1791800632-67EBB10C-1D1F66F5/0/0
X-purgate-type: clean
X-purgate-size: 268063

---=Part.ce.c1028a50f1fe5133.1a12fa3cc19.aaa300125be0af86=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Mechanical pass, no functional change=2E

Annotations:
  IN/OUT/IN OUT        -> _In_/_Out_/_Inout_
  __in/__out/__inout   -> same, _opt_ variants preserved
  trailing OPTIONAL    -> folded into the annotation (_In_opt_ &c)
  _Out_ on a T **      -> _Outptr_
  __drv_*/__checkReturn-> _IRQL_requires_*/_Dispatch_type_/_Check_return_

The old macros expand to nothing, so these parameters carried no
information to the analyser=2E  OPTIONAL as a trailing keyword is not
understood either, whereas _opt_ tells it NULL must be tested before
dereference=2E  _Outptr_ states that the callee writes the pointer,
which bare _Out_ does not=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 include/range_set_interface=2Eh |  38 +--
 include/unplug_interface=2Eh    |  20 +-
 include/vif_interface=2Eh       | 158 +++++------
 src/xenvif/bus=2Ec              |  64 ++---
 src/xenvif/bus=2Eh              |   6 +-
 src/xenvif/checksum=2Ec         |  78 +++---
 src/xenvif/checksum=2Eh         |  50 ++--
 src/xenvif/controller=2Ec       | 102 +++----
 src/xenvif/controller=2Eh       |  52 ++--
 src/xenvif/driver=2Ec           |  38 +--
 src/xenvif/fdo=2Ec              | 504 +++++++++++++++++-----------------
 src/xenvif/fdo=2Eh              |  66 ++---
 src/xenvif/frontend=2Ec         | 252 ++++++++---------
 src/xenvif/frontend=2Eh         | 104 +++----
 src/xenvif/link=2Ec             |  14 +-
 src/xenvif/link=2Eh             |   6 +-
 src/xenvif/mac=2Ec              | 114 ++++----
 src/xenvif/mac=2Eh              |  70 ++---
 src/xenvif/mrsw=2Eh             |   6 +-
 src/xenvif/mutex=2Eh            |  10 +-
 src/xenvif/names=2Eh            |   8 +-
 src/xenvif/parse=2Ec            | 110 ++++----
 src/xenvif/parse=2Eh            |  20 +-
 src/xenvif/pdo=2Ec              | 414 ++++++++++++++--------------
 src/xenvif/pdo=2Eh              |  96 +++----
 src/xenvif/receiver=2Ec         | 408 +++++++++++++--------------
 src/xenvif/receiver=2Eh         |  64 ++---
 src/xenvif/settings=2Ec         |  78 +++---
 src/xenvif/settings=2Eh         |  20 +-
 src/xenvif/transmitter=2Ec      | 382 +++++++++++++-------------
 src/xenvif/transmitter=2Eh      |  80 +++---
 src/xenvif/vif=2Ec              | 224 +++++++--------
 src/xenvif/vif=2Eh              |  48 ++--
 33 files changed, 1852 insertions(+), 1852 deletions(-)

diff --git a/include/range_set_interface=2Eh b/include/range_set_interface=
=2Eh
index c45a161=2E=2Edde916b 100644
--- a/include/range_set_interface=2Eh
+++ b/include/range_set_interface=2Eh
@@ -54,7 +54,7 @@ typedef struct _XENBUS_RANGE_SET    XENBUS_RANGE_SET, *P=
XENBUS_RANGE_SET;
 */ =20
 typedef NTSTATUS
 (*XENBUS_RANGE_SET_ACQUIRE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_RANGE_SET_RELEASE
@@ -64,7 +64,7 @@ typedef NTSTATUS
 */ =20
 typedef VOID
 (*XENBUS_RANGE_SET_RELEASE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_RANGE_SET_CREATE
@@ -76,9 +76,9 @@ typedef VOID
 */ =20
 typedef NTSTATUS
 (*XENBUS_RANGE_SET_CREATE)(
-    IN  PINTERFACE          Interface,
-    IN  const CHAR          *Name,
-    OUT PXENBUS_RANGE_SET   *RangeSet
+    _In_ PINTERFACE             Interface,
+    _In_ const CHAR             *Name,
+    _Outptr_ PXENBUS_RANGE_SET  *RangeSet
     );
=20
 /*! \typedef XENBUS_RANGE_SET_PUT
@@ -91,10 +91,10 @@ typedef NTSTATUS
 */ =20
 typedef NTSTATUS
 (*XENBUS_RANGE_SET_PUT)(
-    IN  PINTERFACE          Interface,
-    IN  PXENBUS_RANGE_SET   RangeSet,
-    IN  LONGLONG            Start,
-    IN  ULONGLONG           Count
+    _In_ PINTERFACE         Interface,
+    _In_ PXENBUS_RANGE_SET  RangeSet,
+    _In_ LONGLONG           Start,
+    _In_ ULONGLONG          Count
     );
=20
 /*! \typedef XENBUS_RANGE_SET_POP
@@ -108,10 +108,10 @@ typedef NTSTATUS
 */ =20
 typedef NTSTATUS
 (*XENBUS_RANGE_SET_POP)(
-    IN  PINTERFACE          Interface,
-    IN  PXENBUS_RANGE_SET   RangeSet,
-    IN  ULONGLONG           Count,
-    OUT PLONGLONG           Start
+    _In_ PINTERFACE         Interface,
+    _In_ PXENBUS_RANGE_SET  RangeSet,
+    _In_ ULONGLONG          Count,
+    _Out_ PLONGLONG         Start
     );
=20
 /*! \typedef XENBUS_RANGE_SET_GET
@@ -124,10 +124,10 @@ typedef NTSTATUS
 */ =20
 typedef NTSTATUS
 (*XENBUS_RANGE_SET_GET)(
-    IN  PINTERFACE          Interface,
-    IN  PXENBUS_RANGE_SET   RangeSet,
-    IN  LONGLONG            Start,
-    IN  ULONGLONG           Count
+    _In_ PINTERFACE         Interface,
+    _In_ PXENBUS_RANGE_SET  RangeSet,
+    _In_ LONGLONG           Start,
+    _In_ ULONGLONG          Count
     );
=20
 /*! \typedef XENBUS_RANGE_SET_DESTROY
@@ -140,8 +140,8 @@ typedef NTSTATUS
 */ =20
 typedef VOID
 (*XENBUS_RANGE_SET_DESTROY)(
-    IN  PINTERFACE          Interface,
-    IN  PXENBUS_RANGE_SET   RangeSet
+    _In_ PINTERFACE         Interface,
+    _In_ PXENBUS_RANGE_SET  RangeSet
     );
=20
 // {EE7E78A2-6847-48C5-B123-BB012F0EABF4}
diff --git a/include/unplug_interface=2Eh b/include/unplug_interface=2Eh
index dad3afc=2E=2E5881ab6 100644
--- a/include/unplug_interface=2Eh
+++ b/include/unplug_interface=2Eh
@@ -48,7 +48,7 @@
 */ =20
 typedef NTSTATUS
 (*XENBUS_UNPLUG_ACQUIRE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_UNPLUG_RELEASE
@@ -58,7 +58,7 @@ typedef NTSTATUS
 */ =20
 typedef VOID
 (*XENBUS_UNPLUG_RELEASE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \enum _XENBUS_UNPLUG_DEVICE_TYPE
@@ -80,9 +80,9 @@ typedef enum _XENBUS_UNPLUG_DEVICE_TYPE {
 */ =20
 typedef VOID
 (*XENBUS_UNPLUG_REQUEST)(
-    IN  PINTERFACE                  Interface,
-    IN  XENBUS_UNPLUG_DEVICE_TYPE   Type,
-    IN  BOOLEAN                     Make
+    _In_ PINTERFACE                 Interface,
+    _In_ XENBUS_UNPLUG_DEVICE_TYPE  Type,
+    _In_ BOOLEAN                    Make
     );
=20
 /*! \typedef XENBUS_UNPLUG_IS_REQUESTED
@@ -95,8 +95,8 @@ typedef VOID
 */
 typedef BOOLEAN
 (*XENBUS_UNPLUG_IS_REQUESTED)(
-    IN  PINTERFACE                  Interface,
-    IN  XENBUS_UNPLUG_DEVICE_TYPE   Type
+    _In_ PINTERFACE                 Interface,
+    _In_ XENBUS_UNPLUG_DEVICE_TYPE  Type
     );
=20
 /*! \typedef XENBUS_UNPLUG_BOOT_EMULATED
@@ -106,7 +106,7 @@ typedef BOOLEAN
 */
 typedef BOOLEAN
 (*XENBUS_UNPLUG_BOOT_EMULATED)(
-    IN  PINTERFACE                  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_UNPLUG_REBOOT
@@ -117,8 +117,8 @@ typedef BOOLEAN
 */
 typedef VOID
 (*XENBUS_UNPLUG_REBOOT)(
-    IN  PINTERFACE                  Interface,
-    IN  PCHAR                       Module
+    _In_ PINTERFACE Interface,
+    _In_ PCHAR      Module
     );
=20
 // {73db6517-3d06-4937-989f-199b7501e229}
diff --git a/include/vif_interface=2Eh b/include/vif_interface=2Eh
index a63abba=2E=2E05d472e 100644
--- a/include/vif_interface=2Eh
+++ b/include/vif_interface=2Eh
@@ -461,7 +461,7 @@ union _XENVIF_VIF_CALLBACK_PARAMETERS_V10 {
 */ =20
 typedef NTSTATUS
 (*XENVIF_VIF_ACQUIRE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENVIF_VIF_RELEASE
@@ -471,21 +471,21 @@ typedef NTSTATUS
 */ =20
 typedef VOID
 (*XENVIF_VIF_RELEASE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 typedef VOID
 (*XENVIF_VIF_CALLBACK_V8)(
-    IN  PVOID                       Argument OPTIONAL,
-    IN  XENVIF_VIF_CALLBACK_TYPE    Type,
+    _In_opt_ PVOID                  Argument,
+    _In_ XENVIF_VIF_CALLBACK_TYPE   Type,
     =2E=2E=2E
     );
=20
 typedef VOID
 (*XENVIF_VIF_CALLBACK_V9)(
-    IN  PVOID                                       Argument OPTIONAL,
-    IN  XENVIF_VIF_CALLBACK_TYPE                    Type,
-    IN  union _XENVIF_VIF_CALLBACK_PARAMETERS_V9   *Parameters
+    _In_opt_ PVOID                                  Argument,
+    _In_ XENVIF_VIF_CALLBACK_TYPE                   Type,
+    _In_ union _XENVIF_VIF_CALLBACK_PARAMETERS_V9   *Parameters
     );
=20
 typedef union _XENVIF_VIF_CALLBACK_PARAMETERS_V10 XENVIF_VIF_CALLBACK_PAR=
AMETERS, *PXENVIF_VIF_CALLBACK_PARAMETERS;
@@ -499,23 +499,23 @@ typedef union _XENVIF_VIF_CALLBACK_PARAMETERS_V10 XE=
NVIF_VIF_CALLBACK_PARAMETERS
 */
 typedef VOID
 (*XENVIF_VIF_CALLBACK)(
-    IN  PVOID                           Argument OPTIONAL,
-    IN  XENVIF_VIF_CALLBACK_TYPE        Type,
-    IN  PXENVIF_VIF_CALLBACK_PARAMETERS Parameters
+    _In_opt_ PVOID                          Argument,
+    _In_ XENVIF_VIF_CALLBACK_TYPE           Type,
+    _In_ PXENVIF_VIF_CALLBACK_PARAMETERS    Parameters
     );
=20
 typedef NTSTATUS
 (*XENVIF_VIF_ENABLE_V8)(
-    IN  PINTERFACE              Interface,
-    IN  XENVIF_VIF_CALLBACK_V8  Callback,
-    IN  PVOID                   Argument OPTIONAL
+    _In_ PINTERFACE             Interface,
+    _In_ XENVIF_VIF_CALLBACK_V8 Callback,
+    _In_opt_ PVOID              Argument
     );
=20
 typedef NTSTATUS
 (*XENVIF_VIF_ENABLE_V9)(
-    IN  PINTERFACE              Interface,
-    IN  XENVIF_VIF_CALLBACK_V9  Callback,
-    IN  PVOID                   Argument OPTIONAL
+    _In_ PINTERFACE             Interface,
+    _In_ XENVIF_VIF_CALLBACK_V9 Callback,
+    _In_opt_ PVOID              Argument
     );
=20
 /*! \typedef XENVIF_VIF_ENABLE
@@ -530,9 +530,9 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENVIF_VIF_ENABLE)(
-    IN  PINTERFACE          Interface,
-    IN  XENVIF_VIF_CALLBACK Callback,
-    IN  PVOID               Argument OPTIONAL
+    _In_ PINTERFACE             Interface,
+    _In_ XENVIF_VIF_CALLBACK    Callback,
+    _In_opt_ PVOID              Argument
     );
=20
 /*! \typedef XENVIF_VIF_DISABLE
@@ -545,7 +545,7 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENVIF_VIF_DISABLE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENVIF_VIF_QUERY_STATISTIC
@@ -562,9 +562,9 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENVIF_VIF_QUERY_STATISTIC)(
-    IN  PINTERFACE              Interface,
-    IN  XENVIF_VIF_STATISTIC    Index,
-    OUT PULONGLONG              Value
+    _In_ PINTERFACE             Interface,
+    _In_ XENVIF_VIF_STATISTIC   Index,
+    _Out_ PULONGLONG            Value
     );
=20
 /*! \typedef XENVIF_VIF_QUERY_RING_COUNT
@@ -576,8 +576,8 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENVIF_VIF_QUERY_RING_COUNT)(
-    IN  PINTERFACE  Interface,
-    OUT PULONG      Count
+    _In_ PINTERFACE Interface,
+    _Out_ PULONG    Count
     );
=20
 /*! \typedef XENVIF_VIF_UPDATE_HASH_MAPPING
@@ -591,9 +591,9 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENVIF_VIF_UPDATE_HASH_MAPPING)(
-    IN  PINTERFACE          Interface,
-    IN  PPROCESSOR_NUMBER   Mapping,
-    IN  ULONG               Size
+    _In_ PINTERFACE         Interface,
+    _In_ PPROCESSOR_NUMBER  Mapping,
+    _In_ ULONG              Size
     );
=20
 /*! \typedef XENVIF_VIF_RECEIVER_RETURN_PACKET
@@ -605,8 +605,8 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENVIF_VIF_RECEIVER_RETURN_PACKET)(
-    IN  PINTERFACE  Interface,
-    IN  PVOID       Cookie
+    _In_ PINTERFACE Interface,
+    _In_ PVOID      Cookie
     );
=20
 /*! \typedef XENVIF_VIF_TRANSMITTER_QUEUE_PACKET
@@ -625,16 +625,16 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENVIF_VIF_TRANSMITTER_QUEUE_PACKET)(
-    IN  PINTERFACE                  Interface,
-    IN  PMDL                        Mdl,
-    IN  ULONG                       Offset,
-    IN  ULONG                       Length,
-    IN  XENVIF_VIF_OFFLOAD_OPTIONS  OffloadOptions,
-    IN  USHORT                      MaximumSegmentSize,
-    IN  USHORT                      TagControlInformation,
-    IN  PXENVIF_PACKET_HASH         Hash,
-    IN  BOOLEAN                     More,
-    IN  PVOID                       Cookie
+    _In_ PINTERFACE                 Interface,
+    _In_ PMDL                       Mdl,
+    _In_ ULONG                      Offset,
+    _In_ ULONG                      Length,
+    _In_ XENVIF_VIF_OFFLOAD_OPTIONS OffloadOptions,
+    _In_ USHORT                     MaximumSegmentSize,
+    _In_ USHORT                     TagControlInformation,
+    _In_ PXENVIF_PACKET_HASH        Hash,
+    _In_ BOOLEAN                    More,
+    _In_ PVOID                      Cookie
     );
=20
 /*! \typedef XENVIF_VIF_TRANSMITTER_QUERY_OFFLOAD_OPTIONS
@@ -646,8 +646,8 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENVIF_VIF_TRANSMITTER_QUERY_OFFLOAD_OPTIONS)(
-    IN  PINTERFACE                  Interface,
-    OUT PXENVIF_VIF_OFFLOAD_OPTIONS Options
+    _In_ PINTERFACE                     Interface,
+    _Out_ PXENVIF_VIF_OFFLOAD_OPTIONS   Options
     );
=20
 /*! \typedef XENVIF_VIF_RECEIVER_SET_OFFLOAD_OPTIONS
@@ -659,8 +659,8 @@ typedef VOID
 */
 typedef VOID
 (*XENVIF_VIF_RECEIVER_SET_OFFLOAD_OPTIONS)(
-    IN  PINTERFACE                  Interface,
-    IN  XENVIF_VIF_OFFLOAD_OPTIONS  Options
+    _In_ PINTERFACE                 Interface,
+    _In_ XENVIF_VIF_OFFLOAD_OPTIONS Options
     );
=20
 /*! \typedef XENVIF_VIF_RECEIVER_SET_BACKFILL_SIZE
@@ -672,8 +672,8 @@ typedef VOID
 */
 typedef VOID
 (*XENVIF_VIF_RECEIVER_SET_BACKFILL_SIZE)(
-    IN  PINTERFACE  Interface,
-    IN  ULONG       Size
+    _In_ PINTERFACE Interface,
+    _In_ ULONG      Size
     );
=20
 /*! \typedef XENVIF_VIF_TRANSMITTER_QUERY_LARGE_PACKET_SIZE
@@ -686,9 +686,9 @@ typedef VOID
 */=20
 typedef VOID
 (*XENVIF_VIF_TRANSMITTER_QUERY_LARGE_PACKET_SIZE)(
-    IN  PINTERFACE  Interface,
-    IN  UCHAR       Version,
-    OUT PULONG      Size
+    _In_ PINTERFACE Interface,
+    _In_ UCHAR      Version,
+    _Out_ PULONG    Size
     );
=20
 /*! \typedef XENVIF_VIF_TRANSMITTER_QUERY_RING_SIZE
@@ -700,8 +700,8 @@ typedef VOID
 */
 typedef VOID
 (*XENVIF_VIF_TRANSMITTER_QUERY_RING_SIZE)(
-    IN  PINTERFACE  Interface,
-    OUT PULONG      Size
+    _In_ PINTERFACE Interface,
+    _Out_ PULONG    Size
     );
=20
 /*! \typedef XENVIF_VIF_RECEIVER_QUERY_RING_SIZE
@@ -713,8 +713,8 @@ typedef VOID
 */
 typedef VOID
 (*XENVIF_VIF_RECEIVER_QUERY_RING_SIZE)(
-    IN  PINTERFACE  Interface,
-    OUT PULONG      Size
+    _In_ PINTERFACE Interface,
+    _Out_ PULONG    Size
     );
=20
 /*! \typedef XENVIF_VIF_RECEIVER_SET_HASH_ALGORITHM
@@ -726,8 +726,8 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENVIF_VIF_RECEIVER_SET_HASH_ALGORITHM)(
-    IN  PINTERFACE                      Interface,
-    IN  XENVIF_PACKET_HASH_ALGORITHM    Algorithm
+    _In_ PINTERFACE                     Interface,
+    _In_ XENVIF_PACKET_HASH_ALGORITHM   Algorithm
     );
=20
 /*! \typedef XENVIF_VIF_RECEIVER_QUERY_HASH_CAPABILITIES
@@ -741,7 +741,7 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENVIF_VIF_RECEIVER_QUERY_HASH_CAPABILITIES)(
-    IN  PINTERFACE  Interface,
+    _In_ PINTERFACE Interface,
     =2E=2E=2E
     );
=20
@@ -757,7 +757,7 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENVIF_VIF_RECEIVER_UPDATE_HASH_PARAMETERS)(
-    IN  PINTERFACE  Interface,
+    _In_ PINTERFACE Interface,
     =2E=2E=2E
     );
=20
@@ -773,10 +773,10 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENVIF_VIF_MAC_QUERY_STATE)(
-    IN  PINTERFACE                  Interface,
-    OUT PNET_IF_MEDIA_CONNECT_STATE MediaConnectState OPTIONAL,
-    OUT PULONG64                    LinkSpeed OPTIONAL,
-    OUT PNET_IF_MEDIA_DUPLEX_STATE  MediaDuplexState OPTIONAL
+    _In_ PINTERFACE                         Interface,
+    _Out_opt_ PNET_IF_MEDIA_CONNECT_STATE   MediaConnectState,
+    _Out_opt_ PULONG64                      LinkSpeed,
+    _Out_opt_ PNET_IF_MEDIA_DUPLEX_STATE    MediaDuplexState
     );
=20
 /*! \typedef XENVIF_VIF_MAC_QUERY_MAXIMUM_FRAME_SIZE
@@ -788,8 +788,8 @@ typedef VOID
 */
 typedef VOID
 (*XENVIF_VIF_MAC_QUERY_MAXIMUM_FRAME_SIZE)(
-    IN  PINTERFACE  Interface,
-    OUT PULONG      Size
+    _In_ PINTERFACE Interface,
+    _Out_ PULONG    Size
     );
=20
 /*! \typedef XENVIF_VIF_MAC_QUERY_PERMANENT_ADDRESS
@@ -800,8 +800,8 @@ typedef VOID
 */
 typedef VOID
 (*XENVIF_VIF_MAC_QUERY_PERMANENT_ADDRESS)(
-    IN  PINTERFACE          Interface,
-    OUT PETHERNET_ADDRESS   Address
+    _In_ PINTERFACE         Interface,
+    _Out_ PETHERNET_ADDRESS Address
     );
=20
 /*! \typedef XENVIF_VIF_MAC_QUERY_CURRENT_ADDRESS
@@ -816,8 +816,8 @@ typedef VOID
 */
 typedef VOID
 (*XENVIF_VIF_MAC_QUERY_CURRENT_ADDRESS)(
-    IN  PINTERFACE          Interface,
-    OUT PETHERNET_ADDRESS   Address
+    _In_ PINTERFACE         Interface,
+    _Out_ PETHERNET_ADDRESS Address
     );
=20
 /*! \typedef XENVIF_VIF_MAC_QUERY_MULTICAST_ADDRESSES
@@ -833,9 +833,9 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENVIF_VIF_MAC_QUERY_MULTICAST_ADDRESSES)(
-    IN      PINTERFACE          Interface,
-    OUT     PETHERNET_ADDRESS   Address OPTIONAL,
-    IN OUT  PULONG              Count
+    _In_ PINTERFACE             Interface,
+    _Out_opt_ PETHERNET_ADDRESS Address,
+    _Inout_ PULONG              Count
     );
=20
 /*! \typedef XENVIF_VIF_MAC_SET_MULTICAST_ADDRESSES
@@ -850,9 +850,9 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENVIF_VIF_MAC_SET_MULTICAST_ADDRESSES)(
-    IN  PINTERFACE          Interface,
-    IN  PETHERNET_ADDRESS   Address OPTIONAL,
-    IN  ULONG               Count
+    _In_ PINTERFACE             Interface,
+    _In_opt_ PETHERNET_ADDRESS  Address,
+    _In_ ULONG                  Count
     );
=20
 /*! \typedef XENVIF_VIF_MAC_SET_FILTER_LEVEL
@@ -865,9 +865,9 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENVIF_VIF_MAC_SET_FILTER_LEVEL)(
-    IN  PINTERFACE              Interface,
-    IN  ETHERNET_ADDRESS_TYPE   Type,
-    IN  XENVIF_MAC_FILTER_LEVEL Level
+    _In_ PINTERFACE                 Interface,
+    _In_ ETHERNET_ADDRESS_TYPE      Type,
+    _In_ XENVIF_MAC_FILTER_LEVEL    Level
     );
=20
 /*! \typedef XENVIF_VIF_MAC_QUERY_FILTER_LEVEL
@@ -880,9 +880,9 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENVIF_VIF_MAC_QUERY_FILTER_LEVEL)(
-    IN  PINTERFACE                  Interface,
-    IN  ETHERNET_ADDRESS_TYPE       Type,
-    OUT PXENVIF_MAC_FILTER_LEVEL    Level
+    _In_ PINTERFACE                 Interface,
+    _In_ ETHERNET_ADDRESS_TYPE      Type,
+    _Out_ PXENVIF_MAC_FILTER_LEVEL  Level
     );
=20
 // {76F279CD-CA11-418B-92E8-C57F77DE0E2E}
diff --git a/src/xenvif/bus=2Ec b/src/xenvif/bus=2Ec
index 0c91148=2E=2E4017e7c 100644
--- a/src/xenvif/bus=2Ec
+++ b/src/xenvif/bus=2Ec
@@ -51,7 +51,7 @@ typedef struct _XENVIF_BUS_CONTEXT {
=20
 static FORCEINLINE PVOID
 __BusAllocate(
-    IN  ULONG   Length
+    _In_ ULONG  Length
     )
 {
     return __AllocatePoolWithTag(NonPagedPool, Length, BUS_TAG);
@@ -59,7 +59,7 @@ __BusAllocate(
=20
 static FORCEINLINE VOID
 __BusFree(
-    IN  PVOID   Buffer
+    _In_ PVOID  Buffer
     )
 {
     __FreePoolWithTag(Buffer, BUS_TAG);
@@ -67,7 +67,7 @@ __BusFree(
=20
 static VOID
 BusReference(
-    IN  PVOID           _Context
+    _In_ PVOID          _Context
     )
 {
     PXENVIF_BUS_CONTEXT Context =3D _Context;
@@ -77,7 +77,7 @@ BusReference(
=20
 static VOID
 BusDereference(
-    IN  PVOID           _Context
+    _In_ PVOID          _Context
     )
 {
     PXENVIF_BUS_CONTEXT Context =3D _Context;
@@ -87,14 +87,14 @@ BusDereference(
 }
=20
 static
-__drv_functionClass(TRANSLATE_BUS_ADDRESS)
+_Function_class_(TRANSLATE_BUS_ADDRESS)
 BOOLEAN
 BusTranslateAddress(
-    IN      PVOID               _Context,
-    IN      PHYSICAL_ADDRESS    BusAddress,
-    IN      ULONG               Length,
-    IN OUT  PULONG              AddressSpace,
-    OUT     PPHYSICAL_ADDRESS   TranslatedAddress
+    _In_ PVOID                  _Context,
+    _In_ PHYSICAL_ADDRESS       BusAddress,
+    _In_ ULONG                  Length,
+    _Inout_ PULONG              AddressSpace,
+    _Outptr_ PPHYSICAL_ADDRESS  TranslatedAddress
     )
 {
     PXENVIF_BUS_CONTEXT         Context =3D _Context;
@@ -107,15 +107,15 @@ BusTranslateAddress(
 }
=20
 static
-__drv_functionClass(GET_DMA_ADAPTER)
+_Function_class_(GET_DMA_ADAPTER)
 PDMA_ADAPTER
 BusGetDmaAdapter(
-    IN  PVOID               _Context,
-    IN  PDEVICE_DESCRIPTION DeviceDescriptor,
-    OUT PULONG              NumberOfMapRegisters
+    _In_ PVOID                  _Context,
+    _In_ PDEVICE_DESCRIPTION    DeviceDescriptor,
+    _Out_ PULONG                NumberOfMapRegisters
     )
 {
-    PXENVIF_BUS_CONTEXT     Context =3D _Context;
+    PXENVIF_BUS_CONTEXT         Context =3D _Context;
=20
     return PdoGetDmaAdapter(Context->Pdo,
                             DeviceDescriptor,
@@ -123,14 +123,14 @@ BusGetDmaAdapter(
 }
=20
 static
-__drv_functionClass(GET_SET_DEVICE_DATA)
+_Function_class_(GET_SET_DEVICE_DATA)
 ULONG
 BusSetData(
-    IN  PVOID           _Context,
-    IN  ULONG           DataType,
-    IN  PVOID           Buffer,
-    IN  ULONG           Offset,
-    IN  ULONG           Length
+    _In_ PVOID          _Context,
+    _In_ ULONG          DataType,
+    _In_ PVOID          Buffer,
+    _In_ ULONG          Offset,
+    _In_ ULONG          Length
     )
 {
     PXENVIF_BUS_CONTEXT Context =3D _Context;
@@ -143,14 +143,14 @@ BusSetData(
 }
=20
 static
-__drv_functionClass(GET_SET_DEVICE_DATA)
+_Function_class_(GET_SET_DEVICE_DATA)
 ULONG
 BusGetData(
-    IN  PVOID           _Context,
-    IN  ULONG           DataType,
-    IN  PVOID           Buffer,
-    IN  ULONG           Offset,
-    IN  ULONG           Length
+    _In_ PVOID          _Context,
+    _In_ ULONG          DataType,
+    _In_ PVOID          Buffer,
+    _In_ ULONG          Offset,
+    _In_ ULONG          Length
     )
 {
     PXENVIF_BUS_CONTEXT Context =3D _Context;
@@ -164,12 +164,12 @@ BusGetData(
=20
 NTSTATUS
 BusInitialize(
-    IN  PXENVIF_PDO             Pdo,
-    OUT PBUS_INTERFACE_STANDARD Interface
+    _In_ PXENVIF_PDO                Pdo,
+    _Out_ PBUS_INTERFACE_STANDARD   Interface
     )
 {
-    PXENVIF_BUS_CONTEXT         Context;
-    NTSTATUS                    status;
+    PXENVIF_BUS_CONTEXT             Context;
+    NTSTATUS                        status;
=20
     Trace("=3D=3D=3D=3D>\n");
=20
@@ -203,7 +203,7 @@ fail1:
=20
 VOID
 BusTeardown(
-    IN OUT  PBUS_INTERFACE_STANDARD Interface
+    _Inout_ PBUS_INTERFACE_STANDARD Interface
     )
 {
     PXENVIF_BUS_CONTEXT             Context =3D Interface->Context;
diff --git a/src/xenvif/bus=2Eh b/src/xenvif/bus=2Eh
index e8dc5e5=2E=2Eaa9d8e0 100644
--- a/src/xenvif/bus=2Eh
+++ b/src/xenvif/bus=2Eh
@@ -40,13 +40,13 @@
=20
 extern NTSTATUS
 BusInitialize(
-    IN  PXENVIF_PDO             Pdo,
-    OUT PBUS_INTERFACE_STANDARD Interface
+    _In_ PXENVIF_PDO                Pdo,
+    _Out_ PBUS_INTERFACE_STANDARD   Interface
     );
=20
 extern VOID
 BusTeardown(
-    IN OUT  PBUS_INTERFACE_STANDARD Interface
+    _Inout_ PBUS_INTERFACE_STANDARD Interface
     );
=20
 #endif  // _XENVIF_BUS_H
diff --git a/src/xenvif/checksum=2Ec b/src/xenvif/checksum=2Ec
index a7181c6=2E=2Eeb2ed8d 100644
--- a/src/xenvif/checksum=2Ec
+++ b/src/xenvif/checksum=2Ec
@@ -47,9 +47,9 @@
 #if !defined(_M_X64)
 VOID
 AccumulateChecksum(
-    IN OUT  PULONG  Accumulator,
-    IN      PUCHAR  BaseVa,
-    IN      ULONG   ByteCount
+    _Inout_ PULONG  Accumulator,
+    _In_ PUCHAR     BaseVa,
+    _In_ ULONG      ByteCount
     )
 {
     ULONG           Current;
@@ -76,8 +76,8 @@ AccumulateChecksum(
=20
 BOOLEAN
 ChecksumVerify(
-    IN  USHORT  Calculated,
-    IN  USHORT  Embedded
+    _In_ USHORT Calculated,
+    _In_ USHORT Embedded
     )
 {
     ULONG       Accumulator =3D ~Calculated;
@@ -96,10 +96,10 @@ ChecksumVerify(
=20
 static FORCEINLINE USHORT
 __ChecksumIpVersion4PseudoHeader(
-    IN  PIPV4_ADDRESS   SourceAddress,
-    IN  PIPV4_ADDRESS   DestinationAddress,
-    IN  USHORT          Length,
-    IN  UCHAR           Protocol
+    _In_ PIPV4_ADDRESS  SourceAddress,
+    _In_ PIPV4_ADDRESS  DestinationAddress,
+    _In_ USHORT         Length,
+    _In_ UCHAR          Protocol
     )
 {
     IPV4_PSEUDO_HEADER  Header;
@@ -123,10 +123,10 @@ __ChecksumIpVersion4PseudoHeader(
=20
 USHORT
 ChecksumIpVersion4PseudoHeader(
-    IN  PIPV4_ADDRESS   SourceAddress,
-    IN  PIPV4_ADDRESS   DestinationAddress,
-    IN  USHORT          Length,
-    IN  UCHAR           Protocol
+    _In_ PIPV4_ADDRESS  SourceAddress,
+    _In_ PIPV4_ADDRESS  DestinationAddress,
+    _In_ USHORT         Length,
+    _In_ UCHAR          Protocol
     )
 {
     return __ChecksumIpVersion4PseudoHeader(SourceAddress,
@@ -137,10 +137,10 @@ ChecksumIpVersion4PseudoHeader(
=20
 static FORCEINLINE USHORT
 __ChecksumIpVersion6PseudoHeader(
-    IN  PIPV6_ADDRESS   SourceAddress,
-    IN  PIPV6_ADDRESS   DestinationAddress,
-    IN  USHORT          Length,
-    IN  UCHAR           Protocol
+    _In_ PIPV6_ADDRESS  SourceAddress,
+    _In_ PIPV6_ADDRESS  DestinationAddress,
+    _In_ USHORT         Length,
+    _In_ UCHAR          Protocol
     )
 {
     IPV6_PSEUDO_HEADER  Header;
@@ -164,10 +164,10 @@ __ChecksumIpVersion6PseudoHeader(
=20
 USHORT
 ChecksumIpVersion6PseudoHeader(
-    IN  PIPV6_ADDRESS   SourceAddress,
-    IN  PIPV6_ADDRESS   DestinationAddress,
-    IN  USHORT          Length,
-    IN  UCHAR           Protocol
+    _In_ PIPV6_ADDRESS  SourceAddress,
+    _In_ PIPV6_ADDRESS  DestinationAddress,
+    _In_ USHORT         Length,
+    _In_ UCHAR          Protocol
     )
 {
     return __ChecksumIpVersion6PseudoHeader(SourceAddress,
@@ -178,13 +178,13 @@ ChecksumIpVersion6PseudoHeader(
=20
 USHORT
 ChecksumPseudoHeader(
-    IN  PUCHAR              StartVa,
-    IN  PXENVIF_PACKET_INFO Info
+    _In_ PUCHAR                 StartVa,
+    _In_ PXENVIF_PACKET_INFO    Info
     )
 {
-    PIP_HEADER              Header;
-    UCHAR                   Protocol;
-    USHORT                  Checksum;
+    PIP_HEADER                  Header;
+    UCHAR                       Protocol;
+    USHORT                      Checksum;
=20
     ASSERT(Info->IpHeader=2ELength !=3D 0);
     Header =3D (PIP_HEADER)(StartVa + Info->IpHeader=2EOffset);
@@ -226,13 +226,13 @@ ChecksumPseudoHeader(
=20
 USHORT
 ChecksumIpVersion4Header(
-    IN  PUCHAR              StartVa,
-    IN  PXENVIF_PACKET_INFO Info
+    _In_ PUCHAR                 StartVa,
+    _In_ PXENVIF_PACKET_INFO    Info
     )
 {
-    ULONG                   Accumulator;
-    PIPV4_HEADER            Header;
-    USHORT                  Saved;
+    ULONG                       Accumulator;
+    PIPV4_HEADER                Header;
+    USHORT                      Saved;
=20
     ASSERT(Info->IpHeader=2ELength !=3D 0);
     Header =3D (PIPV4_HEADER)(StartVa + Info->IpHeader=2EOffset);
@@ -262,10 +262,10 @@ ChecksumIpVersion4Header(
=20
 USHORT
 ChecksumTcpPacket(
-    IN  PUCHAR                  StartVa,
-    IN  PXENVIF_PACKET_INFO     Info,
-    IN  USHORT                  PseudoHeaderChecksum,
-    IN  PXENVIF_PACKET_PAYLOAD  Payload
+    _In_ PUCHAR                 StartVa,
+    _In_ PXENVIF_PACKET_INFO    Info,
+    _In_ USHORT                 PseudoHeaderChecksum,
+    _In_ PXENVIF_PACKET_PAYLOAD Payload
     )
 {
     ULONG                       Accumulator;
@@ -347,10 +347,10 @@ ChecksumTcpPacket(
=20
 USHORT
 ChecksumUdpPacket(
-    IN  PUCHAR                  StartVa,
-    IN  PXENVIF_PACKET_INFO     Info,
-    IN  USHORT                  PseudoHeaderChecksum,
-    IN  PXENVIF_PACKET_PAYLOAD  Payload
+    _In_ PUCHAR                 StartVa,
+    _In_ PXENVIF_PACKET_INFO    Info,
+    _In_ USHORT                 PseudoHeaderChecksum,
+    _In_ PXENVIF_PACKET_PAYLOAD Payload
     )
 {
     ULONG                       Accumulator;
diff --git a/src/xenvif/checksum=2Eh b/src/xenvif/checksum=2Eh
index ec9c384=2E=2E5cd23a8 100644
--- a/src/xenvif/checksum=2Eh
+++ b/src/xenvif/checksum=2Eh
@@ -37,59 +37,59 @@
=20
 extern VOID
 AccumulateChecksum(
-    IN OUT  PULONG  Accumulator,
-    IN      PVOID   MappedSystemVa,
-    IN      ULONG   ByteCount
+    _Inout_ PULONG  Accumulator,
+    _In_ PVOID      MappedSystemVa,
+    _In_ ULONG      ByteCount
     );
=20
 extern USHORT
 ChecksumIpVersion4Header(
-    IN  PUCHAR              StartVa,
-    IN  PXENVIF_PACKET_INFO Info
+    _In_ PUCHAR                 StartVa,
+    _In_ PXENVIF_PACKET_INFO    Info
     );
=20
 extern USHORT
 ChecksumIpVersion4PseudoHeader(
-    IN  PIPV4_ADDRESS   SourceAddress,
-    IN  PIPV4_ADDRESS   DestinationAddress,
-    IN  USHORT          Length,
-    IN  UCHAR           Protocol
+    _In_ PIPV4_ADDRESS  SourceAddress,
+    _In_ PIPV4_ADDRESS  DestinationAddress,
+    _In_ USHORT         Length,
+    _In_ UCHAR          Protocol
     );
=20
 extern USHORT
 ChecksumIpVersion6PseudoHeader(
-    IN  PIPV6_ADDRESS   SourceAddress,
-    IN  PIPV6_ADDRESS   DestinationAddress,
-    IN  USHORT          Length,
-    IN  UCHAR           Protocol
+    _In_ PIPV6_ADDRESS  SourceAddress,
+    _In_ PIPV6_ADDRESS  DestinationAddress,
+    _In_ USHORT         Length,
+    _In_ UCHAR          Protocol
     );
=20
 extern USHORT
 ChecksumPseudoHeader(
-    IN  PUCHAR              StartVa,
-    IN  PXENVIF_PACKET_INFO Info
+    _In_ PUCHAR                 StartVa,
+    _In_ PXENVIF_PACKET_INFO    Info
     );
=20
 extern USHORT
 ChecksumTcpPacket(
-    IN  PUCHAR                  StartVa,
-    IN  PXENVIF_PACKET_INFO     Info,
-    IN  USHORT                  PseudoHeaderChecksum,
-    IN  PXENVIF_PACKET_PAYLOAD  Payload
+    _In_ PUCHAR                 StartVa,
+    _In_ PXENVIF_PACKET_INFO    Info,
+    _In_ USHORT                 PseudoHeaderChecksum,
+    _In_ PXENVIF_PACKET_PAYLOAD Payload
     );
=20
 extern USHORT
 ChecksumUdpPacket(
-    IN  PUCHAR                  StartVa,
-    IN  PXENVIF_PACKET_INFO     Info,
-    IN  USHORT                  PseudoHeaderChecksum,
-    IN  PXENVIF_PACKET_PAYLOAD  Payload
+    _In_ PUCHAR                 StartVa,
+    _In_ PXENVIF_PACKET_INFO    Info,
+    _In_ USHORT                 PseudoHeaderChecksum,
+    _In_ PXENVIF_PACKET_PAYLOAD Payload
     );
=20
 extern BOOLEAN
 ChecksumVerify(
-    IN  USHORT  Calculated,
-    IN  USHORT  Embedded
+    _In_ USHORT Calculated,
+    _In_ USHORT Embedded
     );
=20
 #endif  // _XENVIF_CHECKSUM_H
diff --git a/src/xenvif/controller=2Ec b/src/xenvif/controller=2Ec
index dac6952=2E=2E4accb49 100644
--- a/src/xenvif/controller=2Ec
+++ b/src/xenvif/controller=2Ec
@@ -56,7 +56,7 @@
 extern ULONG
 NTAPI
 RtlRandomEx (
-    __inout PULONG Seed
+    _Inout_ PULONG  Seed
     );
=20
 #define MAXNAMELEN  128
@@ -87,7 +87,7 @@ struct _XENVIF_CONTROLLER {
=20
 static FORCEINLINE PVOID
 __ControllerAllocate(
-    IN  ULONG   Length
+    _In_ ULONG  Length
     )
 {
     return __AllocatePoolWithTag(NonPagedPool, Length, XENVIF_CONTROLLER_=
TAG);
@@ -95,16 +95,16 @@ __ControllerAllocate(
=20
 static FORCEINLINE VOID
 __ControllerFree(
-    IN  PVOID   Buffer
+    _In_ PVOID  Buffer
     )
 {
     __FreePoolWithTag(Buffer, XENVIF_CONTROLLER_TAG);
 }
=20
 static FORCEINLINE VOID
-__drv_requiresIRQL(DISPATCH_LEVEL)
+_IRQL_requires_(DISPATCH_LEVEL)
 __ControllerAcquireLock(
-    IN  PXENVIF_CONTROLLER  Controller
+    _In_ PXENVIF_CONTROLLER Controller
     )
 {
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, DISPATCH_LEVEL);
@@ -113,9 +113,9 @@ __ControllerAcquireLock(
 }
=20
 static FORCEINLINE VOID
-__drv_requiresIRQL(DISPATCH_LEVEL)
+_IRQL_requires_(DISPATCH_LEVEL)
 __ControllerReleaseLock(
-    IN  PXENVIF_CONTROLLER  Controller
+    _In_ PXENVIF_CONTROLLER Controller
     )
 {
     KeReleaseSpinLockFromDpcLevel(&Controller->Lock);
@@ -125,7 +125,7 @@ _Acquires_nonreentrant_lock_(Controller)
 _IRQL_requires_(DISPATCH_LEVEL)
 static VOID
 ControllerAcquireLock(
-    IN  PXENVIF_CONTROLLER  Controller
+    _In_ PXENVIF_CONTROLLER Controller
     )
 {
     __ControllerAcquireLock(Controller);
@@ -135,7 +135,7 @@ _Requires_lock_held_(Controller)
 _IRQL_requires_(DISPATCH_LEVEL)
 static VOID
 ControllerReleaseLock(
-    IN  PXENVIF_CONTROLLER  Controller
+    _In_ PXENVIF_CONTROLLER Controller
     )
 {
     __ControllerReleaseLock(Controller);
@@ -144,7 +144,7 @@ ControllerReleaseLock(
 _IRQL_requires_min_(DISPATCH_LEVEL)
 static FORCEINLINE VOID
 __ControllerSend(
-    IN  PXENVIF_CONTROLLER  Controller
+    _In_ PXENVIF_CONTROLLER Controller
     )
 {
     (VOID) XENBUS_EVTCHN(Send,
@@ -154,7 +154,7 @@ __ControllerSend(
=20
 VOID
 ControllerPoll(
-    IN  PXENVIF_CONTROLLER          Controller
+    _In_ PXENVIF_CONTROLLER         Controller
     )
 {
     RING_IDX                        rsp_prod;
@@ -185,11 +185,11 @@ ControllerPoll(
 _IRQL_requires_min_(DISPATCH_LEVEL)
 static NTSTATUS
 ControllerPutRequest(
-    IN  PXENVIF_CONTROLLER          Controller,
-    IN  USHORT                      Type,
-    IN  ULONG                       Data0,
-    IN  ULONG                       Data1,
-    IN  ULONG                       Data2
+    _In_ PXENVIF_CONTROLLER         Controller,
+    _In_ USHORT                     Type,
+    _In_ ULONG                      Data0,
+    _In_ ULONG                      Data1,
+    _In_ ULONG                      Data2
     )
 {
     RING_IDX                        req_prod;
@@ -259,8 +259,8 @@ fail1:
 _IRQL_requires_(DISPATCH_LEVEL)
 static NTSTATUS
 ControllerGetResponse(
-    IN  PXENVIF_CONTROLLER          Controller,
-    OUT PULONG                      Data OPTIONAL
+    _In_ PXENVIF_CONTROLLER         Controller,
+    _Out_opt_ PULONG                Data
     )
 {
     LARGE_INTEGER                   PollTimeout;
@@ -354,8 +354,8 @@ KSERVICE_ROUTINE    ControllerEvtchnCallback;
 _Use_decl_annotations_
 BOOLEAN
 ControllerEvtchnCallback(
-    IN  PKINTERRUPT             InterruptObject,
-    IN  PVOID                   Argument
+    _In_ PKINTERRUPT            InterruptObject,
+    _In_ PVOID                  Argument
     )
 {
     PXENVIF_CONTROLLER          Controller =3D Argument;
@@ -371,8 +371,8 @@ ControllerEvtchnCallback(
=20
 static VOID
 ControllerDebugCallback(
-    IN  PVOID           Argument,
-    IN  BOOLEAN         Crashing
+    _In_ PVOID      Argument,
+    _In_ BOOLEAN    Crashing
     )
 {
     UNREFERENCED_PARAMETER(Argument);
@@ -382,13 +382,13 @@ ControllerDebugCallback(
 _IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 ControllerInitialize(
-    IN  PXENVIF_FRONTEND    Frontend,
-    OUT PXENVIF_CONTROLLER  *Controller
+    _In_ PXENVIF_FRONTEND       Frontend,
+    _Outptr_ PXENVIF_CONTROLLER *Controller
     )
 {
-    LARGE_INTEGER           Now;
-    ULONG                   Seed;
-    NTSTATUS                status;
+    LARGE_INTEGER               Now;
+    ULONG                       Seed;
+    NTSTATUS                    status;
=20
     *Controller =3D __ControllerAllocate(sizeof (XENVIF_CONTROLLER));
=20
@@ -428,7 +428,7 @@ fail1:
 _IRQL_requires_(DISPATCH_LEVEL)
 NTSTATUS
 ControllerConnect(
-    IN  PXENVIF_CONTROLLER      Controller
+    _In_ PXENVIF_CONTROLLER     Controller
     )
 {
     PXENVIF_FRONTEND            Frontend;
@@ -636,8 +636,8 @@ fail1:
 _IRQL_requires_(DISPATCH_LEVEL)
 NTSTATUS
 ControllerStoreWrite(
-    IN  PXENVIF_CONTROLLER          Controller,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction
+    _In_ PXENVIF_CONTROLLER         Controller,
+    _In_ PXENBUS_STORE_TRANSACTION  Transaction
     )
 {
     PXENVIF_FRONTEND                Frontend;
@@ -689,7 +689,7 @@ fail1:
=20
 VOID
 ControllerEnable(
-    IN  PXENVIF_CONTROLLER      Controller
+    _In_ PXENVIF_CONTROLLER Controller
     )
 {
     __ControllerAcquireLock(Controller);
@@ -703,7 +703,7 @@ ControllerEnable(
=20
 VOID
 ControllerDisable(
-    IN  PXENVIF_CONTROLLER      Controller
+    _In_ PXENVIF_CONTROLLER Controller
     )
 {
     __ControllerAcquireLock(Controller);
@@ -718,7 +718,7 @@ ControllerDisable(
 _IRQL_requires_(DISPATCH_LEVEL)
 VOID
 ControllerDisconnect(
-    IN  PXENVIF_CONTROLLER  Controller
+    _In_ PXENVIF_CONTROLLER Controller
     )
 {
     Trace("=3D=3D=3D=3D>\n");
@@ -781,7 +781,7 @@ done:
 _IRQL_requires_(PASSIVE_LEVEL)
 VOID
 ControllerTeardown(
-    IN  PXENVIF_CONTROLLER  Controller
+    _In_ PXENVIF_CONTROLLER Controller
     )
 {
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, PASSIVE_LEVEL);
@@ -812,8 +812,8 @@ ControllerTeardown(
 _IRQL_requires_(DISPATCH_LEVEL)
 NTSTATUS
 ControllerSetHashAlgorithm(
-    IN  PXENVIF_CONTROLLER  Controller,
-    IN  ULONG               Algorithm
+    _In_ PXENVIF_CONTROLLER Controller,
+    _In_ ULONG              Algorithm
     )
 {
     PXENVIF_FRONTEND        Frontend;
@@ -853,8 +853,8 @@ fail1:
 _IRQL_requires_(DISPATCH_LEVEL)
 NTSTATUS
 ControllerGetHashFlags(
-    IN  PXENVIF_CONTROLLER  Controller,
-    IN  PULONG              Flags
+    _In_ PXENVIF_CONTROLLER Controller,
+    _In_ PULONG             Flags
     )
 {
     PXENVIF_FRONTEND        Frontend;
@@ -894,8 +894,8 @@ fail1:
 _IRQL_requires_(DISPATCH_LEVEL)
 NTSTATUS
 ControllerSetHashFlags(
-    IN  PXENVIF_CONTROLLER  Controller,
-    IN  ULONG               Flags
+    _In_ PXENVIF_CONTROLLER Controller,
+    _In_ ULONG              Flags
     )
 {
     PXENVIF_FRONTEND        Frontend;
@@ -935,9 +935,9 @@ fail1:
 _IRQL_requires_(DISPATCH_LEVEL)
 NTSTATUS
 ControllerSetHashKey(
-    IN  PXENVIF_CONTROLLER  Controller,
-    IN  PUCHAR              Key,
-    IN  ULONG               Size
+    _In_ PXENVIF_CONTROLLER Controller,
+    _In_ PUCHAR             Key,
+    _In_ ULONG              Size
     )
 {
     PXENVIF_FRONTEND        Frontend;
@@ -1030,8 +1030,8 @@ fail1:
 _IRQL_requires_(DISPATCH_LEVEL)
 NTSTATUS
 ControllerGetHashMappingSize(
-    IN  PXENVIF_CONTROLLER  Controller,
-    IN  PULONG              Size
+    _In_ PXENVIF_CONTROLLER Controller,
+    _In_ PULONG             Size
     )
 {
     PXENVIF_FRONTEND        Frontend;
@@ -1071,8 +1071,8 @@ fail1:
 _IRQL_requires_(DISPATCH_LEVEL)
 NTSTATUS
 ControllerSetHashMappingSize(
-    IN  PXENVIF_CONTROLLER  Controller,
-    IN  ULONG               Size
+    _In_ PXENVIF_CONTROLLER Controller,
+    _In_ ULONG              Size
     )
 {
     PXENVIF_FRONTEND        Frontend;
@@ -1112,10 +1112,10 @@ fail1:
 _IRQL_requires_(DISPATCH_LEVEL)
 NTSTATUS
 ControllerSetHashMapping(
-    IN  PXENVIF_CONTROLLER  Controller,
-    IN  PULONG              Mapping,
-    IN  ULONG               Size,
-    IN  ULONG               Offset
+    _In_ PXENVIF_CONTROLLER Controller,
+    _In_ PULONG             Mapping,
+    _In_ ULONG              Size,
+    _In_ ULONG              Offset
     )
 {
     PXENVIF_FRONTEND        Frontend;
diff --git a/src/xenvif/controller=2Eh b/src/xenvif/controller=2Eh
index 18e09b7=2E=2Ef920397 100644
--- a/src/xenvif/controller=2Eh
+++ b/src/xenvif/controller=2Eh
@@ -44,95 +44,95 @@ typedef struct _XENVIF_CONTROLLER XENVIF_CONTROLLER, *=
PXENVIF_CONTROLLER;
 _IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 ControllerInitialize(
-    IN  PXENVIF_FRONTEND    Frontend,
-    OUT PXENVIF_CONTROLLER  *Controller
+    _In_ PXENVIF_FRONTEND       Frontend,
+    _Outptr_ PXENVIF_CONTROLLER *Controller
     );
=20
 _IRQL_requires_(DISPATCH_LEVEL)
 extern NTSTATUS
 ControllerConnect(
-    IN  PXENVIF_CONTROLLER  Controller
+    _In_ PXENVIF_CONTROLLER Controller
     );
=20
 _IRQL_requires_(DISPATCH_LEVEL)
 extern NTSTATUS
 ControllerStoreWrite(
-    IN  PXENVIF_CONTROLLER          Controller,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction
+    _In_ PXENVIF_CONTROLLER         Controller,
+    _In_ PXENBUS_STORE_TRANSACTION  Transaction
     );
=20
 extern VOID
 ControllerEnable(
-    IN  PXENVIF_CONTROLLER  Controller
+    _In_ PXENVIF_CONTROLLER Controller
     );
=20
 extern VOID
 ControllerDisable(
-    IN  PXENVIF_CONTROLLER  Controller
+    _In_ PXENVIF_CONTROLLER Controller
     );
=20
 _IRQL_requires_(DISPATCH_LEVEL)
 extern VOID
 ControllerDisconnect(
-    IN  PXENVIF_CONTROLLER  Controller
+    _In_ PXENVIF_CONTROLLER Controller
     );
=20
 _IRQL_requires_(PASSIVE_LEVEL)
 extern VOID
 ControllerTeardown(
-    IN  PXENVIF_CONTROLLER  Controller
+    _In_ PXENVIF_CONTROLLER Controller
     );
=20
 _IRQL_requires_(DISPATCH_LEVEL)
 extern NTSTATUS
 ControllerSetHashAlgorithm(
-    IN  PXENVIF_CONTROLLER  Controller,
-    IN  ULONG               Algorithm
+    _In_ PXENVIF_CONTROLLER Controller,
+    _In_ ULONG              Algorithm
     );
=20
 _IRQL_requires_(DISPATCH_LEVEL)
 extern NTSTATUS
 ControllerGetHashFlags(
-    IN  PXENVIF_CONTROLLER  Controller,
-    IN  PULONG              Flags
+    _In_ PXENVIF_CONTROLLER Controller,
+    _In_ PULONG             Flags
     );
=20
 _IRQL_requires_(DISPATCH_LEVEL)
 extern NTSTATUS
 ControllerSetHashFlags(
-    IN  PXENVIF_CONTROLLER  Controller,
-    IN  ULONG               Flags
+    _In_ PXENVIF_CONTROLLER Controller,
+    _In_ ULONG              Flags
     );
=20
 _IRQL_requires_(DISPATCH_LEVEL)
 extern NTSTATUS
 ControllerSetHashKey(
-    IN  PXENVIF_CONTROLLER  Controller,
-    IN  PUCHAR              Key,
-    IN  ULONG               Size
+    _In_ PXENVIF_CONTROLLER Controller,
+    _In_ PUCHAR             Key,
+    _In_ ULONG              Size
     );
=20
 _IRQL_requires_(DISPATCH_LEVEL)
 extern NTSTATUS
 ControllerGetHashMappingSize(
-    IN  PXENVIF_CONTROLLER  Controller,
-    IN  PULONG              Size
+    _In_ PXENVIF_CONTROLLER Controller,
+    _In_ PULONG             Size
     );
=20
 _IRQL_requires_(DISPATCH_LEVEL)
 extern NTSTATUS
 ControllerSetHashMappingSize(
-    IN  PXENVIF_CONTROLLER  Controller,
-    IN  ULONG               Size
+    _In_ PXENVIF_CONTROLLER Controller,
+    _In_ ULONG              Size
     );
=20
 _IRQL_requires_(DISPATCH_LEVEL)
 extern NTSTATUS
 ControllerSetHashMapping(
-    IN  PXENVIF_CONTROLLER  Controller,
-    IN  PULONG              Mapping,
-    IN  ULONG               Size,
-    IN  ULONG               Offset
+    _In_ PXENVIF_CONTROLLER Controller,
+    _In_ PULONG             Mapping,
+    _In_ ULONG              Size,
+    _In_ ULONG              Offset
     );
=20
=20
diff --git a/src/xenvif/driver=2Ec b/src/xenvif/driver=2Ec
index 438c21a=2E=2E614503b 100644
--- a/src/xenvif/driver=2Ec
+++ b/src/xenvif/driver=2Ec
@@ -73,7 +73,7 @@ DriverSafeMode(
=20
 static FORCEINLINE VOID
 __DriverSetDriverObject(
-    IN  PDRIVER_OBJECT  DriverObject
+    _In_ PDRIVER_OBJECT DriverObject
     )
 {
     Driver=2EDriverObject =3D DriverObject;
@@ -97,7 +97,7 @@ DriverGetDriverObject(
=20
 static FORCEINLINE VOID
 __DriverSetParametersKey(
-    IN  HANDLE  Key
+    _In_ HANDLE Key
     )
 {
     Driver=2EParametersKey =3D Key;
@@ -121,7 +121,7 @@ DriverGetParametersKey(
=20
 static FORCEINLINE VOID
 __DriverSetAddressesKey(
-    IN  HANDLE  Key
+    _In_ HANDLE Key
     )
 {
     Driver=2EAddressesKey =3D Key;
@@ -145,7 +145,7 @@ DriverGetAddressesKey(
=20
 static FORCEINLINE VOID
 __DriverSetSettingsKey(
-    IN  HANDLE  Key
+    _In_ HANDLE Key
     )
 {
     Driver=2ESettingsKey =3D Key;
@@ -171,7 +171,7 @@ DRIVER_UNLOAD       DriverUnload;
=20
 VOID
 DriverUnload(
-    IN  PDRIVER_OBJECT  DriverObject
+    _In_ PDRIVER_OBJECT DriverObject
     )
 {
     HANDLE              SettingsKey;
@@ -219,8 +219,8 @@ DRIVER_ADD_DEVICE   AddDevice;
=20
 NTSTATUS
 AddDevice(
-    IN  PDRIVER_OBJECT  DriverObject,
-    IN  PDEVICE_OBJECT  DeviceObject
+    _In_ PDRIVER_OBJECT DriverObject,
+    _In_ PDEVICE_OBJECT DeviceObject
     )
 {
     NTSTATUS            status;
@@ -247,8 +247,8 @@ DRIVER_DISPATCH Dispatch;
=20
 NTSTATUS=20
 Dispatch(
-    IN PDEVICE_OBJECT   DeviceObject,
-    IN PIRP             Irp
+    _In_ PDEVICE_OBJECT DeviceObject,
+    _In_ PIRP           Irp
     )
 {
     PXENVIF_DX          Dx;
@@ -304,16 +304,16 @@ DRIVER_INITIALIZE   DriverEntry;
=20
 NTSTATUS
 DriverEntry(
-    IN  PDRIVER_OBJECT  DriverObject,
-    IN  PUNICODE_STRING RegistryPath
+    _In_ PDRIVER_OBJECT     DriverObject,
+    _In_ PUNICODE_STRING    RegistryPath
     )
 {
-    HANDLE              ServiceKey;
-    HANDLE              ParametersKey;
-    HANDLE              AddressesKey;
-    HANDLE              SettingsKey;
-    ULONG               Index;
-    NTSTATUS            status;
+    HANDLE                  ServiceKey;
+    HANDLE                  ParametersKey;
+    HANDLE                  AddressesKey;
+    HANDLE                  SettingsKey;
+    ULONG                   Index;
+    NTSTATUS                status;
=20
     ASSERT3P(__DriverGetDriverObject(), =3D=3D, NULL);
=20
@@ -375,8 +375,8 @@ DriverEntry(
     DriverObject->DriverExtension->AddDevice =3D AddDevice;
=20
     for (Index =3D 0; Index <=3D IRP_MJ_MAXIMUM_FUNCTION; Index++) {
-#pragma prefast(suppress:28169) // No __drv_dispatchType annotation
-#pragma prefast(suppress:28168) // No matching __drv_dispatchType annotat=
ion for IRP_MJ_CREATE
+#pragma prefast(suppress:28169) // No _Dispatch_type_ annotation
+#pragma prefast(suppress:28168) // No matching _Dispatch_type_ annotation=
 for IRP_MJ_CREATE
         DriverObject->MajorFunction[Index] =3D Dispatch;
     }
=20
diff --git a/src/xenvif/fdo=2Ec b/src/xenvif/fdo=2Ec
index 6c4c945=2E=2E8d20c86 100644
--- a/src/xenvif/fdo=2Ec
+++ b/src/xenvif/fdo=2Ec
@@ -110,7 +110,7 @@ struct _XENVIF_FDO {
=20
 static FORCEINLINE PVOID
 __FdoAllocate(
-    IN  ULONG   Length
+    _In_ ULONG  Length
     )
 {
     return __AllocatePoolWithTag(NonPagedPool, Length, FDO_POOL);
@@ -118,7 +118,7 @@ __FdoAllocate(
=20
 static FORCEINLINE VOID
 __FdoFree(
-    IN  PVOID   Buffer
+    _In_ PVOID  Buffer
     )
 {
     __FreePoolWithTag(Buffer, FDO_POOL);
@@ -126,8 +126,8 @@ __FdoFree(
=20
 static FORCEINLINE VOID
 __FdoSetDevicePnpState(
-    IN  PXENVIF_FDO         Fdo,
-    IN  DEVICE_PNP_STATE    State
+    _In_ PXENVIF_FDO        Fdo,
+    _In_ DEVICE_PNP_STATE   State
     )
 {
     PXENVIF_DX              Dx =3D Fdo->Dx;
@@ -141,8 +141,8 @@ __FdoSetDevicePnpState(
=20
 static FORCEINLINE VOID
 __FdoRestoreDevicePnpState(
-    IN  PXENVIF_FDO         Fdo,
-    IN  DEVICE_PNP_STATE    State
+    _In_ PXENVIF_FDO        Fdo,
+    _In_ DEVICE_PNP_STATE   State
     )
 {
     PXENVIF_DX              Dx =3D Fdo->Dx;
@@ -153,7 +153,7 @@ __FdoRestoreDevicePnpState(
=20
 static FORCEINLINE DEVICE_PNP_STATE
 __FdoGetDevicePnpState(
-    IN  PXENVIF_FDO     Fdo
+    _In_ PXENVIF_FDO    Fdo
     )
 {
     PXENVIF_DX          Dx =3D Fdo->Dx;
@@ -163,18 +163,18 @@ __FdoGetDevicePnpState(
=20
 static FORCEINLINE DEVICE_PNP_STATE
 __FdoGetPreviousDevicePnpState(
-    IN  PXENVIF_FDO Fdo
+    _In_ PXENVIF_FDO    Fdo
     )
 {
-    PXENVIF_DX      Dx =3D Fdo->Dx;
+    PXENVIF_DX          Dx =3D Fdo->Dx;
=20
     return Dx->PreviousDevicePnpState;
 }
=20
 static FORCEINLINE VOID
 __FdoSetDevicePowerState(
-    IN  PXENVIF_FDO         Fdo,
-    IN  DEVICE_POWER_STATE  State
+    _In_ PXENVIF_FDO        Fdo,
+    _In_ DEVICE_POWER_STATE State
     )
 {
     PXENVIF_DX              Dx =3D Fdo->Dx;
@@ -184,7 +184,7 @@ __FdoSetDevicePowerState(
=20
 static FORCEINLINE DEVICE_POWER_STATE
 __FdoGetDevicePowerState(
-    IN  PXENVIF_FDO     Fdo
+    _In_ PXENVIF_FDO    Fdo
     )
 {
     PXENVIF_DX          Dx =3D Fdo->Dx;
@@ -194,8 +194,8 @@ __FdoGetDevicePowerState(
=20
 static FORCEINLINE VOID
 __FdoSetSystemPowerState(
-    IN  PXENVIF_FDO         Fdo,
-    IN  SYSTEM_POWER_STATE  State
+    _In_ PXENVIF_FDO        Fdo,
+    _In_ SYSTEM_POWER_STATE State
     )
 {
     PXENVIF_DX              Dx =3D Fdo->Dx;
@@ -205,7 +205,7 @@ __FdoSetSystemPowerState(
=20
 static FORCEINLINE SYSTEM_POWER_STATE
 __FdoGetSystemPowerState(
-    IN  PXENVIF_FDO     Fdo
+    _In_ PXENVIF_FDO    Fdo
     )
 {
     PXENVIF_DX          Dx =3D Fdo->Dx;
@@ -215,7 +215,7 @@ __FdoGetSystemPowerState(
=20
 static FORCEINLINE PDEVICE_OBJECT
 __FdoGetPhysicalDeviceObject(
-    IN  PXENVIF_FDO Fdo
+    _In_ PXENVIF_FDO    Fdo
     )
 {
     return Fdo->PhysicalDeviceObject;
@@ -223,16 +223,16 @@ __FdoGetPhysicalDeviceObject(
=20
 PDEVICE_OBJECT
 FdoGetPhysicalDeviceObject(
-    IN  PXENVIF_FDO Fdo
+    _In_ PXENVIF_FDO    Fdo
     )
 {
     return __FdoGetPhysicalDeviceObject(Fdo);
 }
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 static FORCEINLINE NTSTATUS
 __FdoAcquireLowerBusInterface(
-    IN  PXENVIF_FDO         Fdo
+    _In_ PXENVIF_FDO        Fdo
     )
 {
     PBUS_INTERFACE_STANDARD BusInterface;
@@ -315,7 +315,7 @@ fail1:
=20
 static FORCEINLINE VOID
 __FdoReleaseLowerBusInterface(
-    IN  PXENVIF_FDO         Fdo
+    _In_ PXENVIF_FDO        Fdo
     )
 {
     PBUS_INTERFACE_STANDARD BusInterface;
@@ -334,12 +334,12 @@ __FdoReleaseLowerBusInterface(
=20
 PDMA_ADAPTER
 FdoGetDmaAdapter(
-    IN  PXENVIF_FDO         Fdo,
-    IN  PDEVICE_DESCRIPTION DeviceDescriptor,
-    OUT PULONG              NumberOfMapRegisters
+    _In_ PXENVIF_FDO            Fdo,
+    _In_ PDEVICE_DESCRIPTION    DeviceDescriptor,
+    _Out_ PULONG                NumberOfMapRegisters
     )
 {
-    PBUS_INTERFACE_STANDARD BusInterface;
+    PBUS_INTERFACE_STANDARD     BusInterface;
=20
     BusInterface =3D Fdo->LowerBusInterface;
     ASSERT(BusInterface !=3D NULL);
@@ -351,11 +351,11 @@ FdoGetDmaAdapter(
=20
 BOOLEAN
 FdoTranslateBusAddress(
-    IN      PXENVIF_FDO         Fdo,
-    IN      PHYSICAL_ADDRESS    BusAddress,
-    IN      ULONG               Length,
-    IN OUT  PULONG              AddressSpace,
-    OUT     PPHYSICAL_ADDRESS   TranslatedAddress
+    _In_ PXENVIF_FDO            Fdo,
+    _In_ PHYSICAL_ADDRESS       BusAddress,
+    _In_ ULONG                  Length,
+    _Inout_ PULONG              AddressSpace,
+    _Outptr_ PPHYSICAL_ADDRESS  TranslatedAddress
     )
 {
     PBUS_INTERFACE_STANDARD     BusInterface;
@@ -372,11 +372,11 @@ FdoTranslateBusAddress(
=20
 ULONG
 FdoSetBusData(
-    IN  PXENVIF_FDO         Fdo,
-    IN  ULONG               DataType,
-    IN  PVOID               Buffer,
-    IN  ULONG               Offset,
-    IN  ULONG               Length
+    _In_ PXENVIF_FDO        Fdo,
+    _In_ ULONG              DataType,
+    _In_ PVOID              Buffer,
+    _In_ ULONG              Offset,
+    _In_ ULONG              Length
     )
 {
     PBUS_INTERFACE_STANDARD BusInterface;
@@ -393,11 +393,11 @@ FdoSetBusData(
=20
 ULONG
 FdoGetBusData(
-    IN  PXENVIF_FDO         Fdo,
-    IN  ULONG               DataType,
-    IN  PVOID               Buffer,
-    IN  ULONG               Offset,
-    IN  ULONG               Length
+    _In_ PXENVIF_FDO        Fdo,
+    _In_ ULONG              DataType,
+    _In_ PVOID              Buffer,
+    _In_ ULONG              Offset,
+    _In_ ULONG              Length
     )
 {
     PBUS_INTERFACE_STANDARD BusInterface;
@@ -414,11 +414,11 @@ FdoGetBusData(
=20
 static FORCEINLINE VOID
 __FdoSetVendorName(
-    IN  PXENVIF_FDO Fdo,
-    IN  USHORT      DeviceID
+    _In_ PXENVIF_FDO    Fdo,
+    _In_ USHORT         DeviceID
     )
 {
-    NTSTATUS        status;
+    NTSTATUS            status;
=20
     status =3D RtlStringCbPrintfA(Fdo->VendorName,
                                 MAXNAMELEN,
@@ -430,7 +430,7 @@ __FdoSetVendorName(
=20
 static FORCEINLINE PCHAR
 __FdoGetVendorName(
-    IN  PXENVIF_FDO Fdo
+    _In_ PXENVIF_FDO    Fdo
     )
 {
     return Fdo->VendorName;
@@ -438,7 +438,7 @@ __FdoGetVendorName(
=20
 PCHAR
 FdoGetVendorName(
-    IN  PXENVIF_FDO Fdo
+    _In_ PXENVIF_FDO    Fdo
     )
 {
     return __FdoGetVendorName(Fdo);
@@ -446,11 +446,11 @@ FdoGetVendorName(
=20
 static FORCEINLINE VOID
 __FdoSetName(
-    IN  PXENVIF_FDO Fdo
+    _In_ PXENVIF_FDO    Fdo
     )
 {
-    PXENVIF_DX      Dx =3D Fdo->Dx;
-    NTSTATUS        status;
+    PXENVIF_DX          Dx =3D Fdo->Dx;
+    NTSTATUS            status;
=20
     status =3D RtlStringCbPrintfA(Dx->Name,
                                 MAXNAMELEN,
@@ -461,29 +461,29 @@ __FdoSetName(
=20
 static FORCEINLINE PCHAR
 __FdoGetName(
-    IN  PXENVIF_FDO Fdo
+    _In_ PXENVIF_FDO    Fdo
     )
 {
-    PXENVIF_DX      Dx =3D Fdo->Dx;
+    PXENVIF_DX          Dx =3D Fdo->Dx;
=20
     return Dx->Name;
 }
=20
 PCHAR
 FdoGetName(
-    IN  PXENVIF_FDO Fdo
+    _In_ PXENVIF_FDO    Fdo
     )
 {
     return __FdoGetName(Fdo);
 }
=20
-__drv_functionClass(IO_COMPLETION_ROUTINE)
-__drv_sameIRQL
+_Function_class_(IO_COMPLETION_ROUTINE)
+_IRQL_requires_same_
 static NTSTATUS
 __FdoDelegateIrp(
-    IN  PDEVICE_OBJECT  DeviceObject,
-    IN  PIRP            Irp,
-    IN  PVOID           Context
+    _In_ PDEVICE_OBJECT DeviceObject,
+    _In_ PIRP           Irp,
+    _In_ PVOID          Context
     )
 {
     PKEVENT             Event =3D Context;
@@ -498,8 +498,8 @@ __FdoDelegateIrp(
=20
 NTSTATUS
 FdoDelegateIrp(
-    IN  PXENVIF_FDO     Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVIF_FDO    Fdo,
+    _In_ PIRP           Irp
     )
 {
     PDEVICE_OBJECT      DeviceObject;
@@ -562,13 +562,13 @@ done:
     return status;
 }
=20
-__drv_functionClass(IO_COMPLETION_ROUTINE)
-__drv_sameIRQL
+_Function_class_(IO_COMPLETION_ROUTINE)
+_IRQL_requires_same_
 static NTSTATUS
 __FdoForwardIrpSynchronously(
-    IN  PDEVICE_OBJECT  DeviceObject,
-    IN  PIRP            Irp,
-    IN  PVOID           Context
+    _In_ PDEVICE_OBJECT DeviceObject,
+    _In_ PIRP           Irp,
+    _In_ PVOID          Context
     )
 {
     PKEVENT             Event =3D Context;
@@ -583,8 +583,8 @@ __FdoForwardIrpSynchronously(
=20
 static NTSTATUS
 FdoForwardIrpSynchronously(
-    IN  PXENVIF_FDO     Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVIF_FDO    Fdo,
+    _In_ PIRP           Irp
     )
 {
     KEVENT              Event;
@@ -621,8 +621,8 @@ FdoForwardIrpSynchronously(
=20
 NTSTATUS
 FdoAddPhysicalDeviceObject(
-    IN  PXENVIF_FDO     Fdo,
-    IN  PXENVIF_PDO     Pdo
+    _In_ PXENVIF_FDO    Fdo,
+    _In_ PXENVIF_PDO    Pdo
     )
 {
     PDEVICE_OBJECT      DeviceObject;
@@ -655,8 +655,8 @@ fail1:
=20
 VOID
 FdoRemovePhysicalDeviceObject(
-    IN  PXENVIF_FDO     Fdo,
-    IN  PXENVIF_PDO     Pdo
+    _In_ PXENVIF_FDO    Fdo,
+    _In_ PXENVIF_PDO    Pdo
     )
 {
     PDEVICE_OBJECT      DeviceObject;
@@ -682,7 +682,7 @@ done:
=20
 static FORCEINLINE VOID
 __FdoAcquireMutex(
-    IN  PXENVIF_FDO     Fdo
+    _In_ PXENVIF_FDO    Fdo
     )
 {
     AcquireMutex(&Fdo->Mutex);
@@ -690,7 +690,7 @@ __FdoAcquireMutex(
=20
 VOID
 FdoAcquireMutex(
-    IN  PXENVIF_FDO     Fdo
+    _In_ PXENVIF_FDO    Fdo
     )
 {
     __FdoAcquireMutex(Fdo);
@@ -698,7 +698,7 @@ FdoAcquireMutex(
=20
 static FORCEINLINE VOID
 __FdoReleaseMutex(
-    IN  PXENVIF_FDO     Fdo
+    _In_ PXENVIF_FDO    Fdo
     )
 {
     ReleaseMutex(&Fdo->Mutex);
@@ -706,7 +706,7 @@ __FdoReleaseMutex(
=20
 VOID
 FdoReleaseMutex(
-    IN  PXENVIF_FDO     Fdo
+    _In_ PXENVIF_FDO    Fdo
     )
 {
     __FdoReleaseMutex(Fdo);
@@ -717,11 +717,11 @@ FdoReleaseMutex(
=20
 static FORCEINLINE BOOLEAN
 __FdoEnumerate(
-    IN  PXENVIF_FDO     Fdo,
-    IN  PANSI_STRING    Devices
+    _In_ PXENVIF_FDO    Fdo,
+    _In_ PANSI_STRING   Devices
     )
 {
-    BOOLEAN             NeedInvalidate;=20
+    BOOLEAN             NeedInvalidate;
     HANDLE              ParametersKey;
     ULONG               Enumerate;
     PLIST_ENTRY         ListEntry;
@@ -848,7 +848,7 @@ done:
=20
 static FORCEINLINE PANSI_STRING
 __FdoMultiSzToUpcaseAnsi(
-    IN  PCHAR       Buffer
+    _In_ PCHAR      Buffer
     )
 {
     PANSI_STRING    Ansi;
@@ -913,7 +913,7 @@ fail1:
=20
 static FORCEINLINE VOID
 __FdoFreeAnsi(
-    IN  PANSI_STRING    Ansi
+    _In_ PANSI_STRING   Ansi
     )
 {
     ULONG               Index;
@@ -1055,9 +1055,9 @@ loop:
=20
 static DECLSPEC_NOINLINE VOID
 FdoParseResources(
-    IN  PXENVIF_FDO             Fdo,
-    IN  PCM_RESOURCE_LIST       RawResourceList,
-    IN  PCM_RESOURCE_LIST       TranslatedResourceList
+    _In_ PXENVIF_FDO            Fdo,
+    _In_ PCM_RESOURCE_LIST      RawResourceList,
+    _In_ PCM_RESOURCE_LIST      TranslatedResourceList
     )
 {
     PCM_PARTIAL_RESOURCE_LIST   RawPartialList;
@@ -1102,17 +1102,17 @@ FdoParseResources(
=20
 static FORCEINLINE BOOLEAN
 __FdoMatchDistribution(
-    IN  PXENVIF_FDO Fdo,
-    IN  PCHAR       Buffer
+    _In_ PXENVIF_FDO    Fdo,
+    _In_ PCHAR          Buffer
     )
 {
-    PCHAR           Vendor;
-    PCHAR           Product;
-    PCHAR           Context;
-    const CHAR      *Text;
-    BOOLEAN         Match;
-    ULONG           Index;
-    NTSTATUS        status;
+    PCHAR               Vendor;
+    PCHAR               Product;
+    PCHAR               Context;
+    const CHAR          *Text;
+    BOOLEAN             Match;
+    ULONG               Index;
+    NTSTATUS            status;
=20
     UNREFERENCED_PARAMETER(Fdo);
=20
@@ -1162,13 +1162,13 @@ fail1:
=20
 static VOID
 FdoClearDistribution(
-    IN  PXENVIF_FDO Fdo
+    _In_ PXENVIF_FDO    Fdo
     )
 {
-    PCHAR           Buffer;
-    PANSI_STRING    Distributions;
-    ULONG           Index;
-    NTSTATUS        status;
+    PCHAR               Buffer;
+    PANSI_STRING        Distributions;
+    ULONG               Index;
+    NTSTATUS            status;
=20
     Trace("=3D=3D=3D=3D>\n");
=20
@@ -1225,14 +1225,14 @@ done:
=20
 static NTSTATUS
 FdoSetDistribution(
-    IN  PXENVIF_FDO Fdo
+    _In_ PXENVIF_FDO    Fdo
     )
 {
-    ULONG           Index;
-    CHAR            Distribution[MAXNAMELEN];
-    CHAR            Vendor[MAXNAMELEN];
-    const CHAR      *Product;
-    NTSTATUS        status;
+    ULONG               Index;
+    CHAR                Distribution[MAXNAMELEN];
+    CHAR                Vendor[MAXNAMELEN];
+    const CHAR          *Product;
+    NTSTATUS            status;
=20
     Trace("=3D=3D=3D=3D>\n");
=20
@@ -1319,10 +1319,10 @@ fail1:
=20
 static FORCEINLINE NTSTATUS
 __FdoD3ToD0(
-    IN  PXENVIF_FDO Fdo
+    _In_ PXENVIF_FDO    Fdo
     )
 {
-    NTSTATUS        status;
+    NTSTATUS            status;
=20
     Trace("=3D=3D=3D=3D>\n");
=20
@@ -1359,7 +1359,7 @@ fail1:
=20
 static FORCEINLINE VOID
 __FdoD0ToD3(
-    IN  PXENVIF_FDO Fdo
+    _In_ PXENVIF_FDO    Fdo
     )
 {
     Trace("=3D=3D=3D=3D>\n");
@@ -1384,7 +1384,7 @@ __FdoD0ToD3(
=20
 static DECLSPEC_NOINLINE VOID
 FdoSuspendCallbackLate(
-    IN  PVOID   Argument
+    _In_ PVOID  Argument
     )
 {
     PXENVIF_FDO Fdo =3D Argument;
@@ -1399,13 +1399,13 @@ FdoSuspendCallbackLate(
 // This function must not touch pageable code or data
 static DECLSPEC_NOINLINE NTSTATUS
 FdoD3ToD0(
-    IN  PXENVIF_FDO Fdo
+    _In_ PXENVIF_FDO    Fdo
     )
 {
-    POWER_STATE     PowerState;
-    KIRQL           Irql;
-    PLIST_ENTRY     ListEntry;
-    NTSTATUS        status;
+    POWER_STATE         PowerState;
+    KIRQL               Irql;
+    PLIST_ENTRY         ListEntry;
+    NTSTATUS            status;
=20
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, PASSIVE_LEVEL);
     ASSERT3U(__FdoGetDevicePowerState(Fdo), =3D=3D, PowerDeviceD3);
@@ -1492,12 +1492,12 @@ fail1:
 // This function must not touch pageable code or data
 static DECLSPEC_NOINLINE VOID
 FdoD0ToD3(
-    IN  PXENVIF_FDO Fdo
+    _In_ PXENVIF_FDO    Fdo
     )
 {
-    POWER_STATE     PowerState;
-    PLIST_ENTRY     ListEntry;
-    KIRQL           Irql;
+    POWER_STATE         PowerState;
+    PLIST_ENTRY         ListEntry;
+    KIRQL               Irql;
=20
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, PASSIVE_LEVEL);
     ASSERT3U(__FdoGetDevicePowerState(Fdo), =3D=3D, PowerDeviceD0);
@@ -1551,7 +1551,7 @@ FdoD0ToD3(
 // This function must not touch pageable code or data
 static DECLSPEC_NOINLINE VOID
 FdoS4ToS3(
-    IN  PXENVIF_FDO         Fdo
+    _In_ PXENVIF_FDO    Fdo
     )
 {
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, PASSIVE_LEVEL);
@@ -1563,7 +1563,7 @@ FdoS4ToS3(
 // This function must not touch pageable code or data
 static DECLSPEC_NOINLINE VOID
 FdoS3ToS4(
-    IN  PXENVIF_FDO Fdo
+    _In_ PXENVIF_FDO    Fdo
     )
 {
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, PASSIVE_LEVEL);
@@ -1574,8 +1574,8 @@ FdoS3ToS4(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoStartDevice(
-    IN  PXENVIF_FDO     Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVIF_FDO    Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -1634,11 +1634,11 @@ fail1:
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoQueryStopDevice(
-    IN  PXENVIF_FDO Fdo,
-    IN  PIRP        Irp
+    _In_ PXENVIF_FDO    Fdo,
+    _In_ PIRP           Irp
     )
 {
-    NTSTATUS        status;
+    NTSTATUS            status;
=20
     __FdoSetDevicePnpState(Fdo, StopPending);
     Irp->IoStatus=2EStatus =3D STATUS_SUCCESS;
@@ -1651,11 +1651,11 @@ FdoQueryStopDevice(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoCancelStopDevice(
-    IN  PXENVIF_FDO Fdo,
-    IN  PIRP        Irp
+    _In_ PXENVIF_FDO    Fdo,
+    _In_ PIRP           Irp
     )
 {
-    NTSTATUS        status;
+    NTSTATUS            status;
=20
     Irp->IoStatus=2EStatus =3D STATUS_SUCCESS;
=20
@@ -1669,11 +1669,11 @@ FdoCancelStopDevice(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoStopDevice(
-    IN  PXENVIF_FDO Fdo,
-    IN  PIRP        Irp
+    _In_ PXENVIF_FDO    Fdo,
+    _In_ PIRP           Irp
     )
 {
-    NTSTATUS        status;
+    NTSTATUS            status;
=20
     if (__FdoGetDevicePowerState(Fdo) =3D=3D PowerDeviceD0)
         FdoD0ToD3(Fdo);
@@ -1697,11 +1697,11 @@ FdoStopDevice(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoQueryRemoveDevice(
-    IN  PXENVIF_FDO Fdo,
-    IN  PIRP        Irp
+    _In_ PXENVIF_FDO    Fdo,
+    _In_ PIRP           Irp
     )
 {
-    NTSTATUS        status;
+    NTSTATUS            status;
=20
     __FdoSetDevicePnpState(Fdo, RemovePending);
     Irp->IoStatus=2EStatus =3D STATUS_SUCCESS;
@@ -1714,11 +1714,11 @@ FdoQueryRemoveDevice(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoCancelRemoveDevice(
-    IN  PXENVIF_FDO Fdo,
-    IN  PIRP        Irp
+    _In_ PXENVIF_FDO    Fdo,
+    _In_ PIRP           Irp
     )
 {
-    NTSTATUS        status;
+    NTSTATUS            status;
=20
     __FdoRestoreDevicePnpState(Fdo, RemovePending);
=20
@@ -1732,12 +1732,12 @@ FdoCancelRemoveDevice(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoSurpriseRemoval(
-    IN  PXENVIF_FDO Fdo,
-    IN  PIRP        Irp
+    _In_ PXENVIF_FDO    Fdo,
+    _In_ PIRP           Irp
     )
 {
-    PLIST_ENTRY     ListEntry;
-    NTSTATUS        status;
+    PLIST_ENTRY         ListEntry;
+    NTSTATUS            status;
=20
     __FdoSetDevicePnpState(Fdo, SurpriseRemovePending);
=20
@@ -1767,12 +1767,12 @@ FdoSurpriseRemoval(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoRemoveDevice(
-    IN  PXENVIF_FDO Fdo,
-    IN  PIRP        Irp
+    _In_ PXENVIF_FDO    Fdo,
+    _In_ PIRP           Irp
     )
 {
-    PLIST_ENTRY     ListEntry;
-    NTSTATUS        status;
+    PLIST_ENTRY         ListEntry;
+    NTSTATUS            status;
=20
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, PASSIVE_LEVEL);
=20
@@ -1849,8 +1849,8 @@ done:
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoQueryDeviceRelations(
-    IN  PXENVIF_FDO     Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVIF_FDO    Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -1973,8 +1973,8 @@ fail1:
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoQueryCapabilities(
-    IN  PXENVIF_FDO         Fdo,
-    IN  PIRP                Irp
+    _In_ PXENVIF_FDO        Fdo,
+    _In_ PIRP               Irp
     )
 {
     PIO_STACK_LOCATION      StackLocation;
@@ -2013,8 +2013,8 @@ fail1:
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoDeviceUsageNotification(
-    IN  PXENVIF_FDO                 Fdo,
-    IN  PIRP                        Irp
+    _In_ PXENVIF_FDO                Fdo,
+    _In_ PIRP                       Irp
     )
 {
     PIO_STACK_LOCATION              StackLocation;
@@ -2073,8 +2073,8 @@ fail1:
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoQueryPnpDeviceState(
-    IN  PXENVIF_FDO                 Fdo,
-    IN  PIRP                        Irp
+    _In_ PXENVIF_FDO                Fdo,
+    _In_ PIRP                       Irp
     )
 {
     ULONG_PTR                       State;
@@ -2104,8 +2104,8 @@ done:
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoDispatchPnp(
-    IN  PXENVIF_FDO     Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVIF_FDO    Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -2182,12 +2182,12 @@ FdoDispatchPnp(
     return status;
 }
=20
-__drv_functionClass(IO_WORKITEM_ROUTINE)
-__drv_sameIRQL
+_Function_class_(IO_WORKITEM_ROUTINE)
+_IRQL_requires_same_
 static VOID
 FdoDevicePowerUpWorker(
-    IN  PDEVICE_OBJECT  DeviceObject,
-    IN  PVOID           Context
+    _In_ PDEVICE_OBJECT DeviceObject,
+    _In_ PVOID          Context
     )
 {
     PXENVIF_FDO         Fdo =3D (PXENVIF_FDO)Context;
@@ -2203,13 +2203,13 @@ FdoDevicePowerUpWorker(
     IoCompleteRequest(Irp, IO_NO_INCREMENT);
 }
=20
-__drv_functionClass(IO_COMPLETION_ROUTINE)
-__drv_sameIRQL
+_Function_class_(IO_COMPLETION_ROUTINE)
+_IRQL_requires_same_
 static NTSTATUS
 FdoSetDevicePowerUpComplete(
-    IN  PDEVICE_OBJECT  DeviceObject,
-    IN  PIRP            Irp,
-    IN  PVOID           Context
+    _In_ PDEVICE_OBJECT DeviceObject,
+    _In_ PIRP           Irp,
+    _In_ PVOID          Context
     )
 {
     PXENVIF_FDO         Fdo =3D (PXENVIF_FDO)Context;
@@ -2242,8 +2242,8 @@ FdoSetDevicePowerUpComplete(
=20
 static FORCEINLINE NTSTATUS
 __FdoSetDevicePowerUp(
-    IN  PXENVIF_FDO     Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVIF_FDO    Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -2268,12 +2268,12 @@ __FdoSetDevicePowerUp(
     return STATUS_PENDING;
 }
=20
-__drv_functionClass(IO_WORKITEM_ROUTINE)
-__drv_sameIRQL
+_Function_class_(IO_WORKITEM_ROUTINE)
+_IRQL_requires_same_
 static VOID
 FdoDevicePowerDownWorker(
-    IN  PDEVICE_OBJECT  DeviceObject,
-    IN  PVOID           Context
+    _In_ PDEVICE_OBJECT DeviceObject,
+    _In_ PVOID          Context
     )
 {
     PXENVIF_FDO         Fdo =3D (PXENVIF_FDO)Context;
@@ -2292,8 +2292,8 @@ FdoDevicePowerDownWorker(
=20
 static FORCEINLINE NTSTATUS
 __FdoSetDevicePowerDown(
-    IN  PXENVIF_FDO     Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVIF_FDO    Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -2336,8 +2336,8 @@ __FdoSetDevicePowerDown(
=20
 static FORCEINLINE NTSTATUS
 __FdoSetDevicePower(
-    IN  PXENVIF_FDO     Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVIF_FDO    Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -2374,15 +2374,15 @@ done:
     return status;
 }
=20
-__drv_functionClass(REQUEST_POWER_COMPLETE)
-__drv_sameIRQL
+_Function_class_(REQUEST_POWER_COMPLETE)
+_IRQL_requires_same_
 static VOID
 FdoRequestSetDevicePowerUpComplete(
-    IN  PDEVICE_OBJECT      DeviceObject,
-    IN  UCHAR               MinorFunction,
-    IN  POWER_STATE         PowerState,
-    IN  PVOID               Context,
-    IN  PIO_STATUS_BLOCK    IoStatus
+    _In_ PDEVICE_OBJECT     DeviceObject,
+    _In_ UCHAR              MinorFunction,
+    _In_ POWER_STATE        PowerState,
+    _In_ PVOID              Context,
+    _In_ PIO_STATUS_BLOCK   IoStatus
     )
 {
     PIRP                    Irp =3D (PIRP)Context;
@@ -2395,12 +2395,12 @@ FdoRequestSetDevicePowerUpComplete(
     IoCompleteRequest(Irp, IO_NO_INCREMENT);
 }
=20
-__drv_functionClass(IO_WORKITEM_ROUTINE)
-__drv_sameIRQL
+_Function_class_(IO_WORKITEM_ROUTINE)
+_IRQL_requires_same_
 static VOID
 FdoSystemPowerUpWorker(
-    IN  PDEVICE_OBJECT  DeviceObject,
-    IN  PVOID           Context
+    _In_ PDEVICE_OBJECT DeviceObject,
+    _In_ PVOID          Context
     )
 {
     PXENVIF_FDO         Fdo =3D (PXENVIF_FDO)Context;
@@ -2446,13 +2446,13 @@ fail1:
     IoCompleteRequest(Irp, IO_NO_INCREMENT);
 }
=20
-__drv_functionClass(IO_COMPLETION_ROUTINE)
-__drv_sameIRQL
+_Function_class_(IO_COMPLETION_ROUTINE)
+_IRQL_requires_same_
 static NTSTATUS
 FdoSetSystemPowerUpComplete(
-    IN  PDEVICE_OBJECT  DeviceObject,
-    IN  PIRP            Irp,
-    IN  PVOID           Context
+    _In_ PDEVICE_OBJECT DeviceObject,
+    _In_ PIRP           Irp,
+    _In_ PVOID          Context
     )
 {
     PXENVIF_FDO         Fdo =3D (PXENVIF_FDO)Context;
@@ -2506,8 +2506,8 @@ fail1:
=20
 static FORCEINLINE NTSTATUS
 __FdoSetSystemPowerUp(
-    IN  PXENVIF_FDO     Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVIF_FDO    Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -2531,12 +2531,12 @@ __FdoSetSystemPowerUp(
     return STATUS_PENDING;
 }
=20
-__drv_functionClass(IO_WORKITEM_ROUTINE)
-__drv_sameIRQL
+_Function_class_(IO_WORKITEM_ROUTINE)
+_IRQL_requires_same_
 static VOID
 FdoSystemPowerDownWorker(
-    IN  PDEVICE_OBJECT  DeviceObject,
-    IN  PVOID           Context
+    _In_ PDEVICE_OBJECT DeviceObject,
+    _In_ PVOID          Context
     )
 {
     PXENVIF_FDO         Fdo =3D (PXENVIF_FDO)Context;
@@ -2560,15 +2560,15 @@ FdoSystemPowerDownWorker(
     IoCallDriver(Fdo->LowerDeviceObject, Irp);
 }
=20
-__drv_functionClass(REQUEST_POWER_COMPLETE)
-__drv_sameIRQL
+_Function_class_(REQUEST_POWER_COMPLETE)
+_IRQL_requires_same_
 static VOID
 FdoRequestSetDevicePowerDownComplete(
-    IN  PDEVICE_OBJECT      DeviceObject,
-    IN  UCHAR               MinorFunction,
-    IN  POWER_STATE         PowerState,
-    IN  PVOID               Context,
-    IN  PIO_STATUS_BLOCK    IoStatus
+    _In_ PDEVICE_OBJECT     DeviceObject,
+    _In_ UCHAR              MinorFunction,
+    _In_ POWER_STATE        PowerState,
+    _In_ PVOID              Context,
+    _In_ PIO_STATUS_BLOCK   IoStatus
     )
 {
     PIRP                    Irp =3D (PIRP)Context;
@@ -2611,8 +2611,8 @@ FdoRequestSetDevicePowerDownComplete(
=20
 static FORCEINLINE NTSTATUS
 __FdoSetSystemPowerDown(
-    IN  PXENVIF_FDO     Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVIF_FDO    Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -2655,8 +2655,8 @@ fail1:
=20
 static FORCEINLINE NTSTATUS
 __FdoSetSystemPower(
-    IN  PXENVIF_FDO     Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVIF_FDO    Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -2698,8 +2698,8 @@ done:
=20
 static FORCEINLINE NTSTATUS
 __FdoQueryDevicePowerUp(
-    IN  PXENVIF_FDO     Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVIF_FDO    Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -2719,8 +2719,8 @@ __FdoQueryDevicePowerUp(
=20
 static FORCEINLINE NTSTATUS
 __FdoQueryDevicePowerDown(
-    IN  PXENVIF_FDO     Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVIF_FDO    Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -2740,8 +2740,8 @@ __FdoQueryDevicePowerDown(
=20
 static FORCEINLINE NTSTATUS
 __FdoQueryDevicePower(
-    IN  PXENVIF_FDO     Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVIF_FDO    Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -2778,15 +2778,15 @@ done:
     return status;
 }
=20
-__drv_functionClass(REQUEST_POWER_COMPLETE)
-__drv_sameIRQL
+_Function_class_(REQUEST_POWER_COMPLETE)
+_IRQL_requires_same_
 static VOID
 FdoRequestQueryDevicePowerUpComplete(
-    IN  PDEVICE_OBJECT      DeviceObject,
-    IN  UCHAR               MinorFunction,
-    IN  POWER_STATE         PowerState,
-    IN  PVOID               Context,
-    IN  PIO_STATUS_BLOCK    IoStatus
+    _In_ PDEVICE_OBJECT     DeviceObject,
+    _In_ UCHAR              MinorFunction,
+    _In_ POWER_STATE        PowerState,
+    _In_ PVOID              Context,
+    _In_ PIO_STATUS_BLOCK   IoStatus
     )
 {
     PIRP                    Irp =3D (PIRP)Context;
@@ -2801,13 +2801,13 @@ FdoRequestQueryDevicePowerUpComplete(
     IoCompleteRequest(Irp, IO_NO_INCREMENT);
 }
=20
-__drv_functionClass(IO_COMPLETION_ROUTINE)
-__drv_sameIRQL
+_Function_class_(IO_COMPLETION_ROUTINE)
+_IRQL_requires_same_
 static NTSTATUS
 FdoQuerySystemPowerUpComplete(
-    IN  PDEVICE_OBJECT  DeviceObject,
-    IN  PIRP            Irp,
-    IN  PVOID           Context
+    _In_ PDEVICE_OBJECT DeviceObject,
+    _In_ PIRP           Irp,
+    _In_ PVOID          Context
     )
 {
     PXENVIF_FDO         Fdo =3D (PXENVIF_FDO)Context;
@@ -2842,8 +2842,8 @@ fail1:
=20
 static FORCEINLINE NTSTATUS
 __FdoQuerySystemPowerUp(
-    IN  PXENVIF_FDO     Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVIF_FDO    Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -2867,15 +2867,15 @@ __FdoQuerySystemPowerUp(
     return STATUS_PENDING;
 }
=20
-__drv_functionClass(REQUEST_POWER_COMPLETE)
-__drv_sameIRQL
+_Function_class_(REQUEST_POWER_COMPLETE)
+_IRQL_requires_same_
 static VOID
 FdoRequestQueryDevicePowerDownComplete(
-    IN  PDEVICE_OBJECT      DeviceObject,
-    IN  UCHAR               MinorFunction,
-    IN  POWER_STATE         PowerState,
-    IN  PVOID               Context,
-    IN  PIO_STATUS_BLOCK    IoStatus
+    _In_ PDEVICE_OBJECT     DeviceObject,
+    _In_ UCHAR              MinorFunction,
+    _In_ POWER_STATE        PowerState,
+    _In_ PVOID              Context,
+    _In_ PIO_STATUS_BLOCK   IoStatus
     )
 {
     PIRP                    Irp =3D (PIRP)Context;
@@ -2905,8 +2905,8 @@ fail1:
=20
 static FORCEINLINE NTSTATUS
 __FdoQuerySystemPowerDown(
-    IN  PXENVIF_FDO     Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVIF_FDO    Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -2945,8 +2945,8 @@ fail1:
=20
 static FORCEINLINE NTSTATUS
 __FdoQuerySystemPower(
-    IN  PXENVIF_FDO     Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVIF_FDO    Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -2986,8 +2986,8 @@ done:
=20
 static FORCEINLINE NTSTATUS
 __FdoDevicePower(
-    IN  PXENVIF_FDO     Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVIF_FDO    Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -3015,8 +3015,8 @@ __FdoDevicePower(
=20
 static FORCEINLINE NTSTATUS
 __FdoSystemPower(
-    IN  PXENVIF_FDO     Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVIF_FDO    Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -3044,8 +3044,8 @@ __FdoSystemPower(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoDispatchPower(
-    IN  PXENVIF_FDO   Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVIF_FDO    Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -3075,8 +3075,8 @@ FdoDispatchPower(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoDispatchDefault(
-    IN  PXENVIF_FDO     Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVIF_FDO    Fdo,
+    _In_ PIRP           Irp
     )
 {
     NTSTATUS            status;
@@ -3089,8 +3089,8 @@ FdoDispatchDefault(
=20
 NTSTATUS
 FdoDispatch(
-    IN  PXENVIF_FDO     Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVIF_FDO    Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -3115,15 +3115,15 @@ FdoDispatch(
     return status;
 }
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 static NTSTATUS
 FdoQueryInterface(
-    IN  PXENVIF_FDO     Fdo,
-    IN  const GUID      *Guid,
-    IN  ULONG           Version,
-    OUT PINTERFACE      Interface,
-    IN  ULONG           Size,
-    IN  BOOLEAN         Optional
+    _In_ PXENVIF_FDO    Fdo,
+    _In_ const GUID     *Guid,
+    _In_ ULONG          Version,
+    _Out_ PINTERFACE    Interface,
+    _In_ ULONG          Size,
+    _In_ BOOLEAN        Optional
     )
 {
     KEVENT              Event;
@@ -3223,7 +3223,7 @@ DEFINE_FDO_GET_INTERFACE(Unplug, PXENBUS_UNPLUG_INTE=
RFACE)
=20
 NTSTATUS
 FdoCreate(
-    IN  PDEVICE_OBJECT      PhysicalDeviceObject
+    _In_ PDEVICE_OBJECT     PhysicalDeviceObject
     )
 {
     PDEVICE_OBJECT          FunctionDeviceObject;
@@ -3461,7 +3461,7 @@ fail1:
=20
 VOID
 FdoDestroy(
-    IN  PXENVIF_FDO     Fdo
+    _In_ PXENVIF_FDO    Fdo
     )
 {
     PXENVIF_DX          Dx =3D Fdo->Dx;
diff --git a/src/xenvif/fdo=2Eh b/src/xenvif/fdo=2Eh
index 5e28cf2=2E=2Ec72066d 100644
--- a/src/xenvif/fdo=2Eh
+++ b/src/xenvif/fdo=2Eh
@@ -48,85 +48,85 @@
=20
 extern PCHAR
 FdoGetVendorName(
-    IN  PXENVIF_FDO Fdo
+    _In_ PXENVIF_FDO    Fdo
     );
=20
 extern PCHAR
 FdoGetName(
-    IN  PXENVIF_FDO Fdo
+    _In_ PXENVIF_FDO    Fdo
     );
=20
 extern NTSTATUS
 FdoAddPhysicalDeviceObject(
-    IN  PXENVIF_FDO     Fdo,
-    IN  PXENVIF_PDO     Pdo
+    _In_ PXENVIF_FDO    Fdo,
+    _In_ PXENVIF_PDO    Pdo
     );
=20
 extern VOID
 FdoRemovePhysicalDeviceObject(
-    IN  PXENVIF_FDO     Fdo,
-    IN  PXENVIF_PDO     Pdo
+    _In_ PXENVIF_FDO    Fdo,
+    _In_ PXENVIF_PDO    Pdo
     );
=20
 extern VOID
 FdoAcquireMutex(
-    IN  PXENVIF_FDO     Fdo
+    _In_ PXENVIF_FDO    Fdo
     );
=20
 extern VOID
 FdoReleaseMutex(
-    IN  PXENVIF_FDO     Fdo
+    _In_ PXENVIF_FDO    Fdo
     );
=20
 extern PDEVICE_OBJECT
 FdoGetPhysicalDeviceObject(
-    IN  PXENVIF_FDO Fdo
+    _In_ PXENVIF_FDO    Fdo
     );
=20
 extern PDMA_ADAPTER
 FdoGetDmaAdapter(
-    IN  PXENVIF_FDO         Fdo,
-    IN  PDEVICE_DESCRIPTION DeviceDescriptor,
-    OUT PULONG              NumberOfMapRegisters
+    _In_ PXENVIF_FDO            Fdo,
+    _In_ PDEVICE_DESCRIPTION    DeviceDescriptor,
+    _Out_ PULONG                NumberOfMapRegisters
     );
=20
 extern BOOLEAN
 FdoTranslateBusAddress(
-    IN      PXENVIF_FDO         Fdo,
-    IN      PHYSICAL_ADDRESS    BusAddress,
-    IN      ULONG               Length,
-    IN OUT  PULONG              AddressSpace,
-    OUT     PPHYSICAL_ADDRESS   TranslatedAddress
+    _In_ PXENVIF_FDO            Fdo,
+    _In_ PHYSICAL_ADDRESS       BusAddress,
+    _In_ ULONG                  Length,
+    _Inout_ PULONG              AddressSpace,
+    _Outptr_ PPHYSICAL_ADDRESS  TranslatedAddress
     );
=20
 extern ULONG
 FdoSetBusData(
-    IN  PXENVIF_FDO     Fdo,
-    IN  ULONG           DataType,
-    IN  PVOID           Buffer,
-    IN  ULONG           Offset,
-    IN  ULONG           Length
+    _In_ PXENVIF_FDO    Fdo,
+    _In_ ULONG          DataType,
+    _In_ PVOID          Buffer,
+    _In_ ULONG          Offset,
+    _In_ ULONG          Length
     );
=20
 extern ULONG
 FdoGetBusData(
-    IN  PXENVIF_FDO     Fdo,
-    IN  ULONG           DataType,
-    IN  PVOID           Buffer,
-    IN  ULONG           Offset,
-    IN  ULONG           Length
+    _In_ PXENVIF_FDO    Fdo,
+    _In_ ULONG          DataType,
+    _In_ PVOID          Buffer,
+    _In_ ULONG          Offset,
+    _In_ ULONG          Length
     );
=20
 extern NTSTATUS
 FdoDelegateIrp(
-    IN  PXENVIF_FDO    Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVIF_FDO    Fdo,
+    _In_ PIRP           Irp
     );
=20
 extern NTSTATUS
 FdoDispatch(
-    IN  PXENVIF_FDO    Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVIF_FDO    Fdo,
+    _In_ PIRP           Irp
     );
=20
 #define DECLARE_FDO_GET_INTERFACE(_Interface, _Type)    \
@@ -147,12 +147,12 @@ DECLARE_FDO_GET_INTERFACE(Unplug, PXENBUS_UNPLUG_INT=
ERFACE)
=20
 extern NTSTATUS
 FdoCreate(
-    IN  PDEVICE_OBJECT  PhysicalDeviceObject
+    _In_ PDEVICE_OBJECT PhysicalDeviceObject
     );
=20
 extern VOID
 FdoDestroy(
-    IN  PXENVIF_FDO    Fdo
+    _In_ PXENVIF_FDO    Fdo
     );
=20
 #endif  // _XENVIF_FDO_H
diff --git a/src/xenvif/frontend=2Ec b/src/xenvif/frontend=2Ec
index 56fcc30=2E=2E675e419 100644
--- a/src/xenvif/frontend=2Ec
+++ b/src/xenvif/frontend=2Ec
@@ -117,7 +117,7 @@ struct _XENVIF_FRONTEND {
=20
 static const PCHAR
 FrontendStateName(
-    IN  XENVIF_FRONTEND_STATE   State
+    _In_ XENVIF_FRONTEND_STATE  State
     )
 {
 #define _STATE_NAME(_State)     \
@@ -144,7 +144,7 @@ FrontendStateName(
=20
 static FORCEINLINE PVOID
 __FrontendAllocate(
-    IN  ULONG   Length
+    _In_ ULONG  Length
     )
 {
     return __AllocatePoolWithTag(NonPagedPool, Length, FRONTEND_POOL);
@@ -152,7 +152,7 @@ __FrontendAllocate(
=20
 static FORCEINLINE VOID
 __FrontendFree(
-    IN  PVOID   Buffer
+    _In_ PVOID  Buffer
     )
 {
     __FreePoolWithTag(Buffer, FRONTEND_POOL);
@@ -160,7 +160,7 @@ __FrontendFree(
=20
 static FORCEINLINE PXENVIF_PDO
 __FrontendGetPdo(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     )
 {
     return Frontend->Pdo;
@@ -168,7 +168,7 @@ __FrontendGetPdo(
=20
 PXENVIF_PDO
 FrontendGetPdo(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     )
 {
     return __FrontendGetPdo(Frontend);
@@ -176,7 +176,7 @@ FrontendGetPdo(
=20
 static FORCEINLINE PCHAR
 __FrontendGetPath(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     )
 {
     return Frontend->Path;
@@ -184,7 +184,7 @@ __FrontendGetPath(
=20
 PCHAR
 FrontendGetPath(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     )
 {
     return __FrontendGetPath(Frontend);
@@ -192,7 +192,7 @@ FrontendGetPath(
=20
 static FORCEINLINE PCHAR
 __FrontendGetPrefix(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     )
 {
     return Frontend->Prefix;
@@ -200,7 +200,7 @@ __FrontendGetPrefix(
=20
 PCHAR
 FrontendGetPrefix(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     )
 {
     return __FrontendGetPrefix(Frontend);
@@ -208,7 +208,7 @@ FrontendGetPrefix(
=20
 static FORCEINLINE PCHAR
 __FrontendGetBackendPath(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     )
 {
     return Frontend->BackendPath;
@@ -216,7 +216,7 @@ __FrontendGetBackendPath(
=20
 PCHAR
 FrontendGetBackendPath(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     )
 {
     return __FrontendGetBackendPath(Frontend);
@@ -224,7 +224,7 @@ FrontendGetBackendPath(
=20
 static FORCEINLINE USHORT
 __FrontendGetBackendDomain(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     )
 {
     return Frontend->BackendDomain;
@@ -232,7 +232,7 @@ __FrontendGetBackendDomain(
=20
 USHORT
 FrontendGetBackendDomain(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     )
 {
     return __FrontendGetBackendDomain(Frontend);
@@ -240,7 +240,7 @@ FrontendGetBackendDomain(
=20
 static VOID
 FrontendSetMaxQueues(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     )
 {
     HANDLE                  ParametersKey;
@@ -265,7 +265,7 @@ FrontendSetMaxQueues(
=20
 static FORCEINLINE ULONG
 __FrontendGetMaxQueues(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     )
 {
     ASSERT(Frontend->MaxQueues !=3D 0);
@@ -274,7 +274,7 @@ __FrontendGetMaxQueues(
=20
 ULONG
 FrontendGetMaxQueues(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     )
 {
     return __FrontendGetMaxQueues(Frontend);
@@ -282,8 +282,8 @@ FrontendGetMaxQueues(
=20
 PCHAR
 FrontendFormatPath(
-    IN  PXENVIF_FRONTEND    Frontend,
-    IN  ULONG               Index
+    _In_ PXENVIF_FRONTEND   Frontend,
+    _In_ ULONG              Index
     )
 {
     ULONG                   Length;
@@ -317,8 +317,8 @@ fail1:
=20
 VOID
 FrontendFreePath(
-    IN  PXENVIF_FRONTEND    Frontend,
-    IN  PCHAR               Path
+    _In_ PXENVIF_FRONTEND   Frontend,
+    _In_ PCHAR              Path
     )
 {
     UNREFERENCED_PARAMETER(Frontend);
@@ -350,7 +350,7 @@ DEFINE_FRONTEND_GET_FUNCTION(Controller, PXENVIF_CONTR=
OLLER)
=20
 static BOOLEAN
 FrontendIsOnline(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     )
 {
     return Frontend->Online;
@@ -358,7 +358,7 @@ FrontendIsOnline(
=20
 static BOOLEAN
 FrontendIsBackendOnline(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     )
 {
     PCHAR                   Buffer;
@@ -387,8 +387,8 @@ FrontendIsBackendOnline(
 _IRQL_requires_(PASSIVE_LEVEL)
 static DECLSPEC_NOINLINE NTSTATUS
 FrontendEject(
-    IN  PXENVIF_THREAD  Self,
-    IN  PVOID           Context
+    _In_ PXENVIF_THREAD Self,
+    _In_ PVOID          Context
     )
 {
     PXENVIF_FRONTEND    Frontend =3D Context;
@@ -443,13 +443,13 @@ loop:
=20
 VOID
 FrontendEjectFailed(
-    IN PXENVIF_FRONTEND Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     )
 {
-    KIRQL               Irql;
-    ULONG               Length;
-    PCHAR               Path;
-    NTSTATUS            status;
+    KIRQL                   Irql;
+    ULONG                   Length;
+    PCHAR                   Path;
+    NTSTATUS                status;
=20
     KeAcquireSpinLock(&Frontend->Lock, &Irql);
=20
@@ -494,8 +494,8 @@ fail1:
=20
 static NTSTATUS
 FrontendProcessInterfaceTable(
-    IN  PXENVIF_FRONTEND    Frontend,
-    IN  PMIB_IF_TABLE2      Table
+    _In_ PXENVIF_FRONTEND   Frontend,
+    _In_ PMIB_IF_TABLE2     Table
     )
 {
     ETHERNET_ADDRESS        PermanentPhysicalAddress;
@@ -542,14 +542,14 @@ found:
=20
 static NTSTATUS
 FrontendInsertAddress(
-    IN  PXENVIF_FRONTEND    Frontend,
-    IN  const SOCKADDR_INET *Address,
-    IN  UINT8               Prefix
+    _In_ PXENVIF_FRONTEND       Frontend,
+    _In_ const SOCKADDR_INET    *Address,
+    _In_ UINT8                  Prefix
     )
 {
-    ULONG                   Index;
-    PXENVIF_ADDRESS         Table;
-    NTSTATUS                status;
+    ULONG                       Index;
+    PXENVIF_ADDRESS             Table;
+    NTSTATUS                    status;
=20
     Trace("=3D=3D=3D=3D>\n");
=20
@@ -606,12 +606,12 @@ fail1:
=20
 static NTSTATUS
 FrontendProcessAddressTable(
-    IN  PXENVIF_FRONTEND            Frontend,
-    IN  PMIB_UNICASTIPADDRESS_TABLE Table
+    _In_ PXENVIF_FRONTEND               Frontend,
+    _In_ PMIB_UNICASTIPADDRESS_TABLE    Table
     )
 {
-    ULONG                           Index;
-    NTSTATUS                        status;
+    ULONG                               Index;
+    NTSTATUS                            status;
=20
     UNREFERENCED_PARAMETER(Frontend);
=20
@@ -649,7 +649,7 @@ fail1:
=20
 static NTSTATUS
 FrontendDumpAlias(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     )
 {
     NTSTATUS                status;
@@ -861,7 +861,7 @@ FrontendDumpIPv6Address(
=20
 static NTSTATUS
 FrontendDumpAddressTable(
-    IN  PXENVIF_FRONTEND        Frontend
+    _In_ PXENVIF_FRONTEND       Frontend
     )
 {
     PXENBUS_STORE_TRANSACTION   Transaction;
@@ -961,12 +961,12 @@ fail1:
=20
 static VOID
 FrontendIpAddressChange(
-    IN  PVOID                       Context,
-    IN  PMIB_UNICASTIPADDRESS_ROW   Row OPTIONAL,
-    IN  MIB_NOTIFICATION_TYPE       NotificationType
+    _In_ PVOID                          Context,
+    _In_opt_ PMIB_UNICASTIPADDRESS_ROW  Row,
+    _In_ MIB_NOTIFICATION_TYPE          NotificationType
     )
 {
-    PXENVIF_FRONTEND                Frontend =3D Context;
+    PXENVIF_FRONTEND                    Frontend =3D Context;
=20
     UNREFERENCED_PARAMETER(Row);
     UNREFERENCED_PARAMETER(NotificationType);
@@ -977,8 +977,8 @@ FrontendIpAddressChange(
 _IRQL_requires_(PASSIVE_LEVEL)
 static DECLSPEC_NOINLINE NTSTATUS
 FrontendMib(
-    IN  PXENVIF_THREAD  Self,
-    IN  PVOID           Context
+    _In_ PXENVIF_THREAD Self,
+    _In_ PVOID          Context
     )
 {
     PXENVIF_FRONTEND    Frontend =3D Context;
@@ -1138,9 +1138,9 @@ fail1:
 _IRQL_requires_max_(DISPATCH_LEVEL)
 NTSTATUS
 FrontendSetMulticastAddresses(
-    IN  PXENVIF_FRONTEND    Frontend,
-    IN  PETHERNET_ADDRESS   Address,
-    IN  ULONG               Count
+    _In_ PXENVIF_FRONTEND   Frontend,
+    _In_ PETHERNET_ADDRESS  Address,
+    _In_ ULONG              Count
     )
 {
     PXENVIF_TRANSMITTER     Transmitter;
@@ -1251,8 +1251,8 @@ fail1:
 _IRQL_requires_(DISPATCH_LEVEL)
 static NTSTATUS
 FrontendNotifyMulticastAddresses(
-    IN  PXENVIF_FRONTEND    Frontend,
-    IN  BOOLEAN             Add
+    _In_ PXENVIF_FRONTEND   Frontend,
+    _In_ BOOLEAN            Add
     )
 {
     PXENVIF_TRANSMITTER     Transmitter;
@@ -1306,14 +1306,14 @@ fail1:
 _IRQL_requires_max_(DISPATCH_LEVEL)
 NTSTATUS
 FrontendSetFilterLevel(
-    IN  PXENVIF_FRONTEND        Frontend,
-    IN  ETHERNET_ADDRESS_TYPE   Type,
-    IN  XENVIF_MAC_FILTER_LEVEL Level
+    _In_ PXENVIF_FRONTEND           Frontend,
+    _In_ ETHERNET_ADDRESS_TYPE      Type,
+    _In_ XENVIF_MAC_FILTER_LEVEL    Level
     )
 {
-    PXENVIF_MAC                 Mac;
-    KIRQL                       Irql;
-    NTSTATUS                    status;
+    PXENVIF_MAC                     Mac;
+    KIRQL                           Irql;
+    NTSTATUS                        status;
=20
     Mac =3D FrontendGetMac(Frontend);
=20
@@ -1348,7 +1348,7 @@ fail1:
 _IRQL_requires_max_(DISPATCH_LEVEL)
 VOID
 FrontendAdvertiseIpAddresses(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     )
 {
     PXENVIF_TRANSMITTER     Transmitter;
@@ -1394,7 +1394,7 @@ FrontendAdvertiseIpAddresses(
 _IRQL_requires_(DISPATCH_LEVEL)
 static VOID
 FrontendSetOnline(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     )
 {
     Trace("=3D=3D=3D=3D>\n");
@@ -1407,7 +1407,7 @@ FrontendSetOnline(
 _IRQL_requires_(DISPATCH_LEVEL)
 static VOID
 FrontendSetOffline(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     )
 {
     Trace("=3D=3D=3D=3D>\n");
@@ -1421,8 +1421,8 @@ FrontendSetOffline(
 _IRQL_requires_(DISPATCH_LEVEL)
 static VOID
 FrontendSetXenbusState(
-    IN  PXENVIF_FRONTEND    Frontend,
-    IN  XenbusState         State
+    _In_ PXENVIF_FRONTEND   Frontend,
+    _In_ XenbusState        State
     )
 {
     BOOLEAN                 Online;
@@ -1454,7 +1454,7 @@ FrontendSetXenbusState(
 _IRQL_requires_(DISPATCH_LEVEL)
 static NTSTATUS
 FrontendAcquireBackend(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     )
 {
     PCHAR                   Buffer;
@@ -1501,8 +1501,8 @@ fail1:
 _IRQL_requires_(DISPATCH_LEVEL)
 static VOID
 FrontendWaitForBackendXenbusStateChange(
-    IN      PXENVIF_FRONTEND    Frontend,
-    IN OUT  XenbusState         *State
+    _In_ PXENVIF_FRONTEND       Frontend,
+    _Inout_ XenbusState         *State
     )
 {
     KEVENT                      Event;
@@ -1606,7 +1606,7 @@ FrontendWaitForBackendXenbusStateChange(
 _IRQL_requires_(DISPATCH_LEVEL)
 static VOID
 FrontendReleaseBackend(
-    IN      PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     )
 {
     Trace("=3D=3D=3D=3D=3D>\n");
@@ -1627,7 +1627,7 @@ FrontendReleaseBackend(
 _IRQL_requires_(DISPATCH_LEVEL)
 static VOID
 FrontendClose(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     )
 {
     XenbusState             State;
@@ -1689,7 +1689,7 @@ FrontendClose(
 _IRQL_requires_(DISPATCH_LEVEL)
 static NTSTATUS
 FrontendPrepare(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     )
 {
     XenbusState             State;
@@ -1790,9 +1790,9 @@ fail1:
=20
 static FORCEINLINE VOID
 __FrontendQueryStatistic(
-    IN  PXENVIF_FRONTEND        Frontend,
-    IN  XENVIF_VIF_STATISTIC    Name,
-    OUT PULONGLONG              Value
+    _In_ PXENVIF_FRONTEND       Frontend,
+    _In_ XENVIF_VIF_STATISTIC   Name,
+    _Out_ PULONGLONG            Value
     )
 {
     ULONG                       Index;
@@ -1810,9 +1810,9 @@ __FrontendQueryStatistic(
=20
 VOID
 FrontendQueryStatistic(
-    IN  PXENVIF_FRONTEND        Frontend,
-    IN  XENVIF_VIF_STATISTIC    Name,
-    OUT PULONGLONG              Value
+    _In_ PXENVIF_FRONTEND       Frontend,
+    _In_ XENVIF_VIF_STATISTIC   Name,
+    _Out_ PULONGLONG            Value
     )
 {
     __FrontendQueryStatistic(Frontend, Name, Value);
@@ -1820,9 +1820,9 @@ FrontendQueryStatistic(
=20
 VOID
 FrontendIncrementStatistic(
-    IN  PXENVIF_FRONTEND        Frontend,
-    IN  XENVIF_VIF_STATISTIC    Name,
-    IN  ULONGLONG               Delta
+    _In_ PXENVIF_FRONTEND       Frontend,
+    _In_ XENVIF_VIF_STATISTIC   Name,
+    _In_ ULONGLONG              Delta
     )
 {
     ULONG                       Index;
@@ -1845,7 +1845,7 @@ FrontendIncrementStatistic(
=20
 static FORCEINLINE const CHAR *
 __FrontendStatisticName(
-    IN  XENVIF_VIF_STATISTIC    Name
+    _In_ XENVIF_VIF_STATISTIC   Name
     )
 {
 #define _FRONTEND_STATISTIC_NAME(_Name)     \
@@ -1917,8 +1917,8 @@ __FrontendStatisticName(
=20
 static VOID
 FrontendDebugCallback(
-    IN  PVOID               Argument,
-    IN  BOOLEAN             Crashing
+    _In_ PVOID              Argument,
+    _In_ BOOLEAN            Crashing
     )
 {
     PXENVIF_FRONTEND        Frontend =3D Argument;
@@ -1950,7 +1950,7 @@ FrontendDebugCallback(
=20
 static NTSTATUS
 FrontendSetNumQueues(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     )
 {
     PCHAR                   Buffer;
@@ -1990,7 +1990,7 @@ fail1:
=20
 static FORCEINLINE ULONG
 __FrontendGetNumQueues(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     )
 {
     ASSERT(Frontend->NumQueues !=3D 0);
@@ -1999,7 +1999,7 @@ __FrontendGetNumQueues(
=20
 ULONG
 FrontendGetNumQueues(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     )
 {
     return __FrontendGetNumQueues(Frontend);
@@ -2007,7 +2007,7 @@ FrontendGetNumQueues(
=20
 static VOID
 FrontendSetSplit(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     )
 {
     PCHAR                   Buffer;
@@ -2035,7 +2035,7 @@ FrontendSetSplit(
=20
 static FORCEINLINE BOOLEAN
 __FrontendIsSplit(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     )
 {
     return Frontend->Split;
@@ -2043,7 +2043,7 @@ __FrontendIsSplit(
=20
 BOOLEAN
 FrontendIsSplit(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     )
 {
     return __FrontendIsSplit(Frontend);
@@ -2134,8 +2134,8 @@ fail1:
 _IRQL_requires_max_(DISPATCH_LEVEL)
 NTSTATUS
 FrontendSetHashAlgorithm(
-    IN  PXENVIF_FRONTEND                Frontend,
-    IN  XENVIF_PACKET_HASH_ALGORITHM    Algorithm
+    _In_ PXENVIF_FRONTEND               Frontend,
+    _In_ XENVIF_PACKET_HASH_ALGORITHM   Algorithm
     )
 {
     XENVIF_FRONTEND_HASH                Hash;
@@ -2201,8 +2201,8 @@ fail1:
 _IRQL_requires_max_(DISPATCH_LEVEL)
 NTSTATUS
 FrontendQueryHashTypes(
-    IN  PXENVIF_FRONTEND    Frontend,
-    OUT PULONG              Types
+    _In_ PXENVIF_FRONTEND   Frontend,
+    _Out_ PULONG            Types
     )
 {
     KIRQL                   Irql;
@@ -2241,9 +2241,9 @@ fail1:
 _IRQL_requires_max_(DISPATCH_LEVEL)
 NTSTATUS
 FrontendSetHashMapping(
-    IN  PXENVIF_FRONTEND    Frontend,
-    IN  PULONG              Mapping,
-    IN  ULONG               Size
+    _In_ PXENVIF_FRONTEND   Frontend,
+    _In_ PULONG             Mapping,
+    _In_ ULONG              Size
     )
 {
     XENVIF_FRONTEND_HASH    Hash;
@@ -2285,8 +2285,8 @@ fail1:
 _IRQL_requires_max_(DISPATCH_LEVEL)
 NTSTATUS
 FrontendSetHashKey(
-    IN  PXENVIF_FRONTEND    Frontend,
-    IN  PUCHAR              Key
+    _In_ PXENVIF_FRONTEND   Frontend,
+    _In_ PUCHAR             Key
     )
 {
     XENVIF_FRONTEND_HASH    Hash;
@@ -2320,8 +2320,8 @@ fail1:
 _IRQL_requires_max_(DISPATCH_LEVEL)
 NTSTATUS
 FrontendSetHashTypes(
-    IN  PXENVIF_FRONTEND    Frontend,
-    IN  ULONG               Types
+    _In_ PXENVIF_FRONTEND   Frontend,
+    _In_ ULONG              Types
     )
 {
     XENVIF_FRONTEND_HASH    Hash;
@@ -2365,9 +2365,9 @@ fail1:
=20
 ULONG
 FrontendGetQueue(
-    IN  PXENVIF_FRONTEND                Frontend,
-    IN  XENVIF_PACKET_HASH_ALGORITHM    Algorithm,
-    IN  ULONG                           Value
+    _In_ PXENVIF_FRONTEND               Frontend,
+    _In_ XENVIF_PACKET_HASH_ALGORITHM   Algorithm,
+    _In_ ULONG                          Value
     )
 {
     ULONG                               Queue;
@@ -2396,7 +2396,7 @@ FrontendGetQueue(
 _IRQL_requires_(DISPATCH_LEVEL)
 static NTSTATUS
 FrontendConnect(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     )
 {
     XenbusState             State;
@@ -2593,7 +2593,7 @@ fail1:
 _IRQL_requires_(DISPATCH_LEVEL)
 static VOID
 FrontendDisconnect(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     )
 {
     Trace("=3D=3D=3D=3D>\n");
@@ -2621,7 +2621,7 @@ FrontendDisconnect(
 _IRQL_requires_(DISPATCH_LEVEL)
 static NTSTATUS
 FrontendEnable(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     )
 {
     NTSTATUS                status;
@@ -2673,7 +2673,7 @@ fail1:
 _IRQL_requires_(DISPATCH_LEVEL)
 static VOID
 FrontendDisable(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     )
 {
     Trace("=3D=3D=3D=3D>\n");
@@ -2690,7 +2690,7 @@ FrontendDisable(
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE BOOLEAN
 FrontendIsPoisoned(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     )
 {
     return TransmitterIsPoisoned(__FrontendGetTransmitter(Frontend));
@@ -2699,8 +2699,8 @@ FrontendIsPoisoned(
 _IRQL_requires_max_(DISPATCH_LEVEL)
 NTSTATUS
 FrontendSetState(
-    IN  PXENVIF_FRONTEND        Frontend,
-    IN  XENVIF_FRONTEND_STATE   State
+    _In_ PXENVIF_FRONTEND       Frontend,
+    _In_ XENVIF_FRONTEND_STATE  State
     )
 {
     BOOLEAN                     Failed;
@@ -2876,7 +2876,7 @@ FrontendSetState(
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE VOID
 __FrontendResume(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     )
 {
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, DISPATCH_LEVEL);
@@ -2888,7 +2888,7 @@ __FrontendResume(
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE VOID
 __FrontendSuspend(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     )
 {
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, DISPATCH_LEVEL);
@@ -2899,7 +2899,7 @@ __FrontendSuspend(
 _IRQL_requires_(HIGH_LEVEL)
 static DECLSPEC_NOINLINE VOID
 FrontendSuspendCallbackEarly(
-    IN  PVOID           Argument
+    _In_ PVOID          Argument
     )
 {
     PXENVIF_FRONTEND    Frontend =3D Argument;
@@ -2910,7 +2910,7 @@ FrontendSuspendCallbackEarly(
 _IRQL_requires_(DISPATCH_LEVEL)
 static DECLSPEC_NOINLINE VOID
 FrontendSuspendCallbackLate(
-    IN  PVOID           Argument
+    _In_ PVOID          Argument
     )
 {
     PXENVIF_FRONTEND    Frontend =3D Argument;
@@ -2923,7 +2923,7 @@ _IRQL_requires_min_(PASSIVE_LEVEL)
 _IRQL_requires_max_(DISPATCH_LEVEL)
 NTSTATUS
 FrontendResume(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     )
 {
     KIRQL                   Irql;
@@ -3001,7 +3001,7 @@ _IRQL_requires_min_(PASSIVE_LEVEL)
 _IRQL_requires_max_(DISPATCH_LEVEL)
 VOID
 FrontendSuspend(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     )
 {
     KIRQL                   Irql;
@@ -3043,17 +3043,17 @@ FrontendSuspend(
 _IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 FrontendInitialize(
-    IN  PXENVIF_PDO         Pdo,
-    OUT PXENVIF_FRONTEND    *Frontend
+    _In_ PXENVIF_PDO            Pdo,
+    _Outptr_ PXENVIF_FRONTEND   *Frontend
     )
 {
-    PCHAR                   Name;
-    ULONG                   Length;
-    PCHAR                   Path;
-    PCHAR                   Prefix;
-    HANDLE                  ParametersKey;
-    ULONG                   FrontendDisableToeplitz;
-    NTSTATUS                status;
+    PCHAR                       Name;
+    ULONG                       Length;
+    PCHAR                       Path;
+    PCHAR                       Prefix;
+    HANDLE                      ParametersKey;
+    ULONG                       FrontendDisableToeplitz;
+    NTSTATUS                    status;
=20
     Trace("=3D=3D=3D=3D>\n");
=20
@@ -3253,7 +3253,7 @@ fail1:
 _IRQL_requires_(PASSIVE_LEVEL)
 VOID
 FrontendTeardown(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     )
 {
     Trace("=3D=3D=3D=3D>\n");
diff --git a/src/xenvif/frontend=2Eh b/src/xenvif/frontend=2Eh
index c1b7334=2E=2Ecaa84f9 100644
--- a/src/xenvif/frontend=2Eh
+++ b/src/xenvif/frontend=2Eh
@@ -60,204 +60,204 @@ typedef enum _XENVIF_FRONTEND_STATE {
 _IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 FrontendInitialize(
-    IN  PXENVIF_PDO         Pdo,
-    OUT PXENVIF_FRONTEND    *Frontend
+    _In_ PXENVIF_PDO            Pdo,
+    _Outptr_ PXENVIF_FRONTEND   *Frontend
     );
=20
 _IRQL_requires_(PASSIVE_LEVEL)
 extern VOID
 FrontendTeardown(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     );
=20
 extern VOID
 FrontendEjectFailed(
-    IN PXENVIF_FRONTEND Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     );
=20
 _IRQL_requires_max_(DISPATCH_LEVEL)
 extern NTSTATUS
 FrontendSetState(
-    IN  PXENVIF_FRONTEND        Frontend,
-    IN  XENVIF_FRONTEND_STATE   State
+    _In_ PXENVIF_FRONTEND       Frontend,
+    _In_ XENVIF_FRONTEND_STATE  State
     );
=20
 _IRQL_requires_min_(PASSIVE_LEVEL)
 _IRQL_requires_max_(DISPATCH_LEVEL)
 extern NTSTATUS
 FrontendResume(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     );
=20
 _IRQL_requires_min_(PASSIVE_LEVEL)
 _IRQL_requires_max_(DISPATCH_LEVEL)
 extern VOID
 FrontendSuspend(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     );
=20
 extern PXENVIF_PDO
 FrontendGetPdo(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     );
=20
 extern PCHAR
 FrontendGetPrefix(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     );
=20
 extern PCHAR
 FrontendGetPath(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     );
=20
 extern PCHAR
 FrontendGetBackendPath(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     );
=20
 extern USHORT
 FrontendGetBackendDomain(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     );
=20
 extern ULONG
 FrontendGetMaxQueues(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     );
=20
 extern ULONG
 FrontendGetNumQueues(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     );
=20
 extern BOOLEAN
 FrontendIsSplit(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     );
=20
 extern BOOLEAN
 FrontendIsSplit(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     );
=20
 extern PCHAR
 FrontendFormatPath(
-    IN  PXENVIF_FRONTEND    Frontend,
-    IN  ULONG               Index
+    _In_ PXENVIF_FRONTEND   Frontend,
+    _In_ ULONG              Index
     );
=20
 extern VOID
 FrontendFreePath(
-    IN  PXENVIF_FRONTEND    Frontend,
-    IN  PCHAR               Path
+    _In_ PXENVIF_FRONTEND   Frontend,
+    _In_ PCHAR              Path
     );
=20
 #include "mac=2Eh"
=20
 extern PXENVIF_MAC
 FrontendGetMac(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     );
=20
 #include "receiver=2Eh"
=20
 extern PXENVIF_RECEIVER
 FrontendGetReceiver(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     );
=20
 #include "transmitter=2Eh"
=20
 extern PXENVIF_TRANSMITTER
 FrontendGetTransmitter(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     );
=20
 #include "controller=2Eh"
=20
 extern PXENVIF_CONTROLLER
 FrontendGetController(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     );
=20
 extern VOID
 FrontendQueryStatistic(
-    IN  PXENVIF_FRONTEND        Frontend,
-    IN  XENVIF_VIF_STATISTIC    Index,
-    OUT PULONGLONG              Value
+    _In_ PXENVIF_FRONTEND       Frontend,
+    _In_ XENVIF_VIF_STATISTIC   Index,
+    _Out_ PULONGLONG            Value
     );
=20
 extern VOID
 FrontendIncrementStatistic(
-    IN  PXENVIF_FRONTEND        Frontend,
-    IN  XENVIF_VIF_STATISTIC    Index,
-    IN  ULONGLONG               Delta
+    _In_ PXENVIF_FRONTEND       Frontend,
+    _In_ XENVIF_VIF_STATISTIC   Index,
+    _In_ ULONGLONG              Delta
     );
=20
 _IRQL_requires_max_(DISPATCH_LEVEL)
 extern NTSTATUS
 FrontendSetMulticastAddresses(
-    IN  PXENVIF_FRONTEND    Frontend,
-    IN  PETHERNET_ADDRESS   Address,
-    IN  ULONG               Count
+    _In_ PXENVIF_FRONTEND   Frontend,
+    _In_ PETHERNET_ADDRESS  Address,
+    _In_ ULONG              Count
     );
=20
 _IRQL_requires_max_(DISPATCH_LEVEL)
 extern NTSTATUS
 FrontendSetFilterLevel(
-    IN  PXENVIF_FRONTEND        Frontend,
-    IN  ETHERNET_ADDRESS_TYPE   Type,
-    IN  XENVIF_MAC_FILTER_LEVEL Level
+    _In_ PXENVIF_FRONTEND           Frontend,
+    _In_ ETHERNET_ADDRESS_TYPE      Type,
+    _In_ XENVIF_MAC_FILTER_LEVEL    Level
     );
=20
 _IRQL_requires_max_(DISPATCH_LEVEL)
 extern VOID
 FrontendAdvertiseIpAddresses(
-    IN  PXENVIF_FRONTEND    Frontend
+    _In_ PXENVIF_FRONTEND   Frontend
     );
=20
 _IRQL_requires_max_(DISPATCH_LEVEL)
 extern NTSTATUS
 FrontendSetHashAlgorithm(
-    IN  PXENVIF_FRONTEND                Frontend,
-    IN  XENVIF_PACKET_HASH_ALGORITHM    Algorithm
+    _In_ PXENVIF_FRONTEND               Frontend,
+    _In_ XENVIF_PACKET_HASH_ALGORITHM   Algorithm
     );
=20
 _IRQL_requires_max_(DISPATCH_LEVEL)
 extern NTSTATUS
 FrontendQueryHashTypes(
-    IN  PXENVIF_FRONTEND    Frontend,
-    OUT PULONG              Types
+    _In_ PXENVIF_FRONTEND   Frontend,
+    _Out_ PULONG            Types
     );
=20
 _IRQL_requires_max_(DISPATCH_LEVEL)
 extern NTSTATUS
 FrontendSetHashMapping(
-    IN  PXENVIF_FRONTEND    Frontend,
-    IN  PULONG              Mapping,
-    IN  ULONG               Order
+    _In_ PXENVIF_FRONTEND   Frontend,
+    _In_ PULONG             Mapping,
+    _In_ ULONG              Order
     );
=20
 _IRQL_requires_max_(DISPATCH_LEVEL)
 extern NTSTATUS
 FrontendSetHashKey(
-    IN  PXENVIF_FRONTEND    Frontend,
-    IN  PUCHAR              Key
+    _In_ PXENVIF_FRONTEND   Frontend,
+    _In_ PUCHAR             Key
     );
=20
 _IRQL_requires_max_(DISPATCH_LEVEL)
 extern NTSTATUS
 FrontendSetHashTypes(
-    IN  PXENVIF_FRONTEND    Frontend,
-    IN  ULONG               Types
+    _In_ PXENVIF_FRONTEND   Frontend,
+    _In_ ULONG              Types
     );
=20
 extern ULONG
 FrontendGetQueue(
-    IN  PXENVIF_FRONTEND                Frontend,
-    IN  XENVIF_PACKET_HASH_ALGORITHM    Algorithm,
-    IN  ULONG                           Index
+    _In_ PXENVIF_FRONTEND               Frontend,
+    _In_ XENVIF_PACKET_HASH_ALGORITHM   Algorithm,
+    _In_ ULONG                          Index
     );
=20
 #endif  // _XENVIF_FRONTEND_H
diff --git a/src/xenvif/link=2Ec b/src/xenvif/link=2Ec
index e734f5a=2E=2E1f95000 100644
--- a/src/xenvif/link=2Ec
+++ b/src/xenvif/link=2Ec
@@ -43,7 +43,7 @@
=20
 static FORCEINLINE PVOID
 __LinkAllocate(
-    IN  ULONG   Length
+    _In_ ULONG  Length
     )
 {
     return __AllocatePoolWithTag(NonPagedPool, Length, LINK_TAG);
@@ -51,7 +51,7 @@ __LinkAllocate(
=20
 static FORCEINLINE VOID
 __LinkFree(
-    IN  PVOID   Buffer
+    _In_ PVOID  Buffer
     )
 {
     __FreePoolWithTag(Buffer, LINK_TAG);
@@ -59,8 +59,8 @@ __LinkFree(
=20
 static FORCEINLINE NTSTATUS
 __LinkGetImageBase(
-    IN  const CHAR              *ModuleName,
-    OUT PVOID                   *ImageBase
+    _In_ const CHAR             *ModuleName,
+    _Outptr_ PVOID              *ImageBase
     )
 {
     ULONG                       BufferSize;
@@ -151,9 +151,9 @@ fail1:
=20
 NTSTATUS
 LinkGetRoutineAddress(
-    IN  const CHAR  *ModuleName,
-    IN  const CHAR  *FunctionName,
-    OUT PVOID       *Address
+    _In_ const CHAR *ModuleName,
+    _In_ const CHAR *FunctionName,
+    _Outptr_ PVOID  *Address
     )
 {
 #define MK_PTR(_ImageBase, _Type, _RVA) \
diff --git a/src/xenvif/link=2Eh b/src/xenvif/link=2Eh
index 6915ce5=2E=2E570414c 100644
--- a/src/xenvif/link=2Eh
+++ b/src/xenvif/link=2Eh
@@ -35,9 +35,9 @@
=20
 extern NTSTATUS
 LinkGetRoutineAddress(
-    IN  const CHAR  *ModuleName,
-    IN  const CHAR  *FunctionName,
-    OUT PVOID       *Address
+    _In_ const CHAR *ModuleName,
+    _In_ const CHAR *FunctionName,
+    _Outptr_ PVOID  *Address
      );
=20
 #endif  // _XENVIF_LINK_H
diff --git a/src/xenvif/mac=2Ec b/src/xenvif/mac=2Ec
index 3e441a1=2E=2Ed7f14dd 100644
--- a/src/xenvif/mac=2Ec
+++ b/src/xenvif/mac=2Ec
@@ -73,7 +73,7 @@ struct _XENVIF_MAC {
=20
 static FORCEINLINE PVOID
 __MacAllocate(
-    IN  ULONG   Length
+    _In_ ULONG  Length
     )
 {
     return __AllocatePoolWithTag(NonPagedPool, Length, XENVIF_MAC_TAG);
@@ -81,7 +81,7 @@ __MacAllocate(
=20
 static FORCEINLINE VOID
 __MacFree(
-    IN  PVOID   Buffer
+    _In_ PVOID  Buffer
     )
 {
     __FreePoolWithTag(Buffer, XENVIF_MAC_TAG);
@@ -89,8 +89,8 @@ __MacFree(
=20
 static FORCEINLINE NTSTATUS
 __MacSetPermanentAddress(
-    IN  PXENVIF_MAC         Mac,
-    IN  PETHERNET_ADDRESS   Address
+    _In_ PXENVIF_MAC        Mac,
+    _In_ PETHERNET_ADDRESS  Address
     )
 {
     PXENVIF_FRONTEND        Frontend;
@@ -121,8 +121,8 @@ fail1:
=20
 VOID
 MacQueryPermanentAddress(
-    IN  PXENVIF_MAC         Mac,
-    OUT PETHERNET_ADDRESS   Address
+    _In_ PXENVIF_MAC        Mac,
+    _Out_ PETHERNET_ADDRESS Address
     )
 {
     *Address =3D Mac->PermanentAddress;
@@ -130,8 +130,8 @@ MacQueryPermanentAddress(
=20
 static FORCEINLINE NTSTATUS
 __MacSetCurrentAddress(
-    IN  PXENVIF_MAC         Mac,
-    IN  PETHERNET_ADDRESS   Address
+    _In_ PXENVIF_MAC        Mac,
+    _In_ PETHERNET_ADDRESS  Address
     )
 {
     PXENVIF_FRONTEND        Frontend;
@@ -162,8 +162,8 @@ fail1:
=20
 VOID
 MacQueryCurrentAddress(
-    IN  PXENVIF_MAC         Mac,
-    OUT PETHERNET_ADDRESS   Address
+    _In_ PXENVIF_MAC        Mac,
+    _Out_ PETHERNET_ADDRESS Address
     )
 {
     *Address =3D Mac->CurrentAddress;
@@ -171,8 +171,8 @@ MacQueryCurrentAddress(
=20
 static VOID
 MacDebugCallback(
-    IN  PVOID           Argument,
-    IN  BOOLEAN         Crashing
+    _In_ PVOID          Argument,
+    _In_ BOOLEAN        Crashing
     )
 {
     PXENVIF_MAC         Mac =3D Argument;
@@ -206,8 +206,8 @@ MacDebugCallback(
=20
 NTSTATUS
 MacInitialize(
-    IN  PXENVIF_FRONTEND    Frontend,
-    OUT PXENVIF_MAC         *Mac
+    _In_ PXENVIF_FRONTEND   Frontend,
+    _Outptr_ PXENVIF_MAC    *Mac
     )
 {
     HANDLE                  ParametersKey;
@@ -251,9 +251,9 @@ fail1:
 }
=20
 static FORCEINLINE VOID
-__drv_requiresIRQL(DISPATCH_LEVEL)
+_IRQL_requires_(DISPATCH_LEVEL)
 __MacAcquireLockExclusive(
-    IN  PXENVIF_MAC     Mac
+    _In_ PXENVIF_MAC    Mac
     )
 {
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, DISPATCH_LEVEL);
@@ -262,9 +262,9 @@ __MacAcquireLockExclusive(
 }
=20
 static FORCEINLINE VOID
-__drv_requiresIRQL(DISPATCH_LEVEL)
+_IRQL_requires_(DISPATCH_LEVEL)
 __MacReleaseLockExclusive(
-    IN  PXENVIF_MAC     Mac
+    _In_ PXENVIF_MAC    Mac
     )
 {
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, DISPATCH_LEVEL);
@@ -274,9 +274,9 @@ __MacReleaseLockExclusive(
 }
=20
 static FORCEINLINE VOID
-__drv_requiresIRQL(DISPATCH_LEVEL)
+_IRQL_requires_(DISPATCH_LEVEL)
 __MacAcquireLockShared(
-    IN  PXENVIF_MAC     Mac
+    _In_ PXENVIF_MAC    Mac
     )
 {
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, DISPATCH_LEVEL);
@@ -285,9 +285,9 @@ __MacAcquireLockShared(
 }
=20
 static FORCEINLINE VOID
-__drv_requiresIRQL(DISPATCH_LEVEL)
+_IRQL_requires_(DISPATCH_LEVEL)
 __MacReleaseLockShared(
-    IN  PXENVIF_MAC     Mac
+    _In_ PXENVIF_MAC    Mac
     )
 {
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, DISPATCH_LEVEL);
@@ -298,7 +298,7 @@ __MacReleaseLockShared(
=20
 NTSTATUS
 MacDumpAddressTable(
-    IN  PXENVIF_MAC     Mac
+    _In_ PXENVIF_MAC    Mac
     )
 {
     PXENVIF_FRONTEND    Frontend;
@@ -403,7 +403,7 @@ fail1:
=20
 NTSTATUS
 MacConnect(
-    IN  PXENVIF_MAC     Mac
+    _In_ PXENVIF_MAC    Mac
     )
 {
     PXENVIF_FRONTEND    Frontend;
@@ -516,7 +516,7 @@ fail1:
=20
 NTSTATUS
 MacEnable(
-    IN  PXENVIF_MAC     Mac
+    _In_ PXENVIF_MAC    Mac
     )
 {
     PXENVIF_FRONTEND    Frontend;
@@ -577,7 +577,7 @@ fail1:
=20
 VOID
 MacDisable(
-    IN  PXENVIF_MAC     Mac
+    _In_ PXENVIF_MAC    Mac
     )
 {
     PXENVIF_FRONTEND    Frontend;
@@ -610,7 +610,7 @@ MacDisable(
=20
 VOID
 MacDisconnect(
-    IN  PXENVIF_MAC     Mac
+    _In_ PXENVIF_MAC    Mac
     )
 {
     PXENVIF_FRONTEND    Frontend;
@@ -650,7 +650,7 @@ MacDisconnect(
=20
 VOID
 MacTeardown(
-    IN  PXENVIF_MAC Mac
+    _In_ PXENVIF_MAC    Mac
     )
 {
     while (!IsListEmpty(&Mac->MulticastList)) {
@@ -694,7 +694,7 @@ MacTeardown(
=20
 static FORCEINLINE ULONG64
 __MacGetSpeed(
-    IN  PXENVIF_MAC Mac
+    _In_ PXENVIF_MAC    Mac
     )
 {
     PXENVIF_FRONTEND    Frontend;
@@ -761,7 +761,7 @@ __MacGetSpeed(
=20
 static FORCEINLINE BOOLEAN
 __MacGetDisconnect(
-    IN  PXENVIF_MAC     Mac
+    _In_ PXENVIF_MAC    Mac
     )
 {
     PXENVIF_FRONTEND    Frontend;
@@ -792,14 +792,14 @@ __MacGetDisconnect(
=20
 VOID
 MacQueryState(
-    IN  PXENVIF_MAC                 Mac,
-    OUT PNET_IF_MEDIA_CONNECT_STATE MediaConnectState   OPTIONAL,
-    OUT PULONG64                    LinkSpeed           OPTIONAL,
-    OUT PNET_IF_MEDIA_DUPLEX_STATE  MediaDuplexState    OPTIONAL
+    _In_ PXENVIF_MAC                        Mac,
+    _Out_opt_ PNET_IF_MEDIA_CONNECT_STATE   MediaConnectState,
+    _Out_opt_ PULONG64                      LinkSpeed,
+    _Out_opt_ PNET_IF_MEDIA_DUPLEX_STATE    MediaDuplexState
     )
 {
-    ULONG64 Speed =3D __MacGetSpeed(Mac);
-    BOOLEAN Disconnect =3D __MacGetDisconnect(Mac);
+    ULONG64                                 Speed =3D __MacGetSpeed(Mac);
+    BOOLEAN                                 Disconnect =3D __MacGetDiscon=
nect(Mac);
=20
     if (Speed =3D=3D 0)
         Disconnect =3D TRUE;
@@ -820,8 +820,8 @@ MacQueryState(
=20
 VOID
 MacQueryMaximumFrameSize(
-    IN  PXENVIF_MAC Mac,
-    OUT PULONG      Size
+    _In_ PXENVIF_MAC    Mac,
+    _Out_ PULONG        Size
     )
 {
     *Size =3D Mac->MaximumFrameSize;
@@ -829,8 +829,8 @@ MacQueryMaximumFrameSize(
=20
 NTSTATUS
 MacAddMulticastAddress(
-    IN      PXENVIF_MAC         Mac,
-    IN      PETHERNET_ADDRESS   Address
+    _In_ PXENVIF_MAC            Mac,
+    _In_ PETHERNET_ADDRESS      Address
     )
 {
     PXENVIF_FRONTEND            Frontend;
@@ -878,8 +878,8 @@ fail1:
=20
 NTSTATUS
 MacRemoveMulticastAddress(
-    IN      PXENVIF_MAC         Mac,
-    IN      PETHERNET_ADDRESS   Address
+    _In_ PXENVIF_MAC            Mac,
+    _In_ PETHERNET_ADDRESS      Address
     )
 {
     PXENVIF_FRONTEND            Frontend;
@@ -941,9 +941,9 @@ fail1:
=20
 NTSTATUS
 MacQueryMulticastAddresses(
-    IN      PXENVIF_MAC         Mac,
-    IN      PETHERNET_ADDRESS   Address OPTIONAL,
-    IN OUT  PULONG              Count
+    _In_ PXENVIF_MAC            Mac,
+    _In_opt_ PETHERNET_ADDRESS  Address,
+    _Inout_ PULONG              Count
     )
 {
     PLIST_ENTRY                 ListEntry;
@@ -987,8 +987,8 @@ fail1:
=20
 VOID
 MacQueryBroadcastAddress(
-    IN  PXENVIF_MAC         Mac,
-    OUT PETHERNET_ADDRESS   Address
+    _In_ PXENVIF_MAC        Mac,
+    _Out_ PETHERNET_ADDRESS Address
     )
 {
     *Address =3D Mac->BroadcastAddress;
@@ -996,13 +996,13 @@ MacQueryBroadcastAddress(
=20
 NTSTATUS
 MacSetFilterLevel(
-    IN  PXENVIF_MAC             Mac,
-    IN  ETHERNET_ADDRESS_TYPE   Type,
-    IN  XENVIF_MAC_FILTER_LEVEL Level
+    _In_ PXENVIF_MAC                Mac,
+    _In_ ETHERNET_ADDRESS_TYPE      Type,
+    _In_ XENVIF_MAC_FILTER_LEVEL    Level
     )
 {
-    KIRQL                       Irql;
-    NTSTATUS                    status;
+    KIRQL                           Irql;
+    NTSTATUS                        status;
=20
     status =3D STATUS_INVALID_PARAMETER;
     if ((ULONG)Type >=3D ETHERNET_ADDRESS_TYPE_COUNT)
@@ -1036,9 +1036,9 @@ fail1:
=20
 NTSTATUS
 MacQueryFilterLevel(
-    IN  PXENVIF_MAC                 Mac,
-    IN  ETHERNET_ADDRESS_TYPE       Type,
-    OUT PXENVIF_MAC_FILTER_LEVEL    Level
+    _In_ PXENVIF_MAC                Mac,
+    _In_ ETHERNET_ADDRESS_TYPE      Type,
+    _Out_ PXENVIF_MAC_FILTER_LEVEL  Level
     )
 {
     KIRQL                           Irql;
@@ -1066,8 +1066,8 @@ fail1:
=20
 BOOLEAN
 MacApplyFilters(
-    IN  PXENVIF_MAC         Mac,
-    IN  PETHERNET_ADDRESS   DestinationAddress
+    _In_ PXENVIF_MAC        Mac,
+    _In_ PETHERNET_ADDRESS  DestinationAddress
     )
 {
     ETHERNET_ADDRESS_TYPE   Type;
diff --git a/src/xenvif/mac=2Eh b/src/xenvif/mac=2Eh
index 487e0a1=2E=2Ec964a2f 100644
--- a/src/xenvif/mac=2Eh
+++ b/src/xenvif/mac=2Eh
@@ -43,109 +43,109 @@ typedef struct _XENVIF_MAC XENVIF_MAC, *PXENVIF_MAC;
=20
 extern NTSTATUS
 MacInitialize(
-    IN  PXENVIF_FRONTEND    Frontend,
-    OUT PXENVIF_MAC         *Mac
+    _In_ PXENVIF_FRONTEND   Frontend,
+    _Outptr_ PXENVIF_MAC    *Mac
     );
=20
 extern NTSTATUS
 MacConnect(
-    IN  PXENVIF_MAC Mac
+    _In_ PXENVIF_MAC    Mac
     );
=20
 extern NTSTATUS
 MacEnable(
-    IN  PXENVIF_MAC Mac
+    _In_ PXENVIF_MAC    Mac
     );
=20
 extern VOID
 MacDisable(
-    IN  PXENVIF_MAC Mac
+    _In_ PXENVIF_MAC    Mac
     );
=20
 extern VOID
 MacDisconnect(
-    IN  PXENVIF_MAC Mac
+    _In_ PXENVIF_MAC    Mac
     );
=20
 extern VOID
 MacTeardown(
-    IN  PXENVIF_MAC Mac
+    _In_ PXENVIF_MAC    Mac
     );
=20
 extern VOID
 MacQueryMaximumFrameSize(
-    IN  PXENVIF_MAC Mac,
-    OUT PULONG      Size
+    _In_ PXENVIF_MAC    Mac,
+    _Out_ PULONG        Size
     );
=20
 extern VOID
 MacQueryPermanentAddress(
-    IN  PXENVIF_MAC         Mac,
-    OUT PETHERNET_ADDRESS   Address                  =20
+    _In_ PXENVIF_MAC        Mac,
+    _Out_ PETHERNET_ADDRESS Address
     );
=20
 extern VOID
 MacQueryCurrentAddress(
-    IN  PXENVIF_MAC         Mac,
-    OUT PETHERNET_ADDRESS   Address                  =20
+    _In_ PXENVIF_MAC        Mac,
+    _Out_ PETHERNET_ADDRESS Address
     );
=20
 extern VOID
 MacQueryBroadcastAddress(
-    IN  PXENVIF_MAC         Mac,
-    OUT PETHERNET_ADDRESS   Address                  =20
+    _In_ PXENVIF_MAC        Mac,
+    _Out_ PETHERNET_ADDRESS Address
     );
=20
 extern NTSTATUS
 MacDumpAddressTable(
-    IN  PXENVIF_MAC     Mac
+    _In_ PXENVIF_MAC    Mac
     );
=20
 extern NTSTATUS
 MacAddMulticastAddress(
-    IN      PXENVIF_MAC         Mac,
-    OUT     PETHERNET_ADDRESS   Address
+    _In_ PXENVIF_MAC        Mac,
+    _Out_ PETHERNET_ADDRESS Address
     );
=20
 extern NTSTATUS
 MacRemoveMulticastAddress(
-    IN      PXENVIF_MAC         Mac,
-    OUT     PETHERNET_ADDRESS   Address
+    _In_ PXENVIF_MAC        Mac,
+    _Out_ PETHERNET_ADDRESS Address
     );
=20
 extern NTSTATUS
 MacQueryMulticastAddresses(
-    IN      PXENVIF_MAC         Mac,
-    OUT     PETHERNET_ADDRESS   Address OPTIONAL,
-    IN OUT  PULONG              Count
+    _In_ PXENVIF_MAC            Mac,
+    _Out_opt_ PETHERNET_ADDRESS Address,
+    _Inout_ PULONG              Count
     );
=20
 extern NTSTATUS
 MacSetFilterLevel(
-    IN  PXENVIF_MAC             Mac,
-    IN  ETHERNET_ADDRESS_TYPE   Type,
-    IN  XENVIF_MAC_FILTER_LEVEL Level
+    _In_ PXENVIF_MAC                Mac,
+    _In_ ETHERNET_ADDRESS_TYPE      Type,
+    _In_ XENVIF_MAC_FILTER_LEVEL    Level
     );
=20
 extern NTSTATUS
 MacQueryFilterLevel(
-    IN  PXENVIF_MAC                 Mac,
-    IN  ETHERNET_ADDRESS_TYPE       Type,
-    OUT PXENVIF_MAC_FILTER_LEVEL    Level
+    _In_ PXENVIF_MAC                Mac,
+    _In_ ETHERNET_ADDRESS_TYPE      Type,
+    _Out_ PXENVIF_MAC_FILTER_LEVEL  Level
     );
=20
 extern VOID
 MacQueryState(
-    IN  PXENVIF_MAC                 Mac,
-    OUT PNET_IF_MEDIA_CONNECT_STATE MediaConnectState OPTIONAL,
-    OUT PULONG64                    LinkSpeed OPTIONAL,
-    OUT PNET_IF_MEDIA_DUPLEX_STATE  MediaDuplexState OPTIONAL
+    _In_ PXENVIF_MAC                        Mac,
+    _Out_opt_ PNET_IF_MEDIA_CONNECT_STATE   MediaConnectState,
+    _Out_opt_ PULONG64                      LinkSpeed,
+    _Out_opt_ PNET_IF_MEDIA_DUPLEX_STATE    MediaDuplexState
     );
=20
 extern BOOLEAN
 MacApplyFilters(
-    IN  PXENVIF_MAC         Mac,
-    IN  PETHERNET_ADDRESS   DestinationAddress
+    _In_ PXENVIF_MAC        Mac,
+    _In_ PETHERNET_ADDRESS  DestinationAddress
     );
=20
 #endif  // _XENVIF_MAC_H
diff --git a/src/xenvif/mrsw=2Eh b/src/xenvif/mrsw=2Eh
index 8bfa441=2E=2E6403afb 100644
--- a/src/xenvif/mrsw=2Eh
+++ b/src/xenvif/mrsw=2Eh
@@ -148,9 +148,9 @@ _IRQL_requires_min_(PASSIVE_LEVEL)
 _IRQL_requires_max_(APC_LEVEL)
 static FORCEINLINE NTSTATUS
 __InitializeMrswLock(
-    _Out_ struct _MRSW_LOCK     *Lock,
-    _In_ BOOLEAN                CacheAware,
-    _In_ ULONG                  Tag
+    _Out_ struct _MRSW_LOCK *Lock,
+    _In_ BOOLEAN            CacheAware,
+    _In_ ULONG              Tag
     )
 {
     KeInitializeGuardedMutex(&Lock->Mutex);
diff --git a/src/xenvif/mutex=2Eh b/src/xenvif/mutex=2Eh
index 5a0122f=2E=2E00a2d9c 100644
--- a/src/xenvif/mutex=2Eh
+++ b/src/xenvif/mutex=2Eh
@@ -44,7 +44,7 @@ typedef struct _MUTEX {
=20
 static FORCEINLINE VOID
 InitializeMutex(
-    IN  PMUTEX  Mutex
+    _In_ PMUTEX Mutex
     )
 {
     RtlZeroMemory(Mutex, sizeof (MUTEX));
@@ -53,9 +53,9 @@ InitializeMutex(
 }
=20
 static FORCEINLINE VOID
-__drv_maxIRQL(PASSIVE_LEVEL)
+_IRQL_requires_max_(PASSIVE_LEVEL)
 AcquireMutex(
-    IN  PMUTEX  Mutex
+    _In_ PMUTEX Mutex
     )
 {
     (VOID) KeWaitForSingleObject(&Mutex->Event,
@@ -69,9 +69,9 @@ AcquireMutex(
 }
=20
 static FORCEINLINE VOID
-__drv_maxIRQL(PASSIVE_LEVEL)
+_IRQL_requires_max_(PASSIVE_LEVEL)
 ReleaseMutex(
-    IN  PMUTEX  Mutex
+    _In_ PMUTEX Mutex
     )
 {
     ASSERT3P(Mutex->Owner, =3D=3D, KeGetCurrentThread());
diff --git a/src/xenvif/names=2Eh b/src/xenvif/names=2Eh
index bbd1517=2E=2Ef8263ea 100644
--- a/src/xenvif/names=2Eh
+++ b/src/xenvif/names=2Eh
@@ -279,7 +279,7 @@ DeviceUsageTypeName(
=20
 static FORCEINLINE const CHAR *
 InterfaceTypeName(
-    IN  INTERFACE_TYPE  Type
+    _In_ INTERFACE_TYPE Type
     )
 {
 #define _INTERFACE_TYPE_NAME(_Type) \
@@ -317,7 +317,7 @@ InterfaceTypeName(
=20
 static FORCEINLINE const CHAR *
 DmaWidthName(
-    IN  DMA_WIDTH   Width
+    _In_ DMA_WIDTH  Width
     )
 {
 #define _DMA_WIDTH_NAME(_Width) \
@@ -341,7 +341,7 @@ DmaWidthName(
=20
 static FORCEINLINE const CHAR *
 DmaSpeedName(
-    IN  DMA_SPEED   Speed
+    _In_ DMA_SPEED  Speed
     )
 {
 #define _DMA_SPEED_NAME(_Speed) \
@@ -366,7 +366,7 @@ DmaSpeedName(
=20
 static FORCEINLINE const PCHAR
 XenbusStateName(
-    IN  XenbusState   State
+    _In_ XenbusState    State
     )
 {
 #define _STATE_NAME(_State)     \
diff --git a/src/xenvif/parse=2Ec b/src/xenvif/parse=2Ec
index 4f4f773=2E=2E4b860e6 100644
--- a/src/xenvif/parse=2Ec
+++ b/src/xenvif/parse=2Ec
@@ -46,13 +46,13 @@
=20
 static FORCEINLINE BOOLEAN
 __ParsePullup(
-    IN      XENVIF_PARSE_PULLUP         Pullup,
-    IN      PVOID                       Argument,
-    IN      PUCHAR                      StartVa,
-    IN      ULONG                       StartLen,
-    IN      ULONG                       Offset,
-    IN      PXENVIF_PACKET_PAYLOAD      Payload,
-    IN      ULONG                       Length
+    _In_ XENVIF_PARSE_PULLUP    Pullup,
+    _In_ PVOID                  Argument,
+    _In_ PUCHAR                 StartVa,
+    _In_ ULONG                  StartLen,
+    _In_ ULONG                  Offset,
+    _In_ PXENVIF_PACKET_PAYLOAD Payload,
+    _In_ ULONG                  Length
     )
 {
     ASSERT3U(StartLen, >, Offset);
@@ -68,13 +68,13 @@ __ParsePullup(
=20
 static FORCEINLINE NTSTATUS
 __ParseTcpHeader(
-    IN      PUCHAR                      StartVa,
-    IN      ULONG                       StartLen,
-    IN      ULONG                       Offset,
-    IN      XENVIF_PARSE_PULLUP         Pullup,
-    IN      PVOID                       Argument,
-    IN OUT  PXENVIF_PACKET_PAYLOAD      Payload,
-    OUT     PXENVIF_PACKET_INFO         Info
+    _In_ PUCHAR                         StartVa,
+    _In_ ULONG                          StartLen,
+    _In_ ULONG                          Offset,
+    _In_ XENVIF_PARSE_PULLUP            Pullup,
+    _In_ PVOID                          Argument,
+    _Inout_ PXENVIF_PACKET_PAYLOAD      Payload,
+    _Out_ PXENVIF_PACKET_INFO           Info
     )
 {
     PTCP_HEADER                         Header;
@@ -138,13 +138,13 @@ fail1:
=20
 static FORCEINLINE NTSTATUS
 __ParseUdpHeader(
-    IN      PUCHAR                      StartVa,
-    IN      ULONG                       StartLen,
-    IN      ULONG                       Offset,
-    IN      XENVIF_PARSE_PULLUP         Pullup,
-    IN      PVOID                       Argument,
-    IN OUT  PXENVIF_PACKET_PAYLOAD      Payload,
-    OUT     PXENVIF_PACKET_INFO         Info
+    _In_ PUCHAR                     StartVa,
+    _In_ ULONG                      StartLen,
+    _In_ ULONG                      Offset,
+    _In_ XENVIF_PARSE_PULLUP        Pullup,
+    _In_ PVOID                      Argument,
+    _Inout_ PXENVIF_PACKET_PAYLOAD  Payload,
+    _Out_ PXENVIF_PACKET_INFO       Info
     )
 {
     Info->UdpHeader=2EOffset =3D Offset;
@@ -174,13 +174,13 @@ fail1:
=20
 static FORCEINLINE NTSTATUS
 __ParseIpVersion4Header(
-    IN      PUCHAR                      StartVa,
-    IN      ULONG                       StartLen,
-    IN      ULONG                       Offset,
-    IN      XENVIF_PARSE_PULLUP         Pullup,
-    IN      PVOID                       Argument,
-    IN OUT  PXENVIF_PACKET_PAYLOAD      Payload,
-    OUT     PXENVIF_PACKET_INFO         Info
+    _In_ PUCHAR                         StartVa,
+    _In_ ULONG                          StartLen,
+    _In_ ULONG                          Offset,
+    _In_ XENVIF_PARSE_PULLUP            Pullup,
+    _In_ PVOID                          Argument,
+    _Inout_ PXENVIF_PACKET_PAYLOAD      Payload,
+    _Out_ PXENVIF_PACKET_INFO           Info
     )
 {
     PIPV4_HEADER                        Header;
@@ -289,13 +289,13 @@ fail1:
=20
 static FORCEINLINE NTSTATUS
 __ParseIpVersion6Header(
-    IN      PUCHAR                      StartVa,
-    IN      ULONG                       StartLen,
-    IN      ULONG                       Offset,
-    IN      XENVIF_PARSE_PULLUP         Pullup,
-    IN      PVOID                       Argument,
-    IN OUT  PXENVIF_PACKET_PAYLOAD      Payload,
-    OUT     PXENVIF_PACKET_INFO         Info
+    _In_ PUCHAR                         StartVa,
+    _In_ ULONG                          StartLen,
+    _In_ ULONG                          Offset,
+    _In_ XENVIF_PARSE_PULLUP            Pullup,
+    _In_ PVOID                          Argument,
+    _Inout_ PXENVIF_PACKET_PAYLOAD      Payload,
+    _Out_ PXENVIF_PACKET_INFO           Info
     )
 {
     PIPV6_HEADER                        Header;
@@ -493,13 +493,13 @@ fail1:
=20
 static FORCEINLINE NTSTATUS
 __ParseLLCSnapHeader(
-    IN      PUCHAR                      StartVa,
-    IN      ULONG                       StartLen,
-    IN      ULONG                       Offset,
-    IN      XENVIF_PARSE_PULLUP         Pullup,
-    IN      PVOID                       Argument,
-    IN OUT  PXENVIF_PACKET_PAYLOAD      Payload,
-    OUT     PXENVIF_PACKET_INFO         Info
+    _In_ PUCHAR                         StartVa,
+    _In_ ULONG                          StartLen,
+    _In_ ULONG                          Offset,
+    _In_ XENVIF_PARSE_PULLUP            Pullup,
+    _In_ PVOID                          Argument,
+    _Inout_ PXENVIF_PACKET_PAYLOAD      Payload,
+    _Out_ PXENVIF_PACKET_INFO           Info
     )
 {
     PLLC_SNAP_HEADER                    Header;
@@ -552,13 +552,13 @@ fail1:
=20
 static FORCEINLINE NTSTATUS
 __ParseEthernetHeader(
-    IN      PUCHAR                      StartVa,
-    IN      ULONG                       StartLen,
-    IN      ULONG                       Offset,
-    IN      XENVIF_PARSE_PULLUP         Pullup,
-    IN      PVOID                       Argument,
-    IN OUT  PXENVIF_PACKET_PAYLOAD      Payload,
-    OUT     PXENVIF_PACKET_INFO         Info
+    _In_ PUCHAR                         StartVa,
+    _In_ ULONG                          StartLen,
+    _In_ ULONG                          Offset,
+    _In_ XENVIF_PARSE_PULLUP            Pullup,
+    _In_ PVOID                          Argument,
+    _Inout_ PXENVIF_PACKET_PAYLOAD      Payload,
+    _Out_ PXENVIF_PACKET_INFO           Info
     )
 {
     PETHERNET_HEADER                    Header;
@@ -656,12 +656,12 @@ fail1:
=20
 NTSTATUS
 ParsePacket(
-    IN      PUCHAR                      StartVa,
-    IN      ULONG                       StartLen,
-    IN      XENVIF_PARSE_PULLUP         Pullup,
-    IN      PVOID                       Argument,
-    IN OUT  PXENVIF_PACKET_PAYLOAD      Payload,
-    OUT     PXENVIF_PACKET_INFO         Info
+    _In_ PUCHAR                     StartVa,
+    _In_ ULONG                      StartLen,
+    _In_ XENVIF_PARSE_PULLUP        Pullup,
+    _In_ PVOID                      Argument,
+    _Inout_ PXENVIF_PACKET_PAYLOAD  Payload,
+    _Out_ PXENVIF_PACKET_INFO       Info
     )
 {
     ASSERT(IsZeroMemory(Info, sizeof (XENVIF_PACKET_INFO)));
diff --git a/src/xenvif/parse=2Eh b/src/xenvif/parse=2Eh
index 678991a=2E=2E6e5a260 100644
--- a/src/xenvif/parse=2Eh
+++ b/src/xenvif/parse=2Eh
@@ -43,20 +43,20 @@ typedef struct _XENVIF_PACKET_PAYLOAD {
=20
 typedef BOOLEAN
 (*XENVIF_PARSE_PULLUP)(
-    IN  PVOID                   Argument,
-    IN  PUCHAR                  Buffer,
-    IN  PXENVIF_PACKET_PAYLOAD  Payload,
-    IN  ULONG                   Length
+    _In_ PVOID                  Argument,
+    _In_ PUCHAR                 Buffer,
+    _In_ PXENVIF_PACKET_PAYLOAD Payload,
+    _In_ ULONG                  Length
     );
=20
 extern NTSTATUS
 ParsePacket(
-    IN      PUCHAR                  StartVa,
-    IN      ULONG                   StartLen,
-    IN      XENVIF_PARSE_PULLUP     Pullup,
-    IN      PVOID                   Argument,
-    IN OUT  PXENVIF_PACKET_PAYLOAD  Payload,
-    OUT     PXENVIF_PACKET_INFO     Info
+    _In_ PUCHAR                     StartVa,
+    _In_ ULONG                      StartLen,
+    _In_ XENVIF_PARSE_PULLUP        Pullup,
+    _In_ PVOID                      Argument,
+    _Inout_ PXENVIF_PACKET_PAYLOAD  Payload,
+    _Out_ PXENVIF_PACKET_INFO       Info
     );
=20
 #endif  // _XENVIF_PARSE_H
diff --git a/src/xenvif/pdo=2Ec b/src/xenvif/pdo=2Ec
index 82b4de4=2E=2E66d3a32 100644
--- a/src/xenvif/pdo=2Ec
+++ b/src/xenvif/pdo=2Ec
@@ -99,7 +99,7 @@ struct _XENVIF_PDO {
=20
 static FORCEINLINE PVOID
 __PdoAllocate(
-    IN  ULONG   Length
+    _In_ ULONG  Length
     )
 {
     return __AllocatePoolWithTag(NonPagedPool, Length, PDO_POOL);
@@ -107,7 +107,7 @@ __PdoAllocate(
=20
 static FORCEINLINE VOID
 __PdoFree(
-    IN  PVOID   Buffer
+    _In_ PVOID  Buffer
     )
 {
     __FreePoolWithTag(Buffer, PDO_POOL);
@@ -115,8 +115,8 @@ __PdoFree(
=20
 static FORCEINLINE VOID
 __PdoSetDevicePnpState(
-    IN  PXENVIF_PDO         Pdo,
-    IN  DEVICE_PNP_STATE    State
+    _In_ PXENVIF_PDO        Pdo,
+    _In_ DEVICE_PNP_STATE   State
     )
 {
     PXENVIF_DX              Dx =3D Pdo->Dx;
@@ -130,8 +130,8 @@ __PdoSetDevicePnpState(
=20
 VOID
 PdoSetDevicePnpState(
-    IN  PXENVIF_PDO         Pdo,
-    IN  DEVICE_PNP_STATE    State
+    _In_ PXENVIF_PDO        Pdo,
+    _In_ DEVICE_PNP_STATE   State
     )
 {
     __PdoSetDevicePnpState(Pdo, State);
@@ -139,8 +139,8 @@ PdoSetDevicePnpState(
=20
 static FORCEINLINE VOID
 __PdoRestoreDevicePnpState(
-    IN  PXENVIF_PDO         Pdo,
-    IN  DEVICE_PNP_STATE    State
+    _In_ PXENVIF_PDO        Pdo,
+    _In_ DEVICE_PNP_STATE   State
     )
 {
     PXENVIF_DX              Dx =3D Pdo->Dx;
@@ -151,17 +151,17 @@ __PdoRestoreDevicePnpState(
=20
 static FORCEINLINE DEVICE_PNP_STATE
 __PdoGetDevicePnpState(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     )
 {
-    PXENVIF_DX      Dx =3D Pdo->Dx;
+    PXENVIF_DX          Dx =3D Pdo->Dx;
=20
     return Dx->DevicePnpState;
 }
=20
 DEVICE_PNP_STATE
 PdoGetDevicePnpState(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     )
 {
     return __PdoGetDevicePnpState(Pdo);
@@ -169,8 +169,8 @@ PdoGetDevicePnpState(
=20
 static FORCEINLINE VOID
 __PdoSetSystemPowerState(
-    IN  PXENVIF_PDO         Pdo,
-    IN  SYSTEM_POWER_STATE  State
+    _In_ PXENVIF_PDO        Pdo,
+    _In_ SYSTEM_POWER_STATE State
     )
 {
     PXENVIF_DX              Dx =3D Pdo->Dx;
@@ -180,18 +180,18 @@ __PdoSetSystemPowerState(
=20
 static FORCEINLINE SYSTEM_POWER_STATE
 __PdoGetSystemPowerState(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     )
 {
-    PXENVIF_DX      Dx =3D Pdo->Dx;
+    PXENVIF_DX          Dx =3D Pdo->Dx;
=20
     return Dx->SystemPowerState;
 }
=20
 static FORCEINLINE VOID
 __PdoSetDevicePowerState(
-    IN  PXENVIF_PDO         Pdo,
-    IN  DEVICE_POWER_STATE  State
+    _In_ PXENVIF_PDO        Pdo,
+    _In_ DEVICE_POWER_STATE State
     )
 {
     PXENVIF_DX              Dx =3D Pdo->Dx;
@@ -201,18 +201,18 @@ __PdoSetDevicePowerState(
=20
 static FORCEINLINE DEVICE_POWER_STATE
 __PdoGetDevicePowerState(
-    IN  PXENVIF_PDO         Pdo
+    _In_ PXENVIF_PDO    Pdo
     )
 {
-    PXENVIF_DX      Dx =3D Pdo->Dx;
+    PXENVIF_DX          Dx =3D Pdo->Dx;
=20
     return Dx->DevicePowerState;
 }
=20
 static FORCEINLINE VOID
 __PdoSetMissing(
-    IN  PXENVIF_PDO Pdo,
-    IN  const CHAR  *Reason
+    _In_ PXENVIF_PDO    Pdo,
+    _In_ const CHAR     *Reason
     )
 {
     Pdo->Reason =3D Reason;
@@ -221,8 +221,8 @@ __PdoSetMissing(
=20
 VOID
 PdoSetMissing(
-    IN  PXENVIF_PDO Pdo,
-    IN  const CHAR  *Reason
+    _In_ PXENVIF_PDO    Pdo,
+    _In_ const CHAR     *Reason
     )
 {
     __PdoSetMissing(Pdo, Reason);
@@ -230,7 +230,7 @@ PdoSetMissing(
=20
 static FORCEINLINE BOOLEAN
 __PdoIsMissing(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     )
 {
     return Pdo->Missing;
@@ -238,7 +238,7 @@ __PdoIsMissing(
=20
 BOOLEAN
 PdoIsMissing(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     )
 {
     return __PdoIsMissing(Pdo);
@@ -246,7 +246,7 @@ PdoIsMissing(
=20
 static FORCEINLINE PXENVIF_FDO
 __PdoGetFdo(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     )
 {
     return Pdo->Fdo;
@@ -254,7 +254,7 @@ __PdoGetFdo(
=20
 PXENVIF_FDO
 PdoGetFdo(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     )
 {
     return __PdoGetFdo(Pdo);
@@ -262,12 +262,12 @@ PdoGetFdo(
=20
 static FORCEINLINE VOID
 __PdoSetName(
-    IN  PXENVIF_PDO Pdo,
-    IN  ULONG       Number
+    _In_ PXENVIF_PDO    Pdo,
+    _In_ ULONG          Number
     )
 {
-    PXENVIF_DX      Dx =3D Pdo->Dx;
-    NTSTATUS        status;
+    PXENVIF_DX          Dx =3D Pdo->Dx;
+    NTSTATUS            status;
=20
     status =3D RtlStringCbPrintfA(Dx->Name,=20
                                 MAX_DEVICE_ID_LEN,=20
@@ -278,17 +278,17 @@ __PdoSetName(
=20
 static FORCEINLINE PCHAR
 __PdoGetName(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     )
 {
-    PXENVIF_DX      Dx =3D Pdo->Dx;
+    PXENVIF_DX          Dx =3D Pdo->Dx;
=20
     return Dx->Name;
 }
=20
 PCHAR
 PdoGetName(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     )
 {
     return __PdoGetName(Pdo);
@@ -296,7 +296,7 @@ PdoGetName(
=20
 static FORCEINLINE BOOLEAN
 __PdoSetEjectRequested(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     )
 {
     return (InterlockedBitTestAndSet(&Pdo->Eject, 0) =3D=3D 0) ? TRUE : F=
ALSE;
@@ -304,12 +304,12 @@ __PdoSetEjectRequested(
=20
 VOID
 PdoRequestEject(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     )
 {
-    PXENVIF_DX      Dx =3D Pdo->Dx;
-    PDEVICE_OBJECT  PhysicalDeviceObject =3D Dx->DeviceObject;
-    PXENVIF_FDO     Fdo =3D __PdoGetFdo(Pdo);
+    PXENVIF_DX          Dx =3D Pdo->Dx;
+    PDEVICE_OBJECT      PhysicalDeviceObject =3D Dx->DeviceObject;
+    PXENVIF_FDO         Fdo =3D __PdoGetFdo(Pdo);
=20
     if (!__PdoSetEjectRequested(Pdo))
         return;
@@ -324,7 +324,7 @@ PdoRequestEject(
=20
 static FORCEINLINE BOOLEAN
 __PdoClearEjectRequested(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     )
 {
     return (InterlockedBitTestAndReset(&Pdo->Eject, 0) !=3D 0) ? TRUE : F=
ALSE;
@@ -332,7 +332,7 @@ __PdoClearEjectRequested(
=20
 static FORCEINLINE BOOLEAN
 __PdoIsEjectRequested(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     )
 {
     KeMemoryBarrier();
@@ -341,7 +341,7 @@ __PdoIsEjectRequested(
=20
 BOOLEAN
 PdoIsEjectRequested(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     )
 {
     return __PdoIsEjectRequested(Pdo);
@@ -353,7 +353,7 @@ DEFINE_GUID(GUID_CONTAINER_ID_NAME_SPACE,
=20
 static NTSTATUS
 __PdoSetContainerID(
-    IN  PXENVIF_PDO     Pdo
+    _In_ PXENVIF_PDO    Pdo
     )
 {
     BCRYPT_ALG_HANDLE   Algorithm;
@@ -552,10 +552,10 @@ static XENVIF_PDO_REVISION PdoRevision[] =3D {
=20
 static VOID
 PdoDumpRevisions(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     )
 {
-    ULONG           Index;
+    ULONG               Index;
=20
     UNREFERENCED_PARAMETER(Pdo);
=20
@@ -604,17 +604,17 @@ PdoDumpRevisions(
=20
 static FORCEINLINE PDEVICE_OBJECT
 __PdoGetDeviceObject(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     )
 {
-    PXENVIF_DX      Dx =3D Pdo->Dx;
+    PXENVIF_DX          Dx =3D Pdo->Dx;
=20
     return (Dx->DeviceObject);
 }
    =20
 PDEVICE_OBJECT
 PdoGetDeviceObject(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     )
 {
     return __PdoGetDeviceObject(Pdo);
@@ -622,7 +622,7 @@ PdoGetDeviceObject(
=20
 static FORCEINLINE PCHAR
 __PdoGetVendorName(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     )
 {
     return FdoGetVendorName(__PdoGetFdo(Pdo));
@@ -630,7 +630,7 @@ __PdoGetVendorName(
=20
 static FORCEINLINE PXENVIF_FRONTEND
 __PdoGetFrontend(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     )
 {
     return Pdo->Frontend;
@@ -638,7 +638,7 @@ __PdoGetFrontend(
=20
 PXENVIF_FRONTEND
 PdoGetFrontend(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     )
 {
     return __PdoGetFrontend(Pdo);
@@ -646,7 +646,7 @@ PdoGetFrontend(
=20
 static FORCEINLINE PXENVIF_VIF_CONTEXT
 __PdoGetVifContext(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     )
 {
     return Pdo->VifContext;
@@ -654,7 +654,7 @@ __PdoGetVifContext(
=20
 PXENVIF_VIF_CONTEXT
 PdoGetVifContext(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     )
 {
     return __PdoGetVifContext(Pdo);
@@ -662,8 +662,8 @@ PdoGetVifContext(
=20
 static FORCEINLINE NTSTATUS
 __PdoParseAddress(
-    IN  PCHAR               Buffer,
-    OUT PETHERNET_ADDRESS   Address
+    _In_ PCHAR              Buffer,
+    _Out_ PETHERNET_ADDRESS Address
     )
 {
     ULONG                   Length;
@@ -730,12 +730,12 @@ fail1:
=20
 static FORCEINLINE NTSTATUS
 __PdoSetPermanentAddress(
-    IN  PXENVIF_PDO Pdo,
-    IN  PCHAR       Buffer
+    _In_ PXENVIF_PDO    Pdo,
+    _In_ PCHAR          Buffer
     )
 {
-    ANSI_STRING     Ansi[2];
-    NTSTATUS        status;
+    ANSI_STRING         Ansi[2];
+    NTSTATUS            status;
=20
     status =3D __PdoParseAddress(Buffer, &Pdo->PermanentAddress);
     if (!NT_SUCCESS(status))
@@ -766,7 +766,7 @@ fail1:
=20
 static FORCEINLINE PETHERNET_ADDRESS
 __PdoGetPermanentAddress(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     )
 {
     return &Pdo->PermanentAddress;
@@ -774,7 +774,7 @@ __PdoGetPermanentAddress(
=20
 PETHERNET_ADDRESS
 PdoGetPermanentAddress(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     )
 {
     return __PdoGetPermanentAddress(Pdo);
@@ -782,7 +782,7 @@ PdoGetPermanentAddress(
=20
 static FORCEINLINE VOID
 __PdoClearPermanentAddress(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     )
 {
     (VOID) RegistryDeleteValue(DriverGetAddressesKey(),
@@ -793,15 +793,15 @@ __PdoClearPermanentAddress(
=20
 static NTSTATUS
 PdoSetFriendlyName(
-    IN  PXENVIF_PDO Pdo,
-    IN  HANDLE      SoftwareKey,
-    IN  HANDLE      HardwareKey
+    _In_ PXENVIF_PDO    Pdo,
+    _In_ HANDLE         SoftwareKey,
+    _In_ HANDLE         HardwareKey
     )
 {
-    PANSI_STRING    DriverDesc;
-    CHAR            Buffer[MAXNAMELEN];
-    ANSI_STRING     Ansi[2];
-    NTSTATUS        status;
+    PANSI_STRING        DriverDesc;
+    CHAR                Buffer[MAXNAMELEN];
+    ANSI_STRING         Ansi[2];
+    NTSTATUS            status;
=20
     status =3D RegistryQuerySzValue(SoftwareKey,
                                   "DriverDesc",
@@ -849,12 +849,12 @@ fail1:
=20
 static FORCEINLINE NTSTATUS
 __PdoSetCurrentAddress(
-    IN  PXENVIF_PDO Pdo,
-    IN  HANDLE      Key
+    _In_ PXENVIF_PDO    Pdo,
+    _In_ HANDLE         Key
     )
 {
-    PANSI_STRING    Ansi;
-    NTSTATUS        status;
+    PANSI_STRING        Ansi;
+    NTSTATUS            status;
=20
     RtlFillMemory(Pdo->CurrentAddress=2EByte, ETHERNET_ADDRESS_LENGTH, 0x=
FF);
=20
@@ -886,7 +886,7 @@ fail1:
=20
 PETHERNET_ADDRESS
 PdoGetCurrentAddress(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     )
 {
     return &Pdo->CurrentAddress;
@@ -894,9 +894,9 @@ PdoGetCurrentAddress(
=20
 PDMA_ADAPTER
 PdoGetDmaAdapter(
-    IN  PXENVIF_PDO         Pdo,
-    IN  PDEVICE_DESCRIPTION DeviceDescriptor,
-    OUT PULONG              NumberOfMapRegisters
+    _In_ PXENVIF_PDO            Pdo,
+    _In_ PDEVICE_DESCRIPTION    DeviceDescriptor,
+    _Out_ PULONG                NumberOfMapRegisters
     )
 {
     Trace("<=3D=3D=3D>\n");
@@ -908,11 +908,11 @@ PdoGetDmaAdapter(
=20
 BOOLEAN
 PdoTranslateBusAddress(
-    IN      PXENVIF_PDO         Pdo,
-    IN      PHYSICAL_ADDRESS    BusAddress,
-    IN      ULONG               Length,
-    IN OUT  PULONG              AddressSpace,
-    OUT     PPHYSICAL_ADDRESS   TranslatedAddress
+    _In_ PXENVIF_PDO            Pdo,
+    _In_ PHYSICAL_ADDRESS       BusAddress,
+    _In_ ULONG                  Length,
+    _Inout_ PULONG              AddressSpace,
+    _Outptr_ PPHYSICAL_ADDRESS  TranslatedAddress
     )
 {
     Trace("<=3D=3D=3D>\n");
@@ -926,11 +926,11 @@ PdoTranslateBusAddress(
=20
 ULONG
 PdoSetBusData(
-    IN  PXENVIF_PDO     Pdo,
-    IN  ULONG           DataType,
-    IN  PVOID           Buffer,
-    IN  ULONG           Offset,
-    IN  ULONG           Length
+    _In_ PXENVIF_PDO    Pdo,
+    _In_ ULONG          DataType,
+    _In_ PVOID          Buffer,
+    _In_ ULONG          Offset,
+    _In_ ULONG          Length
     )
 {
     Trace("<=3D=3D=3D>\n");
@@ -944,11 +944,11 @@ PdoSetBusData(
=20
 ULONG
 PdoGetBusData(
-    IN  PXENVIF_PDO     Pdo,
-    IN  ULONG           DataType,
-    IN  PVOID           Buffer,
-    IN  ULONG           Offset,
-    IN  ULONG           Length
+    _In_ PXENVIF_PDO    Pdo,
+    _In_ ULONG          DataType,
+    _In_ PVOID          Buffer,
+    _In_ ULONG          Offset,
+    _In_ ULONG          Length
     )
 {
     Trace("<=3D=3D=3D>\n");
@@ -962,7 +962,7 @@ PdoGetBusData(
=20
 static FORCEINLINE NTSTATUS
 __PdoD3ToD0(
-    IN  PXENVIF_PDO             Pdo
+    _In_ PXENVIF_PDO            Pdo
     )
 {
     POWER_STATE                 PowerState;
@@ -996,7 +996,7 @@ fail1:
=20
 static FORCEINLINE VOID
 __PdoD0ToD3(
-    IN  PXENVIF_PDO     Pdo
+    _In_ PXENVIF_PDO    Pdo
     )
 {
     POWER_STATE         PowerState;
@@ -1020,7 +1020,7 @@ __PdoD0ToD3(
=20
 static DECLSPEC_NOINLINE VOID
 PdoSuspendCallbackLate(
-    IN  PVOID               Argument
+    _In_ PVOID              Argument
     )
 {
     PXENVIF_PDO             Pdo =3D Argument;
@@ -1035,11 +1035,11 @@ PdoSuspendCallbackLate(
 // This function must not touch pageable code or data
 static DECLSPEC_NOINLINE NTSTATUS
 PdoD3ToD0(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     )
 {
-    KIRQL           Irql;
-    NTSTATUS        status;
+    KIRQL               Irql;
+    NTSTATUS            status;
=20
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, PASSIVE_LEVEL);
=20
@@ -1087,10 +1087,10 @@ fail1:
 // This function must not touch pageable code or data
 static DECLSPEC_NOINLINE VOID
 PdoD0ToD3(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     )
 {
-    KIRQL           Irql;
+    KIRQL               Irql;
=20
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, PASSIVE_LEVEL);
=20
@@ -1111,7 +1111,7 @@ PdoD0ToD3(
 // This function must not touch pageable code or data
 static DECLSPEC_NOINLINE VOID
 PdoS4ToS3(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     )
 {
     Trace("(%s) =3D=3D=3D=3D>\n", __PdoGetName(Pdo));
@@ -1127,7 +1127,7 @@ PdoS4ToS3(
 // This function must not touch pageable code or data
 static DECLSPEC_NOINLINE VOID
 PdoS3ToS4(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     )
 {
     Trace("(%s) =3D=3D=3D=3D>\n", __PdoGetName(Pdo));
@@ -1142,14 +1142,14 @@ PdoS3ToS4(
=20
 static NTSTATUS
 PdoGetInterfaceGuid(
-    IN  PXENVIF_PDO Pdo,
-    IN  HANDLE      Key,
-    OUT LPGUID      Guid
+    _In_ PXENVIF_PDO    Pdo,
+    _In_ HANDLE         Key,
+    _Out_ LPGUID        Guid
     )
 {
-    PANSI_STRING    Ansi;
-    UNICODE_STRING  Unicode;
-    NTSTATUS        status;
+    PANSI_STRING        Ansi;
+    UNICODE_STRING      Unicode;
+    NTSTATUS            status;
=20
     UNREFERENCED_PARAMETER(Pdo);
=20
@@ -1192,13 +1192,13 @@ fail1:
=20
 static NTSTATUS
 PdoGetInterfaceLuid(
-    IN  PXENVIF_PDO Pdo,
-    IN  HANDLE      Key,
-    OUT PNET_LUID   Luid
+    _In_ PXENVIF_PDO    Pdo,
+    _In_ HANDLE         Key,
+    _Out_ PNET_LUID     Luid
     )
 {
-    ULONG           Value;
-    NTSTATUS        status;
+    ULONG               Value;
+    NTSTATUS            status;
=20
     UNREFERENCED_PARAMETER(Pdo);
=20
@@ -1235,11 +1235,11 @@ fail1:
=20
 static VOID
 PdoUnplugRequest(
-    IN  PXENVIF_PDO Pdo,
-    IN  BOOLEAN     Make
+    _In_ PXENVIF_PDO    Pdo,
+    _In_ BOOLEAN        Make
     )
 {
-    NTSTATUS        status;
+    NTSTATUS            status;
=20
     // When a driver is restarted, PdoUnplugRequest is called again,
     // dont increment the unplug count again=2E
@@ -1262,10 +1262,10 @@ PdoUnplugRequest(
=20
 static VOID
 PdoRequestReboot(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     )
 {
-    NTSTATUS        status;
+    NTSTATUS            status;
=20
     status =3D XENBUS_UNPLUG(Acquire, &Pdo->UnplugInterface);
     if (!NT_SUCCESS(status))
@@ -1280,11 +1280,11 @@ PdoRequestReboot(
=20
 static BOOLEAN
 PdoUnplugRequested(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     )
 {
-    BOOLEAN         State;
-    NTSTATUS        status;
+    BOOLEAN             State;
+    NTSTATUS            status;
=20
     status =3D XENBUS_UNPLUG(Acquire, &Pdo->UnplugInterface);
     if (!NT_SUCCESS(status))
@@ -1301,8 +1301,8 @@ PdoUnplugRequested(
=20
 static FORCEINLINE NTSTATUS
 PdoParseMibTable(
-    IN  PXENVIF_PDO     Pdo,
-    IN  HANDLE          SoftwareKey
+    _In_ PXENVIF_PDO    Pdo,
+    _In_ HANDLE         SoftwareKey
     )
 {
     NTSTATUS            (*__GetIfTable2)(PMIB_IF_TABLE2 *);
@@ -1428,8 +1428,8 @@ fail1:
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoStartDevice(
-    IN  PXENVIF_PDO     Pdo,
-    IN  PIRP            Irp
+    _In_ PXENVIF_PDO    Pdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -1520,11 +1520,11 @@ fail1:
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoQueryStopDevice(
-    IN  PXENVIF_PDO Pdo,
-    IN  PIRP        Irp
+    _In_ PXENVIF_PDO    Pdo,
+    _In_ PIRP           Irp
     )
 {
-    NTSTATUS        status;
+    NTSTATUS            status;
=20
     __PdoSetDevicePnpState(Pdo, StopPending);
     status =3D STATUS_SUCCESS;
@@ -1537,11 +1537,11 @@ PdoQueryStopDevice(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoCancelStopDevice(
-    IN  PXENVIF_PDO Pdo,
-    IN  PIRP        Irp
+    _In_ PXENVIF_PDO    Pdo,
+    _In_ PIRP           Irp
     )
 {
-    NTSTATUS        status;
+    NTSTATUS            status;
=20
     __PdoRestoreDevicePnpState(Pdo, StopPending);
     status =3D STATUS_SUCCESS;
@@ -1554,8 +1554,8 @@ PdoCancelStopDevice(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoStopDevice(
-    IN  PXENVIF_PDO     Pdo,
-    IN  PIRP            Irp
+    _In_ PXENVIF_PDO    Pdo,
+    _In_ PIRP           Irp
     )
 {
     NTSTATUS            status;
@@ -1581,11 +1581,11 @@ done:
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoQueryRemoveDevice(
-    IN  PXENVIF_PDO Pdo,
-    IN  PIRP        Irp
+    _In_ PXENVIF_PDO    Pdo,
+    _In_ PIRP           Irp
     )
 {
-    NTSTATUS        status;
+    NTSTATUS            status;
=20
     __PdoSetDevicePnpState(Pdo, RemovePending);
     status =3D STATUS_SUCCESS;
@@ -1598,11 +1598,11 @@ PdoQueryRemoveDevice(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoCancelRemoveDevice(
-    IN  PXENVIF_PDO Pdo,
-    IN  PIRP        Irp
+    _In_ PXENVIF_PDO    Pdo,
+    _In_ PIRP           Irp
     )
 {
-    NTSTATUS        status;
+    NTSTATUS            status;
=20
     if (__PdoClearEjectRequested(Pdo))
         FrontendEjectFailed(__PdoGetFrontend(Pdo));
@@ -1618,11 +1618,11 @@ PdoCancelRemoveDevice(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoSurpriseRemoval(
-    IN  PXENVIF_PDO Pdo,
-    IN  PIRP        Irp
+    _In_ PXENVIF_PDO    Pdo,
+    _In_ PIRP           Irp
     )
 {
-    NTSTATUS        status;
+    NTSTATUS            status;
=20
     Warning("%s\n", __PdoGetName(Pdo));
=20
@@ -1637,8 +1637,8 @@ PdoSurpriseRemoval(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoRemoveDevice(
-    IN  PXENVIF_PDO     Pdo,
-    IN  PIRP            Irp
+    _In_ PXENVIF_PDO    Pdo,
+    _In_ PIRP           Irp
     )
 {
     PXENVIF_FDO         Fdo =3D __PdoGetFdo(Pdo);
@@ -1688,8 +1688,8 @@ done:
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoQueryDeviceRelations(
-    IN  PXENVIF_PDO     Pdo,
-    IN  PIRP            Irp
+    _In_ PXENVIF_PDO    Pdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -1725,8 +1725,8 @@ done:
=20
 static NTSTATUS
 PdoDelegateIrp(
-    IN  PXENVIF_PDO Pdo,
-    IN  PIRP        Irp
+    _In_ PXENVIF_PDO    Pdo,
+    _In_ PIRP           Irp
     )
 {
     return FdoDelegateIrp(Pdo->Fdo, Irp);
@@ -1734,8 +1734,8 @@ PdoDelegateIrp(
=20
 static NTSTATUS
 PdoQueryBusInterface(
-    IN  PXENVIF_PDO         Pdo,
-    IN  PIRP                Irp
+    _In_ PXENVIF_PDO        Pdo,
+    _In_ PIRP               Irp
     )
 {
     PIO_STACK_LOCATION      StackLocation;
@@ -1770,8 +1770,8 @@ done:
=20
 static NTSTATUS
 PdoQueryVifInterface(
-    IN  PXENVIF_PDO         Pdo,
-    IN  PIRP                Irp
+    _In_ PXENVIF_PDO        Pdo,
+    _In_ PIRP               Irp
     )
 {
     PIO_STACK_LOCATION      StackLocation;
@@ -1821,8 +1821,8 @@ struct _INTERFACE_ENTRY PdoInterfaceTable[] =3D {
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoQueryInterface(
-    IN  PXENVIF_PDO         Pdo,
-    IN  PIRP                Irp
+    _In_ PXENVIF_PDO        Pdo,
+    _In_ PIRP               Irp
     )
 {
     PIO_STACK_LOCATION      StackLocation;
@@ -1860,8 +1860,8 @@ done:
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoQueryCapabilities(
-    IN  PXENVIF_PDO         Pdo,
-    IN  PIRP                Irp
+    _In_ PXENVIF_PDO        Pdo,
+    _In_ PIRP               Irp
     )
 {
     PIO_STACK_LOCATION      StackLocation;
@@ -1928,8 +1928,8 @@ done:
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoQueryDeviceText(
-    IN  PXENVIF_PDO     Pdo,
-    IN  PIRP            Irp
+    _In_ PXENVIF_PDO    Pdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -2011,8 +2011,8 @@ done:
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoReadConfig(
-    IN  PXENVIF_PDO Pdo,
-    IN  PIRP        Irp
+    _In_ PXENVIF_PDO    Pdo,
+    _In_ PIRP           Irp
     )
 {
     UNREFERENCED_PARAMETER(Pdo);
@@ -2025,8 +2025,8 @@ PdoReadConfig(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoWriteConfig(
-    IN  PXENVIF_PDO Pdo,
-    IN  PIRP        Irp
+    _In_ PXENVIF_PDO    Pdo,
+    _In_ PIRP           Irp
     )
 {
     UNREFERENCED_PARAMETER(Pdo);
@@ -2041,8 +2041,8 @@ PdoWriteConfig(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoQueryId(
-    IN  PXENVIF_PDO     Pdo,
-    IN  PIRP            Irp
+    _In_ PXENVIF_PDO    Pdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -2214,8 +2214,8 @@ done:
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoQueryBusInformation(
-    IN  PXENVIF_PDO         Pdo,
-    IN  PIRP                Irp
+    _In_ PXENVIF_PDO        Pdo,
+    _In_ PIRP               Irp
     )
 {
     PPNP_BUS_INFORMATION    Info;
@@ -2245,11 +2245,11 @@ done:
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoDeviceUsageNotification(
-    IN  PXENVIF_PDO Pdo,
-    IN  PIRP        Irp
+    _In_ PXENVIF_PDO    Pdo,
+    _In_ PIRP           Irp
     )
 {
-    NTSTATUS        status;
+    NTSTATUS            status;
=20
     status =3D PdoDelegateIrp(Pdo, Irp);
=20
@@ -2261,12 +2261,12 @@ PdoDeviceUsageNotification(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoEject(
-    IN  PXENVIF_PDO Pdo,
-    IN  PIRP        Irp
+    _In_ PXENVIF_PDO    Pdo,
+    _In_ PIRP           Irp
     )
 {
-    PXENVIF_FDO     Fdo =3D __PdoGetFdo(Pdo);
-    NTSTATUS        status;
+    PXENVIF_FDO         Fdo =3D __PdoGetFdo(Pdo);
+    NTSTATUS            status;
=20
     Trace("%s\n", __PdoGetName(Pdo));
=20
@@ -2290,8 +2290,8 @@ PdoEject(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoDispatchPnp(
-    IN  PXENVIF_PDO     Pdo,
-    IN  PIRP            Irp
+    _In_ PXENVIF_PDO    Pdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -2393,12 +2393,12 @@ PdoDispatchPnp(
     return status;
 }
=20
-__drv_functionClass(IO_WORKITEM_ROUTINE)
-__drv_sameIRQL
+_Function_class_(IO_WORKITEM_ROUTINE)
+_IRQL_requires_same_
 static VOID
 PdoDevicePowerWorker(
-    IN  PDEVICE_OBJECT  DeviceObject,
-    IN  PVOID           Context
+    _In_ PDEVICE_OBJECT DeviceObject,
+    _In_ PVOID          Context
     )
 {
     PXENVIF_PDO         Pdo =3D (PXENVIF_PDO)Context;
@@ -2447,8 +2447,8 @@ PdoDevicePowerWorker(
=20
 static FORCEINLINE NTSTATUS
 __PdoSetDevicePower(
-    IN  PXENVIF_PDO     Pdo,
-    IN  PIRP            Irp
+    _In_ PXENVIF_PDO    Pdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -2477,12 +2477,12 @@ __PdoSetDevicePower(
     return STATUS_PENDING;
 }
=20
-__drv_functionClass(IO_WORKITEM_ROUTINE)
-__drv_sameIRQL
+_Function_class_(IO_WORKITEM_ROUTINE)
+_IRQL_requires_same_
 static VOID
 PdoSystemPowerWorker(
-    IN  PDEVICE_OBJECT  DeviceObject,
-    IN  PVOID           Context
+    _In_ PDEVICE_OBJECT DeviceObject,
+    _In_ PVOID          Context
     )
 {
     PXENVIF_PDO         Pdo =3D (PXENVIF_PDO)Context;
@@ -2537,8 +2537,8 @@ PdoSystemPowerWorker(
=20
 static FORCEINLINE NTSTATUS
 __PdoSetSystemPower(
-    IN  PXENVIF_PDO     Pdo,
-    IN  PIRP            Irp
+    _In_ PXENVIF_PDO    Pdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -2569,8 +2569,8 @@ __PdoSetSystemPower(
=20
 static FORCEINLINE NTSTATUS
 __PdoSetPower(
-    IN  PXENVIF_PDO     Pdo,
-    IN  PIRP            Irp
+    _In_ PXENVIF_PDO    Pdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -2600,8 +2600,8 @@ __PdoSetPower(
=20
 static FORCEINLINE NTSTATUS
 __PdoQueryPower(
-    IN  PXENVIF_PDO Pdo,
-    IN  PIRP        Irp
+    _In_ PXENVIF_PDO    Pdo,
+    _In_ PIRP           Irp
     )
 {
     UNREFERENCED_PARAMETER(Pdo);
@@ -2614,8 +2614,8 @@ __PdoQueryPower(
=20
 static NTSTATUS
 PdoDispatchPower(
-    IN  PXENVIF_PDO     Pdo,
-    IN  PIRP            Irp
+    _In_ PXENVIF_PDO    Pdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -2643,11 +2643,11 @@ PdoDispatchPower(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoDispatchDefault(
-    IN  PXENVIF_PDO Pdo,
-    IN  PIRP        Irp
+    _In_ PXENVIF_PDO    Pdo,
+    _In_ PIRP           Irp
     )
 {
-    NTSTATUS        status;
+    NTSTATUS            status;
=20
     UNREFERENCED_PARAMETER(Pdo);
=20
@@ -2659,8 +2659,8 @@ PdoDispatchDefault(
=20
 NTSTATUS
 PdoDispatch(
-    IN  PXENVIF_PDO     Pdo,
-    IN  PIRP            Irp
+    _In_ PXENVIF_PDO    Pdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -2687,7 +2687,7 @@ PdoDispatch(
=20
 NTSTATUS
 PdoResume(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     )
 {
     return FrontendResume(__PdoGetFrontend(Pdo));
@@ -2695,7 +2695,7 @@ PdoResume(
=20
 VOID
 PdoSuspend(
-    IN  PXENVIF_PDO     Pdo
+    _In_ PXENVIF_PDO    Pdo
     )
 {
     FrontendSuspend(__PdoGetFrontend(Pdo));
@@ -2703,9 +2703,9 @@ PdoSuspend(
=20
 NTSTATUS
 PdoCreate(
-    IN  PXENVIF_FDO     Fdo,
-    IN  ULONG           Number,
-    IN  PCHAR           Address
+    _In_ PXENVIF_FDO    Fdo,
+    _In_ ULONG          Number,
+    _In_ PCHAR          Address
     )
 {
     PDEVICE_OBJECT      PhysicalDeviceObject;
@@ -2871,12 +2871,12 @@ fail1:
=20
 VOID
 PdoDestroy(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     )
 {
-    PXENVIF_DX      Dx =3D Pdo->Dx;
-    PDEVICE_OBJECT  PhysicalDeviceObject =3D Dx->DeviceObject;
-    PXENVIF_FDO     Fdo =3D __PdoGetFdo(Pdo);
+    PXENVIF_DX          Dx =3D Pdo->Dx;
+    PDEVICE_OBJECT      PhysicalDeviceObject =3D Dx->DeviceObject;
+    PXENVIF_FDO         Fdo =3D __PdoGetFdo(Pdo);
=20
     Pdo->UnplugRequested =3D FALSE;
=20
diff --git a/src/xenvif/pdo=2Eh b/src/xenvif/pdo=2Eh
index 80dfda8=2E=2Ecb8e29b 100644
--- a/src/xenvif/pdo=2Eh
+++ b/src/xenvif/pdo=2Eh
@@ -42,172 +42,172 @@
=20
 extern VOID
 PdoSetDevicePnpState(
-    IN  PXENVIF_PDO         Pdo,
-    IN  DEVICE_PNP_STATE    State
+    _In_ PXENVIF_PDO        Pdo,
+    _In_ DEVICE_PNP_STATE   State
     );
=20
 extern DEVICE_PNP_STATE
 PdoGetDevicePnpState(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     );
=20
 extern VOID
 PdoSetMissing(
-    IN  PXENVIF_PDO Pdo,
-    IN  const CHAR  *Reason
+    _In_ PXENVIF_PDO    Pdo,
+    _In_ const CHAR     *Reason
     );
=20
 extern BOOLEAN
 PdoIsMissing(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     );
=20
 extern VOID
 PdoRequestEject(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     );
=20
 extern BOOLEAN
 PdoIsEjectRequested(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     );
=20
 extern PCHAR
 PdoGetName(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     );
=20
 extern PXENVIF_FDO
 PdoGetFdo(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     );
=20
 extern PDEVICE_OBJECT
 PdoGetDeviceObject(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     );
=20
 #include "vif=2Eh"
=20
 extern PXENVIF_VIF_CONTEXT
 PdoGetVifContext(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     );
=20
 extern PDMA_ADAPTER
 PdoGetDmaAdapter(
-    IN  PXENVIF_PDO         Pdo,
-    IN  PDEVICE_DESCRIPTION DeviceDescriptor,
-    OUT PULONG              NumberOfMapRegisters
+    _In_ PXENVIF_PDO            Pdo,
+    _In_ PDEVICE_DESCRIPTION    DeviceDescriptor,
+    _Out_ PULONG                NumberOfMapRegisters
     );
=20
 extern BOOLEAN
 PdoTranslateBusAddress(
-    IN      PXENVIF_PDO         Pdo,
-    IN      PHYSICAL_ADDRESS    BusAddress,
-    IN      ULONG               Length,
-    IN OUT  PULONG              AddressSpace,
-    OUT     PPHYSICAL_ADDRESS   TranslatedAddress
+    _In_ PXENVIF_PDO            Pdo,
+    _In_ PHYSICAL_ADDRESS       BusAddress,
+    _In_ ULONG                  Length,
+    _Inout_ PULONG              AddressSpace,
+    _Outptr_ PPHYSICAL_ADDRESS  TranslatedAddress
     );
=20
 extern ULONG
 PdoSetBusData(
-    IN  PXENVIF_PDO     Pdo,
-    IN  ULONG           DataType,
-    IN  PVOID           Buffer,
-    IN  ULONG           Offset,
-    IN  ULONG           Length
+    _In_ PXENVIF_PDO    Pdo,
+    _In_ ULONG          DataType,
+    _In_ PVOID          Buffer,
+    _In_ ULONG          Offset,
+    _In_ ULONG          Length
     );
=20
 extern ULONG
 PdoGetBusData(
-    IN  PXENVIF_PDO     Pdo,
-    IN  ULONG           DataType,
-    IN  PVOID           Buffer,
-    IN  ULONG           Offset,
-    IN  ULONG           Length
+    _In_ PXENVIF_PDO    Pdo,
+    _In_ ULONG          DataType,
+    _In_ PVOID          Buffer,
+    _In_ ULONG          Offset,
+    _In_ ULONG          Length
     );
=20
 extern PETHERNET_ADDRESS
 PdoGetPermanentAddress(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     );
=20
 extern PETHERNET_ADDRESS
 PdoGetCurrentAddress(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     );
=20
 extern NTSTATUS
 PdoCreate(
-    IN  PXENVIF_FDO Fdo,
-    IN  ULONG       Number,
-    IN  PCHAR       Address
+    _In_ PXENVIF_FDO    Fdo,
+    _In_ ULONG          Number,
+    _In_ PCHAR          Address
     );
=20
 extern NTSTATUS
 PdoResume(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     );
=20
 extern VOID
 PdoSuspend(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     );
=20
 extern VOID
 PdoDestroy(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     );
=20
 #include "frontend=2Eh"
=20
 extern PXENVIF_FRONTEND
 PdoGetFrontend(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     );
=20
 extern PXENBUS_EVTCHN_INTERFACE
 PdoGetEvtchnInterface(
-    IN  PXENVIF_PDO     Pdo
+    _In_ PXENVIF_PDO    Pdo
     );
=20
 extern PXENBUS_DEBUG_INTERFACE
 PdoGetDebugInterface(
-    IN  PXENVIF_PDO     Pdo
+    _In_ PXENVIF_PDO    Pdo
     );
=20
 extern PXENBUS_STORE_INTERFACE
 PdoGetStoreInterface(
-    IN  PXENVIF_PDO     Pdo
+    _In_ PXENVIF_PDO    Pdo
     );
=20
 extern PXENBUS_CACHE_INTERFACE
 PdoGetCacheInterface(
-    IN  PXENVIF_PDO     Pdo
+    _In_ PXENVIF_PDO    Pdo
     );
=20
 extern PXENBUS_GNTTAB_INTERFACE
 PdoGetGnttabInterface(
-    IN  PXENVIF_PDO     Pdo
+    _In_ PXENVIF_PDO    Pdo
     );
=20
 extern PXENBUS_SUSPEND_INTERFACE
 PdoGetSuspendInterface(
-    IN  PXENVIF_PDO     Pdo
+    _In_ PXENVIF_PDO    Pdo
     );
=20
 #include "vif=2Eh"
=20
 extern PXENVIF_VIF_INTERFACE
 PdoGetVifInterface(
-    IN  PXENVIF_PDO Pdo
+    _In_ PXENVIF_PDO    Pdo
     );
=20
 extern NTSTATUS
 PdoDispatch(
-    IN  PXENVIF_PDO Pdo,
-    IN  PIRP        Irp
+    _In_ PXENVIF_PDO    Pdo,
+    _In_ PIRP           Irp
     );
=20
 #endif  // _XENVIF_PDO_H
diff --git a/src/xenvif/receiver=2Ec b/src/xenvif/receiver=2Ec
index 93ad5e8=2E=2E29ae090 100644
--- a/src/xenvif/receiver=2Ec
+++ b/src/xenvif/receiver=2Ec
@@ -155,7 +155,7 @@ struct _XENVIF_RECEIVER {
=20
 static FORCEINLINE PVOID
 __ReceiverAllocate(
-    IN  ULONG   Length
+    _In_ ULONG  Length
     )
 {
     return __AllocatePoolWithTag(NonPagedPool, Length, XENVIF_RECEIVER_TA=
G);
@@ -163,7 +163,7 @@ __ReceiverAllocate(
=20
 static FORCEINLINE VOID
 __ReceiverFree(
-    IN  PVOID   Buffer
+    _In_ PVOID  Buffer
     )
 {
     __FreePoolWithTag(Buffer, XENVIF_RECEIVER_TAG);
@@ -171,10 +171,10 @@ __ReceiverFree(
=20
 static VOID FORCEINLINE
 __ReceiverPacketMdlInit(
-    IN  PXENVIF_RECEIVER_PACKET Packet
+    _In_ PXENVIF_RECEIVER_PACKET    Packet
     )
 {
-    PMDL    Mdl =3D Packet->SystemMdl;
+    PMDL                            Mdl =3D Packet->SystemMdl;
=20
     ASSERT(IsZeroMemory(&Packet->Mdl, sizeof (MDL)));
=20
@@ -193,8 +193,8 @@ __ReceiverPacketMdlInit(
=20
 static NTSTATUS
 ReceiverPacketCtor(
-    IN  PVOID               Argument,
-    IN  PVOID               Object
+    _In_ PVOID              Argument,
+    _In_ PVOID              Object
     )
 {
     PXENVIF_RECEIVER_RING   Ring =3D Argument;
@@ -230,8 +230,8 @@ fail1:
=20
 static VOID
 ReceiverPacketDtor(
-    IN  PVOID               Argument,
-    IN  PVOID               Object
+    _In_ PVOID              Argument,
+    _In_ PVOID              Object
     )
 {
     PXENVIF_RECEIVER_RING   Ring =3D Argument;
@@ -253,8 +253,8 @@ ReceiverPacketDtor(
=20
 static FORCEINLINE PXENVIF_RECEIVER_PACKET
 __ReceiverRingGetPacket(
-    IN  PXENVIF_RECEIVER_RING   Ring,
-    IN  BOOLEAN                 Locked
+    _In_ PXENVIF_RECEIVER_RING  Ring,
+    _In_ BOOLEAN                Locked
     )
 {
     PXENVIF_RECEIVER            Receiver;
@@ -279,13 +279,13 @@ __ReceiverRingGetPacket(
=20
 static FORCEINLINE VOID
 __ReceiverRingPutPacket(
-    IN  PXENVIF_RECEIVER_RING   Ring,
-    IN  PXENVIF_RECEIVER_PACKET Packet,
-    IN  BOOLEAN                 Locked
+    _In_ PXENVIF_RECEIVER_RING      Ring,
+    _In_ PXENVIF_RECEIVER_PACKET    Packet,
+    _In_ BOOLEAN                    Locked
     )
 {
-    PXENVIF_RECEIVER            Receiver;
-    PXENVIF_FRONTEND            Frontend;
+    PXENVIF_RECEIVER                Receiver;
+    PXENVIF_FRONTEND                Frontend;
=20
     Receiver =3D Ring->Receiver;
     Frontend =3D Receiver->Frontend;
@@ -315,8 +315,8 @@ __ReceiverRingPutPacket(
=20
 static FORCEINLINE PMDL
 __ReceiverRingGetMdl(
-    IN  PXENVIF_RECEIVER_RING   Ring,
-    IN  BOOLEAN                 Locked
+    _In_ PXENVIF_RECEIVER_RING  Ring,
+    _In_ BOOLEAN                Locked
     )
 {
     PXENVIF_RECEIVER_PACKET     Packet;
@@ -330,9 +330,9 @@ __ReceiverRingGetMdl(
=20
 static FORCEINLINE VOID
 __ReceiverRingPutMdl(
-    IN  PXENVIF_RECEIVER_RING   Ring,
-    IN  PMDL                    Mdl,
-    IN  BOOLEAN                 Locked
+    _In_ PXENVIF_RECEIVER_RING  Ring,
+    _In_ PMDL                   Mdl,
+    _In_ BOOLEAN                Locked
     )
 {
     PXENVIF_RECEIVER_PACKET     Packet;
@@ -343,8 +343,8 @@ __ReceiverRingPutMdl(
=20
 static NTSTATUS
 ReceiverFragmentCtor(
-    IN  PVOID                   Argument,
-    IN  PVOID                   Object
+    _In_ PVOID                  Argument,
+    _In_ PVOID                  Object
     )
 {
     PXENVIF_RECEIVER_FRAGMENT   Fragment =3D Object;
@@ -358,8 +358,8 @@ ReceiverFragmentCtor(
=20
 static VOID
 ReceiverFragmentDtor(
-    IN  PVOID                   Argument,
-    IN  PVOID                   Object
+    _In_ PVOID                  Argument,
+    _In_ PVOID                  Object
     )
 {
     PXENVIF_RECEIVER_FRAGMENT   Fragment =3D Object;
@@ -371,7 +371,7 @@ ReceiverFragmentDtor(
=20
 static FORCEINLINE PXENVIF_RECEIVER_FRAGMENT
 __ReceiverRingGetFragment(
-    IN  PXENVIF_RECEIVER_RING   Ring
+    _In_ PXENVIF_RECEIVER_RING  Ring
     )
 {
     PXENVIF_RECEIVER            Receiver;
@@ -388,8 +388,8 @@ __ReceiverRingGetFragment(
=20
 static FORCEINLINE
 __ReceiverRingPutFragment(
-    IN  PXENVIF_RECEIVER_RING       Ring,
-    IN  PXENVIF_RECEIVER_FRAGMENT   Fragment
+    _In_ PXENVIF_RECEIVER_RING      Ring,
+    _In_ PXENVIF_RECEIVER_FRAGMENT  Fragment
     )
 {
     PXENVIF_RECEIVER                Receiver;
@@ -409,15 +409,15 @@ __ReceiverRingPutFragment(
=20
 static DECLSPEC_NOINLINE VOID
 ReceiverRingProcessTag(
-    IN  PXENVIF_RECEIVER_RING    Ring,
-    IN  PXENVIF_RECEIVER_PACKET  Packet
+    _In_ PXENVIF_RECEIVER_RING      Ring,
+    _In_ PXENVIF_RECEIVER_PACKET    Packet
     )
 {
-    PXENVIF_PACKET_INFO          Info;
-    ULONG                        PayloadLength;
-    PUCHAR                       BaseVa;
-    PETHERNET_HEADER             EthernetHeader;
-    ULONG                        Offset;
+    PXENVIF_PACKET_INFO             Info;
+    ULONG                           PayloadLength;
+    PUCHAR                          BaseVa;
+    PETHERNET_HEADER                EthernetHeader;
+    ULONG                           Offset;
=20
     Info =3D &Packet->Info;
=20
@@ -476,17 +476,17 @@ ReceiverRingProcessTag(
=20
 static DECLSPEC_NOINLINE VOID
 ReceiverRingProcessChecksum(
-    IN  PXENVIF_RECEIVER_RING   Ring,
-    IN  PXENVIF_RECEIVER_PACKET Packet
+    _In_ PXENVIF_RECEIVER_RING      Ring,
+    _In_ PXENVIF_RECEIVER_PACKET    Packet
     )
 {
-    PXENVIF_RECEIVER            Receiver;
-    PXENVIF_FRONTEND            Frontend;
-    PXENVIF_PACKET_INFO         Info;
-    XENVIF_PACKET_PAYLOAD       Payload;
-    uint16_t                    flags;
-    PUCHAR                      BaseVa;
-    PIP_HEADER                  IpHeader;
+    PXENVIF_RECEIVER                Receiver;
+    PXENVIF_FRONTEND                Frontend;
+    PXENVIF_PACKET_INFO             Info;
+    XENVIF_PACKET_PAYLOAD           Payload;
+    uint16_t                        flags;
+    PUCHAR                          BaseVa;
+    PIP_HEADER                      IpHeader;
=20
     Receiver =3D Ring->Receiver;
     Frontend =3D Receiver->Frontend;
@@ -648,10 +648,10 @@ ReceiverRingProcessChecksum(
=20
 static BOOLEAN
 ReceiverRingPullup(
-    IN      PVOID                   Argument,
-    IN      PUCHAR                  DestinationVa,
-    IN OUT  PXENVIF_PACKET_PAYLOAD  Payload,
-    IN      ULONG                   Length
+    _In_ PVOID                      Argument,
+    _In_ PUCHAR                     DestinationVa,
+    _Inout_ PXENVIF_PACKET_PAYLOAD  Payload,
+    _In_ ULONG                      Length
     )
 {
     PMDL                            Mdl;
@@ -706,13 +706,13 @@ fail1:
=20
 static FORCEINLINE VOID
 __ReceiverRingPullupPacket(
-    IN  PXENVIF_RECEIVER_RING   Ring,
-    IN  PXENVIF_RECEIVER_PACKET Packet
+    _In_ PXENVIF_RECEIVER_RING      Ring,
+    _In_ PXENVIF_RECEIVER_PACKET    Packet
     )
 {
-    PUCHAR                      BaseVa;
-    XENVIF_PACKET_PAYLOAD       Payload;
-    ULONG                       Length;
+    PUCHAR                          BaseVa;
+    XENVIF_PACKET_PAYLOAD           Payload;
+    ULONG                           Length;
=20
     ASSERT(Packet->Mdl=2EMdlFlags & MDL_MAPPED_TO_SYSTEM_VA);
     BaseVa =3D Packet->Mdl=2EMappedSystemVa;
@@ -737,22 +737,22 @@ __ReceiverRingPullupPacket(
=20
 static FORCEINLINE PXENVIF_RECEIVER_PACKET
 __ReceiverRingBuildSegment(
-    IN  PXENVIF_RECEIVER_RING   Ring,
-    IN  PXENVIF_RECEIVER_PACKET Packet,
-    IN  ULONG                   SegmentSize,
-    IN  PXENVIF_PACKET_PAYLOAD  Payload
+    _In_ PXENVIF_RECEIVER_RING      Ring,
+    _In_ PXENVIF_RECEIVER_PACKET    Packet,
+    _In_ ULONG                      SegmentSize,
+    _In_ PXENVIF_PACKET_PAYLOAD     Payload
     )
 {
-    PXENVIF_RECEIVER            Receiver;
-    PXENVIF_PACKET_INFO         Info;
-    PXENVIF_RECEIVER_PACKET     Segment;
-    PMDL                        Mdl;
-    PUCHAR                      InfoVa;
-    PUCHAR                      BaseVa;
-    PIP_HEADER                  IpHeader;
-    PTCP_HEADER                 TcpHeader;
-    ULONG                       Seq;
-    NTSTATUS                    status;
+    PXENVIF_RECEIVER                Receiver;
+    PXENVIF_PACKET_INFO             Info;
+    PXENVIF_RECEIVER_PACKET         Segment;
+    PMDL                            Mdl;
+    PUCHAR                          InfoVa;
+    PUCHAR                          BaseVa;
+    PIP_HEADER                      IpHeader;
+    PTCP_HEADER                     TcpHeader;
+    ULONG                           Seq;
+    NTSTATUS                        status;
=20
     Receiver =3D Ring->Receiver;
=20
@@ -920,8 +920,8 @@ fail1:
=20
 static VOID
 ReceiverRingCompletePacket(
-    IN  PXENVIF_RECEIVER_RING   Ring,
-    IN  PXENVIF_RECEIVER_PACKET Packet
+    _In_ PXENVIF_RECEIVER_RING      Ring,
+    _In_ PXENVIF_RECEIVER_PACKET    Packet
     )
 {
     ReceiverRingProcessTag(Ring, Packet);
@@ -933,20 +933,20 @@ ReceiverRingCompletePacket(
=20
 static VOID
 ReceiverRingProcessLargePacket(
-    IN  PXENVIF_RECEIVER_RING   Ring,
-    IN  PXENVIF_RECEIVER_PACKET Packet
+    _In_ PXENVIF_RECEIVER_RING      Ring,
+    _In_ PXENVIF_RECEIVER_PACKET    Packet
     )
 {
-    PXENVIF_RECEIVER            Receiver;
-    PXENVIF_FRONTEND            Frontend;
-    BOOLEAN                     Offload;
-    PXENVIF_PACKET_INFO         Info;
-    uint16_t                    flags;
-    XENVIF_PACKET_PAYLOAD       Payload;
-    PUCHAR                      InfoVa;
-    PIP_HEADER                  IpHeader;
-    ULONG                       Length;
-    NTSTATUS                    status;
+    PXENVIF_RECEIVER                Receiver;
+    PXENVIF_FRONTEND                Frontend;
+    BOOLEAN                         Offload;
+    PXENVIF_PACKET_INFO             Info;
+    uint16_t                        flags;
+    XENVIF_PACKET_PAYLOAD           Payload;
+    PUCHAR                          InfoVa;
+    PIP_HEADER                      IpHeader;
+    ULONG                           Length;
+    NTSTATUS                        status;
=20
     Receiver =3D Ring->Receiver;
     Frontend =3D Receiver->Frontend;
@@ -1107,17 +1107,17 @@ fail1:
=20
 static VOID
 ReceiverRingProcessStandardPacket(
-    IN  PXENVIF_RECEIVER_RING   Ring,
-    IN  PXENVIF_RECEIVER_PACKET Packet
+    _In_ PXENVIF_RECEIVER_RING      Ring,
+    _In_ PXENVIF_RECEIVER_PACKET    Packet
     )
 {
-    PXENVIF_RECEIVER            Receiver;
-    PXENVIF_FRONTEND            Frontend;
-    PXENVIF_MAC                 Mac;
-    PXENVIF_PACKET_INFO         Info;
-    XENVIF_PACKET_PAYLOAD       Payload;
-    ULONG                       MaximumFrameSize;
-    NTSTATUS                    status;
+    PXENVIF_RECEIVER                Receiver;
+    PXENVIF_FRONTEND                Frontend;
+    PXENVIF_MAC                     Mac;
+    PXENVIF_PACKET_INFO             Info;
+    XENVIF_PACKET_PAYLOAD           Payload;
+    ULONG                           MaximumFrameSize;
+    NTSTATUS                        status;
=20
     Receiver =3D Ring->Receiver;
     Frontend =3D Receiver->Frontend;
@@ -1210,8 +1210,8 @@ fail1:
=20
 static VOID
 ReceiverRingProcessPacket(
-    IN  PXENVIF_RECEIVER_RING       Ring,
-    IN  PXENVIF_RECEIVER_PACKET     Packet
+    _In_ PXENVIF_RECEIVER_RING      Ring,
+    _In_ PXENVIF_RECEIVER_PACKET    Packet
     )
 {
     PXENVIF_RECEIVER                Receiver;
@@ -1341,7 +1341,7 @@ _IRQL_requires_min_(PASSIVE_LEVEL)
 _IRQL_requires_max_(DISPATCH_LEVEL)
 static FORCEINLINE VOID
 __ReceiverRingSwizzle(
-    IN  PXENVIF_RECEIVER_RING   Ring
+    _In_ PXENVIF_RECEIVER_RING  Ring
     )
 {
     PXENVIF_RECEIVER            Receiver;
@@ -1582,7 +1582,7 @@ __ReceiverRingSwizzle(
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE VOID
 __ReceiverRingAcquireLock(
-    IN  PXENVIF_RECEIVER_RING   Ring
+    _In_ PXENVIF_RECEIVER_RING  Ring
     )
 {
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, DISPATCH_LEVEL);
@@ -1593,7 +1593,7 @@ __ReceiverRingAcquireLock(
 _IRQL_requires_(DISPATCH_LEVEL)
 static DECLSPEC_NOINLINE VOID
 ReceiverRingAcquireLock(
-    IN  PXENVIF_RECEIVER_RING   Ring
+    _In_ PXENVIF_RECEIVER_RING  Ring
     )
 {
     __ReceiverRingAcquireLock(Ring);
@@ -1602,7 +1602,7 @@ ReceiverRingAcquireLock(
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE VOID
 __ReceiverRingReleaseLock(
-    IN  PXENVIF_RECEIVER_RING   Ring
+    _In_ PXENVIF_RECEIVER_RING  Ring
     )
 {
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, DISPATCH_LEVEL);
@@ -1614,7 +1614,7 @@ __ReceiverRingReleaseLock(
 _IRQL_requires_(DISPATCH_LEVEL)
 static DECLSPEC_NOINLINE VOID
 ReceiverRingReleaseLock(
-    IN  PXENVIF_RECEIVER_RING   Ring
+    _In_ PXENVIF_RECEIVER_RING  Ring
     )
 {
     __ReceiverRingReleaseLock(Ring);
@@ -1626,10 +1626,10 @@ _IRQL_requires_max_(DISPATCH_LEVEL)
 _IRQL_requires_same_
 static VOID
 ReceiverRingQueueDpc(
-    IN  PKDPC               Dpc,
-    IN  PVOID               Context,
-    IN  PVOID               Argument1,
-    IN  PVOID               Argument2
+    _In_ PKDPC              Dpc,
+    _In_ PVOID              Context,
+    _In_ PVOID              Argument1,
+    _In_ PVOID              Argument2
     )
 {
     PXENVIF_RECEIVER_RING   Ring =3D Context;
@@ -1645,7 +1645,7 @@ ReceiverRingQueueDpc(
=20
 static FORCEINLINE VOID
 __ReceiverRingStop(
-    IN  PXENVIF_RECEIVER_RING   Ring
+    _In_ PXENVIF_RECEIVER_RING  Ring
     )
 {
     Ring->Stopped =3D TRUE;
@@ -1653,7 +1653,7 @@ __ReceiverRingStop(
=20
 static FORCEINLINE VOID
 __ReceiverRingStart(
-    IN  PXENVIF_RECEIVER_RING   Ring
+    _In_ PXENVIF_RECEIVER_RING  Ring
     )
 {
     Ring->Stopped =3D FALSE;
@@ -1661,7 +1661,7 @@ __ReceiverRingStart(
=20
 static FORCEINLINE BOOLEAN
 __ReceiverRingIsStopped(
-    IN  PXENVIF_RECEIVER_RING   Ring
+    _In_ PXENVIF_RECEIVER_RING  Ring
     )
 {
     return Ring->Stopped;
@@ -1670,8 +1670,8 @@ __ReceiverRingIsStopped(
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE VOID
 __ReceiverRingTrigger(
-    IN  PXENVIF_RECEIVER_RING   Ring,
-    IN  BOOLEAN                 Locked
+    _In_ PXENVIF_RECEIVER_RING  Ring,
+    _In_ BOOLEAN                Locked
     )
 {
     PXENVIF_RECEIVER            Receiver;
@@ -1692,8 +1692,8 @@ __ReceiverRingTrigger(
=20
 static FORCEINLINE VOID
 __ReceiverRingSend(
-    IN  PXENVIF_RECEIVER_RING   Ring,
-    IN  BOOLEAN                 Locked
+    _In_ PXENVIF_RECEIVER_RING  Ring,
+    _In_ BOOLEAN                Locked
     )
 {
     PXENVIF_RECEIVER            Receiver;
@@ -1714,16 +1714,16 @@ __ReceiverRingSend(
=20
 static FORCEINLINE PXENVIF_RECEIVER_FRAGMENT
 __ReceiverRingPreparePacket(
-    IN  PXENVIF_RECEIVER_RING   Ring,
-    IN  PXENVIF_RECEIVER_PACKET Packet
+    _In_ PXENVIF_RECEIVER_RING      Ring,
+    _In_ PXENVIF_RECEIVER_PACKET    Packet
     )
 {
-    PXENVIF_RECEIVER            Receiver;
-    PXENVIF_FRONTEND            Frontend;
-    PXENVIF_RECEIVER_FRAGMENT   Fragment;
-    PMDL                        Mdl;
-    PFN_NUMBER                  Pfn;
-    NTSTATUS                    status;
+    PXENVIF_RECEIVER                Receiver;
+    PXENVIF_FRONTEND                Frontend;
+    PXENVIF_RECEIVER_FRAGMENT       Fragment;
+    PMDL                            Mdl;
+    PFN_NUMBER                      Pfn;
+    NTSTATUS                        status;
=20
     Receiver =3D Ring->Receiver;
     Frontend =3D Receiver->Frontend;
@@ -1766,7 +1766,7 @@ fail1:
=20
 static FORCEINLINE VOID
 __ReceiverRingPushRequests(
-    IN  PXENVIF_RECEIVER_RING   Ring
+    _In_ PXENVIF_RECEIVER_RING  Ring
     )
 {
     BOOLEAN                     Notify;
@@ -1790,7 +1790,7 @@ __ReceiverRingPushRequests(
=20
 static NTSTATUS
 ReceiverRingFill(
-    IN  PXENVIF_RECEIVER_RING   Ring
+    _In_ PXENVIF_RECEIVER_RING  Ring
     )
 {
     PXENVIF_RECEIVER            Receiver;
@@ -1860,12 +1860,12 @@ ReceiverRingFill(
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE VOID
 __ReceiverRingReturnPacket(
-    IN  PXENVIF_RECEIVER_RING   Ring,
-    IN  PXENVIF_RECEIVER_PACKET Packet,
-    IN  BOOLEAN                 Locked
+    _In_ PXENVIF_RECEIVER_RING      Ring,
+    _In_ PXENVIF_RECEIVER_PACKET    Packet,
+    _In_ BOOLEAN                    Locked
     )
 {
-    PMDL                        Mdl;
+    PMDL                            Mdl;
=20
     Mdl =3D &Packet->Mdl;
=20
@@ -1903,7 +1903,7 @@ __ReceiverRingReturnPacket(
=20
 static FORCEINLINE VOID
 __ReceiverRingEmpty(
-    IN  PXENVIF_RECEIVER_RING   Ring
+    _In_ PXENVIF_RECEIVER_RING  Ring
     )
 {
     PXENVIF_RECEIVER            Receiver;
@@ -1944,8 +1944,8 @@ __ReceiverRingEmpty(
=20
 static VOID
 ReceiverRingDebugCallback(
-    IN  PVOID                   Argument,
-    IN  BOOLEAN                 Crashing
+    _In_ PVOID                  Argument,
+    _In_ BOOLEAN                Crashing
     )
 {
     PXENVIF_RECEIVER_RING       Ring =3D Argument;
@@ -2006,13 +2006,13 @@ ReceiverRingDebugCallback(
=20
 static FORCEINLINE VOID
 __ReceiverRingQueuePacket(
-    IN  PXENVIF_RECEIVER_RING   Ring,
-    IN  PXENVIF_RECEIVER_PACKET Packet
+    _In_ PXENVIF_RECEIVER_RING      Ring,
+    _In_ PXENVIF_RECEIVER_PACKET    Packet
     )
 {
-    PLIST_ENTRY                 ListEntry;
-    PLIST_ENTRY                 Old;
-    PLIST_ENTRY                 New;
+    PLIST_ENTRY                     ListEntry;
+    PLIST_ENTRY                     Old;
+    PLIST_ENTRY                     New;
=20
     ListEntry =3D &Packet->ListEntry;
=20
@@ -2027,7 +2027,7 @@ __ReceiverRingQueuePacket(
 _IRQL_requires_(DISPATCH_LEVEL)
 static DECLSPEC_NOINLINE ULONG
 ReceiverRingPoll(
-    IN  PXENVIF_RECEIVER_RING   Ring
+    _In_ PXENVIF_RECEIVER_RING  Ring
     )
 {
     PXENVIF_RECEIVER            Receiver;
@@ -2277,8 +2277,8 @@ done:
=20
 static FORCEINLINE BOOLEAN
 __ReceiverRingUnmask(
-    IN  PXENVIF_RECEIVER_RING   Ring,
-    IN  BOOLEAN                 Force
+    _In_ PXENVIF_RECEIVER_RING  Ring,
+    _In_ BOOLEAN                Force
     )
 {
     PXENVIF_RECEIVER            Receiver;
@@ -2302,10 +2302,10 @@ _IRQL_requires_(DISPATCH_LEVEL)
 _IRQL_requires_same_
 static VOID
 ReceiverRingPollDpc(
-    IN  PKDPC               Dpc,
-    IN  PVOID               Context,
-    IN  PVOID               Argument1,
-    IN  PVOID               Argument2
+    _In_ PKDPC              Dpc,
+    _In_ PVOID              Context,
+    _In_ PVOID              Argument1,
+    _In_ PVOID              Argument2
     )
 {
     PXENVIF_RECEIVER_RING   Ring =3D Context;
@@ -2335,8 +2335,8 @@ KSERVICE_ROUTINE    ReceiverRingEvtchnCallback;
 _Use_decl_annotations_
 BOOLEAN
 ReceiverRingEvtchnCallback(
-    IN  PKINTERRUPT             InterruptObject,
-    IN  PVOID                   Argument
+    _In_ PKINTERRUPT            InterruptObject,
+    _In_ PVOID                  Argument
     )
 {
     PXENVIF_RECEIVER_RING       Ring =3D Argument;
@@ -2371,8 +2371,8 @@ ReceiverRingEvtchnCallback(
=20
 static NTSTATUS
 ReceiverRingWatchdog(
-    IN  PXENVIF_THREAD      Self,
-    IN  PVOID               Context
+    _In_ PXENVIF_THREAD     Self,
+    _In_ PVOID              Context
     )
 {
     PXENVIF_RECEIVER_RING   Ring =3D Context;
@@ -2452,14 +2452,14 @@ ReceiverRingWatchdog(
=20
 static FORCEINLINE NTSTATUS
 __ReceiverRingInitialize(
-    IN  PXENVIF_RECEIVER        Receiver,
-    IN  ULONG                   Index,
-    OUT PXENVIF_RECEIVER_RING   *Ring
+    _In_ PXENVIF_RECEIVER           Receiver,
+    _In_ ULONG                      Index,
+    _Outptr_ PXENVIF_RECEIVER_RING  *Ring
     )
 {
-    PXENVIF_FRONTEND            Frontend;
-    CHAR                        Name[MAXNAMELEN];
-    NTSTATUS                    status;
+    PXENVIF_FRONTEND                Frontend;
+    CHAR                            Name[MAXNAMELEN];
+    NTSTATUS                        status;
=20
     Frontend =3D Receiver->Frontend;
=20
@@ -2599,8 +2599,8 @@ fail1:
=20
 static FORCEINLINE VOID
 __ReceiverRingSetAffinity(
-    IN  PXENVIF_RECEIVER_RING   Ring,
-    IN  PPROCESSOR_NUMBER       Processor
+    _In_ PXENVIF_RECEIVER_RING  Ring,
+    _In_ PPROCESSOR_NUMBER      Processor
     )
 {
     PXENVIF_RECEIVER            Receiver;
@@ -2622,7 +2622,7 @@ __ReceiverRingSetAffinity(
=20
 static FORCEINLINE NTSTATUS
 __ReceiverRingConnect(
-    IN  PXENVIF_RECEIVER_RING   Ring
+    _In_ PXENVIF_RECEIVER_RING  Ring
     )
 {
     PXENVIF_RECEIVER            Receiver;
@@ -2791,8 +2791,8 @@ fail1:
=20
 static FORCEINLINE NTSTATUS
 __ReceiverRingStoreWrite(
-    IN  PXENVIF_RECEIVER_RING       Ring,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction
+    _In_ PXENVIF_RECEIVER_RING      Ring,
+    _In_ PXENBUS_STORE_TRANSACTION  Transaction
     )
 {
     PXENVIF_RECEIVER                Receiver;
@@ -2847,7 +2847,7 @@ fail1:
=20
 static FORCEINLINE NTSTATUS
 __ReceiverRingEnable(
-    IN  PXENVIF_RECEIVER_RING   Ring
+    _In_ PXENVIF_RECEIVER_RING  Ring
     )
 {
     PXENVIF_RECEIVER            Receiver;
@@ -2894,7 +2894,7 @@ fail1:
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE VOID
 __ReceiverRingDisable(
-    IN  PXENVIF_RECEIVER_RING   Ring
+    _In_ PXENVIF_RECEIVER_RING  Ring
     )
 {   =20
     PXENVIF_RECEIVER            Receiver;
@@ -2926,7 +2926,7 @@ __ReceiverRingDisable(
=20
 static FORCEINLINE VOID
 __ReceiverRingDisconnect(
-    IN  PXENVIF_RECEIVER_RING   Ring
+    _In_ PXENVIF_RECEIVER_RING  Ring
     )
 {
     PXENVIF_RECEIVER            Receiver;
@@ -2992,7 +2992,7 @@ __ReceiverRingDisconnect(
=20
 static FORCEINLINE VOID
 __ReceiverRingTeardown(
-    IN  PXENVIF_RECEIVER_RING   Ring
+    _In_ PXENVIF_RECEIVER_RING  Ring
     )
 {
     PXENVIF_RECEIVER            Receiver;
@@ -3049,8 +3049,8 @@ __ReceiverRingTeardown(
=20
 static FORCEINLINE VOID
 __ReceiverRingSetOffloadOptions(
-    IN  PXENVIF_RECEIVER_RING       Ring,
-    IN  XENVIF_VIF_OFFLOAD_OPTIONS  Options
+    _In_ PXENVIF_RECEIVER_RING      Ring,
+    _In_ XENVIF_VIF_OFFLOAD_OPTIONS Options
     )
 {
     KIRQL                           Irql;
@@ -3066,8 +3066,8 @@ __ReceiverRingSetOffloadOptions(
=20
 static FORCEINLINE VOID
 __ReceiverRingSetBackfillSize(
-    IN  PXENVIF_RECEIVER_RING   Ring,
-    IN  ULONG                   Size
+    _In_ PXENVIF_RECEIVER_RING  Ring,
+    _In_ ULONG                  Size
     )
 {
     KIRQL                       Irql;
@@ -3083,8 +3083,8 @@ __ReceiverRingSetBackfillSize(
=20
 static VOID
 ReceiverDebugCallback(
-    IN  PVOID           Argument,
-    IN  BOOLEAN         Crashing
+    _In_ PVOID          Argument,
+    _In_ BOOLEAN        Crashing
     )
 {
     PXENVIF_RECEIVER    Receiver =3D Argument;
@@ -3101,14 +3101,14 @@ ReceiverDebugCallback(
 _IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 ReceiverInitialize(
-    IN  PXENVIF_FRONTEND    Frontend,
-    OUT PXENVIF_RECEIVER    *Receiver
+    _In_ PXENVIF_FRONTEND       Frontend,
+    _Outptr_ PXENVIF_RECEIVER   *Receiver
     )
 {
-    HANDLE                  ParametersKey;
-    LONG                    MaxQueues;
-    LONG                    Index;
-    NTSTATUS                status;
+    HANDLE                      ParametersKey;
+    LONG                        MaxQueues;
+    LONG                        Index;
+    NTSTATUS                    status;
=20
     *Receiver =3D __ReceiverAllocate(sizeof (XENVIF_RECEIVER));
=20
@@ -3275,7 +3275,7 @@ fail1:
 _IRQL_requires_(DISPATCH_LEVEL)
 NTSTATUS
 ReceiverConnect(
-    IN  PXENVIF_RECEIVER    Receiver
+    _In_ PXENVIF_RECEIVER   Receiver
     )
 {
     PXENVIF_FRONTEND        Frontend;
@@ -3364,8 +3364,8 @@ fail1:
=20
 static FORCEINLINE NTSTATUS
 __ReceiverSetGsoFeatureFlag(
-    IN  PXENVIF_RECEIVER            Receiver,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction
+    _In_ PXENVIF_RECEIVER           Receiver,
+    _In_ PXENBUS_STORE_TRANSACTION  Transaction
     )
 {
     PXENVIF_FRONTEND                Frontend;
@@ -3418,8 +3418,8 @@ fail1:
=20
 static FORCEINLINE NTSTATUS
 __ReceiverSetChecksumFeatureFlag(
-    IN  PXENVIF_RECEIVER            Receiver,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction
+    _In_ PXENVIF_RECEIVER           Receiver,
+    _In_ PXENBUS_STORE_TRANSACTION  Transaction
     )
 {
     PXENVIF_FRONTEND                Frontend;
@@ -3461,8 +3461,8 @@ fail1:
 _IRQL_requires_(DISPATCH_LEVEL)
 NTSTATUS
 ReceiverStoreWrite(
-    IN  PXENVIF_RECEIVER            Receiver,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction
+    _In_ PXENVIF_RECEIVER           Receiver,
+    _In_ PXENBUS_STORE_TRANSACTION  Transaction
     )
 {
     PXENVIF_FRONTEND                Frontend;
@@ -3546,7 +3546,7 @@ fail1:
 _IRQL_requires_(DISPATCH_LEVEL)
 NTSTATUS
 ReceiverEnable(
-    IN  PXENVIF_RECEIVER    Receiver
+    _In_ PXENVIF_RECEIVER   Receiver
     )
 {
     PXENVIF_FRONTEND        Frontend;
@@ -3590,7 +3590,7 @@ fail1:
 _IRQL_requires_(DISPATCH_LEVEL)
 VOID
 ReceiverDisable(
-    IN  PXENVIF_RECEIVER    Receiver
+    _In_ PXENVIF_RECEIVER   Receiver
     )
 {
     PXENVIF_FRONTEND        Frontend;
@@ -3613,7 +3613,7 @@ ReceiverDisable(
 _IRQL_requires_(DISPATCH_LEVEL)
 VOID
 ReceiverDisconnect(
-    IN  PXENVIF_RECEIVER    Receiver
+    _In_ PXENVIF_RECEIVER   Receiver
     )
 {
     PXENVIF_FRONTEND        Frontend;
@@ -3649,7 +3649,7 @@ ReceiverDisconnect(
 _IRQL_requires_(PASSIVE_LEVEL)
 VOID
 ReceiverTeardown(
-    IN  PXENVIF_RECEIVER    Receiver
+    _In_ PXENVIF_RECEIVER   Receiver
     )
 {
     PXENVIF_FRONTEND        Frontend;
@@ -3710,8 +3710,8 @@ ReceiverTeardown(
 _IRQL_requires_max_(DISPATCH_LEVEL)
 VOID
 ReceiverSetOffloadOptions(
-    IN  PXENVIF_RECEIVER            Receiver,
-    IN  XENVIF_VIF_OFFLOAD_OPTIONS  Options
+    _In_ PXENVIF_RECEIVER           Receiver,
+    _In_ XENVIF_VIF_OFFLOAD_OPTIONS Options
     )
 {
     PXENVIF_FRONTEND                Frontend;
@@ -3741,8 +3741,8 @@ ReceiverSetOffloadOptions(
 _IRQL_requires_max_(DISPATCH_LEVEL)
 VOID
 ReceiverSetBackfillSize(
-    IN  PXENVIF_RECEIVER    Receiver,
-    IN  ULONG               Size
+    _In_ PXENVIF_RECEIVER           Receiver,
+    _In_ ULONG                      Size
     )
 {
     PXENVIF_FRONTEND                Frontend;
@@ -3768,8 +3768,8 @@ ReceiverSetBackfillSize(
 _IRQL_requires_max_(DISPATCH_LEVEL)
 VOID
 ReceiverQueryRingSize(
-    IN  PXENVIF_RECEIVER    Receiver,
-    OUT PULONG              Size
+    _In_ PXENVIF_RECEIVER   Receiver,
+    _Out_ PULONG            Size
     )
 {
     UNREFERENCED_PARAMETER(Receiver);
@@ -3780,8 +3780,8 @@ ReceiverQueryRingSize(
 _IRQL_requires_(DISPATCH_LEVEL)
 VOID
 ReceiverReturnPacket(
-    IN  PXENVIF_RECEIVER    Receiver,
-    IN  PVOID               Cookie
+    _In_ PXENVIF_RECEIVER   Receiver,
+    _In_ PVOID              Cookie
     )
 {
     PXENVIF_RECEIVER_PACKET Packet =3D Cookie;
@@ -3810,7 +3810,7 @@ ReceiverReturnPacket(
 _IRQL_requires_max_(APC_LEVEL)
 VOID
 ReceiverWaitForPackets(
-    IN  PXENVIF_RECEIVER    Receiver
+    _In_ PXENVIF_RECEIVER   Receiver
     )
 {
     PXENVIF_FRONTEND        Frontend;
@@ -3861,8 +3861,8 @@ ReceiverWaitForPackets(
 _IRQL_requires_(DISPATCH_LEVEL)
 VOID
 ReceiverTrigger(
-    IN  PXENVIF_RECEIVER    Receiver,
-    IN  ULONG               Index
+    _In_ PXENVIF_RECEIVER   Receiver,
+    _In_ ULONG              Index
     )
 {
     PXENVIF_RECEIVER_RING   Ring;
@@ -3875,8 +3875,8 @@ ReceiverTrigger(
 _IRQL_requires_(DISPATCH_LEVEL)
 VOID
 ReceiverSend(
-    IN  PXENVIF_RECEIVER    Receiver,
-    IN  ULONG               Index
+    _In_ PXENVIF_RECEIVER   Receiver,
+    _In_ ULONG              Index
     )
 {
     PXENVIF_RECEIVER_RING   Ring;
@@ -3889,8 +3889,8 @@ ReceiverSend(
 _IRQL_requires_max_(DISPATCH_LEVEL)
 NTSTATUS
 ReceiverSetHashAlgorithm(
-    IN  PXENVIF_RECEIVER                Receiver,
-    IN  XENVIF_PACKET_HASH_ALGORITHM    Algorithm
+    _In_ PXENVIF_RECEIVER               Receiver,
+    _In_ XENVIF_PACKET_HASH_ALGORITHM   Algorithm
     )
 {
     PXENVIF_FRONTEND                    Frontend;
@@ -3933,8 +3933,8 @@ fail1:
 _IRQL_requires_max_(DISPATCH_LEVEL)
 NTSTATUS
 ReceiverQueryHashCapabilities(
-    IN  PXENVIF_RECEIVER    Receiver,
-    OUT PULONG              Types
+    _In_ PXENVIF_RECEIVER   Receiver,
+    _Out_ PULONG            Types
     )
 {
     PXENVIF_FRONTEND        Frontend;
@@ -3957,9 +3957,9 @@ fail1:
 _IRQL_requires_max_(DISPATCH_LEVEL)
 NTSTATUS
 ReceiverUpdateHashParameters(
-    IN  PXENVIF_RECEIVER    Receiver,
-    IN  ULONG               Types,
-    IN  PUCHAR              Key
+    _In_ PXENVIF_RECEIVER   Receiver,
+    _In_ ULONG              Types,
+    _In_ PUCHAR             Key
     )
 {
     PXENVIF_FRONTEND        Frontend;
@@ -4009,9 +4009,9 @@ fail1:
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE NTSTATUS
 __ReceiverSetQueueAffinities(
-    IN  PXENVIF_RECEIVER    Receiver,
-    IN  PPROCESSOR_NUMBER   QueueAffinities,
-    IN  ULONG               Count
+    _In_ PXENVIF_RECEIVER   Receiver,
+    _In_ PPROCESSOR_NUMBER  QueueAffinities,
+    _In_ ULONG              Count
     )
 {
     PXENVIF_FRONTEND        Frontend;
@@ -4053,9 +4053,9 @@ fail1:
 _IRQL_requires_max_(DISPATCH_LEVEL)
 NTSTATUS
 ReceiverUpdateHashMapping(
-    IN  PXENVIF_RECEIVER    Receiver,
-    IN  PPROCESSOR_NUMBER   ProcessorMapping,
-    IN  ULONG               Size
+    _In_ PXENVIF_RECEIVER   Receiver,
+    _In_ PPROCESSOR_NUMBER  ProcessorMapping,
+    _In_ ULONG              Size
     )
 {
     PXENVIF_FRONTEND        Frontend;
diff --git a/src/xenvif/receiver=2Eh b/src/xenvif/receiver=2Eh
index 96cec02=2E=2E2122f0d 100644
--- a/src/xenvif/receiver=2Eh
+++ b/src/xenvif/receiver=2Eh
@@ -44,123 +44,123 @@ typedef struct _XENVIF_RECEIVER XENVIF_RECEIVER, *PX=
ENVIF_RECEIVER;
 _IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 ReceiverInitialize(
-    IN  PXENVIF_FRONTEND    Frontend,
-    OUT PXENVIF_RECEIVER    *Receiver
+    _In_ PXENVIF_FRONTEND       Frontend,
+    _Outptr_ PXENVIF_RECEIVER   *Receiver
     );
=20
 _IRQL_requires_(DISPATCH_LEVEL)
 extern NTSTATUS
 ReceiverConnect(
-    IN  PXENVIF_RECEIVER    Receiver
+    _In_ PXENVIF_RECEIVER   Receiver
     );
=20
 _IRQL_requires_(DISPATCH_LEVEL)
 extern NTSTATUS
 ReceiverStoreWrite(
-    IN  PXENVIF_RECEIVER            Receiver,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction
+    _In_ PXENVIF_RECEIVER           Receiver,
+    _In_ PXENBUS_STORE_TRANSACTION  Transaction
     );
=20
 _IRQL_requires_(DISPATCH_LEVEL)
 extern NTSTATUS
 ReceiverEnable(
-    IN  PXENVIF_RECEIVER    Receiver
+    _In_ PXENVIF_RECEIVER   Receiver
     );
=20
 _IRQL_requires_(DISPATCH_LEVEL)
 extern VOID
 ReceiverDisable(
-    IN  PXENVIF_RECEIVER    Receiver
+    _In_ PXENVIF_RECEIVER   Receiver
     );
=20
 _IRQL_requires_(DISPATCH_LEVEL)
 extern VOID
 ReceiverDisconnect(
-    IN  PXENVIF_RECEIVER    Receiver
+    _In_ PXENVIF_RECEIVER   Receiver
     );
=20
 _IRQL_requires_(PASSIVE_LEVEL)
 extern VOID
 ReceiverTeardown(
-    IN  PXENVIF_RECEIVER    Receiver
+    _In_ PXENVIF_RECEIVER   Receiver
     );
=20
 _IRQL_requires_max_(APC_LEVEL)
 extern VOID
 ReceiverWaitForPackets(
-    IN  PXENVIF_RECEIVER    Receiver
+    _In_ PXENVIF_RECEIVER   Receiver
     );
=20
 _IRQL_requires_max_(DISPATCH_LEVEL)
 extern VOID
 ReceiverQueryRingSize(
-    IN  PXENVIF_RECEIVER    Receiver,
-    OUT PULONG              Size
+    _In_ PXENVIF_RECEIVER   Receiver,
+    _Out_ PULONG            Size
     );
=20
 _IRQL_requires_max_(DISPATCH_LEVEL)
 extern VOID
 ReceiverSetOffloadOptions(
-    IN  PXENVIF_RECEIVER            Receiver,
-    IN  XENVIF_VIF_OFFLOAD_OPTIONS  Options
+    _In_ PXENVIF_RECEIVER           Receiver,
+    _In_ XENVIF_VIF_OFFLOAD_OPTIONS Options
     );
=20
 _IRQL_requires_max_(DISPATCH_LEVEL)
 extern VOID
 ReceiverSetBackfillSize(
-    IN  PXENVIF_RECEIVER    Receiver,
-    IN  ULONG               Size
+    _In_ PXENVIF_RECEIVER   Receiver,
+    _In_ ULONG              Size
     );
=20
 _IRQL_requires_(DISPATCH_LEVEL)
 extern VOID
 ReceiverReturnPacket(
-    IN  PXENVIF_RECEIVER    Receiver,
-    IN  PVOID               Cookie
+    _In_ PXENVIF_RECEIVER   Receiver,
+    _In_ PVOID              Cookie
     );
=20
 _IRQL_requires_(DISPATCH_LEVEL)
 extern VOID
 ReceiverTrigger(
-    IN  PXENVIF_RECEIVER    Receiver,
-    IN  ULONG               Index
+    _In_ PXENVIF_RECEIVER   Receiver,
+    _In_ ULONG              Index
     );
=20
 _IRQL_requires_(DISPATCH_LEVEL)
 extern VOID
 ReceiverSend(
-    IN  PXENVIF_RECEIVER    Receiver,
-    IN  ULONG               Index
+    _In_ PXENVIF_RECEIVER   Receiver,
+    _In_ ULONG              Index
     );
=20
 _IRQL_requires_max_(DISPATCH_LEVEL)
 NTSTATUS
 ReceiverSetHashAlgorithm(
-    IN  PXENVIF_RECEIVER                Receiver,
-    IN  XENVIF_PACKET_HASH_ALGORITHM    Algorithm
+    _In_ PXENVIF_RECEIVER               Receiver,
+    _In_ XENVIF_PACKET_HASH_ALGORITHM   Algorithm
     );
=20
 _IRQL_requires_max_(DISPATCH_LEVEL)
 NTSTATUS
 ReceiverQueryHashCapabilities(
-    IN  PXENVIF_RECEIVER    Receiver,
-    OUT PULONG              Types
+    _In_ PXENVIF_RECEIVER   Receiver,
+    _Out_ PULONG            Types
     );
=20
 _IRQL_requires_max_(DISPATCH_LEVEL)
 NTSTATUS
 ReceiverUpdateHashParameters(
-    IN  PXENVIF_RECEIVER    Receiver,
-    IN  ULONG               Types,
-    IN  PUCHAR              Key
+    _In_ PXENVIF_RECEIVER   Receiver,
+    _In_ ULONG              Types,
+    _In_ PUCHAR             Key
     );
=20
 _IRQL_requires_max_(DISPATCH_LEVEL)
 NTSTATUS
 ReceiverUpdateHashMapping(
-    IN  PXENVIF_RECEIVER    Receiver,
-    IN  PPROCESSOR_NUMBER   ProcessorMapping,
-    IN  ULONG               Order
+    _In_ PXENVIF_RECEIVER   Receiver,
+    _In_ PPROCESSOR_NUMBER  ProcessorMapping,
+    _In_ ULONG              Order
     );
=20
 #endif  // _XENVIF_RECEIVER_H
diff --git a/src/xenvif/settings=2Ec b/src/xenvif/settings=2Ec
index 4dd4ec4=2E=2E1bf1dd8 100644
--- a/src/xenvif/settings=2Ec
+++ b/src/xenvif/settings=2Ec
@@ -59,7 +59,7 @@ typedef struct _SETTINGS_COPY_IP_ADDRESS_PARAMETERS {
=20
 static FORCEINLINE PVOID
 __SettingsAllocate(
-    IN  ULONG   Length
+    _In_ ULONG  Length
     )
 {
     return __AllocatePoolWithTag(NonPagedPool, Length, SETTINGS_TAG);
@@ -67,7 +67,7 @@ __SettingsAllocate(
=20
 static FORCEINLINE VOID
 __SettingsFree(
-    IN  PVOID   Buffer
+    _In_ PVOID  Buffer
     )
 {
     __FreePoolWithTag(Buffer, SETTINGS_TAG);
@@ -75,8 +75,8 @@ __SettingsFree(
=20
 static FORCEINLINE NTSTATUS
 __GuidToString(
-    IN  LPGUID          Guid,
-    OUT PANSI_STRING    Ansi
+    _In_ LPGUID         Guid,
+    _Out_ PANSI_STRING  Ansi
     )
 {
     NTSTATUS            status;
@@ -107,10 +107,10 @@ fail1:
=20
 static NTSTATUS
 SettingsCopyIpAddressesValue(
-    IN  PVOID                               Context,
-    IN  HANDLE                              Key,
-    IN  PANSI_STRING                        ValueName,
-    IN  ULONG                               Type
+    _In_ PVOID                              Context,
+    _In_ HANDLE                             Key,
+    _In_ PANSI_STRING                       ValueName,
+    _In_ ULONG                              Type
     )
 {
     PSETTINGS_COPY_IP_ADDRESS_PARAMETERS    Parameters =3D Context;
@@ -174,9 +174,9 @@ fail1:
=20
 static NTSTATUS
 SettingsCopyIpAddresses(
-    IN  ULONG                           Version,
-    IN  PNET_LUID                       OldLuid,
-    IN  PNET_LUID                       NewLuid
+    _In_ ULONG                          Version,
+    _In_ PNET_LUID                      OldLuid,
+    _In_ PNET_LUID                      NewLuid
     )
 {
     SETTINGS_COPY_IP_ADDRESS_PARAMETERS Parameters;
@@ -238,14 +238,14 @@ fail1:
=20
 static NTSTATUS
 SettingsCopyInterfaceValue(
-    IN  PVOID            Context,
-    IN  HANDLE           SourceKey,
-    IN  PANSI_STRING     ValueName,
-    IN  ULONG            Type
+    _In_ PVOID          Context,
+    _In_ HANDLE         SourceKey,
+    _In_ PANSI_STRING   ValueName,
+    _In_ ULONG          Type
     )
 {
-    HANDLE               DestinationKey =3D Context;
-    NTSTATUS             status;
+    HANDLE              DestinationKey =3D Context;
+    NTSTATUS            status;
=20
     Trace(" - %Z\n", ValueName);
=20
@@ -309,10 +309,10 @@ SettingsCopyInterfaceValue(
=20
 static NTSTATUS
 SettingsCopyInterface(
-    IN  PCHAR           InterfacePath,
-    IN  PCHAR           InterfacePrefix,
-    IN  PANSI_STRING    OldGuid,
-    IN  PANSI_STRING    NewGuid
+    _In_ PCHAR          InterfacePath,
+    _In_ PCHAR          InterfacePrefix,
+    _In_ PANSI_STRING   OldGuid,
+    _In_ PANSI_STRING   NewGuid
     )
 {
     HANDLE              OldKey;
@@ -420,9 +420,9 @@ fail1:
=20
 static NTSTATUS
 SettingsStoreCurrent(
-    IN  HANDLE          SubKey,
-    IN  PANSI_STRING    Guid,
-    IN  PNET_LUID       Luid
+    _In_ HANDLE         SubKey,
+    _In_ PANSI_STRING   Guid,
+    _In_ PNET_LUID      Luid
     )
 {
=20
@@ -458,11 +458,11 @@ fail1:
=20
 static NTSTATUS
 SettingsCopy(
-    IN  PCHAR           SubKeyName,
-    IN  PANSI_STRING    OldGuid,
-    IN  PNET_LUID       OldLuid,
-    IN  PANSI_STRING    NewGuid,
-    IN  PNET_LUID       NewLuid
+    _In_ PCHAR          SubKeyName,
+    _In_ PANSI_STRING   OldGuid,
+    _In_ PNET_LUID      OldLuid,
+    _In_ PANSI_STRING   NewGuid,
+    _In_ PNET_LUID      NewLuid
      )
 {
     HANDLE              SettingsKey;
@@ -530,11 +530,11 @@ fail1:
=20
 NTSTATUS
 SettingsSave(
-    IN  PCHAR       SubKeyName,
-    IN  PWCHAR      Alias,
-    IN  PWCHAR      Description,
-    IN  LPGUID      InterfaceGuid,
-    IN  PNET_LUID   InterfaceLuid
+    _In_ PCHAR      SubKeyName,
+    _In_ PWCHAR     Alias,
+    _In_ PWCHAR     Description,
+    _In_ LPGUID     InterfaceGuid,
+    _In_ PNET_LUID  InterfaceLuid
     )
 {
     HANDLE          SettingsKey;
@@ -601,11 +601,11 @@ fail1:
=20
 NTSTATUS
 SettingsRestore(
-    IN  PCHAR       SubKeyName,
-    IN  PWCHAR      Alias,
-    IN  PWCHAR      Description,
-    IN  LPGUID      InterfaceGuid,
-    IN  PNET_LUID   InterfaceLuid
+    _In_ PCHAR      SubKeyName,
+    _In_ PWCHAR     Alias,
+    _In_ PWCHAR     Description,
+    _In_ LPGUID     InterfaceGuid,
+    _In_ PNET_LUID  InterfaceLuid
     )
 {
     HANDLE          SettingsKey;
diff --git a/src/xenvif/settings=2Eh b/src/xenvif/settings=2Eh
index 3f964bb=2E=2E4d88235 100644
--- a/src/xenvif/settings=2Eh
+++ b/src/xenvif/settings=2Eh
@@ -35,20 +35,20 @@
=20
 extern NTSTATUS
 SettingsSave(
-    IN  PCHAR       SubKeyName,
-    IN  PWCHAR      Alias,
-    IN  PWCHAR      Description,
-    IN  LPGUID      InterfaceGuid,
-    IN  PNET_LUID   InterfaceLuid
+    _In_ PCHAR      SubKeyName,
+    _In_ PWCHAR     Alias,
+    _In_ PWCHAR     Description,
+    _In_ LPGUID     InterfaceGuid,
+    _In_ PNET_LUID  InterfaceLuid
     );
=20
 extern NTSTATUS
 SettingsRestore(
-    IN  PCHAR       SubKeyName,
-    IN  PWCHAR      Alias,
-    IN  PWCHAR      Description,
-    IN  LPGUID      InterfaceGuid,
-    IN  PNET_LUID   InterfaceLuid
+    _In_ PCHAR      SubKeyName,
+    _In_ PWCHAR     Alias,
+    _In_ PWCHAR     Description,
+    _In_ LPGUID     InterfaceGuid,
+    _In_ PNET_LUID  InterfaceLuid
     );
=20
 #endif  // _XENVIF_SETTINGS_H
diff --git a/src/xenvif/transmitter=2Ec b/src/xenvif/transmitter=2Ec
index ad58336=2E=2E605f0cc 100644
--- a/src/xenvif/transmitter=2Ec
+++ b/src/xenvif/transmitter=2Ec
@@ -237,7 +237,7 @@ struct _XENVIF_TRANSMITTER {
=20
 static FORCEINLINE PVOID
 __TransmitterAllocate(
-    IN  ULONG   Length
+    _In_ ULONG  Length
     )
 {
     return __AllocatePoolWithTag(NonPagedPool, Length, XENVIF_TRANSMITTER=
_TAG);
@@ -245,7 +245,7 @@ __TransmitterAllocate(
=20
 static FORCEINLINE VOID
 __TransmitterFree(
-    IN  PVOID   Buffer
+    _In_ PVOID  Buffer
     )
 {
     __FreePoolWithTag(Buffer, XENVIF_TRANSMITTER_TAG);
@@ -255,7 +255,7 @@ _Acquires_nonreentrant_lock_(Argument)
 _IRQL_requires_(DISPATCH_LEVEL)
 static VOID
 TransmitterPacketAcquireLock(
-    IN  PVOID           Argument
+    _In_ PVOID          Argument
     )
 {
     PXENVIF_TRANSMITTER Transmitter =3D Argument;
@@ -267,7 +267,7 @@ _Requires_lock_held_(Argument)
 _IRQL_requires_(DISPATCH_LEVEL)
 static VOID
 TransmitterPacketReleaseLock(
-    IN  PVOID           Argument
+    _In_ PVOID          Argument
     )
 {
     PXENVIF_TRANSMITTER Transmitter =3D Argument;
@@ -277,8 +277,8 @@ TransmitterPacketReleaseLock(
=20
 static NTSTATUS
 TransmitterPacketCtor(
-    IN  PVOID                   Argument,
-    IN  PVOID                   Object
+    _In_ PVOID                  Argument,
+    _In_ PVOID                  Object
     )
 {
     PXENVIF_TRANSMITTER_PACKET  Packet =3D Object;
@@ -309,8 +309,8 @@ fail1:
=20
 static VOID
 TransmitterPacketDtor(
-    IN  PVOID                   Argument,
-    IN  PVOID                   Object
+    _In_ PVOID                  Argument,
+    _In_ PVOID                  Object
     )
 {
     PXENVIF_TRANSMITTER_PACKET  Packet =3D Object;
@@ -329,7 +329,7 @@ TransmitterPacketDtor(
=20
 static FORCEINLINE PXENVIF_TRANSMITTER_PACKET
 __TransmitterGetPacket(
-    IN  PXENVIF_TRANSMITTER         Transmitter
+    _In_ PXENVIF_TRANSMITTER    Transmitter
     )
 {
     return XENBUS_CACHE(Get,
@@ -340,8 +340,8 @@ __TransmitterGetPacket(
=20
 static FORCEINLINE VOID
 __TransmitterPutPacket(
-    IN  PXENVIF_TRANSMITTER         Transmitter,
-    IN  PXENVIF_TRANSMITTER_PACKET  Packet
+    _In_ PXENVIF_TRANSMITTER        Transmitter,
+    _In_ PXENVIF_TRANSMITTER_PACKET Packet
     )
 {
     ASSERT(IsZeroMemory(&Packet->ListEntry, sizeof (LIST_ENTRY)));
@@ -372,13 +372,13 @@ __TransmitterPutPacket(
=20
 static NTSTATUS
 TransmitterBufferCtor(
-    IN  PVOID                   Argument,
-    IN  PVOID                   Object
+    _In_ PVOID                  Argument,
+    _In_ PVOID                  Object
     )
 {
     PXENVIF_TRANSMITTER_BUFFER  Buffer =3D Object;
-    PMDL		                Mdl;
-    NTSTATUS	                status;
+    PMDL                        Mdl;
+    NTSTATUS                    status;
=20
     UNREFERENCED_PARAMETER(Argument);
=20
@@ -405,8 +405,8 @@ fail1:
=20
 static VOID
 TransmitterBufferDtor(
-    IN  PVOID                   Argument,
-    IN  PVOID                   Object
+    _In_ PVOID                  Argument,
+    _In_ PVOID                  Object
     )
 {
     PXENVIF_TRANSMITTER_BUFFER  Buffer =3D Object;
@@ -426,7 +426,7 @@ TransmitterBufferDtor(
=20
 static FORCEINLINE PXENVIF_TRANSMITTER_BUFFER
 __TransmitterGetBuffer(
-    IN  PXENVIF_TRANSMITTER_RING    Ring
+    _In_ PXENVIF_TRANSMITTER_RING   Ring
     )
 {
     PXENVIF_TRANSMITTER             Transmitter;
@@ -448,8 +448,8 @@ __TransmitterGetBuffer(
=20
 static FORCEINLINE VOID
 __TransmitterPutBuffer(
-    IN  PXENVIF_TRANSMITTER_RING    Ring,
-    IN  PXENVIF_TRANSMITTER_BUFFER  Buffer
+    _In_ PXENVIF_TRANSMITTER_RING   Ring,
+    _In_ PXENVIF_TRANSMITTER_BUFFER Buffer
     )
 {
     PXENVIF_TRANSMITTER             Transmitter;
@@ -472,8 +472,8 @@ __TransmitterPutBuffer(
=20
 static NTSTATUS
 TransmitterMulticastControlCtor(
-    IN  PVOID   Argument,
-    IN  PVOID   Object
+    _In_ PVOID  Argument,
+    _In_ PVOID  Object
     )
 {
     UNREFERENCED_PARAMETER(Argument);
@@ -484,8 +484,8 @@ TransmitterMulticastControlCtor(
=20
 static VOID
 TransmitterMulticastControlDtor(
-    IN  PVOID   Argument,
-    IN  PVOID   Object
+    _In_ PVOID  Argument,
+    _In_ PVOID  Object
     )
 {
     UNREFERENCED_PARAMETER(Argument);
@@ -494,7 +494,7 @@ TransmitterMulticastControlDtor(
=20
 static FORCEINLINE PXENVIF_TRANSMITTER_MULTICAST_CONTROL
 __TransmitterGetMulticastControl(
-    IN  PXENVIF_TRANSMITTER_RING            Ring
+    _In_ PXENVIF_TRANSMITTER_RING           Ring
     )
 {
     PXENVIF_TRANSMITTER                     Transmitter;
@@ -514,8 +514,8 @@ __TransmitterGetMulticastControl(
=20
 static FORCEINLINE VOID
 __TransmitterPutMulticastControl(
-    IN  PXENVIF_TRANSMITTER_RING                Ring,
-    IN  PXENVIF_TRANSMITTER_MULTICAST_CONTROL   Control
+    _In_ PXENVIF_TRANSMITTER_RING               Ring,
+    _In_ PXENVIF_TRANSMITTER_MULTICAST_CONTROL  Control
     )
 {
     PXENVIF_TRANSMITTER                         Transmitter;
@@ -535,8 +535,8 @@ __TransmitterPutMulticastControl(
=20
 static NTSTATUS
 TransmitterFragmentCtor(
-    IN  PVOID                       Argument,
-    IN  PVOID                       Object
+    _In_ PVOID                      Argument,
+    _In_ PVOID                      Object
     )
 {
     PXENVIF_TRANSMITTER_RING        Ring =3D Argument;
@@ -544,7 +544,7 @@ TransmitterFragmentCtor(
     PXENVIF_TRANSMITTER             Transmitter;
     PXENVIF_FRONTEND                Frontend;
     LONGLONG                        Id;
-    NTSTATUS	                    status;
+    NTSTATUS                        status;
=20
     Transmitter =3D Ring->Transmitter;
     Frontend =3D Transmitter->Frontend;
@@ -573,8 +573,8 @@ fail1:
=20
 static VOID
 TransmitterFragmentDtor(
-    IN  PVOID                       Argument,
-    IN  PVOID                       Object
+    _In_ PVOID                      Argument,
+    _In_ PVOID                      Object
     )
 {
     PXENVIF_TRANSMITTER_RING        Ring =3D Argument;
@@ -600,7 +600,7 @@ TransmitterFragmentDtor(
=20
 static FORCEINLINE PXENVIF_TRANSMITTER_FRAGMENT
 __TransmitterGetFragment(
-    IN  PXENVIF_TRANSMITTER_RING    Ring
+    _In_ PXENVIF_TRANSMITTER_RING   Ring
     )
 {
     PXENVIF_TRANSMITTER             Transmitter;
@@ -617,8 +617,8 @@ __TransmitterGetFragment(
=20
 static FORCEINLINE
 __TransmitterPutFragment(
-    IN  PXENVIF_TRANSMITTER_RING        Ring,
-    IN  PXENVIF_TRANSMITTER_FRAGMENT    Fragment
+    _In_ PXENVIF_TRANSMITTER_RING       Ring,
+    _In_ PXENVIF_TRANSMITTER_FRAGMENT   Fragment
     )
 {
     PXENVIF_TRANSMITTER                 Transmitter;
@@ -643,8 +643,8 @@ __TransmitterPutFragment(
=20
 static NTSTATUS
 TransmitterRequestCtor(
-    IN  PVOID   Argument,
-    IN  PVOID   Object
+    _In_ PVOID  Argument,
+    _In_ PVOID  Object
     )
 {
     UNREFERENCED_PARAMETER(Argument);
@@ -655,8 +655,8 @@ TransmitterRequestCtor(
=20
 static VOID
 TransmitterRequestDtor(
-    IN  PVOID   Argument,
-    IN  PVOID   Object
+    _In_ PVOID  Argument,
+    _In_ PVOID  Object
     )
 {
     UNREFERENCED_PARAMETER(Argument);
@@ -665,7 +665,7 @@ TransmitterRequestDtor(
=20
 static FORCEINLINE PXENVIF_TRANSMITTER_REQUEST
 __TransmitterGetRequest(
-    IN  PXENVIF_TRANSMITTER_RING    Ring
+    _In_ PXENVIF_TRANSMITTER_RING   Ring
     )
 {
     PXENVIF_TRANSMITTER             Transmitter;
@@ -683,11 +683,11 @@ __TransmitterGetRequest(
=20
 static FORCEINLINE VOID
 __TransmitterPutRequest(
-    IN  PXENVIF_TRANSMITTER_RING    Ring,
-    IN  PXENVIF_TRANSMITTER_REQUEST Request
+    _In_ PXENVIF_TRANSMITTER_RING       Ring,
+    _In_ PXENVIF_TRANSMITTER_REQUEST    Request
     )
 {
-    PXENVIF_TRANSMITTER             Transmitter;
+    PXENVIF_TRANSMITTER                 Transmitter;
=20
     Transmitter =3D Ring->Transmitter;
=20
@@ -702,8 +702,8 @@ __TransmitterPutRequest(
=20
 static VOID
 TransmitterRingDebugCallback(
-    IN  PVOID                   Argument,
-    IN  BOOLEAN                 Crashing
+    _In_ PVOID                  Argument,
+    _In_ BOOLEAN                Crashing
     )
 {
     PXENVIF_TRANSMITTER_RING    Ring =3D Argument;
@@ -788,10 +788,10 @@ TransmitterRingDebugCallback(
=20
 static BOOLEAN
 TransmitterPullup(
-    IN      PVOID                   Argument,
-    IN      PUCHAR                  DestinationVa,
-    IN OUT  PXENVIF_PACKET_PAYLOAD  Payload,
-    IN      ULONG                   Length
+    _In_ PVOID                      Argument,
+    _In_ PUCHAR                     DestinationVa,
+    _Inout_ PXENVIF_PACKET_PAYLOAD  Payload,
+    _In_ ULONG                      Length
     )
 {
     PMDL                            Mdl;
@@ -847,7 +847,7 @@ fail1:
=20
 static FORCEINLINE NTSTATUS
 __TransmitterRingCopyPayload(
-    IN  PXENVIF_TRANSMITTER_RING    Ring
+    _In_ PXENVIF_TRANSMITTER_RING   Ring
     )
 {
     PXENVIF_TRANSMITTER             Transmitter;
@@ -1004,7 +1004,7 @@ fail1:
=20
 static FORCEINLINE NTSTATUS
 __TransmitterRingGrantPayload(
-    IN  PXENVIF_TRANSMITTER_RING    Ring
+    _In_ PXENVIF_TRANSMITTER_RING   Ring
     )
 {
     PXENVIF_TRANSMITTER             Transmitter;
@@ -1160,7 +1160,7 @@ fail1:
=20
 static FORCEINLINE NTSTATUS
 __TransmitterRingPrepareHeader(
-    IN  PXENVIF_TRANSMITTER_RING    Ring
+    _In_ PXENVIF_TRANSMITTER_RING   Ring
     )
 {
     PXENVIF_TRANSMITTER             Transmitter;
@@ -1528,7 +1528,7 @@ fail1:
=20
 static FORCEINLINE PXENVIF_TRANSMITTER_PACKET
 __TransmitterRingUnprepareFragments(
-    IN  PXENVIF_TRANSMITTER_RING    Ring
+    _In_ PXENVIF_TRANSMITTER_RING   Ring
     )
 {
     PXENVIF_TRANSMITTER             Transmitter;
@@ -1649,8 +1649,8 @@ __TransmitterRingUnprepareFragments(
=20
 static FORCEINLINE NTSTATUS
 __TransmitterRingPreparePacket(
-    IN  PXENVIF_TRANSMITTER_RING    Ring,
-    IN  PXENVIF_TRANSMITTER_PACKET  Packet
+    _In_ PXENVIF_TRANSMITTER_RING   Ring,
+    _In_ PXENVIF_TRANSMITTER_PACKET Packet
     )
 {
     PXENVIF_TRANSMITTER             Transmitter;
@@ -1764,8 +1764,8 @@ fail1:
=20
 static FORCEINLINE NTSTATUS
 __TransmitterRingPrepareArp(
-    IN  PXENVIF_TRANSMITTER_RING    Ring,
-    IN  PIPV4_ADDRESS               Address
+    _In_ PXENVIF_TRANSMITTER_RING   Ring,
+    _In_ PIPV4_ADDRESS              Address
     )
 {
     PXENVIF_TRANSMITTER             Transmitter;
@@ -1906,8 +1906,8 @@ fail1:
=20
 static FORCEINLINE NTSTATUS
 __TransmitterRingPrepareNeighbourAdvertisement(
-    IN  PXENVIF_TRANSMITTER_RING    Ring,
-    IN  PIPV6_ADDRESS               Address
+    _In_ PXENVIF_TRANSMITTER_RING   Ring,
+    _In_ PIPV6_ADDRESS              Address
     )
 {
     PXENVIF_TRANSMITTER             Transmitter;
@@ -2074,9 +2074,9 @@ fail1:
=20
 static FORCEINLINE NTSTATUS
 __TransmitterRingPrepareMulticastControl(
-    IN  PXENVIF_TRANSMITTER_RING            Ring,
-    IN  PETHERNET_ADDRESS                   Address,
-    IN  BOOLEAN                             Add
+    _In_ PXENVIF_TRANSMITTER_RING           Ring,
+    _In_ PETHERNET_ADDRESS                  Address,
+    _In_ BOOLEAN                            Add
     )
 {
     PXENVIF_TRANSMITTER_STATE               State;
@@ -2135,7 +2135,7 @@ fail1:
=20
 static FORCEINLINE NTSTATUS
 __TransmitterRingPostFragments(
-    IN  PXENVIF_TRANSMITTER_RING    Ring
+    _In_ PXENVIF_TRANSMITTER_RING   Ring
     )
 {
     PXENVIF_TRANSMITTER             Transmitter;
@@ -2383,7 +2383,7 @@ fail1:
=20
 static FORCEINLINE VOID
 __TransmitterRingFakeResponses(
-    IN  PXENVIF_TRANSMITTER_RING    Ring
+    _In_ PXENVIF_TRANSMITTER_RING   Ring
     )
 {
     RING_IDX                        rsp_prod;
@@ -2455,8 +2455,8 @@ __TransmitterRingFakeResponses(
=20
 static FORCEINLINE VOID
 __TransmitterRingCompletePacket(
-    IN  PXENVIF_TRANSMITTER_RING    Ring,
-    IN  PXENVIF_TRANSMITTER_PACKET  Packet
+    _In_ PXENVIF_TRANSMITTER_RING   Ring,
+    _In_ PXENVIF_TRANSMITTER_PACKET Packet
     )
 {
     InsertTailList(&Ring->PacketComplete, &Packet->ListEntry);
@@ -2465,7 +2465,7 @@ __TransmitterRingCompletePacket(
=20
 static DECLSPEC_NOINLINE ULONG
 TransmitterRingPoll(
-    IN  PXENVIF_TRANSMITTER_RING    Ring
+    _In_ PXENVIF_TRANSMITTER_RING   Ring
     )
 {
     PXENVIF_TRANSMITTER             Transmitter;
@@ -2648,7 +2648,7 @@ done:
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE VOID
 __TransmitterRingTrigger(
-    IN  PXENVIF_TRANSMITTER_RING    Ring
+    _In_ PXENVIF_TRANSMITTER_RING   Ring
     )
 {
     PXENVIF_TRANSMITTER             Transmitter;
@@ -2674,7 +2674,7 @@ __TransmitterRingTrigger(
=20
 static FORCEINLINE VOID
 __TransmitterRingSend(
-    IN  PXENVIF_TRANSMITTER_RING    Ring
+    _In_ PXENVIF_TRANSMITTER_RING   Ring
     )
 {
     PXENVIF_TRANSMITTER             Transmitter;
@@ -2700,7 +2700,7 @@ __TransmitterRingSend(
=20
 static FORCEINLINE VOID
 __TransmitterRingPushRequests(
-    IN  PXENVIF_TRANSMITTER_RING    Ring
+    _In_ PXENVIF_TRANSMITTER_RING   Ring
     )
 {
     BOOLEAN                         Notify;
@@ -2729,7 +2729,7 @@ __TransmitterRingPushRequests(
 _IRQL_requires_(DISPATCH_LEVEL)
 static DECLSPEC_NOINLINE VOID
 TransmitterRingSwizzle(
-    IN  PXENVIF_TRANSMITTER_RING    Ring
+    _In_ PXENVIF_TRANSMITTER_RING   Ring
     )
 {
     ULONG_PTR                       Old;
@@ -2781,7 +2781,7 @@ TransmitterRingSwizzle(
 _IRQL_requires_(DISPATCH_LEVEL)
 static DECLSPEC_NOINLINE VOID
 TransmitterRingSchedule(
-    IN  PXENVIF_TRANSMITTER_RING    Ring
+    _In_ PXENVIF_TRANSMITTER_RING   Ring
     )
 {
     PXENVIF_TRANSMITTER_STATE       State;
@@ -2905,8 +2905,8 @@ TransmitterRingSchedule(
=20
 static FORCEINLINE VOID
 __TransmitterSetCompletionInfo(
-    IN  PXENVIF_TRANSMITTER         Transmitter,
-    IN  PXENVIF_TRANSMITTER_PACKET  Packet
+    _In_ PXENVIF_TRANSMITTER        Transmitter,
+    _In_ PXENVIF_TRANSMITTER_PACKET Packet
     )
 {
     PXENVIF_FRONTEND                Frontend;
@@ -3072,12 +3072,12 @@ __TransmitterSetCompletionInfo(
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE VOID
 __TransmitterReturnPackets(
-    IN  PXENVIF_TRANSMITTER Transmitter,
-    IN  PLIST_ENTRY         List
+    _In_ PXENVIF_TRANSMITTER    Transmitter,
+    _In_ PLIST_ENTRY            List
     )
 {
-    PXENVIF_FRONTEND        Frontend;
-    PXENVIF_VIF_CONTEXT     Context;
+    PXENVIF_FRONTEND            Frontend;
+    PXENVIF_VIF_CONTEXT         Context;
=20
     Frontend =3D Transmitter->Frontend;
     Context =3D PdoGetVifContext(FrontendGetPdo(Frontend));
@@ -3108,7 +3108,7 @@ __TransmitterReturnPackets(
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE BOOLEAN
 __TransmitterRingTryAcquireLock(
-    IN  PXENVIF_TRANSMITTER_RING    Ring
+    _In_ PXENVIF_TRANSMITTER_RING   Ring
     )
 {
     ULONG_PTR                       Old;
@@ -3137,7 +3137,7 @@ __TransmitterRingTryAcquireLock(
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE VOID
 __TransmitterRingAcquireLock(
-    IN  PXENVIF_TRANSMITTER_RING    Ring
+    _In_ PXENVIF_TRANSMITTER_RING   Ring
     )
 {
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, DISPATCH_LEVEL);
@@ -3153,7 +3153,7 @@ __TransmitterRingAcquireLock(
 _IRQL_requires_(DISPATCH_LEVEL)
 static VOID
 TransmitterRingAcquireLock(
-    IN  PXENVIF_TRANSMITTER_RING    Ring
+    _In_ PXENVIF_TRANSMITTER_RING   Ring
     )
 {
     __TransmitterRingAcquireLock(Ring);
@@ -3162,7 +3162,7 @@ TransmitterRingAcquireLock(
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE BOOLEAN
 __TransmitterRingTryReleaseLock(
-    IN  PXENVIF_TRANSMITTER_RING    Ring
+    _In_ PXENVIF_TRANSMITTER_RING   Ring
     )
 {
     ULONG_PTR                       Old;
@@ -3198,7 +3198,7 @@ __TransmitterRingTryReleaseLock(
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE VOID
 __TransmitterRingReleaseLock(
-    IN  PXENVIF_TRANSMITTER_RING    Ring
+    _In_ PXENVIF_TRANSMITTER_RING   Ring
     )
 {
     LIST_ENTRY                      List;
@@ -3237,7 +3237,7 @@ __TransmitterRingReleaseLock(
 _IRQL_requires_(DISPATCH_LEVEL)
 static DECLSPEC_NOINLINE VOID
 TransmitterRingReleaseLock(
-    IN  PXENVIF_TRANSMITTER_RING    Ring
+    _In_ PXENVIF_TRANSMITTER_RING   Ring
     )
 {
     __TransmitterRingReleaseLock(Ring);
@@ -3246,8 +3246,8 @@ TransmitterRingReleaseLock(
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE BOOLEAN
 __TransmitterRingUnmask(
-    IN  PXENVIF_TRANSMITTER_RING    Ring,
-    IN  BOOLEAN                     Force
+    _In_ PXENVIF_TRANSMITTER_RING   Ring,
+    _In_ BOOLEAN                    Force
     )
 {
     PXENVIF_TRANSMITTER             Transmitter;
@@ -3270,10 +3270,10 @@ _Function_class_(KDEFERRED_ROUTINE)
 _IRQL_requires_(DISPATCH_LEVEL)
 static VOID
 TransmitterRingPollDpc(
-    IN  PKDPC                   Dpc,
-    IN  PVOID                   Context,
-    IN  PVOID                   Argument1,
-    IN  PVOID                   Argument2
+    _In_ PKDPC                  Dpc,
+    _In_ PVOID                  Context,
+    _In_ PVOID                  Argument1,
+    _In_ PVOID                  Argument2
     )
 {
     PXENVIF_TRANSMITTER_RING    Ring =3D Context;
@@ -3303,8 +3303,8 @@ KSERVICE_ROUTINE    TransmitterRingEvtchnCallback;
 _Use_decl_annotations_
 BOOLEAN
 TransmitterRingEvtchnCallback(
-    IN  PKINTERRUPT             InterruptObject,
-    IN  PVOID                   Argument
+    _In_ PKINTERRUPT            InterruptObject,
+    _In_ PVOID                  Argument
     )
 {
     PXENVIF_TRANSMITTER_RING    Ring =3D Argument;
@@ -3338,8 +3338,8 @@ TransmitterRingEvtchnCallback(
 _IRQL_requires_(PASSIVE_LEVEL)
 static NTSTATUS
 TransmitterRingWatchdog(
-    IN  PXENVIF_THREAD          Self,
-    IN  PVOID                   Context
+    _In_ PXENVIF_THREAD         Self,
+    _In_ PVOID                  Context
     )
 {
     PXENVIF_TRANSMITTER_RING    Ring =3D Context;
@@ -3412,14 +3412,14 @@ TransmitterRingWatchdog(
 _IRQL_requires_(PASSIVE_LEVEL)
 static FORCEINLINE NTSTATUS
 __TransmitterRingInitialize(
-    IN  PXENVIF_TRANSMITTER         Transmitter,
-    IN  ULONG                       Index,
-    OUT PXENVIF_TRANSMITTER_RING    *Ring
+    _In_ PXENVIF_TRANSMITTER            Transmitter,
+    _In_ ULONG                          Index,
+    _Outptr_ PXENVIF_TRANSMITTER_RING   *Ring
     )
 {
-    PXENVIF_FRONTEND                Frontend;
-    CHAR                            Name[MAXNAMELEN];
-    NTSTATUS                        status;
+    PXENVIF_FRONTEND                    Frontend;
+    CHAR                                Name[MAXNAMELEN];
+    NTSTATUS                            status;
=20
     Frontend =3D Transmitter->Frontend;
=20
@@ -3675,7 +3675,7 @@ fail1:
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE NTSTATUS
 __TransmitterRingConnect(
-    IN  PXENVIF_TRANSMITTER_RING    Ring
+    _In_ PXENVIF_TRANSMITTER_RING   Ring
     )
 {
     PXENVIF_TRANSMITTER             Transmitter;
@@ -3847,8 +3847,8 @@ fail1:
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE NTSTATUS
 __TransmitterRingStoreWrite(
-    IN  PXENVIF_TRANSMITTER_RING    Ring,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction
+    _In_ PXENVIF_TRANSMITTER_RING   Ring,
+    _In_ PXENBUS_STORE_TRANSACTION  Transaction
     )
 {
     PXENVIF_TRANSMITTER             Transmitter;
@@ -3908,7 +3908,7 @@ fail1:
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE NTSTATUS
 __TransmitterRingEnable(
-    IN  PXENVIF_TRANSMITTER_RING    Ring
+    _In_ PXENVIF_TRANSMITTER_RING   Ring
     )
 {
     PXENVIF_TRANSMITTER             Transmitter;
@@ -3941,7 +3941,7 @@ __TransmitterRingEnable(
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE VOID
 __TransmitterRingDisable(
-    IN  PXENVIF_TRANSMITTER_RING    Ring
+    _In_ PXENVIF_TRANSMITTER_RING   Ring
     )
 {   =20
     PXENVIF_TRANSMITTER             Transmitter;
@@ -4051,7 +4051,7 @@ __TransmitterRingDisable(
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE VOID
 __TransmitterRingDisconnect(
-    IN  PXENVIF_TRANSMITTER_RING    Ring
+    _In_ PXENVIF_TRANSMITTER_RING   Ring
     )
 {
     PXENVIF_TRANSMITTER             Transmitter;
@@ -4110,7 +4110,7 @@ __TransmitterRingDisconnect(
 _IRQL_requires_(PASSIVE_LEVEL)
 static FORCEINLINE VOID
 __TransmitterRingTeardown(
-    IN  PXENVIF_TRANSMITTER_RING    Ring
+    _In_ PXENVIF_TRANSMITTER_RING   Ring
     )
 {
     PXENVIF_TRANSMITTER             Transmitter;
@@ -4194,9 +4194,9 @@ __TransmitterRingTeardown(
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE VOID
 __TransmitterRingQueuePacket(
-    IN  PXENVIF_TRANSMITTER_RING    Ring,
-    IN  PXENVIF_TRANSMITTER_PACKET  Packet,
-    IN  BOOLEAN                     More
+    _In_ PXENVIF_TRANSMITTER_RING   Ring,
+    _In_ PXENVIF_TRANSMITTER_PACKET Packet,
+    _In_ BOOLEAN                    More
     )
 {
     PLIST_ENTRY                     ListEntry;
@@ -4231,7 +4231,7 @@ __TransmitterRingQueuePacket(
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE VOID
 __TransmitterRingAbortPackets(
-    IN  PXENVIF_TRANSMITTER_RING    Ring
+    _In_ PXENVIF_TRANSMITTER_RING   Ring
     )
 {
     PXENVIF_TRANSMITTER             Transmitter;
@@ -4283,8 +4283,8 @@ __TransmitterRingAbortPackets(
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE NTSTATUS
 __TransmitterRingQueueArp(
-    IN  PXENVIF_TRANSMITTER_RING    Ring,
-    IN  PIPV4_ADDRESS               Address
+    _In_ PXENVIF_TRANSMITTER_RING   Ring,
+    _In_ PIPV4_ADDRESS              Address
     )
 {
     PXENVIF_TRANSMITTER             Transmitter;
@@ -4334,8 +4334,8 @@ fail1:
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE NTSTATUS
 __TransmitterRingQueueNeighbourAdvertisement(
-    IN  PXENVIF_TRANSMITTER_RING    Ring,
-    IN  PIPV6_ADDRESS               Address
+    _In_ PXENVIF_TRANSMITTER_RING   Ring,
+    _In_ PIPV6_ADDRESS              Address
     )
 {
     PXENVIF_TRANSMITTER             Transmitter;
@@ -4389,7 +4389,7 @@ fail1:
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE BOOLEAN
 __TransmitterHasMulticastControl(
-    IN  PXENVIF_TRANSMITTER Transmitter
+    _In_ PXENVIF_TRANSMITTER    Transmitter
     )
 {
     return Transmitter->MulticastControl;
@@ -4398,7 +4398,7 @@ __TransmitterHasMulticastControl(
 _IRQL_requires_(DISPATCH_LEVEL)
 BOOLEAN
 TransmitterHasMulticastControl(
-    IN  PXENVIF_TRANSMITTER Transmitter
+    _In_ PXENVIF_TRANSMITTER    Transmitter
     )
 {
     return __TransmitterHasMulticastControl(Transmitter);
@@ -4406,9 +4406,9 @@ TransmitterHasMulticastControl(
=20
 static FORCEINLINE NTSTATUS
 __TransmitterRingQueueMulticastControl(
-    IN  PXENVIF_TRANSMITTER_RING    Ring,
-    IN  PETHERNET_ADDRESS           Address,
-    IN  BOOLEAN                     Add
+    _In_ PXENVIF_TRANSMITTER_RING   Ring,
+    _In_ PETHERNET_ADDRESS          Address,
+    _In_ BOOLEAN                    Add
     )
 {
     PXENVIF_TRANSMITTER             Transmitter;
@@ -4467,8 +4467,8 @@ fail1:
=20
 static VOID
 TransmitterDebugCallback(
-    IN  PVOID           Argument,
-    IN  BOOLEAN         Crashing
+    _In_ PVOID      Argument,
+    _In_ BOOLEAN    Crashing
     )
 {
     UNREFERENCED_PARAMETER(Argument);
@@ -4478,15 +4478,15 @@ TransmitterDebugCallback(
 _IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 TransmitterInitialize(
-    IN  PXENVIF_FRONTEND    Frontend,
-    OUT PXENVIF_TRANSMITTER *Transmitter
+    _In_ PXENVIF_FRONTEND           Frontend,
+    _Outptr_ PXENVIF_TRANSMITTER    *Transmitter
     )
 {
-    HANDLE                  ParametersKey;
-    CHAR                    Name[MAXNAMELEN];
-    LONG                    MaxQueues;
-    LONG                    Index;
-    NTSTATUS                status;
+    HANDLE                          ParametersKey;
+    CHAR                            Name[MAXNAMELEN];
+    LONG                            MaxQueues;
+    LONG                            Index;
+    NTSTATUS                        status;
=20
     *Transmitter =3D __TransmitterAllocate(sizeof (XENVIF_TRANSMITTER));
=20
@@ -4692,7 +4692,7 @@ fail1:
 _IRQL_requires_(DISPATCH_LEVEL)
 NTSTATUS
 TransmitterConnect(
-    IN  PXENVIF_TRANSMITTER     Transmitter
+    _In_ PXENVIF_TRANSMITTER    Transmitter
     )
 {
     PXENVIF_FRONTEND            Frontend;
@@ -4803,9 +4803,9 @@ fail1:
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE NTSTATUS
 __TransmitterRequestMulticastControl(
-    IN  PXENVIF_TRANSMITTER         Transmitter,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction,
-    IN  BOOLEAN                     Enabled
+    _In_ PXENVIF_TRANSMITTER        Transmitter,
+    _In_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_ BOOLEAN                    Enabled
     )
 {
     PXENVIF_FRONTEND                Frontend;
@@ -4834,11 +4834,11 @@ fail1:
 _IRQL_requires_(DISPATCH_LEVEL)
 NTSTATUS
 TransmitterRequestMulticastControl(
-    IN  PXENVIF_TRANSMITTER Transmitter,
-    IN  BOOLEAN             Enabled
+    _In_ PXENVIF_TRANSMITTER    Transmitter,
+    _In_ BOOLEAN                Enabled
     )
 {
-    NTSTATUS                status;
+    NTSTATUS                    status;
=20
     status =3D STATUS_NOT_SUPPORTED;
     if (!__TransmitterHasMulticastControl(Transmitter))
@@ -4859,8 +4859,8 @@ fail1:
 _IRQL_requires_(DISPATCH_LEVEL)
 NTSTATUS
 TransmitterStoreWrite(
-    IN  PXENVIF_TRANSMITTER         Transmitter,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction
+    _In_ PXENVIF_TRANSMITTER        Transmitter,
+    _In_ PXENBUS_STORE_TRANSACTION  Transaction
     )
 {
     PXENVIF_FRONTEND                Frontend;
@@ -4902,11 +4902,11 @@ fail1:
 _IRQL_requires_(DISPATCH_LEVEL)
 NTSTATUS
 TransmitterEnable(
-    IN  PXENVIF_TRANSMITTER Transmitter
+    _In_ PXENVIF_TRANSMITTER    Transmitter
     )
 {
-    PXENVIF_FRONTEND        Frontend;
-    LONG                    Index;
+    PXENVIF_FRONTEND            Frontend;
+    LONG                        Index;
=20
     Trace("=3D=3D=3D=3D>\n");
=20
@@ -4927,11 +4927,11 @@ TransmitterEnable(
 _IRQL_requires_(DISPATCH_LEVEL)
 VOID
 TransmitterDisable(
-    IN  PXENVIF_TRANSMITTER Transmitter
+    _In_ PXENVIF_TRANSMITTER    Transmitter
     )
 {
-    PXENVIF_FRONTEND       Frontend;
-    LONG                   Index;
+    PXENVIF_FRONTEND            Frontend;
+    LONG                        Index;
=20
     Trace("=3D=3D=3D=3D>\n");
=20
@@ -4950,11 +4950,11 @@ TransmitterDisable(
 _IRQL_requires_(DISPATCH_LEVEL)
 VOID
 TransmitterDisconnect(
-    IN  PXENVIF_TRANSMITTER Transmitter
+    _In_ PXENVIF_TRANSMITTER    Transmitter
     )
 {
-    PXENVIF_FRONTEND        Frontend;
-    LONG                    Index;
+    PXENVIF_FRONTEND            Frontend;
+    LONG                        Index;
=20
     Trace("=3D=3D=3D=3D>\n");
=20
@@ -4987,11 +4987,11 @@ TransmitterDisconnect(
=20
 BOOLEAN
 TransmitterIsPoisoned(
-    IN  PXENVIF_TRANSMITTER Transmitter
+    _In_ PXENVIF_TRANSMITTER    Transmitter
     )
 {
-    ULONG                   NumQueues;
-    ULONG                   Index;
+    ULONG                       NumQueues;
+    ULONG                       Index;
=20
     NumQueues =3D FrontendGetNumQueues(Transmitter->Frontend);
     for (Index =3D 0; Index < NumQueues; Index++) {
@@ -5007,11 +5007,11 @@ TransmitterIsPoisoned(
 _IRQL_requires_(PASSIVE_LEVEL)
 VOID
 TransmitterTeardown(
-    IN  PXENVIF_TRANSMITTER Transmitter
+    _In_ PXENVIF_TRANSMITTER    Transmitter
     )
 {
-    PXENVIF_FRONTEND        Frontend;
-    LONG                    Index;
+    PXENVIF_FRONTEND            Frontend;
+    LONG                        Index;
=20
     Frontend =3D Transmitter->Frontend;
=20
@@ -5073,9 +5073,9 @@ TransmitterTeardown(
=20
 static FORCEINLINE VOID
 __TransmitterHashAccumulate(
-    IN OUT  PULONG  Accumulator,
-    IN      PUCHAR  Array,
-    IN      ULONG   Length
+    _Inout_ PULONG  Accumulator,
+    _In_ PUCHAR     Array,
+    _In_ ULONG      Length
     )
 {
     ULONG           Current;
@@ -5100,8 +5100,8 @@ __TransmitterHashAccumulate(
=20
 static FORCEINLINE ULONG
 __TransmitterHashPacket(
-    IN  PXENVIF_TRANSMITTER         Transmitter,
-    IN  PXENVIF_TRANSMITTER_PACKET  Packet
+    _In_ PXENVIF_TRANSMITTER        Transmitter,
+    _In_ PXENVIF_TRANSMITTER_PACKET Packet
     )
 {
     PXENVIF_FRONTEND                Frontend;
@@ -5182,16 +5182,16 @@ done:
 _IRQL_requires_(DISPATCH_LEVEL)
 NTSTATUS
 TransmitterQueuePacket(
-    IN  PXENVIF_TRANSMITTER         Transmitter,
-    IN  PMDL                        Mdl,
-    IN  ULONG                       Offset,
-    IN  ULONG                       Length,
-    IN  XENVIF_VIF_OFFLOAD_OPTIONS  OffloadOptions,
-    IN  USHORT                      MaximumSegmentSize,
-    IN  USHORT                      TagControlInformation,
-    IN  PXENVIF_PACKET_HASH         Hash,
-    IN  BOOLEAN                     More,
-    IN  PVOID                       Cookie
+    _In_ PXENVIF_TRANSMITTER        Transmitter,
+    _In_ PMDL                       Mdl,
+    _In_ ULONG                      Offset,
+    _In_ ULONG                      Length,
+    _In_ XENVIF_VIF_OFFLOAD_OPTIONS OffloadOptions,
+    _In_ USHORT                     MaximumSegmentSize,
+    _In_ USHORT                     TagControlInformation,
+    _In_ PXENVIF_PACKET_HASH        Hash,
+    _In_ BOOLEAN                    More,
+    _In_ PVOID                      Cookie
     )
 {
     PXENVIF_FRONTEND                Frontend;
@@ -5278,12 +5278,12 @@ fail1:
 _IRQL_requires_max_(APC_LEVEL)
 VOID
 TransmitterAbortPackets(
-    IN  PXENVIF_TRANSMITTER Transmitter
+    _In_ PXENVIF_TRANSMITTER    Transmitter
     )
 {
-    PXENVIF_FRONTEND        Frontend;
-    KIRQL                   Irql;
-    LONG                    Index;
+    PXENVIF_FRONTEND            Frontend;
+    KIRQL                       Irql;
+    LONG                        Index;
=20
     Frontend =3D Transmitter->Frontend;
=20
@@ -5302,8 +5302,8 @@ TransmitterAbortPackets(
 _IRQL_requires_(DISPATCH_LEVEL)
 VOID
 TransmitterQueueArp(
-    IN  PXENVIF_TRANSMITTER     Transmitter,
-    IN  PIPV4_ADDRESS           Address
+    _In_ PXENVIF_TRANSMITTER    Transmitter,
+    _In_ PIPV4_ADDRESS          Address
     )
 {
     PXENVIF_TRANSMITTER_RING    Ring =3D Transmitter->Ring[0];
@@ -5314,8 +5314,8 @@ TransmitterQueueArp(
 _IRQL_requires_(DISPATCH_LEVEL)
 VOID
 TransmitterQueueNeighbourAdvertisement(
-    IN  PXENVIF_TRANSMITTER     Transmitter,
-    IN  PIPV6_ADDRESS           Address
+    _In_ PXENVIF_TRANSMITTER    Transmitter,
+    _In_ PIPV6_ADDRESS          Address
     )
 {
     PXENVIF_TRANSMITTER_RING    Ring =3D Transmitter->Ring[0];
@@ -5326,9 +5326,9 @@ TransmitterQueueNeighbourAdvertisement(
 _IRQL_requires_(DISPATCH_LEVEL)
 VOID
 TransmitterQueueMulticastControl(
-    IN  PXENVIF_TRANSMITTER     Transmitter,
-    IN  PETHERNET_ADDRESS       Address,
-    IN  BOOLEAN                 Add
+    _In_ PXENVIF_TRANSMITTER    Transmitter,
+    _In_ PETHERNET_ADDRESS      Address,
+    _In_ BOOLEAN                Add
     )
 {
     PXENVIF_TRANSMITTER_RING    Ring =3D Transmitter->Ring[0];
@@ -5339,8 +5339,8 @@ TransmitterQueueMulticastControl(
 _IRQL_requires_max_(DISPATCH_LEVEL)
 VOID
 TransmitterQueryRingSize(
-    IN  PXENVIF_TRANSMITTER Transmitter,
-    OUT PULONG              Size
+    _In_ PXENVIF_TRANSMITTER    Transmitter,
+    _Out_ PULONG                Size
     )
 {
     UNREFERENCED_PARAMETER(Transmitter);
@@ -5350,8 +5350,8 @@ TransmitterQueryRingSize(
=20
 VOID
 TransmitterNotify(
-    IN  PXENVIF_TRANSMITTER     Transmitter,
-    IN  ULONG                   Index
+    _In_ PXENVIF_TRANSMITTER    Transmitter,
+    _In_ ULONG                  Index
     )
 {
     PXENVIF_FRONTEND            Frontend;
@@ -5370,13 +5370,13 @@ TransmitterNotify(
 _IRQL_requires_max_(DISPATCH_LEVEL)
 VOID
 TransmitterQueryOffloadOptions(
-    IN  PXENVIF_TRANSMITTER         Transmitter,
-    OUT PXENVIF_VIF_OFFLOAD_OPTIONS Options
+    _In_ PXENVIF_TRANSMITTER            Transmitter,
+    _Out_ PXENVIF_VIF_OFFLOAD_OPTIONS   Options
     )
 {
-    PXENVIF_FRONTEND                Frontend;
-    PCHAR                           Buffer;
-    NTSTATUS                        status;
+    PXENVIF_FRONTEND                    Frontend;
+    PCHAR                               Buffer;
+    NTSTATUS                            status;
=20
     Frontend =3D Transmitter->Frontend;
=20
@@ -5491,9 +5491,9 @@ TransmitterQueryOffloadOptions(
 _IRQL_requires_max_(DISPATCH_LEVEL)
 VOID
 TransmitterQueryLargePacketSize(
-    IN  PXENVIF_TRANSMITTER     Transmitter,
-    IN  UCHAR                   Version,
-    OUT PULONG                  Size
+    _In_ PXENVIF_TRANSMITTER    Transmitter,
+    _In_ UCHAR                  Version,
+    _Out_ PULONG                Size
     )
 {
     PXENVIF_FRONTEND            Frontend;
diff --git a/src/xenvif/transmitter=2Eh b/src/xenvif/transmitter=2Eh
index 5e8defc=2E=2Eeadd311 100644
--- a/src/xenvif/transmitter=2Eh
+++ b/src/xenvif/transmitter=2Eh
@@ -46,134 +46,134 @@ typedef struct _XENVIF_TRANSMITTER XENVIF_TRANSMITTE=
R, *PXENVIF_TRANSMITTER;
 _IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 TransmitterInitialize(
-    IN  PXENVIF_FRONTEND    Frontend,
-    OUT PXENVIF_TRANSMITTER *Transmitter
+    _In_ PXENVIF_FRONTEND           Frontend,
+    _Outptr_ PXENVIF_TRANSMITTER    *Transmitter
     );
=20
 _IRQL_requires_(DISPATCH_LEVEL)
 extern NTSTATUS
 TransmitterConnect(
-    IN  PXENVIF_TRANSMITTER Transmitter
+    _In_ PXENVIF_TRANSMITTER    Transmitter
     );
=20
 _IRQL_requires_(DISPATCH_LEVEL)
 extern NTSTATUS
 TransmitterStoreWrite(
-    IN  PXENVIF_TRANSMITTER         Transmitter,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction
+    _In_ PXENVIF_TRANSMITTER        Transmitter,
+    _In_ PXENBUS_STORE_TRANSACTION  Transaction
     );
=20
 _IRQL_requires_(DISPATCH_LEVEL)
 extern NTSTATUS
 TransmitterEnable(
-    IN  PXENVIF_TRANSMITTER Transmitter
+    _In_ PXENVIF_TRANSMITTER    Transmitter
     );
=20
 _IRQL_requires_(DISPATCH_LEVEL)
 extern VOID
 TransmitterDisable(
-    IN  PXENVIF_TRANSMITTER Transmitter
+    _In_ PXENVIF_TRANSMITTER    Transmitter
     );
=20
 _IRQL_requires_(DISPATCH_LEVEL)
 extern VOID
 TransmitterDisconnect(
-    IN  PXENVIF_TRANSMITTER Transmitter
+    _In_ PXENVIF_TRANSMITTER    Transmitter
     );
=20
 extern BOOLEAN
 TransmitterIsPoisoned(
-    IN  PXENVIF_TRANSMITTER Transmitter
+    _In_ PXENVIF_TRANSMITTER    Transmitter
     );
=20
 _IRQL_requires_(PASSIVE_LEVEL)
 extern VOID
 TransmitterTeardown(
-    IN  PXENVIF_TRANSMITTER Transmitter
+    _In_ PXENVIF_TRANSMITTER    Transmitter
     );
=20
 extern VOID
 TransmitterNotify(
-    IN  PXENVIF_TRANSMITTER Transmitter,
-    IN  ULONG               Index
+    _In_ PXENVIF_TRANSMITTER    Transmitter,
+    _In_ ULONG                  Index
     );
=20
 _IRQL_requires_max_(APC_LEVEL)
 extern VOID
 TransmitterAbortPackets(
-    IN  PXENVIF_TRANSMITTER Transmitter
+    _In_ PXENVIF_TRANSMITTER    Transmitter
     );
=20
 _IRQL_requires_(DISPATCH_LEVEL)
 extern VOID
 TransmitterQueueArp(
-    IN  PXENVIF_TRANSMITTER     Transmitter,
-    IN  PIPV4_ADDRESS           Address
+    _In_ PXENVIF_TRANSMITTER    Transmitter,
+    _In_ PIPV4_ADDRESS          Address
     );
=20
 _IRQL_requires_(DISPATCH_LEVEL)
 extern VOID
 TransmitterQueueNeighbourAdvertisement(
-    IN  PXENVIF_TRANSMITTER     Transmitter,
-    IN  PIPV6_ADDRESS           Address
+    _In_ PXENVIF_TRANSMITTER    Transmitter,
+    _In_ PIPV6_ADDRESS          Address
     );
=20
 _IRQL_requires_(DISPATCH_LEVEL)
 extern VOID
 TransmitterQueueMulticastControl(
-    IN  PXENVIF_TRANSMITTER     Transmitter,
-    IN  PETHERNET_ADDRESS       Address,
-    IN  BOOLEAN                 Add
+    _In_ PXENVIF_TRANSMITTER    Transmitter,
+    _In_ PETHERNET_ADDRESS      Address,
+    _In_ BOOLEAN                Add
     );
=20
 _IRQL_requires_max_(DISPATCH_LEVEL)
 extern VOID
 TransmitterQueryRingSize(
-    IN  PXENVIF_TRANSMITTER Transmitter,
-    OUT PULONG              Size
+    _In_ PXENVIF_TRANSMITTER    Transmitter,
+    _Out_ PULONG                Size
     );
=20
 _IRQL_requires_(DISPATCH_LEVEL)
 extern NTSTATUS
 TransmitterQueuePacket(
-    IN  PXENVIF_TRANSMITTER         Transmitter,
-    IN  PMDL                        Mdl,
-    IN  ULONG                       Offset,
-    IN  ULONG                       Length,
-    IN  XENVIF_VIF_OFFLOAD_OPTIONS  OffloadOptions,
-    IN  USHORT                      MaximumSegmentSize,
-    IN  USHORT                      TagControlInformation,
-    IN  PXENVIF_PACKET_HASH         Hash,
-    IN  BOOLEAN                     More,
-    IN  PVOID                       Cookie
+    _In_ PXENVIF_TRANSMITTER        Transmitter,
+    _In_ PMDL                       Mdl,
+    _In_ ULONG                      Offset,
+    _In_ ULONG                      Length,
+    _In_ XENVIF_VIF_OFFLOAD_OPTIONS OffloadOptions,
+    _In_ USHORT                     MaximumSegmentSize,
+    _In_ USHORT                     TagControlInformation,
+    _In_ PXENVIF_PACKET_HASH        Hash,
+    _In_ BOOLEAN                    More,
+    _In_ PVOID                      Cookie
     );
=20
 _IRQL_requires_max_(DISPATCH_LEVEL)
 extern VOID
 TransmitterQueryOffloadOptions(
-    IN  PXENVIF_TRANSMITTER         Transmitter,
-    OUT PXENVIF_VIF_OFFLOAD_OPTIONS Options
+    _In_ PXENVIF_TRANSMITTER            Transmitter,
+    _Out_ PXENVIF_VIF_OFFLOAD_OPTIONS   Options
     );
=20
 _IRQL_requires_max_(DISPATCH_LEVEL)
 extern VOID
 TransmitterQueryLargePacketSize(
-    IN  PXENVIF_TRANSMITTER     Transmitter,
-    IN  UCHAR                   Version,
-    OUT PULONG                  Size
+    _In_ PXENVIF_TRANSMITTER    Transmitter,
+    _In_ UCHAR                  Version,
+    _Out_ PULONG                Size
     );
=20
 _IRQL_requires_(DISPATCH_LEVEL)
 BOOLEAN
 TransmitterHasMulticastControl(
-    IN  PXENVIF_TRANSMITTER Transmitter
+    _In_ PXENVIF_TRANSMITTER    Transmitter
     );
=20
 _IRQL_requires_(DISPATCH_LEVEL)
 NTSTATUS
 TransmitterRequestMulticastControl(
-    IN  PXENVIF_TRANSMITTER Transmitter,
-    IN  BOOLEAN             Enabled
+    _In_ PXENVIF_TRANSMITTER    Transmitter,
+    _In_ BOOLEAN                Enabled
     );
=20
 #endif  // _XENVIF_TRANSMITTER_H
diff --git a/src/xenvif/vif=2Ec b/src/xenvif/vif=2Ec
index 38b6b71=2E=2Ee059cd0 100644
--- a/src/xenvif/vif=2Ec
+++ b/src/xenvif/vif=2Ec
@@ -69,7 +69,7 @@ struct _XENVIF_VIF_CONTEXT {
=20
 static FORCEINLINE PVOID
 __VifAllocate(
-    IN  ULONG   Length
+    _In_ ULONG  Length
     )
 {
     return __AllocatePoolWithTag(NonPagedPool, Length, XENVIF_VIF_TAG);
@@ -77,7 +77,7 @@ __VifAllocate(
=20
 static FORCEINLINE VOID
 __VifFree(
-    IN  PVOID   Buffer
+    _In_ PVOID  Buffer
     )
 {
     __FreePoolWithTag(Buffer, XENVIF_VIF_TAG);
@@ -85,8 +85,8 @@ __VifFree(
=20
 static NTSTATUS
 VifMac(
-    IN  PXENVIF_THREAD  Self,
-    IN  PVOID           _Context
+    _In_ PXENVIF_THREAD Self,
+    _In_ PVOID          _Context
     )
 {
     PXENVIF_VIF_CONTEXT Context =3D _Context;
@@ -126,7 +126,7 @@ VifMac(
=20
 static DECLSPEC_NOINLINE VOID
 VifSuspendCallbackLate(
-    IN  PVOID           Argument
+    _In_ PVOID          Argument
     )
 {
     PXENVIF_VIF_CONTEXT Context =3D Argument;
@@ -146,14 +146,14 @@ VifSuspendCallbackLate(
=20
 static NTSTATUS
 VifEnable(
-    IN  PINTERFACE          Interface,
-    IN  XENVIF_VIF_CALLBACK Callback,
-    IN  PVOID               Argument
+    _In_ PINTERFACE             Interface,
+    _In_ XENVIF_VIF_CALLBACK    Callback,
+    _In_ PVOID                  Argument
     )
 {
-    PXENVIF_VIF_CONTEXT     Context =3D Interface->Context;
-    BOOLEAN                 Exclusive;
-    NTSTATUS                status;
+    PXENVIF_VIF_CONTEXT         Context =3D Interface->Context;
+    BOOLEAN                     Exclusive;
+    NTSTATUS                    status;
=20
     Trace("=3D=3D=3D=3D>\n");
=20
@@ -244,9 +244,9 @@ fail1:
=20
 static VOID
 VifCallbackVersion8(
-    IN  PVOID                                       _Argument OPTIONAL,
-    IN  XENVIF_VIF_CALLBACK_TYPE                    Type,
-    IN  union _XENVIF_VIF_CALLBACK_PARAMETERS_V9   *Parameters
+    _In_opt_ PVOID                                  _Argument,
+    _In_ XENVIF_VIF_CALLBACK_TYPE                   Type,
+    _In_ union _XENVIF_VIF_CALLBACK_PARAMETERS_V9   *Parameters
     )
 {
     PXENVIF_VIF_CONTEXT                             Context =3D _Argument=
;
@@ -304,9 +304,9 @@ VifCallbackVersion8(
=20
 static VOID
 VifCallbackVersion9(
-    IN  PVOID                                       _Argument OPTIONAL,
-    IN  XENVIF_VIF_CALLBACK_TYPE                    Type,
-    IN  PXENVIF_VIF_CALLBACK_PARAMETERS             Parameters
+    _In_opt_ PVOID                          _Argument,
+    _In_ XENVIF_VIF_CALLBACK_TYPE           Type,
+    _In_ PXENVIF_VIF_CALLBACK_PARAMETERS    Parameters
     )
 {
 #define XENVIF_RECEIVER_QUEUE_MAX 1024 // Chosen to match IN_NDIS_MAX in =
XENNET
@@ -384,9 +384,9 @@ VifCallbackVersion9(
=20
 static NTSTATUS
 VifEnableVersion9(
-    IN  PINTERFACE                  Interface,
-    IN  XENVIF_VIF_CALLBACK_V9      Callback,
-    IN  PVOID                       Argument
+    _In_ PINTERFACE                 Interface,
+    _In_ XENVIF_VIF_CALLBACK_V9     Callback,
+    _In_ PVOID                      Argument
     )
 {
     PXENVIF_VIF_CONTEXT             Context =3D Interface->Context;
@@ -410,9 +410,9 @@ VifEnableVersion9(
=20
 static NTSTATUS
 VifEnableVersion8(
-    IN  PINTERFACE                  Interface,
-    IN  XENVIF_VIF_CALLBACK_V8      Callback,
-    IN  PVOID                       Argument
+    _In_ PINTERFACE                 Interface,
+    _In_ XENVIF_VIF_CALLBACK_V8     Callback,
+    _In_ PVOID                      Argument
     )
 {
     PXENVIF_VIF_CONTEXT             Context =3D Interface->Context;
@@ -436,7 +436,7 @@ VifEnableVersion8(
=20
 static VOID
 VifDisable(
-    IN  PINTERFACE      Interface
+    _In_ PINTERFACE     Interface
     )
 {
     PXENVIF_VIF_CONTEXT Context =3D Interface->Context;
@@ -498,9 +498,9 @@ done:
=20
 static NTSTATUS
 VifQueryStatistic(
-    IN  PINTERFACE              Interface,
-    IN  XENVIF_VIF_STATISTIC    Index,
-    OUT PULONGLONG              Value
+    _In_ PINTERFACE             Interface,
+    _In_ XENVIF_VIF_STATISTIC   Index,
+    _Out_ PULONGLONG            Value
     )
 {
     PXENVIF_VIF_CONTEXT         Context =3D Interface->Context;
@@ -523,8 +523,8 @@ done:
=20
 static VOID
 VifQueryRingCount(
-    IN  PINTERFACE      Interface,
-    OUT PULONG          Count
+    _In_ PINTERFACE     Interface,
+    _Out_ PULONG        Count
     )
 {
     PXENVIF_VIF_CONTEXT Context =3D Interface->Context;
@@ -538,9 +538,9 @@ VifQueryRingCount(
=20
 static NTSTATUS
 VifUpdateHashMapping(
-    IN  PINTERFACE          Interface,
-    IN  PPROCESSOR_NUMBER   Mapping,
-    IN  ULONG               Order
+    _In_ PINTERFACE         Interface,
+    _In_ PPROCESSOR_NUMBER  Mapping,
+    _In_ ULONG              Order
     )
 {
     PXENVIF_VIF_CONTEXT     Context =3D Interface->Context;
@@ -559,8 +559,8 @@ VifUpdateHashMapping(
=20
 static VOID
 VifReceiverReturnPacket(
-    IN  PINTERFACE      Interface,
-    IN  PVOID           Cookie
+    _In_ PINTERFACE     Interface,
+    _In_ PVOID          Cookie
     )
 {
     PXENVIF_VIF_CONTEXT Context =3D Interface->Context;
@@ -571,16 +571,16 @@ VifReceiverReturnPacket(
=20
 static NTSTATUS
 VifTransmitterQueuePacket(
-    IN  PINTERFACE                  Interface,
-    IN  PMDL                        Mdl,
-    IN  ULONG                       Offset,
-    IN  ULONG                       Length,
-    IN  XENVIF_VIF_OFFLOAD_OPTIONS  OffloadOptions,
-    IN  USHORT                      MaximumSegmentSize,
-    IN  USHORT                      TagControlInformation,
-    IN  PXENVIF_PACKET_HASH         Hash,
-    IN  BOOLEAN                     More,
-    IN  PVOID                       Cookie
+    _In_ PINTERFACE                 Interface,
+    _In_ PMDL                       Mdl,
+    _In_ ULONG                      Offset,
+    _In_ ULONG                      Length,
+    _In_ XENVIF_VIF_OFFLOAD_OPTIONS OffloadOptions,
+    _In_ USHORT                     MaximumSegmentSize,
+    _In_ USHORT                     TagControlInformation,
+    _In_ PXENVIF_PACKET_HASH        Hash,
+    _In_ BOOLEAN                    More,
+    _In_ PVOID                      Cookie
     )
 {
     PXENVIF_VIF_CONTEXT             Context =3D Interface->Context;
@@ -612,11 +612,11 @@ done:
=20
 static VOID
 VifTransmitterQueryOffloadOptions(
-    IN  PINTERFACE                  Interface,
-    OUT PXENVIF_VIF_OFFLOAD_OPTIONS Options
+    _In_ PINTERFACE                     Interface,
+    _Out_ PXENVIF_VIF_OFFLOAD_OPTIONS   Options
     )
 {
-    PXENVIF_VIF_CONTEXT             Context =3D Interface->Context;
+    PXENVIF_VIF_CONTEXT                 Context =3D Interface->Context;
=20
     AcquireMrswLockShared(&Context->Lock);
=20
@@ -628,9 +628,9 @@ VifTransmitterQueryOffloadOptions(
=20
 static VOID
 VifTransmitterQueryLargePacketSize(
-    IN  PINTERFACE      Interface,
-    IN  UCHAR           Version,
-    OUT PULONG          Size
+    _In_ PINTERFACE     Interface,
+    _In_ UCHAR          Version,
+    _Out_ PULONG        Size
     )
 {
     PXENVIF_VIF_CONTEXT Context =3D Interface->Context;
@@ -646,8 +646,8 @@ VifTransmitterQueryLargePacketSize(
=20
 static VOID
 VifReceiverSetOffloadOptions(
-    IN  PINTERFACE                  Interface,
-    IN  XENVIF_VIF_OFFLOAD_OPTIONS  Options
+    _In_ PINTERFACE                 Interface,
+    _In_ XENVIF_VIF_OFFLOAD_OPTIONS Options
     )
 {
     PXENVIF_VIF_CONTEXT             Context =3D Interface->Context;
@@ -662,8 +662,8 @@ VifReceiverSetOffloadOptions(
=20
 static VOID
 VifReceiverSetBackfillSize(
-    IN  PINTERFACE      Interface,
-    IN  ULONG           Size
+    _In_ PINTERFACE     Interface,
+    _In_ ULONG          Size
     )
 {
     PXENVIF_VIF_CONTEXT Context =3D Interface->Context;
@@ -678,8 +678,8 @@ VifReceiverSetBackfillSize(
=20
 static NTSTATUS
 VifReceiverSetHashAlgorithm(
-    IN  PINTERFACE                      Interface,
-    IN  XENVIF_PACKET_HASH_ALGORITHM    Algorithm
+    _In_ PINTERFACE                     Interface,
+    _In_ XENVIF_PACKET_HASH_ALGORITHM   Algorithm
     )
 {
     PXENVIF_VIF_CONTEXT                 Context =3D Interface->Context;
@@ -697,7 +697,7 @@ VifReceiverSetHashAlgorithm(
=20
 static NTSTATUS
 VifReceiverQueryHashCapabilities(
-    IN  PINTERFACE      Interface,
+    _In_ PINTERFACE     Interface,
     =2E=2E=2E
     )
 {
@@ -724,7 +724,7 @@ VifReceiverQueryHashCapabilities(
=20
 static NTSTATUS
 VifReceiverUpdateHashParameters(
-    IN  PINTERFACE      Interface,
+    _In_ PINTERFACE     Interface,
     =2E=2E=2E
     )
 {
@@ -754,13 +754,13 @@ VifReceiverUpdateHashParameters(
=20
 static VOID
 VifMacQueryState(
-    IN  PINTERFACE                  Interface,
-    OUT PNET_IF_MEDIA_CONNECT_STATE MediaConnectState OPTIONAL,
-    OUT PULONG64                    LinkSpeed OPTIONAL,
-    OUT PNET_IF_MEDIA_DUPLEX_STATE  MediaDuplexState OPTIONAL
+    _In_ PINTERFACE                         Interface,
+    _Out_opt_ PNET_IF_MEDIA_CONNECT_STATE   MediaConnectState,
+    _Out_opt_ PULONG64                      LinkSpeed,
+    _Out_opt_ PNET_IF_MEDIA_DUPLEX_STATE    MediaDuplexState
     )
 {
-    PXENVIF_VIF_CONTEXT             Context =3D Interface->Context;
+    PXENVIF_VIF_CONTEXT                     Context =3D Interface->Contex=
t;
=20
     AcquireMrswLockShared(&Context->Lock);
=20
@@ -774,8 +774,8 @@ VifMacQueryState(
=20
 static VOID
 VifMacQueryMaximumFrameSize(
-    IN  PINTERFACE      Interface,
-    OUT PULONG          Size
+    _In_ PINTERFACE     Interface,
+    _Out_ PULONG        Size
     )
 {
     PXENVIF_VIF_CONTEXT Context =3D Interface->Context;
@@ -789,8 +789,8 @@ VifMacQueryMaximumFrameSize(
=20
 static VOID
 VifMacQueryPermanentAddress(
-    IN  PINTERFACE          Interface,
-    OUT PETHERNET_ADDRESS   Address
+    _In_ PINTERFACE         Interface,
+    _Out_ PETHERNET_ADDRESS Address
     )
 {
     PXENVIF_VIF_CONTEXT     Context =3D Interface->Context;
@@ -804,8 +804,8 @@ VifMacQueryPermanentAddress(
=20
 static VOID
 VifMacQueryCurrentAddress(
-    IN  PINTERFACE          Interface,
-    OUT PETHERNET_ADDRESS   Address
+    _In_ PINTERFACE         Interface,
+    _Out_ PETHERNET_ADDRESS Address
     )
 {
     PXENVIF_VIF_CONTEXT     Context =3D Interface->Context;
@@ -819,9 +819,9 @@ VifMacQueryCurrentAddress(
=20
 static NTSTATUS
 VifMacQueryMulticastAddresses(
-    IN      PINTERFACE          Interface,
-    OUT     PETHERNET_ADDRESS   Address OPTIONAL,
-    IN OUT  PULONG              Count
+    _In_ PINTERFACE             Interface,
+    _Out_opt_ PETHERNET_ADDRESS Address,
+    _Inout_ PULONG              Count
     )
 {
     PXENVIF_VIF_CONTEXT         Context =3D Interface->Context;
@@ -840,9 +840,9 @@ VifMacQueryMulticastAddresses(
=20
 static NTSTATUS
 VifMacSetMulticastAddresses(
-    IN  PINTERFACE          Interface,
-    IN  PETHERNET_ADDRESS   Address,
-    IN  ULONG               Count
+    _In_ PINTERFACE         Interface,
+    _In_ PETHERNET_ADDRESS  Address,
+    _In_ ULONG              Count
     )
 {
     PXENVIF_VIF_CONTEXT     Context =3D Interface->Context;
@@ -869,13 +869,13 @@ done:
=20
 static NTSTATUS
 VifMacQueryFilterLevel(
-    IN  PINTERFACE                  Interface,
-    IN  ETHERNET_ADDRESS_TYPE       Type,
-    OUT PXENVIF_MAC_FILTER_LEVEL    Level
+    _In_ PINTERFACE                 Interface,
+    _In_ ETHERNET_ADDRESS_TYPE      Type,
+    _Out_ PXENVIF_MAC_FILTER_LEVEL  Level
     )
 {
     PXENVIF_VIF_CONTEXT             Context =3D Interface->Context;
-    NTSTATUS                status;
+    NTSTATUS                        status;
=20
     AcquireMrswLockShared(&Context->Lock);
=20
@@ -890,9 +890,9 @@ VifMacQueryFilterLevel(
=20
 static NTSTATUS
 VifMacSetFilterLevel(
-    IN  PINTERFACE                  Interface,
-    IN  ETHERNET_ADDRESS_TYPE       Type,
-    IN  XENVIF_MAC_FILTER_LEVEL     Level
+    _In_ PINTERFACE                 Interface,
+    _In_ ETHERNET_ADDRESS_TYPE      Type,
+    _In_ XENVIF_MAC_FILTER_LEVEL    Level
     )
 {
     PXENVIF_VIF_CONTEXT             Context =3D Interface->Context;
@@ -909,8 +909,8 @@ VifMacSetFilterLevel(
=20
 static VOID
 VifReceiverQueryRingSize(
-    IN  PINTERFACE          Interface,
-    OUT PULONG              Size
+    _In_ PINTERFACE         Interface,
+    _Out_ PULONG            Size
     )
 {
     PXENVIF_VIF_CONTEXT     Context =3D Interface->Context;
@@ -924,8 +924,8 @@ VifReceiverQueryRingSize(
=20
 static VOID
 VifTransmitterQueryRingSize(
-    IN  PINTERFACE          Interface,
-    OUT PULONG              Size
+    _In_ PINTERFACE         Interface,
+    _Out_ PULONG            Size
     )
 {
     PXENVIF_VIF_CONTEXT     Context =3D Interface->Context;
@@ -964,7 +964,7 @@ done:
=20
 VOID
 VifRelease(
-    IN  PINTERFACE          Interface
+    _In_ PINTERFACE         Interface
     )
 {
     PXENVIF_VIF_CONTEXT     Context =3D Interface->Context;
@@ -1079,11 +1079,11 @@ static struct _XENVIF_VIF_INTERFACE_V10 VifInterfa=
ceVersion10 =3D {
=20
 NTSTATUS
 VifInitialize(
-    IN  PXENVIF_PDO         Pdo,
-    OUT PXENVIF_VIF_CONTEXT *Context
+    _In_ PXENVIF_PDO                Pdo,
+    _Outptr_ PXENVIF_VIF_CONTEXT    *Context
     )
 {
-    NTSTATUS                status;
+    NTSTATUS                        status;
=20
     Trace("=3D=3D=3D=3D>\n");
=20
@@ -1137,10 +1137,10 @@ fail1:
=20
 NTSTATUS
 VifGetInterface(
-    IN      PXENVIF_VIF_CONTEXT Context,
-    IN      ULONG               Version,
-    IN OUT  PINTERFACE          Interface,
-    IN      ULONG               Size
+    _In_ PXENVIF_VIF_CONTEXT    Context,
+    _In_ ULONG                  Version,
+    _Inout_ PINTERFACE          Interface,
+    _In_ ULONG                  Size
     )
 {
     NTSTATUS                    status;
@@ -1207,7 +1207,7 @@ VifGetInterface(
=20
 VOID
 VifTeardown(
-    IN  PXENVIF_VIF_CONTEXT Context
+    _In_ PXENVIF_VIF_CONTEXT    Context
     )
 {
     Trace("=3D=3D=3D=3D>\n");
@@ -1236,19 +1236,19 @@ VifTeardown(
=20
 VOID
 VifReceiverQueuePacket(
-    IN  PXENVIF_VIF_CONTEXT             Context,
-    IN  ULONG                           Index,
-    IN  PMDL                            Mdl,
-    IN  ULONG                           Offset,
-    IN  ULONG                           Length,
-    IN  XENVIF_PACKET_CHECKSUM_FLAGS    Flags,
-    IN  USHORT                          MaximumSegmentSize,
-    IN  USHORT                          TagControlInformation,
-    IN  PXENVIF_PACKET_INFO             Info,
-    IN  PXENVIF_PACKET_HASH             Hash,
-    IN  BOOLEAN                         More,
-    IN  PVOID                           Cookie,
-    OUT PBOOLEAN                        Pause
+    _In_ PXENVIF_VIF_CONTEXT            Context,
+    _In_ ULONG                          Index,
+    _In_ PMDL                           Mdl,
+    _In_ ULONG                          Offset,
+    _In_ ULONG                          Length,
+    _In_ XENVIF_PACKET_CHECKSUM_FLAGS   Flags,
+    _In_ USHORT                         MaximumSegmentSize,
+    _In_ USHORT                         TagControlInformation,
+    _In_ PXENVIF_PACKET_INFO            Info,
+    _In_ PXENVIF_PACKET_HASH            Hash,
+    _In_ BOOLEAN                        More,
+    _In_ PVOID                          Cookie,
+    _Out_ PBOOLEAN                      Pause
     )
 {
     KIRQL                               Irql;
@@ -1279,9 +1279,9 @@ VifReceiverQueuePacket(
=20
 VOID
 VifTransmitterReturnPacket(
-    IN  PXENVIF_VIF_CONTEXT                         Context,
-    IN  PVOID                                       Cookie,
-    IN  PXENVIF_TRANSMITTER_PACKET_COMPLETION_INFO  Completion
+    _In_ PXENVIF_VIF_CONTEXT                        Context,
+    _In_ PVOID                                      Cookie,
+    _In_ PXENVIF_TRANSMITTER_PACKET_COMPLETION_INFO Completion
     )
 {
     XENVIF_VIF_CALLBACK_PARAMETERS                  Parameters;
@@ -1296,7 +1296,7 @@ VifTransmitterReturnPacket(
=20
 PXENVIF_THREAD
 VifGetMacThread(
-    IN  PXENVIF_VIF_CONTEXT Context
+    _In_ PXENVIF_VIF_CONTEXT    Context
     )
 {
     return Context->MacThread;
diff --git a/src/xenvif/vif=2Eh b/src/xenvif/vif=2Eh
index e9d38a5=2E=2Ebb7d296 100644
--- a/src/xenvif/vif=2Eh
+++ b/src/xenvif/vif=2Eh
@@ -44,52 +44,52 @@ typedef struct _XENVIF_VIF_CONTEXT  XENVIF_VIF_CONTEXT=
, *PXENVIF_VIF_CONTEXT;
=20
 extern NTSTATUS
 VifInitialize(
-    IN  PXENVIF_PDO         Pdo,
-    OUT PXENVIF_VIF_CONTEXT *Context
+    _In_ PXENVIF_PDO                Pdo,
+    _Outptr_ PXENVIF_VIF_CONTEXT    *Context
     );
=20
 extern NTSTATUS
 VifGetInterface(
-    IN      PXENVIF_VIF_CONTEXT Context,
-    IN      ULONG               Version,
-    IN OUT  PINTERFACE          Interface,
-    IN      ULONG               Size
+    _In_ PXENVIF_VIF_CONTEXT    Context,
+    _In_ ULONG                  Version,
+    _Inout_ PINTERFACE          Interface,
+    _In_ ULONG                  Size
     );
=20
 extern VOID
 VifTeardown(
-    IN  PXENVIF_VIF_CONTEXT Context
+    _In_ PXENVIF_VIF_CONTEXT    Context
     );
=20
 // CALLBACKS
=20
 extern VOID
 VifReceiverQueuePacket(
-    IN  PXENVIF_VIF_CONTEXT             Context,
-    IN  ULONG                           Index,
-    IN  PMDL                            Mdl,
-    IN  ULONG                           Offset,
-    IN  ULONG                           Length,
-    IN  XENVIF_PACKET_CHECKSUM_FLAGS    Flags,
-    IN  USHORT                          MaximumSegmentSize,
-    IN  USHORT                          TagControlInformation,
-    IN  PXENVIF_PACKET_INFO             Info,
-    IN  PXENVIF_PACKET_HASH             Hash,
-    IN  BOOLEAN                         More,
-    IN  PVOID                           Cookie,
-    OUT PBOOLEAN                        Pause
+    _In_ PXENVIF_VIF_CONTEXT            Context,
+    _In_ ULONG                          Index,
+    _In_ PMDL                           Mdl,
+    _In_ ULONG                          Offset,
+    _In_ ULONG                          Length,
+    _In_ XENVIF_PACKET_CHECKSUM_FLAGS   Flags,
+    _In_ USHORT                         MaximumSegmentSize,
+    _In_ USHORT                         TagControlInformation,
+    _In_ PXENVIF_PACKET_INFO            Info,
+    _In_ PXENVIF_PACKET_HASH            Hash,
+    _In_ BOOLEAN                        More,
+    _In_ PVOID                          Cookie,
+    _Out_ PBOOLEAN                      Pause
     );
=20
 extern VOID
 VifTransmitterReturnPacket(
-    IN  PXENVIF_VIF_CONTEXT                         Context,
-    IN  PVOID                                       Cookie,
-    IN  PXENVIF_TRANSMITTER_PACKET_COMPLETION_INFO  Completion
+    _In_ PXENVIF_VIF_CONTEXT                        Context,
+    _In_ PVOID                                      Cookie,
+    _In_ PXENVIF_TRANSMITTER_PACKET_COMPLETION_INFO Completion
     );
=20
 extern PXENVIF_THREAD
 VifGetMacThread(
-    IN  PXENVIF_VIF_CONTEXT Context
+    _In_ PXENVIF_VIF_CONTEXT    Context
     );
=20
 #endif  // _XENVIF_VIF_H
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.ce.c1028a50f1fe5133.1a12fa3cc19.aaa300125be0af86=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 12 10:23:55 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 12 Oct 2026 10:23:55 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1446091.1662095 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGDCE-0005TP-Up; Mon, 12 Oct 2026 10:23:54 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1446091.1662095; Mon, 12 Oct 2026 10:23:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGDCE-0005SR-Dr; Mon, 12 Oct 2026 10:23:54 +0000
Received: by outflank-mailman (input) for mailman id 1446091;
 Mon, 12 Oct 2026 10:23:53 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3d55400080d7@swg.vates.tech>)
 id 1xGDCD-0005PM-FZ
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 10:23:53 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGDCC-00ECpK-RF
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 12:23:52 +0200
Received: from [10.42.69.2] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3d55400080d7@swg.vates.tech>)
 id 6accb535-e002-0a2a0a5209dd-0a2a4502a988-18
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 12:23:52 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3d55400080d7@swg.vates.tech>)
 id 6accb537-6ca4-0a2a45020019-b9ff1c23b483-4
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 12:23:52 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a12fa3d55400080d7.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 12 Oct 2026 10:23:48 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 05A0082A57;
 Mon, 12 Oct 2026 12:23:48 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=grnrW+eU2tQyrwVPT1jYB2CDwWKvhHfaPhLQxWJgVVc=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=QNMbFRvoQqqqwxVoTHjNi65wWh6S+BvT6hEVF/NS1TQek6R+R1Ov3shsEZHdP9k3nhbCcWXT+
 EdV/7MnZgmR8/Stf4dH1KPeoFUIZj0V7NPfj++vp/v9SanUz8c7nI94O/0zP8oLVqjzq3gD17w6
 QkzUFT4Wqifi2nW+wp661mcDQsBDvO5azQ+qQYBzRhS76wOm6OFl4iPXMZ0RvU5geZFxkG+qX3W
 D9jbxBxUBuzdnU1Usc8Fi/eMqt8juIQLFWPBcRf5WkDAACeEnvliehHghokfMCM9Bl4HYyQHg6D
 OVKNDpYSPFBWUkrOFd3V8Lxnv/7oV5kK9ZTRRwDxBvpQ==
X-Zone-Loop: 520ddf2197301878e241674065a086b84d332e5e1f5a
x-campaign-type: default
x-transaction-id: 8740a14d-9feb-4ad6-91ef-df6a319d91af
x-swg-uid: 01-bdf591ca-0d86-408b-bb91-5e79ac9e9bd2
X-Mailer: Sweego
Message-ID:
 <1791800628.8631fc262581453bbf619ec5b2062170.1a12fa3d55400080d7@vates.tech>
x-swg-bid: 1791800628.8631fc262581453bbf619ec5b2062170.1a12fa3d55400080d7
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 09/21] fdo: fix str annotation of __FdoMultiSzToUpcaseAnsi
Date: Mon, 12 Oct 2026 12:23:21 +0200
In-Reply-To: <1791800371.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@vates.tech>
References: <1791800371.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.d5.a4ffca45d31b1626.1a12fa3d3b8.99a93b930423295f=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791800628152
X-purgate-ID: tlsNG-720697/1791800632-662A92AC-019D88E2/0/0
X-purgate-type: clean
X-purgate-size: 1153

---=Part.d5.a4ffca45d31b1626.1a12fa3d3b8.99a93b930423295f=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Buffer is a list of strings ending with a double NUL that is first read
before being written to upper case the string in place=2E
The corresponding WDK typedef for double-NUL terminated strings is PZZSTR=
=2E
Annotate buffer accordingly=2E

Assisted-by: Claude/Opus-5=2E5
Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xenvif/fdo=2Ec | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/xenvif/fdo=2Ec b/src/xenvif/fdo=2Ec
index 78ac65a=2E=2E99dce73 100644
--- a/src/xenvif/fdo=2Ec
+++ b/src/xenvif/fdo=2Ec
@@ -848,7 +848,7 @@ done:
=20
 static FORCEINLINE PANSI_STRING
 __FdoMultiSzToUpcaseAnsi(
-    _Out_ PSTR      Buffer
+    _Inout_ PZZSTR  Buffer
     )
 {
     PANSI_STRING    Ansi;
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.d5.a4ffca45d31b1626.1a12fa3d3b8.99a93b930423295f=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 12 10:23:55 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 12 Oct 2026 10:23:55 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1446094.1662102 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGDCF-0005VJ-CG; Mon, 12 Oct 2026 10:23:55 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1446094.1662102; Mon, 12 Oct 2026 10:23:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGDCE-0005UK-KK; Mon, 12 Oct 2026 10:23:54 +0000
Received: by outflank-mailman (input) for mailman id 1446094;
 Mon, 12 Oct 2026 10:23:53 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3d64700080d7@swg.vates.tech>)
 id 1xGDCD-0005PR-Hr
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 10:23:53 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGDCC-00Fmsh-Uo
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 12:23:52 +0200
Received: from [10.42.69.6] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3d64700080d7@swg.vates.tech>)
 id 6accb51e-8faa-0a2a0a5109dd-0a2a4506e56a-40
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 12:23:52 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-16d1c6.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3d64700080d7@swg.vates.tech>)
 id 6accb538-195a-0a2a45060019-b9ff1c23a629-4
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 12:23:52 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a12fa3d64700080d7.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 12 Oct 2026 10:23:48 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 4B48082A58;
 Mon, 12 Oct 2026 12:23:48 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=k8Xh4b6mjhIvviGV7kPq5tsUndrN8gmwYQJy4Qi1Fuw=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=nCaY8/8Akg0PL5f8hR9D+GcLsZeJ0+Sd+yTVfMG5AJaYnI9LO60rlqXo97MqGKpTjrqMuyhIY
 cXVF7wNsuRuqPF1zFC9H4BeNYR8bP2qJy6Q+i7JkAbyFF4rHve7yi3p4pgeztc+L5CQk5vIvvai
 dfC5KJpJP1PygKkormqLQLDo+PjgBZbM4l6+Agz+7E75hgU50bVHRABDmVwVfvD/RjhJoYe8zaC
 RW+DvtoMaueraPoi0SfuRMaFGU2uYjFUQw6TrqfNRCMI0saFP5SYXH/DaqJaGLT7h1O80wKK9ur
 leJQoCgjBlZGoDiwwOrXmR/rtrr4TqdYE/x6ZFraL0xQ==
X-Zone-Loop: b4548035b1493b332facd0ce64f2bf18e7aaf649fd4e
x-campaign-type: default
x-transaction-id: 83d1d7f2-9920-4a83-b04f-23dd1fb360bd
x-swg-uid: 01-2da24d19-4968-4a96-bb91-0b7ecf0f209b
X-Mailer: Sweego
Message-ID:
 <1791800628.8631fc262581453bbf619ec5b2062170.1a12fa3d64700080d7@vates.tech>
x-swg-bid: 1791800628.8631fc262581453bbf619ec5b2062170.1a12fa3d64700080d7
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 10/21] driver: fix annotation of __FdoEnumerate
Date: Mon, 12 Oct 2026 12:23:22 +0200
In-Reply-To: <1791800371.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@vates.tech>
References: <1791800371.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.d6.2f740b7456682644.1a12fa3d4af.4318b1688216e53b=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791800628399
X-purgate-ID: tlsNG-16d1c6/1791800632-FEC7777B-5A20F866/0/0
X-purgate-type: clean
X-purgate-size: 1730

---=Part.d6.2f740b7456682644.1a12fa3d4af.4318b1688216e53b=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

__FdoEnumerate handles the case where Device param is set to NULL and
can be called with Devices set to NULL in a failure path of
FdoScan=2E
Device also has its Length param written to avoid duplication=2E
Annotate it as _Inout_opt_=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xenvif/fdo=2Ec | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/src/xenvif/fdo=2Ec b/src/xenvif/fdo=2Ec
index 99dce73=2E=2Eaf8bec4 100644
--- a/src/xenvif/fdo=2Ec
+++ b/src/xenvif/fdo=2Ec
@@ -717,16 +717,16 @@ FdoReleaseMutex(
=20
 static FORCEINLINE BOOLEAN
 __FdoEnumerate(
-    _In_ PXENVIF_FDO    Fdo,
-    _In_ PANSI_STRING   Devices
+    _In_ PXENVIF_FDO            Fdo,
+    _Inout_opt_ PANSI_STRING    Devices
     )
 {
-    BOOLEAN             NeedInvalidate;
-    HANDLE              ParametersKey;
-    ULONG               Enumerate;
-    PLIST_ENTRY         ListEntry;
-    ULONG               Index;
-    NTSTATUS            status;
+    BOOLEAN                     NeedInvalidate;
+    HANDLE                      ParametersKey;
+    ULONG                       Enumerate;
+    PLIST_ENTRY                 ListEntry;
+    ULONG                       Index;
+    NTSTATUS                    status;
=20
     Trace("=3D=3D=3D=3D>\n");
=20
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.d6.2f740b7456682644.1a12fa3d4af.4318b1688216e53b=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 12 10:23:55 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 12 Oct 2026 10:23:55 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1446093.1662098 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGDCF-0005Uc-92; Mon, 12 Oct 2026 10:23:55 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1446093.1662098; Mon, 12 Oct 2026 10:23:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGDCE-0005T0-GE; Mon, 12 Oct 2026 10:23:54 +0000
Received: by outflank-mailman (input) for mailman id 1446093;
 Mon, 12 Oct 2026 10:23:53 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3d04700080d7@swg.vates.tech>)
 id 1xGDCD-0005Oz-7Q
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 10:23:53 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGDCC-00Fmsh-Js
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 12:23:52 +0200
Received: from [10.42.69.6] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3d04700080d7@swg.vates.tech>)
 id 6accb51e-8faa-0a2a0a5109dd-0a2a4506e56a-36
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 12:23:52 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-16d1c6.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3d04700080d7@swg.vates.tech>)
 id 6accb538-195a-0a2a45060019-b9ff1c23a629-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 12:23:52 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a12fa3d04700080d7.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 12 Oct 2026 10:23:47 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 9F2B282A4A;
 Mon, 12 Oct 2026 12:23:46 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=8spT/iD4ledT0FIRgSbik2/Wgb3pyfgm0CyxsrT5h4w=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=ZNoccIJLQyU6Tfz8rC4yYAfaYyC5ALWAifL+q6t4WP9Nz21+fR3EPqE5Je/QWnuDfi8ajf2X2
 QhbW4YNB6YE/kNnGNuJVa7Xr04syt2R+N3a0WH9nKFY3ni2F6zrLRluscqCotRZcR1C19DhQiAo
 gh69JpP6+KSG2c8KBScOu4AH+kHzEV/pajCI8bZAm/JBCRzmJACiW8ZeYcelqc40FnINIC25s8G
 YmjabOrA8frTC1iOPiEl1T0yY1UCYvnkk6ZF5qG+Iat/EhOuyLDNp/okyWRshxXlpWhyt+2mWFW
 F/N0ZtwaS7znNPLF0Uj32rETdtGcyDzGmjcRoRLDazLg==
X-Zone-Loop: 2a36366c0b7603362032c54e80c08bffa0fa2be5ce06
x-campaign-type: default
x-transaction-id: 82166f7b-7f5d-4c1e-a131-af6e988c8070
x-swg-uid: 01-51337b88-dcbb-4802-8943-0cb4e5fa4a36
X-Mailer: Sweego
Message-ID:
 <1791800627.8631fc262581453bbf619ec5b2062170.1a12fa3d04700080d7@vates.tech>
x-swg-bid: 1791800627.8631fc262581453bbf619ec5b2062170.1a12fa3d04700080d7
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 04/21] xenvif: fix direction annotations on written parameters
Date: Mon, 12 Oct 2026 12:23:16 +0200
In-Reply-To: <1791800371.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@vates.tech>
References: <1791800371.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.d0.747fdd3416c4954f.1a12fa3cea0.5b0f2b05a4ebf37b=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791800626848
X-purgate-ID: tlsNG-16d1c6/1791800632-F66724DB-EB838980/0/0
X-purgate-type: clean
X-purgate-size: 68908

---=Part.d0.747fdd3416c4954f.1a12fa3cea0.5b0f2b05a4ebf37b=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Several parameters were annotated _In_ although the functions write
through them=2E
Change them to match what the functions actually do:

- _Out_ where the function fully initializes the pointee and does not
  depend on its previous contents=2E
- _Inout_ where the function reads or partially updates existing
  content=2E

No functional change=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xenvif/controller=2Ec  | 98 ++++++++++++++++++++--------------------
 src/xenvif/controller=2Eh  | 44 +++++++++---------
 src/xenvif/fdo=2Ec         | 60 ++++++++++++------------
 src/xenvif/fdo=2Eh         | 20 ++++----
 src/xenvif/frontend=2Ec    | 80 ++++++++++++++++----------------
 src/xenvif/frontend=2Eh    | 28 ++++++------
 src/xenvif/mac=2Ec         | 46 +++++++++----------
 src/xenvif/mac=2Eh         | 28 ++++++------
 src/xenvif/pdo=2Ec         | 48 ++++++++++----------
 src/xenvif/pdo=2Eh         | 10 ++--
 src/xenvif/receiver=2Ec    | 82 ++++++++++++++++-----------------
 src/xenvif/receiver=2Eh    |  8 ++--
 src/xenvif/thread=2Ec      | 10 ++--
 src/xenvif/thread=2Eh      |  6 +--
 src/xenvif/transmitter=2Ec | 86 +++++++++++++++++------------------
 src/xenvif/transmitter=2Eh |  6 +--
 src/xenvif/vif=2Ec         |  6 +--
 src/xenvif/vif=2Eh         |  2 +-
 18 files changed, 334 insertions(+), 334 deletions(-)

diff --git a/src/xenvif/controller=2Ec b/src/xenvif/controller=2Ec
index 4accb49=2E=2E215a8f3 100644
--- a/src/xenvif/controller=2Ec
+++ b/src/xenvif/controller=2Ec
@@ -104,7 +104,7 @@ __ControllerFree(
 static FORCEINLINE VOID
 _IRQL_requires_(DISPATCH_LEVEL)
 __ControllerAcquireLock(
-    _In_ PXENVIF_CONTROLLER Controller
+    _Out_ PXENVIF_CONTROLLER    Controller
     )
 {
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, DISPATCH_LEVEL);
@@ -115,7 +115,7 @@ __ControllerAcquireLock(
 static FORCEINLINE VOID
 _IRQL_requires_(DISPATCH_LEVEL)
 __ControllerReleaseLock(
-    _In_ PXENVIF_CONTROLLER Controller
+    _Out_ PXENVIF_CONTROLLER    Controller
     )
 {
     KeReleaseSpinLockFromDpcLevel(&Controller->Lock);
@@ -125,7 +125,7 @@ _Acquires_nonreentrant_lock_(Controller)
 _IRQL_requires_(DISPATCH_LEVEL)
 static VOID
 ControllerAcquireLock(
-    _In_ PXENVIF_CONTROLLER Controller
+    _Out_ PXENVIF_CONTROLLER    Controller
     )
 {
     __ControllerAcquireLock(Controller);
@@ -135,7 +135,7 @@ _Requires_lock_held_(Controller)
 _IRQL_requires_(DISPATCH_LEVEL)
 static VOID
 ControllerReleaseLock(
-    _In_ PXENVIF_CONTROLLER Controller
+    _Out_ PXENVIF_CONTROLLER    Controller
     )
 {
     __ControllerReleaseLock(Controller);
@@ -185,7 +185,7 @@ ControllerPoll(
 _IRQL_requires_min_(DISPATCH_LEVEL)
 static NTSTATUS
 ControllerPutRequest(
-    _In_ PXENVIF_CONTROLLER         Controller,
+    _Out_ PXENVIF_CONTROLLER        Controller,
     _In_ USHORT                     Type,
     _In_ ULONG                      Data0,
     _In_ ULONG                      Data1,
@@ -428,7 +428,7 @@ fail1:
 _IRQL_requires_(DISPATCH_LEVEL)
 NTSTATUS
 ControllerConnect(
-    _In_ PXENVIF_CONTROLLER     Controller
+    _Out_ PXENVIF_CONTROLLER    Controller
     )
 {
     PXENVIF_FRONTEND            Frontend;
@@ -689,7 +689,7 @@ fail1:
=20
 VOID
 ControllerEnable(
-    _In_ PXENVIF_CONTROLLER Controller
+    _Out_ PXENVIF_CONTROLLER    Controller
     )
 {
     __ControllerAcquireLock(Controller);
@@ -703,7 +703,7 @@ ControllerEnable(
=20
 VOID
 ControllerDisable(
-    _In_ PXENVIF_CONTROLLER Controller
+    _Out_ PXENVIF_CONTROLLER    Controller
     )
 {
     __ControllerAcquireLock(Controller);
@@ -718,7 +718,7 @@ ControllerDisable(
 _IRQL_requires_(DISPATCH_LEVEL)
 VOID
 ControllerDisconnect(
-    _In_ PXENVIF_CONTROLLER Controller
+    _Out_ PXENVIF_CONTROLLER    Controller
     )
 {
     Trace("=3D=3D=3D=3D>\n");
@@ -781,7 +781,7 @@ done:
 _IRQL_requires_(PASSIVE_LEVEL)
 VOID
 ControllerTeardown(
-    _In_ PXENVIF_CONTROLLER Controller
+    _Out_ PXENVIF_CONTROLLER    Controller
     )
 {
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, PASSIVE_LEVEL);
@@ -812,12 +812,12 @@ ControllerTeardown(
 _IRQL_requires_(DISPATCH_LEVEL)
 NTSTATUS
 ControllerSetHashAlgorithm(
-    _In_ PXENVIF_CONTROLLER Controller,
-    _In_ ULONG              Algorithm
+    _Out_ PXENVIF_CONTROLLER    Controller,
+    _In_ ULONG                  Algorithm
     )
 {
-    PXENVIF_FRONTEND        Frontend;
-    NTSTATUS                status;
+    PXENVIF_FRONTEND            Frontend;
+    NTSTATUS                    status;
=20
     Frontend =3D Controller->Frontend;
=20
@@ -853,12 +853,12 @@ fail1:
 _IRQL_requires_(DISPATCH_LEVEL)
 NTSTATUS
 ControllerGetHashFlags(
-    _In_ PXENVIF_CONTROLLER Controller,
-    _In_ PULONG             Flags
+    _Out_ PXENVIF_CONTROLLER    Controller,
+    _Out_ PULONG                Flags
     )
 {
-    PXENVIF_FRONTEND        Frontend;
-    NTSTATUS                status;
+    PXENVIF_FRONTEND            Frontend;
+    NTSTATUS                    status;
=20
     Frontend =3D Controller->Frontend;
=20
@@ -894,12 +894,12 @@ fail1:
 _IRQL_requires_(DISPATCH_LEVEL)
 NTSTATUS
 ControllerSetHashFlags(
-    _In_ PXENVIF_CONTROLLER Controller,
-    _In_ ULONG              Flags
+    _Out_ PXENVIF_CONTROLLER    Controller,
+    _In_ ULONG                  Flags
     )
 {
-    PXENVIF_FRONTEND        Frontend;
-    NTSTATUS                status;
+    PXENVIF_FRONTEND            Frontend;
+    NTSTATUS                    status;
=20
     Frontend =3D Controller->Frontend;
=20
@@ -935,17 +935,17 @@ fail1:
 _IRQL_requires_(DISPATCH_LEVEL)
 NTSTATUS
 ControllerSetHashKey(
-    _In_ PXENVIF_CONTROLLER Controller,
-    _In_ PUCHAR             Key,
-    _In_ ULONG              Size
+    _Out_ PXENVIF_CONTROLLER    Controller,
+    _In_ PUCHAR                 Key,
+    _In_ ULONG                  Size
     )
 {
-    PXENVIF_FRONTEND        Frontend;
-    PMDL                    Mdl;
-    PUCHAR                  Buffer;
-    PFN_NUMBER              Pfn;
-    PXENBUS_GNTTAB_ENTRY    Entry;
-    NTSTATUS                status;
+    PXENVIF_FRONTEND            Frontend;
+    PMDL                        Mdl;
+    PUCHAR                      Buffer;
+    PFN_NUMBER                  Pfn;
+    PXENBUS_GNTTAB_ENTRY        Entry;
+    NTSTATUS                    status;
=20
     Frontend =3D Controller->Frontend;
=20
@@ -1030,12 +1030,12 @@ fail1:
 _IRQL_requires_(DISPATCH_LEVEL)
 NTSTATUS
 ControllerGetHashMappingSize(
-    _In_ PXENVIF_CONTROLLER Controller,
-    _In_ PULONG             Size
+    _Out_ PXENVIF_CONTROLLER    Controller,
+    _Out_ PULONG                Size
     )
 {
-    PXENVIF_FRONTEND        Frontend;
-    NTSTATUS                status;
+    PXENVIF_FRONTEND            Frontend;
+    NTSTATUS                    status;
=20
     Frontend =3D Controller->Frontend;
=20
@@ -1071,12 +1071,12 @@ fail1:
 _IRQL_requires_(DISPATCH_LEVEL)
 NTSTATUS
 ControllerSetHashMappingSize(
-    _In_ PXENVIF_CONTROLLER Controller,
-    _In_ ULONG              Size
+    _Out_ PXENVIF_CONTROLLER    Controller,
+    _In_ ULONG                  Size
     )
 {
-    PXENVIF_FRONTEND        Frontend;
-    NTSTATUS                status;
+    PXENVIF_FRONTEND            Frontend;
+    NTSTATUS                    status;
=20
     Frontend =3D Controller->Frontend;
=20
@@ -1112,18 +1112,18 @@ fail1:
 _IRQL_requires_(DISPATCH_LEVEL)
 NTSTATUS
 ControllerSetHashMapping(
-    _In_ PXENVIF_CONTROLLER Controller,
-    _In_ PULONG             Mapping,
-    _In_ ULONG              Size,
-    _In_ ULONG              Offset
+    _Out_ PXENVIF_CONTROLLER    Controller,
+    _In_ PULONG                 Mapping,
+    _In_ ULONG                  Size,
+    _In_ ULONG                  Offset
     )
 {
-    PXENVIF_FRONTEND        Frontend;
-    PMDL                    Mdl;
-    PUCHAR                  Buffer;
-    PFN_NUMBER              Pfn;
-    PXENBUS_GNTTAB_ENTRY    Entry;
-    NTSTATUS                status;
+    PXENVIF_FRONTEND            Frontend;
+    PMDL                        Mdl;
+    PUCHAR                      Buffer;
+    PFN_NUMBER                  Pfn;
+    PXENBUS_GNTTAB_ENTRY        Entry;
+    NTSTATUS                    status;
=20
     Frontend =3D Controller->Frontend;
=20
diff --git a/src/xenvif/controller=2Eh b/src/xenvif/controller=2Eh
index f920397=2E=2Eab6314c 100644
--- a/src/xenvif/controller=2Eh
+++ b/src/xenvif/controller=2Eh
@@ -51,7 +51,7 @@ ControllerInitialize(
 _IRQL_requires_(DISPATCH_LEVEL)
 extern NTSTATUS
 ControllerConnect(
-    _In_ PXENVIF_CONTROLLER Controller
+    _Out_ PXENVIF_CONTROLLER    Controller
     );
=20
 _IRQL_requires_(DISPATCH_LEVEL)
@@ -63,76 +63,76 @@ ControllerStoreWrite(
=20
 extern VOID
 ControllerEnable(
-    _In_ PXENVIF_CONTROLLER Controller
+    _Out_ PXENVIF_CONTROLLER    Controller
     );
=20
 extern VOID
 ControllerDisable(
-    _In_ PXENVIF_CONTROLLER Controller
+    _Out_ PXENVIF_CONTROLLER    Controller
     );
=20
 _IRQL_requires_(DISPATCH_LEVEL)
 extern VOID
 ControllerDisconnect(
-    _In_ PXENVIF_CONTROLLER Controller
+    _Out_ PXENVIF_CONTROLLER    Controller
     );
=20
 _IRQL_requires_(PASSIVE_LEVEL)
 extern VOID
 ControllerTeardown(
-    _In_ PXENVIF_CONTROLLER Controller
+    _Out_ PXENVIF_CONTROLLER    Controller
     );
=20
 _IRQL_requires_(DISPATCH_LEVEL)
 extern NTSTATUS
 ControllerSetHashAlgorithm(
-    _In_ PXENVIF_CONTROLLER Controller,
-    _In_ ULONG              Algorithm
+    _Out_ PXENVIF_CONTROLLER    Controller,
+    _In_ ULONG                  Algorithm
     );
=20
 _IRQL_requires_(DISPATCH_LEVEL)
 extern NTSTATUS
 ControllerGetHashFlags(
-    _In_ PXENVIF_CONTROLLER Controller,
-    _In_ PULONG             Flags
+    _Out_ PXENVIF_CONTROLLER    Controller,
+    _Out_ PULONG                Flags
     );
=20
 _IRQL_requires_(DISPATCH_LEVEL)
 extern NTSTATUS
 ControllerSetHashFlags(
-    _In_ PXENVIF_CONTROLLER Controller,
-    _In_ ULONG              Flags
+    _Out_ PXENVIF_CONTROLLER    Controller,
+    _In_ ULONG                  Flags
     );
=20
 _IRQL_requires_(DISPATCH_LEVEL)
 extern NTSTATUS
 ControllerSetHashKey(
-    _In_ PXENVIF_CONTROLLER Controller,
-    _In_ PUCHAR             Key,
-    _In_ ULONG              Size
+    _Out_ PXENVIF_CONTROLLER    Controller,
+    _In_ PUCHAR                 Key,
+    _In_ ULONG                  Size
     );
=20
 _IRQL_requires_(DISPATCH_LEVEL)
 extern NTSTATUS
 ControllerGetHashMappingSize(
-    _In_ PXENVIF_CONTROLLER Controller,
-    _In_ PULONG             Size
+    _Out_ PXENVIF_CONTROLLER    Controller,
+    _Out_ PULONG                Size
     );
=20
 _IRQL_requires_(DISPATCH_LEVEL)
 extern NTSTATUS
 ControllerSetHashMappingSize(
-    _In_ PXENVIF_CONTROLLER Controller,
-    _In_ ULONG              Size
+    _Out_ PXENVIF_CONTROLLER    Controller,
+    _In_ ULONG                  Size
     );
=20
 _IRQL_requires_(DISPATCH_LEVEL)
 extern NTSTATUS
 ControllerSetHashMapping(
-    _In_ PXENVIF_CONTROLLER Controller,
-    _In_ PULONG             Mapping,
-    _In_ ULONG              Size,
-    _In_ ULONG              Offset
+    _Out_ PXENVIF_CONTROLLER    Controller,
+    _In_ PULONG                 Mapping,
+    _In_ ULONG                  Size,
+    _In_ ULONG                  Offset
     );
=20
=20
diff --git a/src/xenvif/fdo=2Ec b/src/xenvif/fdo=2Ec
index 0a0e44f=2E=2E46ac5b7 100644
--- a/src/xenvif/fdo=2Ec
+++ b/src/xenvif/fdo=2Ec
@@ -232,7 +232,7 @@ FdoGetPhysicalDeviceObject(
 _IRQL_requires_(PASSIVE_LEVEL)
 static FORCEINLINE NTSTATUS
 __FdoAcquireLowerBusInterface(
-    _In_ PXENVIF_FDO        Fdo
+    _Out_ PXENVIF_FDO       Fdo
     )
 {
     PBUS_INTERFACE_STANDARD BusInterface;
@@ -315,7 +315,7 @@ fail1:
=20
 static FORCEINLINE VOID
 __FdoReleaseLowerBusInterface(
-    _In_ PXENVIF_FDO        Fdo
+    _Out_ PXENVIF_FDO       Fdo
     )
 {
     PBUS_INTERFACE_STANDARD BusInterface;
@@ -351,14 +351,14 @@ FdoGetDmaAdapter(
=20
 BOOLEAN
 FdoTranslateBusAddress(
-    _In_ PXENVIF_FDO            Fdo,
-    _In_ PHYSICAL_ADDRESS       BusAddress,
-    _In_ ULONG                  Length,
-    _Inout_ PULONG              AddressSpace,
-    _Outptr_ PPHYSICAL_ADDRESS  TranslatedAddress
+    _In_ PXENVIF_FDO        Fdo,
+    _In_ PHYSICAL_ADDRESS   BusAddress,
+    _In_ ULONG              Length,
+    _Inout_ PULONG          AddressSpace,
+    _Out_ PPHYSICAL_ADDRESS TranslatedAddress
     )
 {
-    PBUS_INTERFACE_STANDARD     BusInterface;
+    PBUS_INTERFACE_STANDARD BusInterface;
=20
     BusInterface =3D Fdo->LowerBusInterface;
     ASSERT(BusInterface !=3D NULL);
@@ -621,7 +621,7 @@ FdoForwardIrpSynchronously(
=20
 NTSTATUS
 FdoAddPhysicalDeviceObject(
-    _In_ PXENVIF_FDO    Fdo,
+    _Out_ PXENVIF_FDO   Fdo,
     _In_ PXENVIF_PDO    Pdo
     )
 {
@@ -655,7 +655,7 @@ fail1:
=20
 VOID
 FdoRemovePhysicalDeviceObject(
-    _In_ PXENVIF_FDO    Fdo,
+    _Out_ PXENVIF_FDO   Fdo,
     _In_ PXENVIF_PDO    Pdo
     )
 {
@@ -706,7 +706,7 @@ __FdoReleaseMutex(
=20
 VOID
 FdoReleaseMutex(
-    _In_ PXENVIF_FDO    Fdo
+    _Out_ PXENVIF_FDO   Fdo
     )
 {
     __FdoReleaseMutex(Fdo);
@@ -848,7 +848,7 @@ done:
=20
 static FORCEINLINE PANSI_STRING
 __FdoMultiSzToUpcaseAnsi(
-    _In_ PSTR       Buffer
+    _Out_ PSTR      Buffer
     )
 {
     PANSI_STRING    Ansi;
@@ -1055,7 +1055,7 @@ loop:
=20
 static DECLSPEC_NOINLINE VOID
 FdoParseResources(
-    _In_ PXENVIF_FDO            Fdo,
+    _Inout_ PXENVIF_FDO         Fdo,
     _In_ PCM_RESOURCE_LIST      RawResourceList,
     _In_ PCM_RESOURCE_LIST      TranslatedResourceList
     )
@@ -1103,7 +1103,7 @@ FdoParseResources(
 static FORCEINLINE BOOLEAN
 __FdoMatchDistribution(
     _In_ PXENVIF_FDO    Fdo,
-    _In_ PSTR           Buffer
+    _Out_ PSTR          Buffer
     )
 {
     PCHAR               Vendor;
@@ -1359,7 +1359,7 @@ fail1:
=20
 static FORCEINLINE VOID
 __FdoD0ToD3(
-    _In_ PXENVIF_FDO    Fdo
+    _Out_ PXENVIF_FDO   Fdo
     )
 {
     Trace("=3D=3D=3D=3D>\n");
@@ -1399,7 +1399,7 @@ FdoSuspendCallbackLate(
 // This function must not touch pageable code or data
 static DECLSPEC_NOINLINE NTSTATUS
 FdoD3ToD0(
-    _In_ PXENVIF_FDO    Fdo
+    _Out_ PXENVIF_FDO   Fdo
     )
 {
     POWER_STATE         PowerState;
@@ -1492,7 +1492,7 @@ fail1:
 // This function must not touch pageable code or data
 static DECLSPEC_NOINLINE VOID
 FdoD0ToD3(
-    _In_ PXENVIF_FDO    Fdo
+    _Out_ PXENVIF_FDO   Fdo
     )
 {
     POWER_STATE         PowerState;
@@ -1574,7 +1574,7 @@ FdoS3ToS4(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoStartDevice(
-    _In_ PXENVIF_FDO    Fdo,
+    _Out_ PXENVIF_FDO   Fdo,
     _In_ PIRP           Irp
     )
 {
@@ -1669,7 +1669,7 @@ FdoCancelStopDevice(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoStopDevice(
-    _In_ PXENVIF_FDO    Fdo,
+    _Out_ PXENVIF_FDO   Fdo,
     _In_ PIRP           Irp
     )
 {
@@ -1767,7 +1767,7 @@ FdoSurpriseRemoval(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoRemoveDevice(
-    _In_ PXENVIF_FDO    Fdo,
+    _Out_ PXENVIF_FDO   Fdo,
     _In_ PIRP           Irp
     )
 {
@@ -1849,7 +1849,7 @@ done:
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoQueryDeviceRelations(
-    _In_ PXENVIF_FDO    Fdo,
+    _Out_ PXENVIF_FDO   Fdo,
     _In_ PIRP           Irp
     )
 {
@@ -1973,7 +1973,7 @@ fail1:
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoQueryCapabilities(
-    _In_ PXENVIF_FDO        Fdo,
+    _Out_ PXENVIF_FDO       Fdo,
     _In_ PIRP               Irp
     )
 {
@@ -2013,7 +2013,7 @@ fail1:
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoDeviceUsageNotification(
-    _In_ PXENVIF_FDO                Fdo,
+    _Out_ PXENVIF_FDO               Fdo,
     _In_ PIRP                       Irp
     )
 {
@@ -2104,7 +2104,7 @@ done:
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoDispatchPnp(
-    _In_ PXENVIF_FDO    Fdo,
+    _Out_ PXENVIF_FDO   Fdo,
     _In_ PIRP           Irp
     )
 {
@@ -2292,7 +2292,7 @@ FdoDevicePowerDownWorker(
=20
 static FORCEINLINE NTSTATUS
 __FdoSetDevicePowerDown(
-    _In_ PXENVIF_FDO    Fdo,
+    _Out_ PXENVIF_FDO   Fdo,
     _In_ PIRP           Irp
     )
 {
@@ -2336,7 +2336,7 @@ __FdoSetDevicePowerDown(
=20
 static FORCEINLINE NTSTATUS
 __FdoSetDevicePower(
-    _In_ PXENVIF_FDO    Fdo,
+    _Out_ PXENVIF_FDO   Fdo,
     _In_ PIRP           Irp
     )
 {
@@ -2986,7 +2986,7 @@ done:
=20
 static FORCEINLINE NTSTATUS
 __FdoDevicePower(
-    _In_ PXENVIF_FDO    Fdo,
+    _Out_ PXENVIF_FDO   Fdo,
     _In_ PIRP           Irp
     )
 {
@@ -3044,7 +3044,7 @@ __FdoSystemPower(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoDispatchPower(
-    _In_ PXENVIF_FDO    Fdo,
+    _Out_ PXENVIF_FDO   Fdo,
     _In_ PIRP           Irp
     )
 {
@@ -3089,7 +3089,7 @@ FdoDispatchDefault(
=20
 NTSTATUS
 FdoDispatch(
-    _In_ PXENVIF_FDO    Fdo,
+    _Out_ PXENVIF_FDO   Fdo,
     _In_ PIRP           Irp
     )
 {
@@ -3461,7 +3461,7 @@ fail1:
=20
 VOID
 FdoDestroy(
-    _In_ PXENVIF_FDO    Fdo
+    _Out_ PXENVIF_FDO   Fdo
     )
 {
     PXENVIF_DX          Dx =3D Fdo->Dx;
diff --git a/src/xenvif/fdo=2Eh b/src/xenvif/fdo=2Eh
index c72066d=2E=2E72017b7 100644
--- a/src/xenvif/fdo=2Eh
+++ b/src/xenvif/fdo=2Eh
@@ -58,13 +58,13 @@ FdoGetName(
=20
 extern NTSTATUS
 FdoAddPhysicalDeviceObject(
-    _In_ PXENVIF_FDO    Fdo,
+    _Out_ PXENVIF_FDO   Fdo,
     _In_ PXENVIF_PDO    Pdo
     );
=20
 extern VOID
 FdoRemovePhysicalDeviceObject(
-    _In_ PXENVIF_FDO    Fdo,
+    _Out_ PXENVIF_FDO   Fdo,
     _In_ PXENVIF_PDO    Pdo
     );
=20
@@ -75,7 +75,7 @@ FdoAcquireMutex(
=20
 extern VOID
 FdoReleaseMutex(
-    _In_ PXENVIF_FDO    Fdo
+    _Out_ PXENVIF_FDO   Fdo
     );
=20
 extern PDEVICE_OBJECT
@@ -92,11 +92,11 @@ FdoGetDmaAdapter(
=20
 extern BOOLEAN
 FdoTranslateBusAddress(
-    _In_ PXENVIF_FDO            Fdo,
-    _In_ PHYSICAL_ADDRESS       BusAddress,
-    _In_ ULONG                  Length,
-    _Inout_ PULONG              AddressSpace,
-    _Outptr_ PPHYSICAL_ADDRESS  TranslatedAddress
+    _In_ PXENVIF_FDO         Fdo,
+    _In_ PHYSICAL_ADDRESS    BusAddress,
+    _In_ ULONG               Length,
+    _Inout_ PULONG           AddressSpace,
+    _Out_ PPHYSICAL_ADDRESS  TranslatedAddress
     );
=20
 extern ULONG
@@ -125,7 +125,7 @@ FdoDelegateIrp(
=20
 extern NTSTATUS
 FdoDispatch(
-    _In_ PXENVIF_FDO    Fdo,
+    _Out_ PXENVIF_FDO   Fdo,
     _In_ PIRP           Irp
     );
=20
@@ -152,7 +152,7 @@ FdoCreate(
=20
 extern VOID
 FdoDestroy(
-    _In_ PXENVIF_FDO    Fdo
+    _Out_ PXENVIF_FDO   Fdo
     );
=20
 #endif  // _XENVIF_FDO_H
diff --git a/src/xenvif/frontend=2Ec b/src/xenvif/frontend=2Ec
index c11f85c=2E=2E313631d 100644
--- a/src/xenvif/frontend=2Ec
+++ b/src/xenvif/frontend=2Ec
@@ -240,7 +240,7 @@ FrontendGetBackendDomain(
=20
 static VOID
 FrontendSetMaxQueues(
-    _In_ PXENVIF_FRONTEND   Frontend
+    _Out_ PXENVIF_FRONTEND  Frontend
     )
 {
     HANDLE                  ParametersKey;
@@ -443,7 +443,7 @@ loop:
=20
 VOID
 FrontendEjectFailed(
-    _In_ PXENVIF_FRONTEND   Frontend
+    _Out_ PXENVIF_FRONTEND  Frontend
     )
 {
     KIRQL                   Irql;
@@ -494,7 +494,7 @@ fail1:
=20
 static NTSTATUS
 FrontendProcessInterfaceTable(
-    _In_ PXENVIF_FRONTEND   Frontend,
+    _Out_ PXENVIF_FRONTEND  Frontend,
     _In_ PMIB_IF_TABLE2     Table
     )
 {
@@ -542,7 +542,7 @@ found:
=20
 static NTSTATUS
 FrontendInsertAddress(
-    _In_ PXENVIF_FRONTEND       Frontend,
+    _Out_ PXENVIF_FRONTEND      Frontend,
     _In_ const SOCKADDR_INET    *Address,
     _In_ UINT8                  Prefix
     )
@@ -606,7 +606,7 @@ fail1:
=20
 static NTSTATUS
 FrontendProcessAddressTable(
-    _In_ PXENVIF_FRONTEND               Frontend,
+    _Out_ PXENVIF_FRONTEND              Frontend,
     _In_ PMIB_UNICASTIPADDRESS_TABLE    Table
     )
 {
@@ -1138,20 +1138,20 @@ fail1:
 _IRQL_requires_max_(DISPATCH_LEVEL)
 NTSTATUS
 FrontendSetMulticastAddresses(
-    _In_ PXENVIF_FRONTEND   Frontend,
-    _In_ PETHERNET_ADDRESS  Address,
-    _In_ ULONG              Count
+    _In_ PXENVIF_FRONTEND       Frontend,
+    _Inout_ PETHERNET_ADDRESS   Address,
+    _In_ ULONG                  Count
     )
 {
-    PXENVIF_TRANSMITTER     Transmitter;
-    PXENVIF_MAC             Mac;
-    KIRQL                   Irql;
-    PETHERNET_ADDRESS       MulticastAddress;
-    ULONG                   MulticastCount;
-    ULONG                   MulticastIndex;
-    ULONG                   Index;
-    BOOLEAN                 Change;
-    NTSTATUS                status;
+    PXENVIF_TRANSMITTER         Transmitter;
+    PXENVIF_MAC                 Mac;
+    KIRQL                       Irql;
+    PETHERNET_ADDRESS           MulticastAddress;
+    ULONG                       MulticastCount;
+    ULONG                       MulticastIndex;
+    ULONG                       Index;
+    BOOLEAN                     Change;
+    NTSTATUS                    status;
=20
     Transmitter =3D FrontendGetTransmitter(Frontend);
     Mac =3D FrontendGetMac(Frontend);
@@ -1348,7 +1348,7 @@ fail1:
 _IRQL_requires_max_(DISPATCH_LEVEL)
 VOID
 FrontendAdvertiseIpAddresses(
-    _In_ PXENVIF_FRONTEND   Frontend
+    _Out_ PXENVIF_FRONTEND  Frontend
     )
 {
     PXENVIF_TRANSMITTER     Transmitter;
@@ -1394,7 +1394,7 @@ FrontendAdvertiseIpAddresses(
 _IRQL_requires_(DISPATCH_LEVEL)
 static VOID
 FrontendSetOnline(
-    _In_ PXENVIF_FRONTEND   Frontend
+    _Out_ PXENVIF_FRONTEND  Frontend
     )
 {
     Trace("=3D=3D=3D=3D>\n");
@@ -1407,7 +1407,7 @@ FrontendSetOnline(
 _IRQL_requires_(DISPATCH_LEVEL)
 static VOID
 FrontendSetOffline(
-    _In_ PXENVIF_FRONTEND   Frontend
+    _Out_ PXENVIF_FRONTEND  Frontend
     )
 {
     Trace("=3D=3D=3D=3D>\n");
@@ -1421,7 +1421,7 @@ FrontendSetOffline(
 _IRQL_requires_(DISPATCH_LEVEL)
 static VOID
 FrontendSetXenbusState(
-    _In_ PXENVIF_FRONTEND   Frontend,
+    _Out_ PXENVIF_FRONTEND  Frontend,
     _In_ XenbusState        State
     )
 {
@@ -1454,7 +1454,7 @@ FrontendSetXenbusState(
 _IRQL_requires_(DISPATCH_LEVEL)
 static NTSTATUS
 FrontendAcquireBackend(
-    _In_ PXENVIF_FRONTEND   Frontend
+    _Out_ PXENVIF_FRONTEND  Frontend
     )
 {
     PCHAR                   Buffer;
@@ -1606,7 +1606,7 @@ FrontendWaitForBackendXenbusStateChange(
 _IRQL_requires_(DISPATCH_LEVEL)
 static VOID
 FrontendReleaseBackend(
-    _In_ PXENVIF_FRONTEND   Frontend
+    _Out_ PXENVIF_FRONTEND  Frontend
     )
 {
     Trace("=3D=3D=3D=3D=3D>\n");
@@ -1627,7 +1627,7 @@ FrontendReleaseBackend(
 _IRQL_requires_(DISPATCH_LEVEL)
 static VOID
 FrontendClose(
-    _In_ PXENVIF_FRONTEND   Frontend
+    _Out_ PXENVIF_FRONTEND  Frontend
     )
 {
     XenbusState             State;
@@ -1689,7 +1689,7 @@ FrontendClose(
 _IRQL_requires_(DISPATCH_LEVEL)
 static NTSTATUS
 FrontendPrepare(
-    _In_ PXENVIF_FRONTEND   Frontend
+    _Out_ PXENVIF_FRONTEND  Frontend
     )
 {
     XenbusState             State;
@@ -1950,7 +1950,7 @@ FrontendDebugCallback(
=20
 static NTSTATUS
 FrontendSetNumQueues(
-    _In_ PXENVIF_FRONTEND   Frontend
+    _Out_ PXENVIF_FRONTEND  Frontend
     )
 {
     PCHAR                   Buffer;
@@ -2007,7 +2007,7 @@ FrontendGetNumQueues(
=20
 static VOID
 FrontendSetSplit(
-    _In_ PXENVIF_FRONTEND   Frontend
+    _Out_ PXENVIF_FRONTEND  Frontend
     )
 {
     PCHAR                   Buffer;
@@ -2134,7 +2134,7 @@ fail1:
 _IRQL_requires_max_(DISPATCH_LEVEL)
 NTSTATUS
 FrontendSetHashAlgorithm(
-    _In_ PXENVIF_FRONTEND               Frontend,
+    _Out_ PXENVIF_FRONTEND              Frontend,
     _In_ XENVIF_PACKET_HASH_ALGORITHM   Algorithm
     )
 {
@@ -2201,7 +2201,7 @@ fail1:
 _IRQL_requires_max_(DISPATCH_LEVEL)
 NTSTATUS
 FrontendQueryHashTypes(
-    _In_ PXENVIF_FRONTEND   Frontend,
+    _Out_ PXENVIF_FRONTEND  Frontend,
     _Out_ PULONG            Types
     )
 {
@@ -2241,7 +2241,7 @@ fail1:
 _IRQL_requires_max_(DISPATCH_LEVEL)
 NTSTATUS
 FrontendSetHashMapping(
-    _In_ PXENVIF_FRONTEND   Frontend,
+    _Out_ PXENVIF_FRONTEND  Frontend,
     _In_ PULONG             Mapping,
     _In_ ULONG              Size
     )
@@ -2285,7 +2285,7 @@ fail1:
 _IRQL_requires_max_(DISPATCH_LEVEL)
 NTSTATUS
 FrontendSetHashKey(
-    _In_ PXENVIF_FRONTEND   Frontend,
+    _Out_ PXENVIF_FRONTEND  Frontend,
     _In_ PUCHAR             Key
     )
 {
@@ -2320,7 +2320,7 @@ fail1:
 _IRQL_requires_max_(DISPATCH_LEVEL)
 NTSTATUS
 FrontendSetHashTypes(
-    _In_ PXENVIF_FRONTEND   Frontend,
+    _Out_ PXENVIF_FRONTEND  Frontend,
     _In_ ULONG              Types
     )
 {
@@ -2396,7 +2396,7 @@ FrontendGetQueue(
 _IRQL_requires_(DISPATCH_LEVEL)
 static NTSTATUS
 FrontendConnect(
-    _In_ PXENVIF_FRONTEND   Frontend
+    _Out_ PXENVIF_FRONTEND  Frontend
     )
 {
     XenbusState             State;
@@ -2593,7 +2593,7 @@ fail1:
 _IRQL_requires_(DISPATCH_LEVEL)
 static VOID
 FrontendDisconnect(
-    _In_ PXENVIF_FRONTEND   Frontend
+    _Out_ PXENVIF_FRONTEND  Frontend
     )
 {
     Trace("=3D=3D=3D=3D>\n");
@@ -2699,7 +2699,7 @@ FrontendIsPoisoned(
 _IRQL_requires_max_(DISPATCH_LEVEL)
 NTSTATUS
 FrontendSetState(
-    _In_ PXENVIF_FRONTEND       Frontend,
+    _Out_ PXENVIF_FRONTEND      Frontend,
     _In_ XENVIF_FRONTEND_STATE  State
     )
 {
@@ -2876,7 +2876,7 @@ FrontendSetState(
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE VOID
 __FrontendResume(
-    _In_ PXENVIF_FRONTEND   Frontend
+    _Out_ PXENVIF_FRONTEND  Frontend
     )
 {
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, DISPATCH_LEVEL);
@@ -2888,7 +2888,7 @@ __FrontendResume(
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE VOID
 __FrontendSuspend(
-    _In_ PXENVIF_FRONTEND   Frontend
+    _Out_ PXENVIF_FRONTEND  Frontend
     )
 {
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, DISPATCH_LEVEL);
@@ -2923,7 +2923,7 @@ _IRQL_requires_min_(PASSIVE_LEVEL)
 _IRQL_requires_max_(DISPATCH_LEVEL)
 NTSTATUS
 FrontendResume(
-    _In_ PXENVIF_FRONTEND   Frontend
+    _Out_ PXENVIF_FRONTEND  Frontend
     )
 {
     KIRQL                   Irql;
@@ -3001,7 +3001,7 @@ _IRQL_requires_min_(PASSIVE_LEVEL)
 _IRQL_requires_max_(DISPATCH_LEVEL)
 VOID
 FrontendSuspend(
-    _In_ PXENVIF_FRONTEND   Frontend
+    _Out_ PXENVIF_FRONTEND  Frontend
     )
 {
     KIRQL                   Irql;
@@ -3253,7 +3253,7 @@ fail1:
 _IRQL_requires_(PASSIVE_LEVEL)
 VOID
 FrontendTeardown(
-    _In_ PXENVIF_FRONTEND   Frontend
+    _Out_ PXENVIF_FRONTEND  Frontend
     )
 {
     Trace("=3D=3D=3D=3D>\n");
diff --git a/src/xenvif/frontend=2Eh b/src/xenvif/frontend=2Eh
index e2ddac6=2E=2E41a9f10 100644
--- a/src/xenvif/frontend=2Eh
+++ b/src/xenvif/frontend=2Eh
@@ -67,18 +67,18 @@ FrontendInitialize(
 _IRQL_requires_(PASSIVE_LEVEL)
 extern VOID
 FrontendTeardown(
-    _In_ PXENVIF_FRONTEND   Frontend
+    _Out_ PXENVIF_FRONTEND  Frontend
     );
=20
 extern VOID
 FrontendEjectFailed(
-    _In_ PXENVIF_FRONTEND   Frontend
+    _Out_ PXENVIF_FRONTEND  Frontend
     );
=20
 _IRQL_requires_max_(DISPATCH_LEVEL)
 extern NTSTATUS
 FrontendSetState(
-    _In_ PXENVIF_FRONTEND       Frontend,
+    _Out_ PXENVIF_FRONTEND      Frontend,
     _In_ XENVIF_FRONTEND_STATE  State
     );
=20
@@ -86,14 +86,14 @@ _IRQL_requires_min_(PASSIVE_LEVEL)
 _IRQL_requires_max_(DISPATCH_LEVEL)
 extern NTSTATUS
 FrontendResume(
-    _In_ PXENVIF_FRONTEND   Frontend
+    _Out_ PXENVIF_FRONTEND  Frontend
     );
=20
 _IRQL_requires_min_(PASSIVE_LEVEL)
 _IRQL_requires_max_(DISPATCH_LEVEL)
 extern VOID
 FrontendSuspend(
-    _In_ PXENVIF_FRONTEND   Frontend
+    _Out_ PXENVIF_FRONTEND  Frontend
     );
=20
 extern PXENVIF_PDO
@@ -198,9 +198,9 @@ FrontendIncrementStatistic(
 _IRQL_requires_max_(DISPATCH_LEVEL)
 extern NTSTATUS
 FrontendSetMulticastAddresses(
-    _In_ PXENVIF_FRONTEND   Frontend,
-    _In_ PETHERNET_ADDRESS  Address,
-    _In_ ULONG              Count
+    _In_ PXENVIF_FRONTEND       Frontend,
+    _Inout_ PETHERNET_ADDRESS   Address,
+    _In_ ULONG                  Count
     );
=20
 _IRQL_requires_max_(DISPATCH_LEVEL)
@@ -214,27 +214,27 @@ FrontendSetFilterLevel(
 _IRQL_requires_max_(DISPATCH_LEVEL)
 extern VOID
 FrontendAdvertiseIpAddresses(
-    _In_ PXENVIF_FRONTEND   Frontend
+    _Out_ PXENVIF_FRONTEND  Frontend
     );
=20
 _IRQL_requires_max_(DISPATCH_LEVEL)
 extern NTSTATUS
 FrontendSetHashAlgorithm(
-    _In_ PXENVIF_FRONTEND               Frontend,
+    _Out_ PXENVIF_FRONTEND              Frontend,
     _In_ XENVIF_PACKET_HASH_ALGORITHM   Algorithm
     );
=20
 _IRQL_requires_max_(DISPATCH_LEVEL)
 extern NTSTATUS
 FrontendQueryHashTypes(
-    _In_ PXENVIF_FRONTEND   Frontend,
+    _Out_ PXENVIF_FRONTEND  Frontend,
     _Out_ PULONG            Types
     );
=20
 _IRQL_requires_max_(DISPATCH_LEVEL)
 extern NTSTATUS
 FrontendSetHashMapping(
-    _In_ PXENVIF_FRONTEND   Frontend,
+    _Out_ PXENVIF_FRONTEND  Frontend,
     _In_ PULONG             Mapping,
     _In_ ULONG              Order
     );
@@ -242,14 +242,14 @@ FrontendSetHashMapping(
 _IRQL_requires_max_(DISPATCH_LEVEL)
 extern NTSTATUS
 FrontendSetHashKey(
-    _In_ PXENVIF_FRONTEND   Frontend,
+    _Out_ PXENVIF_FRONTEND  Frontend,
     _In_ PUCHAR             Key
     );
=20
 _IRQL_requires_max_(DISPATCH_LEVEL)
 extern NTSTATUS
 FrontendSetHashTypes(
-    _In_ PXENVIF_FRONTEND   Frontend,
+    _Out_ PXENVIF_FRONTEND  Frontend,
     _In_ ULONG              Types
     );
=20
diff --git a/src/xenvif/mac=2Ec b/src/xenvif/mac=2Ec
index d7f14dd=2E=2E8cbcabe 100644
--- a/src/xenvif/mac=2Ec
+++ b/src/xenvif/mac=2Ec
@@ -89,7 +89,7 @@ __MacFree(
=20
 static FORCEINLINE NTSTATUS
 __MacSetPermanentAddress(
-    _In_ PXENVIF_MAC        Mac,
+    _Out_ PXENVIF_MAC       Mac,
     _In_ PETHERNET_ADDRESS  Address
     )
 {
@@ -130,7 +130,7 @@ MacQueryPermanentAddress(
=20
 static FORCEINLINE NTSTATUS
 __MacSetCurrentAddress(
-    _In_ PXENVIF_MAC        Mac,
+    _Out_ PXENVIF_MAC       Mac,
     _In_ PETHERNET_ADDRESS  Address
     )
 {
@@ -253,7 +253,7 @@ fail1:
 static FORCEINLINE VOID
 _IRQL_requires_(DISPATCH_LEVEL)
 __MacAcquireLockExclusive(
-    _In_ PXENVIF_MAC    Mac
+    _Out_ PXENVIF_MAC   Mac
     )
 {
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, DISPATCH_LEVEL);
@@ -264,7 +264,7 @@ __MacAcquireLockExclusive(
 static FORCEINLINE VOID
 _IRQL_requires_(DISPATCH_LEVEL)
 __MacReleaseLockExclusive(
-    _In_ PXENVIF_MAC    Mac
+    _Out_ PXENVIF_MAC   Mac
     )
 {
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, DISPATCH_LEVEL);
@@ -276,7 +276,7 @@ __MacReleaseLockExclusive(
 static FORCEINLINE VOID
 _IRQL_requires_(DISPATCH_LEVEL)
 __MacAcquireLockShared(
-    _In_ PXENVIF_MAC    Mac
+    _Out_ PXENVIF_MAC   Mac
     )
 {
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, DISPATCH_LEVEL);
@@ -287,7 +287,7 @@ __MacAcquireLockShared(
 static FORCEINLINE VOID
 _IRQL_requires_(DISPATCH_LEVEL)
 __MacReleaseLockShared(
-    _In_ PXENVIF_MAC    Mac
+    _Out_ PXENVIF_MAC   Mac
     )
 {
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, DISPATCH_LEVEL);
@@ -298,7 +298,7 @@ __MacReleaseLockShared(
=20
 NTSTATUS
 MacDumpAddressTable(
-    _In_ PXENVIF_MAC    Mac
+    _Out_ PXENVIF_MAC   Mac
     )
 {
     PXENVIF_FRONTEND    Frontend;
@@ -403,7 +403,7 @@ fail1:
=20
 NTSTATUS
 MacConnect(
-    _In_ PXENVIF_MAC    Mac
+    _Out_ PXENVIF_MAC   Mac
     )
 {
     PXENVIF_FRONTEND    Frontend;
@@ -516,7 +516,7 @@ fail1:
=20
 NTSTATUS
 MacEnable(
-    _In_ PXENVIF_MAC    Mac
+    _Out_ PXENVIF_MAC   Mac
     )
 {
     PXENVIF_FRONTEND    Frontend;
@@ -577,7 +577,7 @@ fail1:
=20
 VOID
 MacDisable(
-    _In_ PXENVIF_MAC    Mac
+    _Out_ PXENVIF_MAC   Mac
     )
 {
     PXENVIF_FRONTEND    Frontend;
@@ -610,7 +610,7 @@ MacDisable(
=20
 VOID
 MacDisconnect(
-    _In_ PXENVIF_MAC    Mac
+    _Out_ PXENVIF_MAC   Mac
     )
 {
     PXENVIF_FRONTEND    Frontend;
@@ -650,7 +650,7 @@ MacDisconnect(
=20
 VOID
 MacTeardown(
-    _In_ PXENVIF_MAC    Mac
+    _Out_ PXENVIF_MAC   Mac
     )
 {
     while (!IsListEmpty(&Mac->MulticastList)) {
@@ -829,7 +829,7 @@ MacQueryMaximumFrameSize(
=20
 NTSTATUS
 MacAddMulticastAddress(
-    _In_ PXENVIF_MAC            Mac,
+    _Out_ PXENVIF_MAC           Mac,
     _In_ PETHERNET_ADDRESS      Address
     )
 {
@@ -878,7 +878,7 @@ fail1:
=20
 NTSTATUS
 MacRemoveMulticastAddress(
-    _In_ PXENVIF_MAC            Mac,
+    _Out_ PXENVIF_MAC           Mac,
     _In_ PETHERNET_ADDRESS      Address
     )
 {
@@ -941,14 +941,14 @@ fail1:
=20
 NTSTATUS
 MacQueryMulticastAddresses(
-    _In_ PXENVIF_MAC            Mac,
-    _In_opt_ PETHERNET_ADDRESS  Address,
-    _Inout_ PULONG              Count
+    _Out_ PXENVIF_MAC               Mac,
+    _Inout_opt_ PETHERNET_ADDRESS   Address,
+    _Inout_ PULONG                  Count
     )
 {
-    PLIST_ENTRY                 ListEntry;
-    KIRQL                       Irql;
-    NTSTATUS                    status;
+    PLIST_ENTRY                     ListEntry;
+    KIRQL                           Irql;
+    NTSTATUS                        status;
=20
     KeRaiseIrql(DISPATCH_LEVEL, &Irql);
     __MacAcquireLockShared(Mac);
@@ -996,7 +996,7 @@ MacQueryBroadcastAddress(
=20
 NTSTATUS
 MacSetFilterLevel(
-    _In_ PXENVIF_MAC                Mac,
+    _Out_ PXENVIF_MAC               Mac,
     _In_ ETHERNET_ADDRESS_TYPE      Type,
     _In_ XENVIF_MAC_FILTER_LEVEL    Level
     )
@@ -1036,7 +1036,7 @@ fail1:
=20
 NTSTATUS
 MacQueryFilterLevel(
-    _In_ PXENVIF_MAC                Mac,
+    _Out_ PXENVIF_MAC               Mac,
     _In_ ETHERNET_ADDRESS_TYPE      Type,
     _Out_ PXENVIF_MAC_FILTER_LEVEL  Level
     )
@@ -1066,7 +1066,7 @@ fail1:
=20
 BOOLEAN
 MacApplyFilters(
-    _In_ PXENVIF_MAC        Mac,
+    _Out_ PXENVIF_MAC       Mac,
     _In_ PETHERNET_ADDRESS  DestinationAddress
     )
 {
diff --git a/src/xenvif/mac=2Eh b/src/xenvif/mac=2Eh
index c964a2f=2E=2Ed407d1d 100644
--- a/src/xenvif/mac=2Eh
+++ b/src/xenvif/mac=2Eh
@@ -49,27 +49,27 @@ MacInitialize(
=20
 extern NTSTATUS
 MacConnect(
-    _In_ PXENVIF_MAC    Mac
+    _Out_ PXENVIF_MAC   Mac
     );
=20
 extern NTSTATUS
 MacEnable(
-    _In_ PXENVIF_MAC    Mac
+    _Out_ PXENVIF_MAC   Mac
     );
=20
 extern VOID
 MacDisable(
-    _In_ PXENVIF_MAC    Mac
+    _Out_ PXENVIF_MAC   Mac
     );
=20
 extern VOID
 MacDisconnect(
-    _In_ PXENVIF_MAC    Mac
+    _Out_ PXENVIF_MAC   Mac
     );
=20
 extern VOID
 MacTeardown(
-    _In_ PXENVIF_MAC    Mac
+    _Out_ PXENVIF_MAC   Mac
     );
=20
 extern VOID
@@ -98,38 +98,38 @@ MacQueryBroadcastAddress(
=20
 extern NTSTATUS
 MacDumpAddressTable(
-    _In_ PXENVIF_MAC    Mac
+    _Out_ PXENVIF_MAC   Mac
     );
=20
 extern NTSTATUS
 MacAddMulticastAddress(
-    _In_ PXENVIF_MAC        Mac,
+    _Out_ PXENVIF_MAC       Mac,
     _Out_ PETHERNET_ADDRESS Address
     );
=20
 extern NTSTATUS
 MacRemoveMulticastAddress(
-    _In_ PXENVIF_MAC        Mac,
+    _Out_ PXENVIF_MAC       Mac,
     _Out_ PETHERNET_ADDRESS Address
     );
=20
 extern NTSTATUS
 MacQueryMulticastAddresses(
-    _In_ PXENVIF_MAC            Mac,
-    _Out_opt_ PETHERNET_ADDRESS Address,
-    _Inout_ PULONG              Count
+    _Out_ PXENVIF_MAC               Mac,
+    _Inout_opt_ PETHERNET_ADDRESS   Address,
+    _Inout_ PULONG                  Count
     );
=20
 extern NTSTATUS
 MacSetFilterLevel(
-    _In_ PXENVIF_MAC                Mac,
+    _Out_ PXENVIF_MAC               Mac,
     _In_ ETHERNET_ADDRESS_TYPE      Type,
     _In_ XENVIF_MAC_FILTER_LEVEL    Level
     );
=20
 extern NTSTATUS
 MacQueryFilterLevel(
-    _In_ PXENVIF_MAC                Mac,
+    _Out_ PXENVIF_MAC               Mac,
     _In_ ETHERNET_ADDRESS_TYPE      Type,
     _Out_ PXENVIF_MAC_FILTER_LEVEL  Level
     );
@@ -144,7 +144,7 @@ MacQueryState(
=20
 extern BOOLEAN
 MacApplyFilters(
-    _In_ PXENVIF_MAC        Mac,
+    _Out_ PXENVIF_MAC       Mac,
     _In_ PETHERNET_ADDRESS  DestinationAddress
     );
=20
diff --git a/src/xenvif/pdo=2Ec b/src/xenvif/pdo=2Ec
index 09f6d9d=2E=2Ee8c9067 100644
--- a/src/xenvif/pdo=2Ec
+++ b/src/xenvif/pdo=2Ec
@@ -211,7 +211,7 @@ __PdoGetDevicePowerState(
=20
 static FORCEINLINE VOID
 __PdoSetMissing(
-    _In_ PXENVIF_PDO    Pdo,
+    _Out_ PXENVIF_PDO   Pdo,
     _In_ PCSTR          Reason
     )
 {
@@ -221,7 +221,7 @@ __PdoSetMissing(
=20
 VOID
 PdoSetMissing(
-    _In_ PXENVIF_PDO    Pdo,
+    _Out_ PXENVIF_PDO   Pdo,
     _In_ PCSTR          Reason
     )
 {
@@ -296,7 +296,7 @@ PdoGetName(
=20
 static FORCEINLINE BOOLEAN
 __PdoSetEjectRequested(
-    _In_ PXENVIF_PDO    Pdo
+    _Out_ PXENVIF_PDO   Pdo
     )
 {
     return (InterlockedBitTestAndSet(&Pdo->Eject, 0) =3D=3D 0) ? TRUE : F=
ALSE;
@@ -304,7 +304,7 @@ __PdoSetEjectRequested(
=20
 VOID
 PdoRequestEject(
-    _In_ PXENVIF_PDO    Pdo
+    _Out_ PXENVIF_PDO   Pdo
     )
 {
     PXENVIF_DX          Dx =3D Pdo->Dx;
@@ -324,7 +324,7 @@ PdoRequestEject(
=20
 static FORCEINLINE BOOLEAN
 __PdoClearEjectRequested(
-    _In_ PXENVIF_PDO    Pdo
+    _Out_ PXENVIF_PDO   Pdo
     )
 {
     return (InterlockedBitTestAndReset(&Pdo->Eject, 0) !=3D 0) ? TRUE : F=
ALSE;
@@ -353,7 +353,7 @@ DEFINE_GUID(GUID_CONTAINER_ID_NAME_SPACE,
=20
 static NTSTATUS
 __PdoSetContainerID(
-    _In_ PXENVIF_PDO    Pdo
+    _Out_ PXENVIF_PDO   Pdo
     )
 {
     BCRYPT_ALG_HANDLE   Algorithm;
@@ -730,7 +730,7 @@ fail1:
=20
 static FORCEINLINE NTSTATUS
 __PdoSetPermanentAddress(
-    _In_ PXENVIF_PDO    Pdo,
+    _Out_ PXENVIF_PDO   Pdo,
     _In_ PSTR           Buffer
     )
 {
@@ -782,7 +782,7 @@ PdoGetPermanentAddress(
=20
 static FORCEINLINE VOID
 __PdoClearPermanentAddress(
-    _In_ PXENVIF_PDO    Pdo
+    _Out_ PXENVIF_PDO   Pdo
     )
 {
     (VOID) RegistryDeleteValue(DriverGetAddressesKey(),
@@ -849,7 +849,7 @@ fail1:
=20
 static FORCEINLINE NTSTATUS
 __PdoSetCurrentAddress(
-    _In_ PXENVIF_PDO    Pdo,
+    _Out_ PXENVIF_PDO   Pdo,
     _In_ HANDLE         Key
     )
 {
@@ -912,7 +912,7 @@ PdoTranslateBusAddress(
     _In_ PHYSICAL_ADDRESS       BusAddress,
     _In_ ULONG                  Length,
     _Inout_ PULONG              AddressSpace,
-    _Outptr_ PPHYSICAL_ADDRESS  TranslatedAddress
+    _Out_ PPHYSICAL_ADDRESS     TranslatedAddress
     )
 {
     Trace("<=3D=3D=3D>\n");
@@ -1087,7 +1087,7 @@ fail1:
 // This function must not touch pageable code or data
 static DECLSPEC_NOINLINE VOID
 PdoD0ToD3(
-    _In_ PXENVIF_PDO    Pdo
+    _Out_ PXENVIF_PDO   Pdo
     )
 {
     KIRQL               Irql;
@@ -1235,7 +1235,7 @@ fail1:
=20
 static VOID
 PdoUnplugRequest(
-    _In_ PXENVIF_PDO    Pdo,
+    _Out_ PXENVIF_PDO   Pdo,
     _In_ BOOLEAN        Make
     )
 {
@@ -1428,7 +1428,7 @@ fail1:
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoStartDevice(
-    _In_ PXENVIF_PDO    Pdo,
+    _Out_ PXENVIF_PDO   Pdo,
     _In_ PIRP           Irp
     )
 {
@@ -1554,7 +1554,7 @@ PdoCancelStopDevice(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoStopDevice(
-    _In_ PXENVIF_PDO    Pdo,
+    _Out_ PXENVIF_PDO   Pdo,
     _In_ PIRP           Irp
     )
 {
@@ -1598,7 +1598,7 @@ PdoQueryRemoveDevice(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoCancelRemoveDevice(
-    _In_ PXENVIF_PDO    Pdo,
+    _Out_ PXENVIF_PDO   Pdo,
     _In_ PIRP           Irp
     )
 {
@@ -1637,7 +1637,7 @@ PdoSurpriseRemoval(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoRemoveDevice(
-    _In_ PXENVIF_PDO    Pdo,
+    _Out_ PXENVIF_PDO   Pdo,
     _In_ PIRP           Irp
     )
 {
@@ -2261,7 +2261,7 @@ PdoDeviceUsageNotification(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoEject(
-    _In_ PXENVIF_PDO    Pdo,
+    _Out_ PXENVIF_PDO   Pdo,
     _In_ PIRP           Irp
     )
 {
@@ -2290,7 +2290,7 @@ PdoEject(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoDispatchPnp(
-    _In_ PXENVIF_PDO    Pdo,
+    _Out_ PXENVIF_PDO   Pdo,
     _In_ PIRP           Irp
     )
 {
@@ -2447,7 +2447,7 @@ PdoDevicePowerWorker(
=20
 static FORCEINLINE NTSTATUS
 __PdoSetDevicePower(
-    _In_ PXENVIF_PDO    Pdo,
+    _Out_ PXENVIF_PDO   Pdo,
     _In_ PIRP           Irp
     )
 {
@@ -2537,7 +2537,7 @@ PdoSystemPowerWorker(
=20
 static FORCEINLINE NTSTATUS
 __PdoSetSystemPower(
-    _In_ PXENVIF_PDO    Pdo,
+    _Out_ PXENVIF_PDO   Pdo,
     _In_ PIRP           Irp
     )
 {
@@ -2569,7 +2569,7 @@ __PdoSetSystemPower(
=20
 static FORCEINLINE NTSTATUS
 __PdoSetPower(
-    _In_ PXENVIF_PDO    Pdo,
+    _Out_ PXENVIF_PDO   Pdo,
     _In_ PIRP           Irp
     )
 {
@@ -2614,7 +2614,7 @@ __PdoQueryPower(
=20
 static NTSTATUS
 PdoDispatchPower(
-    _In_ PXENVIF_PDO    Pdo,
+    _Out_ PXENVIF_PDO   Pdo,
     _In_ PIRP           Irp
     )
 {
@@ -2659,7 +2659,7 @@ PdoDispatchDefault(
=20
 NTSTATUS
 PdoDispatch(
-    _In_ PXENVIF_PDO    Pdo,
+    _Out_ PXENVIF_PDO   Pdo,
     _In_ PIRP           Irp
     )
 {
@@ -2871,7 +2871,7 @@ fail1:
=20
 VOID
 PdoDestroy(
-    _In_ PXENVIF_PDO    Pdo
+    _Out_ PXENVIF_PDO   Pdo
     )
 {
     PXENVIF_DX          Dx =3D Pdo->Dx;
diff --git a/src/xenvif/pdo=2Eh b/src/xenvif/pdo=2Eh
index 086edef=2E=2E517183a 100644
--- a/src/xenvif/pdo=2Eh
+++ b/src/xenvif/pdo=2Eh
@@ -53,7 +53,7 @@ PdoGetDevicePnpState(
=20
 extern VOID
 PdoSetMissing(
-    _In_ PXENVIF_PDO    Pdo,
+    _Out_ PXENVIF_PDO   Pdo,
     _In_ PCSTR          Reason
     );
=20
@@ -64,7 +64,7 @@ PdoIsMissing(
=20
 extern VOID
 PdoRequestEject(
-    _In_ PXENVIF_PDO    Pdo
+    _Out_ PXENVIF_PDO   Pdo
     );
=20
 extern BOOLEAN
@@ -107,7 +107,7 @@ PdoTranslateBusAddress(
     _In_ PHYSICAL_ADDRESS       BusAddress,
     _In_ ULONG                  Length,
     _Inout_ PULONG              AddressSpace,
-    _Outptr_ PPHYSICAL_ADDRESS  TranslatedAddress
+    _Out_ PPHYSICAL_ADDRESS     TranslatedAddress
     );
=20
 extern ULONG
@@ -157,7 +157,7 @@ PdoSuspend(
=20
 extern VOID
 PdoDestroy(
-    _In_ PXENVIF_PDO    Pdo
+    _Out_ PXENVIF_PDO   Pdo
     );
=20
 #include "frontend=2Eh"
@@ -206,7 +206,7 @@ PdoGetVifInterface(
=20
 extern NTSTATUS
 PdoDispatch(
-    _In_ PXENVIF_PDO    Pdo,
+    _Out_ PXENVIF_PDO   Pdo,
     _In_ PIRP           Irp
     );
=20
diff --git a/src/xenvif/receiver=2Ec b/src/xenvif/receiver=2Ec
index 29ae090=2E=2E7ddb1e2 100644
--- a/src/xenvif/receiver=2Ec
+++ b/src/xenvif/receiver=2Ec
@@ -171,7 +171,7 @@ __ReceiverFree(
=20
 static VOID FORCEINLINE
 __ReceiverPacketMdlInit(
-    _In_ PXENVIF_RECEIVER_PACKET    Packet
+    _Out_ PXENVIF_RECEIVER_PACKET   Packet
     )
 {
     PMDL                            Mdl =3D Packet->SystemMdl;
@@ -280,7 +280,7 @@ __ReceiverRingGetPacket(
 static FORCEINLINE VOID
 __ReceiverRingPutPacket(
     _In_ PXENVIF_RECEIVER_RING      Ring,
-    _In_ PXENVIF_RECEIVER_PACKET    Packet,
+    _Out_ PXENVIF_RECEIVER_PACKET   Packet,
     _In_ BOOLEAN                    Locked
     )
 {
@@ -410,7 +410,7 @@ __ReceiverRingPutFragment(
 static DECLSPEC_NOINLINE VOID
 ReceiverRingProcessTag(
     _In_ PXENVIF_RECEIVER_RING      Ring,
-    _In_ PXENVIF_RECEIVER_PACKET    Packet
+    _Out_ PXENVIF_RECEIVER_PACKET   Packet
     )
 {
     PXENVIF_PACKET_INFO             Info;
@@ -477,7 +477,7 @@ ReceiverRingProcessTag(
 static DECLSPEC_NOINLINE VOID
 ReceiverRingProcessChecksum(
     _In_ PXENVIF_RECEIVER_RING      Ring,
-    _In_ PXENVIF_RECEIVER_PACKET    Packet
+    _Out_ PXENVIF_RECEIVER_PACKET   Packet
     )
 {
     PXENVIF_RECEIVER                Receiver;
@@ -649,7 +649,7 @@ ReceiverRingProcessChecksum(
 static BOOLEAN
 ReceiverRingPullup(
     _In_ PVOID                      Argument,
-    _In_ PUCHAR                     DestinationVa,
+    _Inout_ PUCHAR                  DestinationVa,
     _Inout_ PXENVIF_PACKET_PAYLOAD  Payload,
     _In_ ULONG                      Length
     )
@@ -707,7 +707,7 @@ fail1:
 static FORCEINLINE VOID
 __ReceiverRingPullupPacket(
     _In_ PXENVIF_RECEIVER_RING      Ring,
-    _In_ PXENVIF_RECEIVER_PACKET    Packet
+    _Out_ PXENVIF_RECEIVER_PACKET   Packet
     )
 {
     PUCHAR                          BaseVa;
@@ -740,7 +740,7 @@ __ReceiverRingBuildSegment(
     _In_ PXENVIF_RECEIVER_RING      Ring,
     _In_ PXENVIF_RECEIVER_PACKET    Packet,
     _In_ ULONG                      SegmentSize,
-    _In_ PXENVIF_PACKET_PAYLOAD     Payload
+    _Out_ PXENVIF_PACKET_PAYLOAD    Payload
     )
 {
     PXENVIF_RECEIVER                Receiver;
@@ -920,8 +920,8 @@ fail1:
=20
 static VOID
 ReceiverRingCompletePacket(
-    _In_ PXENVIF_RECEIVER_RING      Ring,
-    _In_ PXENVIF_RECEIVER_PACKET    Packet
+    _Out_ PXENVIF_RECEIVER_RING     Ring,
+    _Out_ PXENVIF_RECEIVER_PACKET   Packet
     )
 {
     ReceiverRingProcessTag(Ring, Packet);
@@ -933,8 +933,8 @@ ReceiverRingCompletePacket(
=20
 static VOID
 ReceiverRingProcessLargePacket(
-    _In_ PXENVIF_RECEIVER_RING      Ring,
-    _In_ PXENVIF_RECEIVER_PACKET    Packet
+    _Out_ PXENVIF_RECEIVER_RING     Ring,
+    _Out_ PXENVIF_RECEIVER_PACKET   Packet
     )
 {
     PXENVIF_RECEIVER                Receiver;
@@ -1107,8 +1107,8 @@ fail1:
=20
 static VOID
 ReceiverRingProcessStandardPacket(
-    _In_ PXENVIF_RECEIVER_RING      Ring,
-    _In_ PXENVIF_RECEIVER_PACKET    Packet
+    _Out_ PXENVIF_RECEIVER_RING     Ring,
+    _Out_ PXENVIF_RECEIVER_PACKET   Packet
     )
 {
     PXENVIF_RECEIVER                Receiver;
@@ -1210,8 +1210,8 @@ fail1:
=20
 static VOID
 ReceiverRingProcessPacket(
-    _In_ PXENVIF_RECEIVER_RING      Ring,
-    _In_ PXENVIF_RECEIVER_PACKET    Packet
+    _Out_ PXENVIF_RECEIVER_RING     Ring,
+    _Out_ PXENVIF_RECEIVER_PACKET   Packet
     )
 {
     PXENVIF_RECEIVER                Receiver;
@@ -1341,7 +1341,7 @@ _IRQL_requires_min_(PASSIVE_LEVEL)
 _IRQL_requires_max_(DISPATCH_LEVEL)
 static FORCEINLINE VOID
 __ReceiverRingSwizzle(
-    _In_ PXENVIF_RECEIVER_RING  Ring
+    _Out_ PXENVIF_RECEIVER_RING Ring
     )
 {
     PXENVIF_RECEIVER            Receiver;
@@ -1582,7 +1582,7 @@ __ReceiverRingSwizzle(
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE VOID
 __ReceiverRingAcquireLock(
-    _In_ PXENVIF_RECEIVER_RING  Ring
+    _Out_ PXENVIF_RECEIVER_RING Ring
     )
 {
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, DISPATCH_LEVEL);
@@ -1593,7 +1593,7 @@ __ReceiverRingAcquireLock(
 _IRQL_requires_(DISPATCH_LEVEL)
 static DECLSPEC_NOINLINE VOID
 ReceiverRingAcquireLock(
-    _In_ PXENVIF_RECEIVER_RING  Ring
+    _Out_ PXENVIF_RECEIVER_RING Ring
     )
 {
     __ReceiverRingAcquireLock(Ring);
@@ -1602,7 +1602,7 @@ ReceiverRingAcquireLock(
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE VOID
 __ReceiverRingReleaseLock(
-    _In_ PXENVIF_RECEIVER_RING  Ring
+    _Out_ PXENVIF_RECEIVER_RING Ring
     )
 {
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, DISPATCH_LEVEL);
@@ -1614,7 +1614,7 @@ __ReceiverRingReleaseLock(
 _IRQL_requires_(DISPATCH_LEVEL)
 static DECLSPEC_NOINLINE VOID
 ReceiverRingReleaseLock(
-    _In_ PXENVIF_RECEIVER_RING  Ring
+    _Out_ PXENVIF_RECEIVER_RING Ring
     )
 {
     __ReceiverRingReleaseLock(Ring);
@@ -1645,7 +1645,7 @@ ReceiverRingQueueDpc(
=20
 static FORCEINLINE VOID
 __ReceiverRingStop(
-    _In_ PXENVIF_RECEIVER_RING  Ring
+    _Out_ PXENVIF_RECEIVER_RING Ring
     )
 {
     Ring->Stopped =3D TRUE;
@@ -1653,7 +1653,7 @@ __ReceiverRingStop(
=20
 static FORCEINLINE VOID
 __ReceiverRingStart(
-    _In_ PXENVIF_RECEIVER_RING  Ring
+    _Out_ PXENVIF_RECEIVER_RING Ring
     )
 {
     Ring->Stopped =3D FALSE;
@@ -1670,7 +1670,7 @@ __ReceiverRingIsStopped(
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE VOID
 __ReceiverRingTrigger(
-    _In_ PXENVIF_RECEIVER_RING  Ring,
+    _Out_ PXENVIF_RECEIVER_RING Ring,
     _In_ BOOLEAN                Locked
     )
 {
@@ -1692,7 +1692,7 @@ __ReceiverRingTrigger(
=20
 static FORCEINLINE VOID
 __ReceiverRingSend(
-    _In_ PXENVIF_RECEIVER_RING  Ring,
+    _Out_ PXENVIF_RECEIVER_RING Ring,
     _In_ BOOLEAN                Locked
     )
 {
@@ -1766,7 +1766,7 @@ fail1:
=20
 static FORCEINLINE VOID
 __ReceiverRingPushRequests(
-    _In_ PXENVIF_RECEIVER_RING  Ring
+    _Out_ PXENVIF_RECEIVER_RING Ring
     )
 {
     BOOLEAN                     Notify;
@@ -1790,7 +1790,7 @@ __ReceiverRingPushRequests(
=20
 static NTSTATUS
 ReceiverRingFill(
-    _In_ PXENVIF_RECEIVER_RING  Ring
+    _Out_ PXENVIF_RECEIVER_RING Ring
     )
 {
     PXENVIF_RECEIVER            Receiver;
@@ -1860,7 +1860,7 @@ ReceiverRingFill(
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE VOID
 __ReceiverRingReturnPacket(
-    _In_ PXENVIF_RECEIVER_RING      Ring,
+    _Out_ PXENVIF_RECEIVER_RING     Ring,
     _In_ PXENVIF_RECEIVER_PACKET    Packet,
     _In_ BOOLEAN                    Locked
     )
@@ -2006,7 +2006,7 @@ ReceiverRingDebugCallback(
=20
 static FORCEINLINE VOID
 __ReceiverRingQueuePacket(
-    _In_ PXENVIF_RECEIVER_RING      Ring,
+    _Out_ PXENVIF_RECEIVER_RING     Ring,
     _In_ PXENVIF_RECEIVER_PACKET    Packet
     )
 {
@@ -2027,7 +2027,7 @@ __ReceiverRingQueuePacket(
 _IRQL_requires_(DISPATCH_LEVEL)
 static DECLSPEC_NOINLINE ULONG
 ReceiverRingPoll(
-    _In_ PXENVIF_RECEIVER_RING  Ring
+    _Out_ PXENVIF_RECEIVER_RING Ring
     )
 {
     PXENVIF_RECEIVER            Receiver;
@@ -2599,7 +2599,7 @@ fail1:
=20
 static FORCEINLINE VOID
 __ReceiverRingSetAffinity(
-    _In_ PXENVIF_RECEIVER_RING  Ring,
+    _Out_ PXENVIF_RECEIVER_RING Ring,
     _In_ PPROCESSOR_NUMBER      Processor
     )
 {
@@ -2622,7 +2622,7 @@ __ReceiverRingSetAffinity(
=20
 static FORCEINLINE NTSTATUS
 __ReceiverRingConnect(
-    _In_ PXENVIF_RECEIVER_RING  Ring
+    _Out_ PXENVIF_RECEIVER_RING Ring
     )
 {
     PXENVIF_RECEIVER            Receiver;
@@ -2847,7 +2847,7 @@ fail1:
=20
 static FORCEINLINE NTSTATUS
 __ReceiverRingEnable(
-    _In_ PXENVIF_RECEIVER_RING  Ring
+    _Out_ PXENVIF_RECEIVER_RING Ring
     )
 {
     PXENVIF_RECEIVER            Receiver;
@@ -2894,7 +2894,7 @@ fail1:
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE VOID
 __ReceiverRingDisable(
-    _In_ PXENVIF_RECEIVER_RING  Ring
+    _Out_ PXENVIF_RECEIVER_RING Ring
     )
 {   =20
     PXENVIF_RECEIVER            Receiver;
@@ -2926,7 +2926,7 @@ __ReceiverRingDisable(
=20
 static FORCEINLINE VOID
 __ReceiverRingDisconnect(
-    _In_ PXENVIF_RECEIVER_RING  Ring
+    _Out_ PXENVIF_RECEIVER_RING Ring
     )
 {
     PXENVIF_RECEIVER            Receiver;
@@ -2992,7 +2992,7 @@ __ReceiverRingDisconnect(
=20
 static FORCEINLINE VOID
 __ReceiverRingTeardown(
-    _In_ PXENVIF_RECEIVER_RING  Ring
+    _Out_ PXENVIF_RECEIVER_RING Ring
     )
 {
     PXENVIF_RECEIVER            Receiver;
@@ -3049,7 +3049,7 @@ __ReceiverRingTeardown(
=20
 static FORCEINLINE VOID
 __ReceiverRingSetOffloadOptions(
-    _In_ PXENVIF_RECEIVER_RING      Ring,
+    _Out_ PXENVIF_RECEIVER_RING     Ring,
     _In_ XENVIF_VIF_OFFLOAD_OPTIONS Options
     )
 {
@@ -3066,7 +3066,7 @@ __ReceiverRingSetOffloadOptions(
=20
 static FORCEINLINE VOID
 __ReceiverRingSetBackfillSize(
-    _In_ PXENVIF_RECEIVER_RING  Ring,
+    _Out_ PXENVIF_RECEIVER_RING Ring,
     _In_ ULONG                  Size
     )
 {
@@ -3613,7 +3613,7 @@ ReceiverDisable(
 _IRQL_requires_(DISPATCH_LEVEL)
 VOID
 ReceiverDisconnect(
-    _In_ PXENVIF_RECEIVER   Receiver
+    _Out_ PXENVIF_RECEIVER  Receiver
     )
 {
     PXENVIF_FRONTEND        Frontend;
@@ -3649,7 +3649,7 @@ ReceiverDisconnect(
 _IRQL_requires_(PASSIVE_LEVEL)
 VOID
 ReceiverTeardown(
-    _In_ PXENVIF_RECEIVER   Receiver
+    _Out_ PXENVIF_RECEIVER  Receiver
     )
 {
     PXENVIF_FRONTEND        Frontend;
@@ -3780,7 +3780,7 @@ ReceiverQueryRingSize(
 _IRQL_requires_(DISPATCH_LEVEL)
 VOID
 ReceiverReturnPacket(
-    _In_ PXENVIF_RECEIVER   Receiver,
+    _Out_ PXENVIF_RECEIVER  Receiver,
     _In_ PVOID              Cookie
     )
 {
@@ -3810,7 +3810,7 @@ ReceiverReturnPacket(
 _IRQL_requires_max_(APC_LEVEL)
 VOID
 ReceiverWaitForPackets(
-    _In_ PXENVIF_RECEIVER   Receiver
+    _Out_ PXENVIF_RECEIVER  Receiver
     )
 {
     PXENVIF_FRONTEND        Frontend;
diff --git a/src/xenvif/receiver=2Eh b/src/xenvif/receiver=2Eh
index 2122f0d=2E=2Ed2b86fa 100644
--- a/src/xenvif/receiver=2Eh
+++ b/src/xenvif/receiver=2Eh
@@ -76,19 +76,19 @@ ReceiverDisable(
 _IRQL_requires_(DISPATCH_LEVEL)
 extern VOID
 ReceiverDisconnect(
-    _In_ PXENVIF_RECEIVER   Receiver
+    _Out_ PXENVIF_RECEIVER  Receiver
     );
=20
 _IRQL_requires_(PASSIVE_LEVEL)
 extern VOID
 ReceiverTeardown(
-    _In_ PXENVIF_RECEIVER   Receiver
+    _Out_ PXENVIF_RECEIVER  Receiver
     );
=20
 _IRQL_requires_max_(APC_LEVEL)
 extern VOID
 ReceiverWaitForPackets(
-    _In_ PXENVIF_RECEIVER   Receiver
+    _Out_ PXENVIF_RECEIVER  Receiver
     );
=20
 _IRQL_requires_max_(DISPATCH_LEVEL)
@@ -115,7 +115,7 @@ ReceiverSetBackfillSize(
 _IRQL_requires_(DISPATCH_LEVEL)
 extern VOID
 ReceiverReturnPacket(
-    _In_ PXENVIF_RECEIVER   Receiver,
+    _Out_ PXENVIF_RECEIVER  Receiver,
     _In_ PVOID              Cookie
     );
=20
diff --git a/src/xenvif/thread=2Ec b/src/xenvif/thread=2Ec
index b510c9e=2E=2Eed9315e 100644
--- a/src/xenvif/thread=2Ec
+++ b/src/xenvif/thread=2Ec
@@ -66,7 +66,7 @@ __ThreadFree(
=20
 static FORCEINLINE VOID
 __ThreadWake(
-    _In_ PXENVIF_THREAD Thread
+    _Out_ PXENVIF_THREAD    Thread
     )
 {
     KeSetEvent(&Thread->Event, IO_NO_INCREMENT, FALSE);
@@ -74,7 +74,7 @@ __ThreadWake(
=20
 VOID
 ThreadWake(
-    _In_ PXENVIF_THREAD Thread
+    _Out_ PXENVIF_THREAD    Thread
     )
 {
     __ThreadWake(Thread);
@@ -82,7 +82,7 @@ ThreadWake(
=20
 static FORCEINLINE VOID
 __ThreadAlert(
-    _In_ PXENVIF_THREAD Thread
+    _Out_ PXENVIF_THREAD    Thread
     )
 {
     Thread->Alerted =3D TRUE;
@@ -91,7 +91,7 @@ __ThreadAlert(
=20
 VOID
 ThreadAlert(
-    _In_ PXENVIF_THREAD Thread
+    _Out_ PXENVIF_THREAD    Thread
     )
 {
     __ThreadAlert(Thread);
@@ -207,7 +207,7 @@ ThreadIsAlerted(
=20
 VOID
 ThreadJoin(
-    _In_ PXENVIF_THREAD     Thread
+    _Out_ PXENVIF_THREAD    Thread
     )
 {
     LONG                    References;
diff --git a/src/xenvif/thread=2Eh b/src/xenvif/thread=2Eh
index 5926a6f=2E=2E6ee965a 100644
--- a/src/xenvif/thread=2Eh
+++ b/src/xenvif/thread=2Eh
@@ -59,17 +59,17 @@ ThreadIsAlerted(
=20
 extern VOID
 ThreadWake(
-    _In_ PXENVIF_THREAD Thread
+    _Out_ PXENVIF_THREAD    Thread
     );
=20
 extern VOID
 ThreadAlert(
-    _In_ PXENVIF_THREAD Thread
+    _Out_ PXENVIF_THREAD    Thread
     );
=20
 extern VOID
 ThreadJoin(
-    _In_ PXENVIF_THREAD Thread
+    _Out_ PXENVIF_THREAD    Thread
     );
=20
 #endif  // _XENVIF_THREAD_H
diff --git a/src/xenvif/transmitter=2Ec b/src/xenvif/transmitter=2Ec
index 605f0cc=2E=2E2549162 100644
--- a/src/xenvif/transmitter=2Ec
+++ b/src/xenvif/transmitter=2Ec
@@ -340,8 +340,8 @@ __TransmitterGetPacket(
=20
 static FORCEINLINE VOID
 __TransmitterPutPacket(
-    _In_ PXENVIF_TRANSMITTER        Transmitter,
-    _In_ PXENVIF_TRANSMITTER_PACKET Packet
+    _In_ PXENVIF_TRANSMITTER            Transmitter,
+    _Out_ PXENVIF_TRANSMITTER_PACKET    Packet
     )
 {
     ASSERT(IsZeroMemory(&Packet->ListEntry, sizeof (LIST_ENTRY)));
@@ -789,7 +789,7 @@ TransmitterRingDebugCallback(
 static BOOLEAN
 TransmitterPullup(
     _In_ PVOID                      Argument,
-    _In_ PUCHAR                     DestinationVa,
+    _Inout_ PUCHAR                  DestinationVa,
     _Inout_ PXENVIF_PACKET_PAYLOAD  Payload,
     _In_ ULONG                      Length
     )
@@ -847,7 +847,7 @@ fail1:
=20
 static FORCEINLINE NTSTATUS
 __TransmitterRingCopyPayload(
-    _In_ PXENVIF_TRANSMITTER_RING   Ring
+    _Out_ PXENVIF_TRANSMITTER_RING  Ring
     )
 {
     PXENVIF_TRANSMITTER             Transmitter;
@@ -1004,7 +1004,7 @@ fail1:
=20
 static FORCEINLINE NTSTATUS
 __TransmitterRingGrantPayload(
-    _In_ PXENVIF_TRANSMITTER_RING   Ring
+    _Out_ PXENVIF_TRANSMITTER_RING  Ring
     )
 {
     PXENVIF_TRANSMITTER             Transmitter;
@@ -1528,7 +1528,7 @@ fail1:
=20
 static FORCEINLINE PXENVIF_TRANSMITTER_PACKET
 __TransmitterRingUnprepareFragments(
-    _In_ PXENVIF_TRANSMITTER_RING   Ring
+    _Out_ PXENVIF_TRANSMITTER_RING  Ring
     )
 {
     PXENVIF_TRANSMITTER             Transmitter;
@@ -1649,7 +1649,7 @@ __TransmitterRingUnprepareFragments(
=20
 static FORCEINLINE NTSTATUS
 __TransmitterRingPreparePacket(
-    _In_ PXENVIF_TRANSMITTER_RING   Ring,
+    _Out_ PXENVIF_TRANSMITTER_RING  Ring,
     _In_ PXENVIF_TRANSMITTER_PACKET Packet
     )
 {
@@ -2135,7 +2135,7 @@ fail1:
=20
 static FORCEINLINE NTSTATUS
 __TransmitterRingPostFragments(
-    _In_ PXENVIF_TRANSMITTER_RING   Ring
+    _Out_ PXENVIF_TRANSMITTER_RING  Ring
     )
 {
     PXENVIF_TRANSMITTER             Transmitter;
@@ -2383,7 +2383,7 @@ fail1:
=20
 static FORCEINLINE VOID
 __TransmitterRingFakeResponses(
-    _In_ PXENVIF_TRANSMITTER_RING   Ring
+    _Out_ PXENVIF_TRANSMITTER_RING  Ring
     )
 {
     RING_IDX                        rsp_prod;
@@ -2455,8 +2455,8 @@ __TransmitterRingFakeResponses(
=20
 static FORCEINLINE VOID
 __TransmitterRingCompletePacket(
-    _In_ PXENVIF_TRANSMITTER_RING   Ring,
-    _In_ PXENVIF_TRANSMITTER_PACKET Packet
+    _Out_ PXENVIF_TRANSMITTER_RING      Ring,
+    _Out_ PXENVIF_TRANSMITTER_PACKET    Packet
     )
 {
     InsertTailList(&Ring->PacketComplete, &Packet->ListEntry);
@@ -2465,7 +2465,7 @@ __TransmitterRingCompletePacket(
=20
 static DECLSPEC_NOINLINE ULONG
 TransmitterRingPoll(
-    _In_ PXENVIF_TRANSMITTER_RING   Ring
+    _Out_ PXENVIF_TRANSMITTER_RING  Ring
     )
 {
     PXENVIF_TRANSMITTER             Transmitter;
@@ -2700,7 +2700,7 @@ __TransmitterRingSend(
=20
 static FORCEINLINE VOID
 __TransmitterRingPushRequests(
-    _In_ PXENVIF_TRANSMITTER_RING   Ring
+    _Out_ PXENVIF_TRANSMITTER_RING  Ring
     )
 {
     BOOLEAN                         Notify;
@@ -2729,7 +2729,7 @@ __TransmitterRingPushRequests(
 _IRQL_requires_(DISPATCH_LEVEL)
 static DECLSPEC_NOINLINE VOID
 TransmitterRingSwizzle(
-    _In_ PXENVIF_TRANSMITTER_RING   Ring
+    _Out_ PXENVIF_TRANSMITTER_RING  Ring
     )
 {
     ULONG_PTR                       Old;
@@ -2781,7 +2781,7 @@ TransmitterRingSwizzle(
 _IRQL_requires_(DISPATCH_LEVEL)
 static DECLSPEC_NOINLINE VOID
 TransmitterRingSchedule(
-    _In_ PXENVIF_TRANSMITTER_RING   Ring
+    _Out_ PXENVIF_TRANSMITTER_RING  Ring
     )
 {
     PXENVIF_TRANSMITTER_STATE       State;
@@ -2905,17 +2905,17 @@ TransmitterRingSchedule(
=20
 static FORCEINLINE VOID
 __TransmitterSetCompletionInfo(
-    _In_ PXENVIF_TRANSMITTER        Transmitter,
-    _In_ PXENVIF_TRANSMITTER_PACKET Packet
+    _In_ PXENVIF_TRANSMITTER            Transmitter,
+    _Out_ PXENVIF_TRANSMITTER_PACKET    Packet
     )
 {
-    PXENVIF_FRONTEND                Frontend;
-    PXENVIF_PACKET_PAYLOAD          Payload;
-    PXENVIF_PACKET_INFO             Info;
-    PUCHAR                          BaseVa;
-    PETHERNET_HEADER                EthernetHeader;
-    PETHERNET_ADDRESS               DestinationAddress;
-    ETHERNET_ADDRESS_TYPE           Type;
+    PXENVIF_FRONTEND                    Frontend;
+    PXENVIF_PACKET_PAYLOAD              Payload;
+    PXENVIF_PACKET_INFO                 Info;
+    PUCHAR                              BaseVa;
+    PETHERNET_HEADER                    EthernetHeader;
+    PETHERNET_ADDRESS                   DestinationAddress;
+    ETHERNET_ADDRESS_TYPE               Type;
=20
     Frontend =3D Transmitter->Frontend;
=20
@@ -3108,7 +3108,7 @@ __TransmitterReturnPackets(
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE BOOLEAN
 __TransmitterRingTryAcquireLock(
-    _In_ PXENVIF_TRANSMITTER_RING   Ring
+    _Out_ PXENVIF_TRANSMITTER_RING  Ring
     )
 {
     ULONG_PTR                       Old;
@@ -3137,7 +3137,7 @@ __TransmitterRingTryAcquireLock(
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE VOID
 __TransmitterRingAcquireLock(
-    _In_ PXENVIF_TRANSMITTER_RING   Ring
+    _Out_ PXENVIF_TRANSMITTER_RING  Ring
     )
 {
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, DISPATCH_LEVEL);
@@ -3153,7 +3153,7 @@ __TransmitterRingAcquireLock(
 _IRQL_requires_(DISPATCH_LEVEL)
 static VOID
 TransmitterRingAcquireLock(
-    _In_ PXENVIF_TRANSMITTER_RING   Ring
+    _Out_ PXENVIF_TRANSMITTER_RING  Ring
     )
 {
     __TransmitterRingAcquireLock(Ring);
@@ -3162,7 +3162,7 @@ TransmitterRingAcquireLock(
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE BOOLEAN
 __TransmitterRingTryReleaseLock(
-    _In_ PXENVIF_TRANSMITTER_RING   Ring
+    _Out_ PXENVIF_TRANSMITTER_RING  Ring
     )
 {
     ULONG_PTR                       Old;
@@ -3198,7 +3198,7 @@ __TransmitterRingTryReleaseLock(
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE VOID
 __TransmitterRingReleaseLock(
-    _In_ PXENVIF_TRANSMITTER_RING   Ring
+    _Out_ PXENVIF_TRANSMITTER_RING  Ring
     )
 {
     LIST_ENTRY                      List;
@@ -3237,7 +3237,7 @@ __TransmitterRingReleaseLock(
 _IRQL_requires_(DISPATCH_LEVEL)
 static DECLSPEC_NOINLINE VOID
 TransmitterRingReleaseLock(
-    _In_ PXENVIF_TRANSMITTER_RING   Ring
+    _Out_ PXENVIF_TRANSMITTER_RING  Ring
     )
 {
     __TransmitterRingReleaseLock(Ring);
@@ -3675,7 +3675,7 @@ fail1:
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE NTSTATUS
 __TransmitterRingConnect(
-    _In_ PXENVIF_TRANSMITTER_RING   Ring
+    _Out_ PXENVIF_TRANSMITTER_RING  Ring
     )
 {
     PXENVIF_TRANSMITTER             Transmitter;
@@ -3908,7 +3908,7 @@ fail1:
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE NTSTATUS
 __TransmitterRingEnable(
-    _In_ PXENVIF_TRANSMITTER_RING   Ring
+    _Out_ PXENVIF_TRANSMITTER_RING  Ring
     )
 {
     PXENVIF_TRANSMITTER             Transmitter;
@@ -3941,7 +3941,7 @@ __TransmitterRingEnable(
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE VOID
 __TransmitterRingDisable(
-    _In_ PXENVIF_TRANSMITTER_RING   Ring
+    _Out_ PXENVIF_TRANSMITTER_RING  Ring
     )
 {   =20
     PXENVIF_TRANSMITTER             Transmitter;
@@ -4051,7 +4051,7 @@ __TransmitterRingDisable(
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE VOID
 __TransmitterRingDisconnect(
-    _In_ PXENVIF_TRANSMITTER_RING   Ring
+    _Out_ PXENVIF_TRANSMITTER_RING  Ring
     )
 {
     PXENVIF_TRANSMITTER             Transmitter;
@@ -4110,7 +4110,7 @@ __TransmitterRingDisconnect(
 _IRQL_requires_(PASSIVE_LEVEL)
 static FORCEINLINE VOID
 __TransmitterRingTeardown(
-    _In_ PXENVIF_TRANSMITTER_RING   Ring
+    _Out_ PXENVIF_TRANSMITTER_RING  Ring
     )
 {
     PXENVIF_TRANSMITTER             Transmitter;
@@ -4194,7 +4194,7 @@ __TransmitterRingTeardown(
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE VOID
 __TransmitterRingQueuePacket(
-    _In_ PXENVIF_TRANSMITTER_RING   Ring,
+    _Out_ PXENVIF_TRANSMITTER_RING  Ring,
     _In_ PXENVIF_TRANSMITTER_PACKET Packet,
     _In_ BOOLEAN                    More
     )
@@ -4231,7 +4231,7 @@ __TransmitterRingQueuePacket(
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE VOID
 __TransmitterRingAbortPackets(
-    _In_ PXENVIF_TRANSMITTER_RING   Ring
+    _Out_ PXENVIF_TRANSMITTER_RING  Ring
     )
 {
     PXENVIF_TRANSMITTER             Transmitter;
@@ -4283,7 +4283,7 @@ __TransmitterRingAbortPackets(
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE NTSTATUS
 __TransmitterRingQueueArp(
-    _In_ PXENVIF_TRANSMITTER_RING   Ring,
+    _Out_ PXENVIF_TRANSMITTER_RING  Ring,
     _In_ PIPV4_ADDRESS              Address
     )
 {
@@ -4334,7 +4334,7 @@ fail1:
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE NTSTATUS
 __TransmitterRingQueueNeighbourAdvertisement(
-    _In_ PXENVIF_TRANSMITTER_RING   Ring,
+    _Out_ PXENVIF_TRANSMITTER_RING  Ring,
     _In_ PIPV6_ADDRESS              Address
     )
 {
@@ -4406,7 +4406,7 @@ TransmitterHasMulticastControl(
=20
 static FORCEINLINE NTSTATUS
 __TransmitterRingQueueMulticastControl(
-    _In_ PXENVIF_TRANSMITTER_RING   Ring,
+    _Out_ PXENVIF_TRANSMITTER_RING  Ring,
     _In_ PETHERNET_ADDRESS          Address,
     _In_ BOOLEAN                    Add
     )
@@ -4692,7 +4692,7 @@ fail1:
 _IRQL_requires_(DISPATCH_LEVEL)
 NTSTATUS
 TransmitterConnect(
-    _In_ PXENVIF_TRANSMITTER    Transmitter
+    _Out_ PXENVIF_TRANSMITTER   Transmitter
     )
 {
     PXENVIF_FRONTEND            Frontend;
@@ -4950,7 +4950,7 @@ TransmitterDisable(
 _IRQL_requires_(DISPATCH_LEVEL)
 VOID
 TransmitterDisconnect(
-    _In_ PXENVIF_TRANSMITTER    Transmitter
+    _Out_ PXENVIF_TRANSMITTER   Transmitter
     )
 {
     PXENVIF_FRONTEND            Frontend;
@@ -5007,7 +5007,7 @@ TransmitterIsPoisoned(
 _IRQL_requires_(PASSIVE_LEVEL)
 VOID
 TransmitterTeardown(
-    _In_ PXENVIF_TRANSMITTER    Transmitter
+    _Out_ PXENVIF_TRANSMITTER   Transmitter
     )
 {
     PXENVIF_FRONTEND            Frontend;
diff --git a/src/xenvif/transmitter=2Eh b/src/xenvif/transmitter=2Eh
index eadd311=2E=2E894b65d 100644
--- a/src/xenvif/transmitter=2Eh
+++ b/src/xenvif/transmitter=2Eh
@@ -53,7 +53,7 @@ TransmitterInitialize(
 _IRQL_requires_(DISPATCH_LEVEL)
 extern NTSTATUS
 TransmitterConnect(
-    _In_ PXENVIF_TRANSMITTER    Transmitter
+    _Out_ PXENVIF_TRANSMITTER   Transmitter
     );
=20
 _IRQL_requires_(DISPATCH_LEVEL)
@@ -78,7 +78,7 @@ TransmitterDisable(
 _IRQL_requires_(DISPATCH_LEVEL)
 extern VOID
 TransmitterDisconnect(
-    _In_ PXENVIF_TRANSMITTER    Transmitter
+    _Out_ PXENVIF_TRANSMITTER   Transmitter
     );
=20
 extern BOOLEAN
@@ -89,7 +89,7 @@ TransmitterIsPoisoned(
 _IRQL_requires_(PASSIVE_LEVEL)
 extern VOID
 TransmitterTeardown(
-    _In_ PXENVIF_TRANSMITTER    Transmitter
+    _Out_ PXENVIF_TRANSMITTER   Transmitter
     );
=20
 extern VOID
diff --git a/src/xenvif/vif=2Ec b/src/xenvif/vif=2Ec
index e059cd0=2E=2E3c7dd41 100644
--- a/src/xenvif/vif=2Ec
+++ b/src/xenvif/vif=2Ec
@@ -306,7 +306,7 @@ static VOID
 VifCallbackVersion9(
     _In_opt_ PVOID                          _Argument,
     _In_ XENVIF_VIF_CALLBACK_TYPE           Type,
-    _In_ PXENVIF_VIF_CALLBACK_PARAMETERS    Parameters
+    _Out_ PXENVIF_VIF_CALLBACK_PARAMETERS   Parameters
     )
 {
 #define XENVIF_RECEIVER_QUEUE_MAX 1024 // Chosen to match IN_NDIS_MAX in =
XENNET
@@ -841,7 +841,7 @@ VifMacQueryMulticastAddresses(
 static NTSTATUS
 VifMacSetMulticastAddresses(
     _In_ PINTERFACE         Interface,
-    _In_ PETHERNET_ADDRESS  Address,
+    _Out_ PETHERNET_ADDRESS Address,
     _In_ ULONG              Count
     )
 {
@@ -1207,7 +1207,7 @@ VifGetInterface(
=20
 VOID
 VifTeardown(
-    _In_ PXENVIF_VIF_CONTEXT    Context
+    _Out_ PXENVIF_VIF_CONTEXT   Context
     )
 {
     Trace("=3D=3D=3D=3D>\n");
diff --git a/src/xenvif/vif=2Eh b/src/xenvif/vif=2Eh
index bb7d296=2E=2E4411343 100644
--- a/src/xenvif/vif=2Eh
+++ b/src/xenvif/vif=2Eh
@@ -58,7 +58,7 @@ VifGetInterface(
=20
 extern VOID
 VifTeardown(
-    _In_ PXENVIF_VIF_CONTEXT    Context
+    _Out_ PXENVIF_VIF_CONTEXT   Context
     );
=20
 // CALLBACKS
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.d0.747fdd3416c4954f.1a12fa3cea0.5b0f2b05a4ebf37b=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 12 10:23:55 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 12 Oct 2026 10:23:55 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1446095.1662109 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGDCF-0005WH-IS; Mon, 12 Oct 2026 10:23:55 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1446095.1662109; Mon, 12 Oct 2026 10:23:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGDCE-0005VB-Mi; Mon, 12 Oct 2026 10:23:54 +0000
Received: by outflank-mailman (input) for mailman id 1446095;
 Mon, 12 Oct 2026 10:23:53 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3d43d00080d7@swg.vates.tech>)
 id 1xGDCD-0005Pl-NZ
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 10:23:53 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGDCD-00ECpK-47
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 12:23:53 +0200
Received: from [10.42.69.2] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3d43d00080d7@swg.vates.tech>)
 id 6accb535-e002-0a2a0a5209dd-0a2a4502a988-20
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 12:23:53 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3d43d00080d7@swg.vates.tech>)
 id 6accb538-6ca4-0a2a45020019-b9ff1c129d85-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 12:23:53 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a12fa3d43d00080d7.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 12 Oct 2026 10:23:48 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id B452082A4E;
 Mon, 12 Oct 2026 12:23:47 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=7VtXvMf+qRqFPBH5lB03uR1cF6JuOaLJt1XkWpcxSsc=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=R85p2EhTPa1406VlNqV8OOSUYACmqR/lZa5xcN4biqR6THsta++d1kAzzCDL0hLgrHHtJZO/4
 5f6rZ49+833KGxI2gxHmYrw2cyFOl2/PvseBOhtnKnbQTvphvASjI5tgAgusgWQYBl4nVmGQHm2
 chE0t50zSi91I1bwFSrIDpwlHTxWMgJFVFSPp/i4Oj6eqRHZPhDZ+gMoNDutjocoPyJ/sM5Kw9S
 +FzQD/oBeZJXQvps2FbK2QZv9kYaGyBRKofxFw+pL2efOVrBcCEgslUC+d3iqnbnfg/XnbVaPb8
 nrqW7OUudIpxVUZKI0582adaoUIMR+qK7Yw+f/+Otuew==
X-Zone-Loop: 9cc52591ca120037c8c5b4cd81518fe153451768f668
x-campaign-type: default
x-transaction-id: a32f7567-82fe-46f1-af36-9e08430e079d
x-swg-uid: 01-df3afcc2-115b-4a64-8b5c-dcf85b01d66d
X-Mailer: Sweego
Message-ID:
 <1791800628.8631fc262581453bbf619ec5b2062170.1a12fa3d43d00080d7@vates.tech>
x-swg-bid: 1791800628.8631fc262581453bbf619ec5b2062170.1a12fa3d43d00080d7
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 08/21] driver: fix Dispatch() annotation
Date: Mon, 12 Oct 2026 12:23:20 +0200
In-Reply-To: <1791800371.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@vates.tech>
References: <1791800371.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.d4.167a036bdb45c1ee.1a12fa3d2a0.187934ae91f70e78=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791800627873
X-purgate-ID: tlsNG-720697/1791800633-323D42AC-FA703835/0/0
X-purgate-type: clean
X-purgate-size: 1038

---=Part.d4.167a036bdb45c1ee.1a12fa3d2a0.187934ae91f70e78=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Dispatch() is of type DRIVER_DISPATCH which is annotated as (_In, _Inout_)
in wdm=2Eh=2E
Annotate Dispatch() the same=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xenvif/driver=2Ec | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/xenvif/driver=2Ec b/src/xenvif/driver=2Ec
index af4b893=2E=2E69d0622 100644
--- a/src/xenvif/driver=2Ec
+++ b/src/xenvif/driver=2Ec
@@ -248,7 +248,7 @@ DRIVER_DISPATCH Dispatch;
 NTSTATUS=20
 Dispatch(
     _In_ PDEVICE_OBJECT DeviceObject,
-    _In_ PIRP           Irp
+    _Inout_ PIRP        Irp
     )
 {
     PXENVIF_DX          Dx;
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.d4.167a036bdb45c1ee.1a12fa3d2a0.187934ae91f70e78=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 12 10:23:55 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 12 Oct 2026 10:23:55 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1446097.1662113 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGDCF-0005Xs-O0; Mon, 12 Oct 2026 10:23:55 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1446097.1662113; Mon, 12 Oct 2026 10:23:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGDCE-0005Wh-VE; Mon, 12 Oct 2026 10:23:54 +0000
Received: by outflank-mailman (input) for mailman id 1446097;
 Mon, 12 Oct 2026 10:23:54 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3d94d00080d7@swg.vates.tech>)
 id 1xGDCD-0005QE-Uv
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 10:23:53 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGDCD-00ECpK-Bb
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 12:23:53 +0200
Received: from [10.42.69.2] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3d94d00080d7@swg.vates.tech>)
 id 6accb535-e002-0a2a0a5209dd-0a2a4502a988-22
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 12:23:53 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3d94d00080d7@swg.vates.tech>)
 id 6accb537-6ca4-0a2a45020019-b9ff1c23b483-5
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 12:23:53 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a12fa3d94d00080d7.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 12 Oct 2026 10:23:49 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 1259782A96;
 Mon, 12 Oct 2026 12:23:49 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=ud91iCXEDm/ki4JCfy8zmlR8yCEhUJS64GMkrgW3RGk=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=arOGk8adOZ46arnTCeDOXuobLsFp007Ldfbd7r1XeyOFMpsjhyavBq5/TAM83MZK7aKY0Pq4H
 CFGEVduuh4k+nbkqaDLcv91B9s/eLVgU/ekPWQ2prUMigQf81rxRMFTG6w6VFdTfDpE5ppMhSnw
 9hdeBtYvo2JttJmxgJnqJH7I0jfYm6GSMagFHZvvyRU3PTg6KuoGcENrR5KaoslqwC+jpKjUfkp
 vGryFWXuIA3esXT9sBRj8V2VcqrNP6QMdz8f4LhYjscRSGQYZSZuXjGlFO7xu60ttBaYOaR+OXC
 XQJFtoANiEXTMVY3LtF99f6GcYEyu9kOKzYq/Zy9bEQA==
X-Zone-Loop: 8f95f715bcd6e94e6197e97a16c5b6ebb49bbbf584c4
x-campaign-type: default
x-transaction-id: 96ef5f50-20e7-4a1b-b495-07e3be023513
x-swg-uid: 01-0400a3c6-c8ff-44d3-a4bc-70cb9247629c
X-Mailer: Sweego
Message-ID:
 <1791800629.8631fc262581453bbf619ec5b2062170.1a12fa3d94d00080d7@vates.tech>
x-swg-bid: 1791800629.8631fc262581453bbf619ec5b2062170.1a12fa3d94d00080d7
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 13/21] xenvif: fix inconsistent annotation between declarations and definitions
Date: Mon, 12 Oct 2026 12:23:25 +0200
In-Reply-To: <1791800371.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@vates.tech>
References: <1791800371.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.d9.1a596f26babbf3a1.1a12fa3d7a9.38453297d103409d=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791800629161
X-purgate-ID: tlsNG-720697/1791800633-F14AE2AC-2182FA45/0/0
X-purgate-type: clean
X-purgate-size: 2665

---=Part.d9.1a596f26babbf3a1.1a12fa3d7a9.38453297d103409d=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Some annotation fixes were not applied both on declarations in =2Eh files
and definitions in =2Ec files=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xenvif/frontend=2Eh |  4 ++--
 src/xenvif/mac=2Eh      |  4 ++--
 src/xenvif/parse=2Eh    | 12 ++++++------
 3 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/src/xenvif/frontend=2Eh b/src/xenvif/frontend=2Eh
index 4da8b3d=2E=2Ec2499ae 100644
--- a/src/xenvif/frontend=2Eh
+++ b/src/xenvif/frontend=2Eh
@@ -235,8 +235,8 @@ _IRQL_requires_max_(DISPATCH_LEVEL)
 extern NTSTATUS
 FrontendSetHashMapping(
     _Out_ PXENVIF_FRONTEND  Frontend,
-    _In_ PULONG             Mapping,
-    _In_ ULONG              Order
+    _In_reads_(Size) PULONG Mapping,
+    _In_ ULONG              Size
     );
=20
 _IRQL_requires_max_(DISPATCH_LEVEL)
diff --git a/src/xenvif/mac=2Eh b/src/xenvif/mac=2Eh
index d407d1d=2E=2E63a8e8e 100644
--- a/src/xenvif/mac=2Eh
+++ b/src/xenvif/mac=2Eh
@@ -104,13 +104,13 @@ MacDumpAddressTable(
 extern NTSTATUS
 MacAddMulticastAddress(
     _Out_ PXENVIF_MAC       Mac,
-    _Out_ PETHERNET_ADDRESS Address
+    _In_ PETHERNET_ADDRESS  Address
     );
=20
 extern NTSTATUS
 MacRemoveMulticastAddress(
     _Out_ PXENVIF_MAC       Mac,
-    _Out_ PETHERNET_ADDRESS Address
+    _In_ PETHERNET_ADDRESS  Address
     );
=20
 extern NTSTATUS
diff --git a/src/xenvif/parse=2Eh b/src/xenvif/parse=2Eh
index 6e5a260=2E=2E642b32e 100644
--- a/src/xenvif/parse=2Eh
+++ b/src/xenvif/parse=2Eh
@@ -51,12 +51,12 @@ typedef BOOLEAN
=20
 extern NTSTATUS
 ParsePacket(
-    _In_ PUCHAR                     StartVa,
-    _In_ ULONG                      StartLen,
-    _In_ XENVIF_PARSE_PULLUP        Pullup,
-    _In_ PVOID                      Argument,
-    _Inout_ PXENVIF_PACKET_PAYLOAD  Payload,
-    _Out_ PXENVIF_PACKET_INFO       Info
+    _Inout_updates_bytes_(StartLen) PUCHAR  StartVa,
+    _In_ ULONG                              StartLen,
+    _In_ XENVIF_PARSE_PULLUP                Pullup,
+    _In_ PVOID                              Argument,
+    _Inout_ PXENVIF_PACKET_PAYLOAD          Payload,
+    _Out_ PXENVIF_PACKET_INFO               Info
     );
=20
 #endif  // _XENVIF_PARSE_H
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.d9.1a596f26babbf3a1.1a12fa3d7a9.38453297d103409d=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 12 10:23:55 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 12 Oct 2026 10:23:55 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1446096.1662107 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGDCF-0005Wn-HM; Mon, 12 Oct 2026 10:23:55 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1446096.1662107; Mon, 12 Oct 2026 10:23:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGDCE-0005Vk-P3; Mon, 12 Oct 2026 10:23:54 +0000
Received: by outflank-mailman (input) for mailman id 1446096;
 Mon, 12 Oct 2026 10:23:53 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3d77d00080d7@swg.vates.tech>)
 id 1xGDCD-0005Pv-Qj
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 10:23:53 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGDCD-00Fmsh-7K
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 12:23:53 +0200
Received: from [10.42.69.11] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3d77d00080d7@swg.vates.tech>)
 id 6accb52f-8faa-0a2a0a5109dd-0a2a450bde56-32
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 12:23:53 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-42698a.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3d77d00080d7@swg.vates.tech>)
 id 6accb532-b7e8-0a2a450b0019-b9ff1c22b35b-5
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 12:23:53 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a12fa3d77d00080d7.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 12 Oct 2026 10:23:49 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 8A7FD82A69;
 Mon, 12 Oct 2026 12:23:48 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=FVNykLxK46YZNSThRvc7Ykuad+4cdwgWumouTuPQMBg=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=b0EhnWxYoHRCOyw/g3mabD6DaMPq2hIatvspyfjAu0GoWnxmY+XMHCNaG7njwV3bxvn+fWIZy
 l8A8Fh7o3bflNKl+Qo8Y6R8k388+3c4Wm36uSdlutRz92CcFvttp4aGhpDNvNuWJ3ASg3HtpB8l
 QxA3UgPgAowGmlk7WvTftVdD+JHnzBPEF/F7IefGGOAaIiaAzD7Wrre2H1pvKhvsDsy5km3kcsj
 cU43Gs1ZoJQxvT6+9arzcywbXwT4ky9RcuSunmfWmKi5uOAFOxAS4m5IwwmclTFPfyNcJh0RRMt
 c6mrNXjvM+VZh9pYz9GPN6nD/dU0q8lgz527aE072qqQ==
X-Zone-Loop: 857b49307c65230c13f7a6752caedd5a96d309d5f41d
x-campaign-type: default
x-transaction-id: cdc91c45-8e6d-408a-ba7b-652a1b812f86
x-swg-uid: 01-abe8942a-bd68-4c0a-8788-b94e832501f4
X-Mailer: Sweego
Message-ID:
 <1791800629.8631fc262581453bbf619ec5b2062170.1a12fa3d77d00080d7@vates.tech>
x-swg-bid: 1791800629.8631fc262581453bbf619ec5b2062170.1a12fa3d77d00080d7
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 11/21] fdo: suppress uninitialized memory '*Interface'
Date: Mon, 12 Oct 2026 12:23:23 +0200
In-Reply-To: <1791800371.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@vates.tech>
References: <1791800371.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.d7.dcd6f5f425821da4.1a12fa3d5e0.35384e636c242d59=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791800628704
X-purgate-ID: tlsNG-42698a/1791800633-1B6D29EA-612DBD86/0/0
X-purgate-type: clean
X-purgate-size: 1137

---=Part.d7.dcd6f5f425821da4.1a12fa3d5e0.35384e636c242d59=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

*Interface is set by IoCallDriver() down the stack so to suppress this warn=
ing
we initialize Interface at the start of the function=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xenvif/fdo=2Ec | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/xenvif/fdo=2Ec b/src/xenvif/fdo=2Ec
index af8bec4=2E=2Ec77e97d 100644
--- a/src/xenvif/fdo=2Ec
+++ b/src/xenvif/fdo=2Ec
@@ -3136,6 +3136,7 @@ FdoQueryInterface(
=20
     KeInitializeEvent(&Event, NotificationEvent, FALSE);
     RtlZeroMemory(&StatusBlock, sizeof(IO_STATUS_BLOCK));
+    RtlZeroMemory(Interface, Size);
=20
     Irp =3D IoBuildSynchronousFsdRequest(IRP_MJ_PNP,
                                        Fdo->LowerDeviceObject,
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.d7.dcd6f5f425821da4.1a12fa3d5e0.35384e636c242d59=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 12 10:23:57 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 12 Oct 2026 10:23:57 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1446099.1662117 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGDCH-0005i6-5s; Mon, 12 Oct 2026 10:23:57 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1446099.1662117; Mon, 12 Oct 2026 10:23:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGDCG-0005hw-W9; Mon, 12 Oct 2026 10:23:56 +0000
Received: by outflank-mailman (input) for mailman id 1446099;
 Mon, 12 Oct 2026 10:23:55 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3da2f00080d7@swg.vates.tech>)
 id 1xGDCE-0005S8-It
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 10:23:54 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGDCD-00FmsG-VY
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 12:23:53 +0200
Received: from [10.42.69.8] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3da2f00080d7@swg.vates.tech>)
 id 6accb531-2eae-0a2a0a5409dd-0a2a45088fda-20
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 12:23:53 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-c1860d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3da2f00080d7@swg.vates.tech>)
 id 6accb539-f659-0a2a45080019-b9ff1c23a933-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 12:23:53 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a12fa3da2f00080d7.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 12 Oct 2026 10:23:49 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 4B03A829C4;
 Mon, 12 Oct 2026 12:23:49 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=kzPwcz2FyP7Xpb7ugdn+JIIoPgFq4DB09cgPehiVkZ8=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=ls/jryA6eQA8pLNApSH9JdqvCwPW2KCug9oqxAcNObEdRyl3+MbhjdZH6eY7GaERAToTNs6Zi
 wIxgi5obmx8mzG+kP3at8444CGHeDfSKdIm8O7f9z0rjUoflrQLiguDojy0wIuS0ij/H8TXvswb
 ASQ2GL/X1Ut7TpBKmK63eaHqK64BS5BNwrWhicYfpcf+bwlXZazw43pdy3CqKt3UShIeF0pNLZM
 TasxjmUzI4zNuqWTIqOKSYi6oxiWt/Evf1sBywB/+jQUwTR0/p0sJzSnngg46v1j9OYSK2Ib5D4
 Wyu8la54tGT/mrwYlq2yAPw6f5ZmYJkfVH20gdAl/r7g==
X-Zone-Loop: c3c0adb9f05fd26b65e00677751cbe5dd84bac66e1df
x-campaign-type: default
x-transaction-id: 7e2f6636-2290-470d-9c71-e798868c394a
x-swg-uid: 01-ed82b40c-9f50-4635-9272-aeaf6d0bd38e
X-Mailer: Sweego
Message-ID:
 <1791800629.8631fc262581453bbf619ec5b2062170.1a12fa3da2f00080d7@vates.tech>
x-swg-bid: 1791800629.8631fc262581453bbf619ec5b2062170.1a12fa3da2f00080d7
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 14/21] settings: fix annotation of SettingsSave and SettingsRestore
Date: Mon, 12 Oct 2026 12:23:26 +0200
In-Reply-To: <1791800371.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@vates.tech>
References: <1791800371.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.da.1caec58fa47482c5.1a12fa3d892.14f58e1b2db5bc0f=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791800629394
X-purgate-ID: tlsNG-c1860d/1791800633-D4D7087B-6EA09C07/0/0
X-purgate-type: clean
X-purgate-size: 2397

---=Part.da.1caec58fa47482c5.1a12fa3d892.14f58e1b2db5bc0f=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

SettingsSave() and SettingsRestore() can be called with Alias and Descripti=
on
set to Null, and in both cases they are only called in a log operation at:
Info("FROM %ws (%ws)\n", Alias, Description);
Which will print "(null)" so just annotate them as _In_opt_=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xenvif/settings=2Ec | 8 ++++----
 src/xenvif/settings=2Eh | 8 ++++----
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/src/xenvif/settings=2Ec b/src/xenvif/settings=2Ec
index b619da4=2E=2E0f603e2 100644
--- a/src/xenvif/settings=2Ec
+++ b/src/xenvif/settings=2Ec
@@ -531,8 +531,8 @@ fail1:
 NTSTATUS
 SettingsSave(
     _In_ PSTR       SubKeyName,
-    _In_ PWSTR      Alias,
-    _In_ PWSTR      Description,
+    _In_opt_ PWSTR  Alias,
+    _In_opt_ PWSTR  Description,
     _In_ LPGUID     InterfaceGuid,
     _In_ PNET_LUID  InterfaceLuid
     )
@@ -602,8 +602,8 @@ fail1:
 NTSTATUS
 SettingsRestore(
     _In_ PSTR       SubKeyName,
-    _In_ PWSTR      Alias,
-    _In_ PWSTR      Description,
+    _In_opt_ PWSTR  Alias,
+    _In_opt_ PWSTR  Description,
     _In_ LPGUID     InterfaceGuid,
     _In_ PNET_LUID  InterfaceLuid
     )
diff --git a/src/xenvif/settings=2Eh b/src/xenvif/settings=2Eh
index e3a340c=2E=2E9cfaac5 100644
--- a/src/xenvif/settings=2Eh
+++ b/src/xenvif/settings=2Eh
@@ -36,8 +36,8 @@
 extern NTSTATUS
 SettingsSave(
     _In_ PSTR       SubKeyName,
-    _In_ PWSTR      Alias,
-    _In_ PWSTR      Description,
+    _In_opt_ PWSTR  Alias,
+    _In_opt_ PWSTR  Description,
     _In_ LPGUID     InterfaceGuid,
     _In_ PNET_LUID  InterfaceLuid
     );
@@ -45,8 +45,8 @@ SettingsSave(
 extern NTSTATUS
 SettingsRestore(
     _In_ PSTR       SubKeyName,
-    _In_ PWSTR      Alias,
-    _In_ PWSTR      Description,
+    _In_opt_ PWSTR  Alias,
+    _In_opt_ PWSTR  Description,
     _In_ LPGUID     InterfaceGuid,
     _In_ PNET_LUID  InterfaceLuid
     );
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.da.1caec58fa47482c5.1a12fa3d892.14f58e1b2db5bc0f=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 12 10:23:57 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 12 Oct 2026 10:23:57 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1446098.1662120 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGDCH-0005iv-AY; Mon, 12 Oct 2026 10:23:57 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1446098.1662120; Mon, 12 Oct 2026 10:23:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGDCH-0005iG-1f; Mon, 12 Oct 2026 10:23:57 +0000
Received: by outflank-mailman (input) for mailman id 1446098;
 Mon, 12 Oct 2026 10:23:54 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3db4100080d7@swg.vates.tech>)
 id 1xGDCE-0005SZ-Kq
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 10:23:54 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGDCD-00ECpK-Vw
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 12:23:54 +0200
Received: from [10.42.69.2] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3db4100080d7@swg.vates.tech>)
 id 6accb535-e002-0a2a0a5209dd-0a2a4502a988-26
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 12:23:53 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3db4100080d7@swg.vates.tech>)
 id 6accb537-6ca4-0a2a45020019-b9ff1c23b483-6
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 12:23:53 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a12fa3db4100080d7.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 12 Oct 2026 10:23:50 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 862E082A8A;
 Mon, 12 Oct 2026 12:23:49 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=k9fUsHdabaOomftKU68YZ+kunkKDAr3kYj/62Gmd7og=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=rzytzyEB6BmhhaxGYNMISC8s/y3GBwKt+1P3u3OtQZieM0QF43XfaHSzI9iUUSVUZyezQt+AQ
 LAeY6sTW377WOav5eHXXirrlOkOYcqNgTs+8wDCoZIGY1nWTMd98p22NvYdaX+TzYfiSthxy0KC
 B2L8aOrfYJ1M7U8gC84w2UsePunqIwHo0IH4EZgLQJ/XPpPnXWpwgKxUBT7ssnWeNQk5tCmNAX8
 6OhFijd3sycAZmS33axb7vrM3ajsJwnsGlm7pWmutR2DmzTE1IjcSTmyIp2evieCim2mH055AKS
 lUVrjH2OFheycwfHj0MuHy0BIR3MuJ8gGSxv/j3ZeVwA==
X-Zone-Loop: f81082b2528d8612434b398da0981371817a0c7add8f
x-campaign-type: default
x-transaction-id: 6ed2cc33-ca0a-4cfc-b663-b7268b9c2246
x-swg-uid: 01-a852ed39-5d40-4435-adcc-8862db092901
X-Mailer: Sweego
Message-ID:
 <1791800630.8631fc262581453bbf619ec5b2062170.1a12fa3db4100080d7@vates.tech>
x-swg-bid: 1791800630.8631fc262581453bbf619ec5b2062170.1a12fa3db4100080d7
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 15/21] pdo: fix annotation of __PdoSetPower
Date: Mon, 12 Oct 2026 12:23:27 +0200
In-Reply-To: <1791800371.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@vates.tech>
References: <1791800371.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.db.756e90a1cac74c03.1a12fa3d9ac.78dbdb7eadab1f65=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791800629676
X-purgate-ID: tlsNG-720697/1791800633-672B12AC-78907583/0/0
X-purgate-type: clean
X-purgate-size: 1016

---=Part.db.756e90a1cac74c03.1a12fa3d9ac.78dbdb7eadab1f65=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

__PdoSetPower just pass Pdo to __PdoSetDevicePower and __PdoSetSystemPower
to be updated so Pdo should be annotated as _Inout_=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xenvif/pdo=2Ec | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/xenvif/pdo=2Ec b/src/xenvif/pdo=2Ec
index 18ffe7a=2E=2E6744fe5 100644
--- a/src/xenvif/pdo=2Ec
+++ b/src/xenvif/pdo=2Ec
@@ -2569,7 +2569,7 @@ __PdoSetSystemPower(
=20
 static FORCEINLINE NTSTATUS
 __PdoSetPower(
-    _Out_ PXENVIF_PDO   Pdo,
+    _Inout_ PXENVIF_PDO Pdo,
     _In_ PIRP           Irp
     )
 {
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.db.756e90a1cac74c03.1a12fa3d9ac.78dbdb7eadab1f65=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 12 10:23:57 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 12 Oct 2026 10:23:57 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1446100.1662125 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGDCH-0005jZ-HE; Mon, 12 Oct 2026 10:23:57 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1446100.1662125; Mon, 12 Oct 2026 10:23:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGDCH-0005ig-4F; Mon, 12 Oct 2026 10:23:57 +0000
Received: by outflank-mailman (input) for mailman id 1446100;
 Mon, 12 Oct 2026 10:23:55 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3d85100080d7@swg.vates.tech>)
 id 1xGDCE-0005Rh-HU
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 10:23:54 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGDCD-00FmsG-UI
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 12:23:53 +0200
Received: from [10.42.69.8] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3d85100080d7@swg.vates.tech>)
 id 6accb531-2eae-0a2a0a5409dd-0a2a45088fda-18
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 12:23:53 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-c1860d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3d85100080d7@swg.vates.tech>)
 id 6accb539-f659-0a2a45080019-b9ff1c229f63-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 12:23:53 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a12fa3d85100080d7.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 12 Oct 2026 10:23:49 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id D12EF82A8A;
 Mon, 12 Oct 2026 12:23:48 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=0qEvCmTVS/8Ch0FfJH9xEfJfJhPhD3CXtw3XD3Uu1Tc=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=QIWoMtgTOlGK3uMIQSw372+rTNZGIUwrr8mhCc74O1BuEUnrN4Cq6PVEQ6xurO219yYZCIk/L
 cIKSwA4CERPJ/evEDKSDGiFwbr5N3DUJ6jlkZXJMdAFylfFTL5XgzhUgRgLQMGpGiPZ3NxC/GWo
 DtdIIhgY8wNegzEG9mmlbwQri/DhS5L3VtCwQRQVrmVtkKPeBp1lkJo3eArPEsS7NyfpLIFKZHQ
 g69tW7MMU7XcU2UvtPR5/v8E/RQS4cxg6J9Us+T9gKroPRa+S2Nsf3Qv0GE8wa3cfeBqrsbeLaA
 Cz76CpSWIzTDQ2dRF6Vw/gp/IFYDkjWbSGgOGFfatD+A==
X-Zone-Loop: ccaa40880e74a1adcadb8309c83126340461f34d3388
x-campaign-type: default
x-transaction-id: 0cb5615e-bdc9-4e6e-a624-6b9538be1c00
x-swg-uid: 01-37695138-3cc1-4e29-b2b1-69c9cea62a07
X-Mailer: Sweego
Message-ID:
 <1791800629.8631fc262581453bbf619ec5b2062170.1a12fa3d85100080d7@vates.tech>
x-swg-bid: 1791800629.8631fc262581453bbf619ec5b2062170.1a12fa3d85100080d7
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 12/21] fdo: annotate macro-defined functions
Date: Mon, 12 Oct 2026 12:23:24 +0200
In-Reply-To: <1791800371.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@vates.tech>
References: <1791800371.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.d8.9c29919bfe0111f0.1a12fa3d6bf.e2420eac19ce00d0=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791800628927
X-purgate-ID: tlsNG-c1860d/1791800633-CE74387B-2BCA93B1/0/0
X-purgate-type: clean
X-purgate-size: 1294

---=Part.d8.9c29919bfe0111f0.1a12fa3d6bf.e2420eac19ce00d0=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Annotate macro-defined functions from macro DECLARE_FDO_GET_INTERFACE=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xenvif/fdo=2Eh | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/xenvif/fdo=2Eh b/src/xenvif/fdo=2Eh
index 4d1da49=2E=2E553246c 100644
--- a/src/xenvif/fdo=2Eh
+++ b/src/xenvif/fdo=2Eh
@@ -132,8 +132,8 @@ FdoDispatch(
 #define DECLARE_FDO_GET_INTERFACE(_Interface, _Type)    \
 extern VOID                                             \
 FdoGet ## _Interface ## Interface(                      \
-    IN  PXENVIF_FDO Fdo,                                \
-    OUT _Type       _Interface ## Interface             \
+    _In_  PXENVIF_FDO Fdo,                                \
+    _Out_ _Type       _Interface ## Interface             \
     );
=20
 DECLARE_FDO_GET_INTERFACE(Debug, PXENBUS_DEBUG_INTERFACE)
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.d8.9c29919bfe0111f0.1a12fa3d6bf.e2420eac19ce00d0=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 12 10:23:58 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 12 Oct 2026 10:23:58 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1446101.1662130 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGDCH-0005lq-Q3; Mon, 12 Oct 2026 10:23:57 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1446101.1662130; Mon, 12 Oct 2026 10:23:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGDCH-0005l1-EY; Mon, 12 Oct 2026 10:23:57 +0000
Received: by outflank-mailman (input) for mailman id 1446101;
 Mon, 12 Oct 2026 10:23:55 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3d35200080d7@swg.vates.tech>)
 id 1xGDCE-0005TV-NG
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 10:23:54 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGDCE-00ECpK-3d
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 12:23:54 +0200
Received: from [10.42.69.4] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3d35200080d7@swg.vates.tech>)
 id 6accb52d-e002-0a2a0a5209dd-0a2a4504d294-18
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 12:23:54 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-ebf023.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3d35200080d7@swg.vates.tech>)
 id 6accb538-b57f-0a2a45040019-b9ff1c129951-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 12:23:52 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a12fa3d35200080d7.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 12 Oct 2026 10:23:48 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 7900A82A4A;
 Mon, 12 Oct 2026 12:23:47 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=t/Bv9fXCC5glHz5pgyhEYRF0aoZY3pcxaU1fMvTfM+8=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=h7qlsdpiIAA2QuVzykAUT6JgDEA0Yi83Uaf7U7wzJcaw9CnMEqva0ahCd5928jR44QHYEdtlS
 WwJEnT5mJ70+I4/8VniCu1MP8kxAzls+sdIXAzVcbVAtr+u47FK5WTducL8y3kS9jlE4pGj+n4l
 6R2XlGzMaWmnzksflQNoPklXskFINYJbdC036vGDleQNcrtr139ZjlxIjY0xSDAoF2NbO7fshyS
 drSZ4yEH+hh3ObeOvjkpgbHpK9FevFI8FdksHmShgIhXkjG6rLDC7Smu5CZktgWZsC+SyfcSRxl
 YwJgOsdQI8GXRyHZarOxxpAeSjT+WZOGe9yheJCx4Cnw==
X-Zone-Loop: 558cc121a2b26613a0f9c0e738dac121170f16dfaf86
x-campaign-type: default
x-transaction-id: 9e2f3d84-d1a8-4442-818a-5ff88580a8bb
x-swg-uid: 01-4151a07b-c19a-48aa-8286-a1e883902bfd
X-Mailer: Sweego
Message-ID:
 <1791800628.8631fc262581453bbf619ec5b2062170.1a12fa3d35200080d7@vates.tech>
x-swg-bid: 1791800628.8631fc262581453bbf619ec5b2062170.1a12fa3d35200080d7
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 07/21] driver: fix annotations on nullable parameters
Date: Mon, 12 Oct 2026 12:23:19 +0200
In-Reply-To: <1791800371.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@vates.tech>
References: <1791800371.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.d3.54f9c9e9646e3847.1a12fa3d17e.eaae038c8287c918=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791800627583
X-purgate-ID: tlsNG-ebf023/1791800632-538C1B50-484608D5/0/0
X-purgate-type: clean
X-purgate-size: 1744

---=Part.d3.54f9c9e9646e3847.1a12fa3d17e.eaae038c8287c918=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

__DriverSetAddressesKey, __DriverSetParametersKey and __DriverSetDriverObje=
ct
are called with a NULL param in DriverUnload() and on driver cleanup path =
in
DriverEntry()=2E
Annotate it with _opt_=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xenvif/driver=2Ec | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/xenvif/driver=2Ec b/src/xenvif/driver=2Ec
index 614503b=2E=2Eaf4b893 100644
--- a/src/xenvif/driver=2Ec
+++ b/src/xenvif/driver=2Ec
@@ -73,7 +73,7 @@ DriverSafeMode(
=20
 static FORCEINLINE VOID
 __DriverSetDriverObject(
-    _In_ PDRIVER_OBJECT DriverObject
+    _In_opt_ PDRIVER_OBJECT DriverObject
     )
 {
     Driver=2EDriverObject =3D DriverObject;
@@ -97,7 +97,7 @@ DriverGetDriverObject(
=20
 static FORCEINLINE VOID
 __DriverSetParametersKey(
-    _In_ HANDLE Key
+    _In_opt_ HANDLE Key
     )
 {
     Driver=2EParametersKey =3D Key;
@@ -121,7 +121,7 @@ DriverGetParametersKey(
=20
 static FORCEINLINE VOID
 __DriverSetAddressesKey(
-    _In_ HANDLE Key
+    _In_opt_ HANDLE Key
     )
 {
     Driver=2EAddressesKey =3D Key;
@@ -145,7 +145,7 @@ DriverGetAddressesKey(
=20
 static FORCEINLINE VOID
 __DriverSetSettingsKey(
-    _In_ HANDLE Key
+    _In_opt_ HANDLE Key
     )
 {
     Driver=2ESettingsKey =3D Key;
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.d3.54f9c9e9646e3847.1a12fa3d17e.eaae038c8287c918=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 12 10:23:58 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 12 Oct 2026 10:23:58 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1446103.1662128 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGDCH-0005kN-RK; Mon, 12 Oct 2026 10:23:57 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1446103.1662128; Mon, 12 Oct 2026 10:23:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGDCH-0005j8-83; Mon, 12 Oct 2026 10:23:57 +0000
Received: by outflank-mailman (input) for mailman id 1446103;
 Mon, 12 Oct 2026 10:23:55 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3dd2800080d7@swg.vates.tech>)
 id 1xGDCE-0005US-QY
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 10:23:54 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGDCE-00Fmsh-6h
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 12:23:54 +0200
Received: from [10.42.69.11] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3dd2800080d7@swg.vates.tech>)
 id 6accb52f-8faa-0a2a0a5109dd-0a2a450bde56-36
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 12:23:54 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-42698a.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3dd2800080d7@swg.vates.tech>)
 id 6accb532-b7e8-0a2a450b0019-b9ff1c22b35b-6
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 12:23:54 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a12fa3dd2800080d7.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 12 Oct 2026 10:23:50 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 105B882AAC;
 Mon, 12 Oct 2026 12:23:50 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=dXaJNXQQQRPK3QeiB927BM7imp3BZusGP2RWAzwbbbo=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=ZZN41DmbK3ZSmkQ1umYOQ5bXwdWGrWmmvqQ/WX26jvqlQBwSaxw3YQiQxZOjkxC1atSWBJ+Za
 CvJfZRFpBvPJ13HDzvUc1bvqfIMqXxDUTgh3mzBr42B5HBPPZbffY99yYTNlE6IbZGeIWYtiMSt
 giBDQ4B8E7JLp+OYJgHeqst7ob7oO3v3CDfeBB8DujJjskzw7f0slrTv/ppCqmC3V6Gpr+Ik7wG
 GW2mbbxXHY3I+2QjiMpbtZNRFnEWTLK9Xb1QMKBCmEN0QRq+74pi23GHAAiDieZpRQBJhUQxFgP
 a6HzkrEJo7Bwpllu8pX7n11WCNYrXcTC+T2wfNLF3LLg==
X-Zone-Loop: af45f876a220971bb0fcaeb0458c0d0dd42507c081be
x-campaign-type: default
x-transaction-id: 0ade59c0-facf-4827-81fd-572ab45cf6c4
x-swg-uid: 01-94a42696-e64a-4ba4-87d2-347a09321b83
X-Mailer: Sweego
Message-ID:
 <1791800630.8631fc262581453bbf619ec5b2062170.1a12fa3dd2800080d7@vates.tech>
x-swg-bid: 1791800630.8631fc262581453bbf619ec5b2062170.1a12fa3dd2800080d7
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 17/21] transmitter,controller: fix some annotations
Date: Mon, 12 Oct 2026 12:23:29 +0200
In-Reply-To: <1791800371.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@vates.tech>
References: <1791800371.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.dd.9139ec410e324633.1a12fa3db8f.fa619b9bf38cc70e=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791800630159
X-purgate-ID: tlsNG-42698a/1791800634-19EC69EA-0C7A840D/0/0
X-purgate-type: clean
X-purgate-size: 2924

---=Part.dd.9139ec410e324633.1a12fa3db8f.fa619b9bf38cc70e=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

* In __TransmitterRequestMulticastControl, StorePrintf is called on Transac=
tion
and Transaction is annotated there as _In_opt_ so we put the same annotati=
on
to __TransmitterRequestMulticastControl to suppress warning on Transaction=
=2E

* KSERVICE_ROUTINE is already annotated in wdm=2Eh,
TransmitterRingEvtchnCallback and ControllerEvtchnCallback are annotated t=
o
use the same annotation with _Use_decl_annotations_ so we remove the
annotations in their parameters=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xenvif/controller=2Ec  |  4 ++--
 src/xenvif/transmitter=2Ec | 14 +++++++-------
 2 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/src/xenvif/controller=2Ec b/src/xenvif/controller=2Ec
index 95fdae6=2E=2E37d10c4 100644
--- a/src/xenvif/controller=2Ec
+++ b/src/xenvif/controller=2Ec
@@ -354,8 +354,8 @@ KSERVICE_ROUTINE    ControllerEvtchnCallback;
 _Use_decl_annotations_
 BOOLEAN
 ControllerEvtchnCallback(
-    _In_ PKINTERRUPT            InterruptObject,
-    _In_ PVOID                  Argument
+    PKINTERRUPT                 InterruptObject,
+    PVOID                       Argument
     )
 {
     PXENVIF_CONTROLLER          Controller =3D Argument;
diff --git a/src/xenvif/transmitter=2Ec b/src/xenvif/transmitter=2Ec
index aff06b7=2E=2E3263089 100644
--- a/src/xenvif/transmitter=2Ec
+++ b/src/xenvif/transmitter=2Ec
@@ -3303,8 +3303,8 @@ KSERVICE_ROUTINE    TransmitterRingEvtchnCallback;
 _Use_decl_annotations_
 BOOLEAN
 TransmitterRingEvtchnCallback(
-    _In_ PKINTERRUPT            InterruptObject,
-    _In_ PVOID                  Argument
+    PKINTERRUPT                 InterruptObject,
+    PVOID                       Argument
     )
 {
     PXENVIF_TRANSMITTER_RING    Ring =3D Argument;
@@ -4803,13 +4803,13 @@ fail1:
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE NTSTATUS
 __TransmitterRequestMulticastControl(
-    _In_ PXENVIF_TRANSMITTER        Transmitter,
-    _In_ PXENBUS_STORE_TRANSACTION  Transaction,
-    _In_ BOOLEAN                    Enabled
+    _In_ PXENVIF_TRANSMITTER            Transmitter,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_ BOOLEAN                        Enabled
     )
 {
-    PXENVIF_FRONTEND                Frontend;
-    NTSTATUS                        status;
+    PXENVIF_FRONTEND                    Frontend;
+    NTSTATUS                            status;
=20
     Frontend =3D Transmitter->Frontend;
=20
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.dd.9139ec410e324633.1a12fa3db8f.fa619b9bf38cc70e=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 12 10:23:58 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 12 Oct 2026 10:23:58 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1446102.1662138 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGDCI-0005ls-88; Mon, 12 Oct 2026 10:23:58 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1446102.1662138; Mon, 12 Oct 2026 10:23:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGDCH-0005kF-BI; Mon, 12 Oct 2026 10:23:57 +0000
Received: by outflank-mailman (input) for mailman id 1446102;
 Mon, 12 Oct 2026 10:23:55 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3de3000080d7@swg.vates.tech>)
 id 1xGDCE-0005Uo-SI
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 10:23:54 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGDCE-00Fmsh-8D
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 12:23:54 +0200
Received: from [10.42.69.3] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3de3000080d7@swg.vates.tech>)
 id 6accb536-8faa-0a2a0a5109dd-0a2a4503e17e-12
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 12:23:54 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-33051d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3de3000080d7@swg.vates.tech>)
 id 6accb538-fae8-0a2a45030019-b9ff1c12b6ed-4
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 12:23:54 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a12fa3de3000080d7.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 12 Oct 2026 10:23:50 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 4BA1D82A8A;
 Mon, 12 Oct 2026 12:23:50 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=HqA1ro3xWVdpJly1rGaz/5ttlhANbLJRLGI83HlXJCc=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=qvd5DSpAkC1F+9AKXK1gYVFisEFKVJsBI6uUUWqqzRMc8YA0UZEaDM8xxVQJ8X6aC5noXwh69
 GyEuw2XwmixH6NuZ88hL5b9Alu59Tlqz6cw8HNPskuv0FKenDod0X4b1w3OisyKxSXQTVJIwWbI
 Rx8wdOX1CgSkUZXdWBVYx53b3VWpYyFuLEDxtTOESfI4tqwMnksxXeTiqPw5sn0qh3c/Xe8kVIa
 ExHBBkjZ81NSU+DT5IueIvfXE7rYK0lTOxsls1Rpsk+Av2muqOoVeNNHEcDQFC5eQac0gOrE17m
 6Qz9XLzcGMyOzQOsPDQunI1HkJtHEIueolLRQNZsoLDQ==
X-Zone-Loop: 3b07937b0398b6581cf1ca69ec0c9a646b9f380bccbd
x-campaign-type: default
x-transaction-id: 68218af9-dc3f-43db-97e7-e8b2e7850077
x-swg-uid: 01-071f7d1c-2614-462a-a373-e13fbc62f44c
X-Mailer: Sweego
Message-ID:
 <1791800630.8631fc262581453bbf619ec5b2062170.1a12fa3de3000080d7@vates.tech>
x-swg-bid: 1791800630.8631fc262581453bbf619ec5b2062170.1a12fa3de3000080d7
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 18/21] vif: fix the annotation of typedef XENVIF_VIF_CALLBACK
Date: Mon, 12 Oct 2026 12:23:30 +0200
In-Reply-To: <1791800371.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@vates.tech>
References: <1791800371.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.de.d597c12eaebcf80e.1a12fa3dc80.7b11e8597a9407e1=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791800630400
X-purgate-ID: tlsNG-33051d/1791800634-6DCD34E9-3C642402/0/0
X-purgate-type: clean
X-purgate-size: 1400

---=Part.de.d597c12eaebcf80e.1a12fa3dc80.7b11e8597a9407e1=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

VifMac() can call Context->Callback with Parameters set to Null so
Parameters should be annotated as _In_opt_ in XENVIF_VIF_CALLBACK typedef=
=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 include/vif_interface=2Eh | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/include/vif_interface=2Eh b/include/vif_interface=2Eh
index 05d472e=2E=2Ecc2f626 100644
--- a/include/vif_interface=2Eh
+++ b/include/vif_interface=2Eh
@@ -499,9 +499,9 @@ typedef union _XENVIF_VIF_CALLBACK_PARAMETERS_V10 XENV=
IF_VIF_CALLBACK_PARAMETERS
 */
 typedef VOID
 (*XENVIF_VIF_CALLBACK)(
-    _In_opt_ PVOID                          Argument,
-    _In_ XENVIF_VIF_CALLBACK_TYPE           Type,
-    _In_ PXENVIF_VIF_CALLBACK_PARAMETERS    Parameters
+    _In_opt_ PVOID                              Argument,
+    _In_ XENVIF_VIF_CALLBACK_TYPE               Type,
+    _In_opt_ PXENVIF_VIF_CALLBACK_PARAMETERS    Parameters
     );
=20
 typedef NTSTATUS
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.de.d597c12eaebcf80e.1a12fa3dc80.7b11e8597a9407e1=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 12 10:23:58 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 12 Oct 2026 10:23:58 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1446106.1662142 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGDCI-0005nE-GW; Mon, 12 Oct 2026 10:23:58 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1446106.1662142; Mon, 12 Oct 2026 10:23:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGDCH-0005ln-Ie; Mon, 12 Oct 2026 10:23:57 +0000
Received: by outflank-mailman (input) for mailman id 1446106;
 Mon, 12 Oct 2026 10:23:55 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3d23300080d7@swg.vates.tech>)
 id 1xGDCF-0005WG-2R
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 10:23:55 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGDCE-00ECpK-E3
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 12:23:54 +0200
Received: from [10.42.69.4] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3d23300080d7@swg.vates.tech>)
 id 6accb52d-e002-0a2a0a5209dd-0a2a4504d294-22
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 12:23:54 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-ebf023.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3d23300080d7@swg.vates.tech>)
 id 6accb538-b57f-0a2a45040019-b9ff1c22afd5-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 12:23:52 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a12fa3d23300080d7.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 12 Oct 2026 10:23:47 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 3B1D482A50;
 Mon, 12 Oct 2026 12:23:47 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=GVW0a0tJNThHWVsJ2eMPUQ+Z+Fop/9ZIy6yPS3XA6QU=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=ei+9adr4fdhvWVxu20HA6onJKlCEhP9EgqbqIxgquxMEekri2LGVcCcOdmgW7d7RNA7EY1twJ
 UbZB826iJI10UmEt5iRTqDtm/9LOZMClorDrEfec9/TYRHptgHT4lcfTrp6TnsOQdJBtCobAmkT
 lH565BY/4ypBzonY/IFAQ8jP4wru9GpLROe/ApvQPAUq4sqT5ahMYzAGjBaCkUwPOkr1kKIiN2a
 UcdOcztFngZ+R0JJt9NxRUrQrklSc5CRyNc2RTMUgWRwyCZ6lYj7jp70WYOqbgUkLLfOheeCyxi
 d+BtzVlfd97sssGzpu8pvDZnjWLyLWpK3OAtLSVmfcKg==
X-Zone-Loop: d637670f131d502ccf33a594ce620f481233b9b83e88
x-campaign-type: default
x-transaction-id: f33c291b-e3da-4656-ae6d-8a2dbeb4f46b
x-swg-uid: 01-0fd008cb-12ea-49e6-9c1a-347951fff498
X-Mailer: Sweego
Message-ID:
 <1791800627.8631fc262581453bbf619ec5b2062170.1a12fa3d23300080d7@vates.tech>
x-swg-bid: 1791800627.8631fc262581453bbf619ec5b2062170.1a12fa3d23300080d7
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 06/21] xenvif: Annotate buffer and array parameters with their sizes
Date: Mon, 12 Oct 2026 12:23:18 +0200
In-Reply-To: <1791800371.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@vates.tech>
References: <1791800371.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.d2.b3e2e12e677acde1.1a12fa3d092.a5bdb04c909b7013=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791800627346
X-purgate-ID: tlsNG-ebf023/1791800632-50EDEB50-E646D5F3/0/0
X-purgate-type: clean
X-purgate-size: 30738

---=Part.d2.b3e2e12e677acde1.1a12fa3d092.a5bdb04c909b7013=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Some pointer parameters that refer to buffers or arrays were annotated
as single elements=2E
We annotate them with the size they actually have: _bytes_ variants
where the size is a byte count, element variants where it is an
element count=2E

No functional change=2E

Assisted-by: Claude/Opus-5=2E5
Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xenvif/assert=2Eh      |  18 ++---
 src/xenvif/bus=2Ec         |  24 +++----
 src/xenvif/checksum=2Ec    |   8 +--
 src/xenvif/checksum=2Eh    |   6 +-
 src/xenvif/controller=2Ec  |  38 +++++------
 src/xenvif/controller=2Eh  |  14 ++--
 src/xenvif/fdo=2Ec         |  20 +++---
 src/xenvif/fdo=2Eh         |  20 +++---
 src/xenvif/frontend=2Ec    |  26 +++----
 src/xenvif/frontend=2Eh    |   6 +-
 src/xenvif/parse=2Ec       | 142 +++++++++++++++++++--------------------
 src/xenvif/pdo=2Ec         |  20 +++---
 src/xenvif/pdo=2Eh         |  20 +++---
 src/xenvif/receiver=2Ec    |  24 +++----
 src/xenvif/registry=2Ec    |  20 +++---
 src/xenvif/registry=2Eh    |  16 ++---
 src/xenvif/transmitter=2Ec |  18 ++---
 src/xenvif/vif=2Ec         |  12 ++--
 18 files changed, 226 insertions(+), 226 deletions(-)

diff --git a/src/xenvif/assert=2Eh b/src/xenvif/assert=2Eh
index e3b2c49=2E=2Ebf66d52 100644
--- a/src/xenvif/assert=2Eh
+++ b/src/xenvif/assert=2Eh
@@ -154,13 +154,13 @@ __Bug(
=20
 static __inline BOOLEAN
 _IsZeroMemory(
-    _In_ PCSTR      Caller,
-    _In_ PCSTR      Name,
-    _In_ PVOID      Buffer,
-    _In_ ULONG      Length
+    _In_ PCSTR                      Caller,
+    _In_ PCSTR                      Name,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Length
     )
 {
-    ULONG           Offset;
+    ULONG                           Offset;
=20
     Offset =3D 0;
     while (Offset < Length) {
@@ -178,10 +178,10 @@ _IsZeroMemory(
=20
 static __inline BOOLEAN
 _IsZeroMemory(
-    _In_ PCSTR  Caller,
-    _In_ PCSTR  Name,
-    _In_ PVOID  Buffer,
-    _In_ ULONG  Length
+    _In_ PCSTR                      Caller,
+    _In_ PCSTR                      Name,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Length
     )
 {
     UNREFERENCED_PARAMETER(Caller);
diff --git a/src/xenvif/bus=2Ec b/src/xenvif/bus=2Ec
index 07e8c24=2E=2Ed8217d3 100644
--- a/src/xenvif/bus=2Ec
+++ b/src/xenvif/bus=2Ec
@@ -126,14 +126,14 @@ static
 _Function_class_(GET_SET_DEVICE_DATA)
 ULONG
 BusSetData(
-    _In_ PVOID          _Context,
-    _In_ ULONG          DataType,
-    _In_ PVOID          Buffer,
-    _In_ ULONG          Offset,
-    _In_ ULONG          Length
+    _In_ PVOID                      _Context,
+    _In_ ULONG                      DataType,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Offset,
+    _In_ ULONG                      Length
     )
 {
-    PXENVIF_BUS_CONTEXT Context =3D _Context;
+    PXENVIF_BUS_CONTEXT             Context =3D _Context;
=20
     return PdoSetBusData(Context->Pdo,
                          DataType,
@@ -146,14 +146,14 @@ static
 _Function_class_(GET_SET_DEVICE_DATA)
 ULONG
 BusGetData(
-    _In_ PVOID          _Context,
-    _In_ ULONG          DataType,
-    _In_ PVOID          Buffer,
-    _In_ ULONG          Offset,
-    _In_ ULONG          Length
+    _In_ PVOID                      _Context,
+    _In_ ULONG                      DataType,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Offset,
+    _In_ ULONG                      Length
     )
 {
-    PXENVIF_BUS_CONTEXT Context =3D _Context;
+    PXENVIF_BUS_CONTEXT             Context =3D _Context;
=20
     return PdoGetBusData(Context->Pdo,
                          DataType,
diff --git a/src/xenvif/checksum=2Ec b/src/xenvif/checksum=2Ec
index eb2ed8d=2E=2E8f85f49 100644
--- a/src/xenvif/checksum=2Ec
+++ b/src/xenvif/checksum=2Ec
@@ -47,12 +47,12 @@
 #if !defined(_M_X64)
 VOID
 AccumulateChecksum(
-    _Inout_ PULONG  Accumulator,
-    _In_ PUCHAR     BaseVa,
-    _In_ ULONG      ByteCount
+    _Inout_ PULONG                      Accumulator,
+    _In_reads_bytes_(ByteCount) PUCHAR  BaseVa,
+    _In_ ULONG                          ByteCount
     )
 {
-    ULONG           Current;
+    ULONG                               Current;
=20
     Current =3D *Accumulator;
=20
diff --git a/src/xenvif/checksum=2Eh b/src/xenvif/checksum=2Eh
index 5cd23a8=2E=2Ec2658ba 100644
--- a/src/xenvif/checksum=2Eh
+++ b/src/xenvif/checksum=2Eh
@@ -37,9 +37,9 @@
=20
 extern VOID
 AccumulateChecksum(
-    _Inout_ PULONG  Accumulator,
-    _In_ PVOID      MappedSystemVa,
-    _In_ ULONG      ByteCount
+    _Inout_ PULONG                      Accumulator,
+    _In_reads_bytes_(ByteCount) PVOID   MappedSystemVa,
+    _In_ ULONG                          ByteCount
     );
=20
 extern USHORT
diff --git a/src/xenvif/controller=2Ec b/src/xenvif/controller=2Ec
index 215a8f3=2E=2E95fdae6 100644
--- a/src/xenvif/controller=2Ec
+++ b/src/xenvif/controller=2Ec
@@ -935,17 +935,17 @@ fail1:
 _IRQL_requires_(DISPATCH_LEVEL)
 NTSTATUS
 ControllerSetHashKey(
-    _Out_ PXENVIF_CONTROLLER    Controller,
-    _In_ PUCHAR                 Key,
-    _In_ ULONG                  Size
+    _Out_ PXENVIF_CONTROLLER        Controller,
+    _In_reads_bytes_(Size) PUCHAR   Key,
+    _In_ ULONG                      Size
     )
 {
-    PXENVIF_FRONTEND            Frontend;
-    PMDL                        Mdl;
-    PUCHAR                      Buffer;
-    PFN_NUMBER                  Pfn;
-    PXENBUS_GNTTAB_ENTRY        Entry;
-    NTSTATUS                    status;
+    PXENVIF_FRONTEND                Frontend;
+    PMDL                            Mdl;
+    PUCHAR                          Buffer;
+    PFN_NUMBER                      Pfn;
+    PXENBUS_GNTTAB_ENTRY            Entry;
+    NTSTATUS                        status;
=20
     Frontend =3D Controller->Frontend;
=20
@@ -1112,18 +1112,18 @@ fail1:
 _IRQL_requires_(DISPATCH_LEVEL)
 NTSTATUS
 ControllerSetHashMapping(
-    _Out_ PXENVIF_CONTROLLER    Controller,
-    _In_ PULONG                 Mapping,
-    _In_ ULONG                  Size,
-    _In_ ULONG                  Offset
+    _Out_ PXENVIF_CONTROLLER        Controller,
+    _In_reads_bytes_(Size) PULONG   Mapping,
+    _In_ ULONG                      Size,
+    _In_ ULONG                      Offset
     )
 {
-    PXENVIF_FRONTEND            Frontend;
-    PMDL                        Mdl;
-    PUCHAR                      Buffer;
-    PFN_NUMBER                  Pfn;
-    PXENBUS_GNTTAB_ENTRY        Entry;
-    NTSTATUS                    status;
+    PXENVIF_FRONTEND                Frontend;
+    PMDL                            Mdl;
+    PUCHAR                          Buffer;
+    PFN_NUMBER                      Pfn;
+    PXENBUS_GNTTAB_ENTRY            Entry;
+    NTSTATUS                        status;
=20
     Frontend =3D Controller->Frontend;
=20
diff --git a/src/xenvif/controller=2Eh b/src/xenvif/controller=2Eh
index ab6314c=2E=2E39eab1f 100644
--- a/src/xenvif/controller=2Eh
+++ b/src/xenvif/controller=2Eh
@@ -107,9 +107,9 @@ ControllerSetHashFlags(
 _IRQL_requires_(DISPATCH_LEVEL)
 extern NTSTATUS
 ControllerSetHashKey(
-    _Out_ PXENVIF_CONTROLLER    Controller,
-    _In_ PUCHAR                 Key,
-    _In_ ULONG                  Size
+    _Out_ PXENVIF_CONTROLLER        Controller,
+    _In_reads_bytes_(Size) PUCHAR   Key,
+    _In_ ULONG                      Size
     );
=20
 _IRQL_requires_(DISPATCH_LEVEL)
@@ -129,10 +129,10 @@ ControllerSetHashMappingSize(
 _IRQL_requires_(DISPATCH_LEVEL)
 extern NTSTATUS
 ControllerSetHashMapping(
-    _Out_ PXENVIF_CONTROLLER    Controller,
-    _In_ PULONG                 Mapping,
-    _In_ ULONG                  Size,
-    _In_ ULONG                  Offset
+    _Out_ PXENVIF_CONTROLLER        Controller,
+    _In_reads_bytes_(Size) PULONG   Mapping,
+    _In_ ULONG                      Size,
+    _In_ ULONG                      Offset
     );
=20
=20
diff --git a/src/xenvif/fdo=2Ec b/src/xenvif/fdo=2Ec
index 91e4141=2E=2E78ac65a 100644
--- a/src/xenvif/fdo=2Ec
+++ b/src/xenvif/fdo=2Ec
@@ -372,11 +372,11 @@ FdoTranslateBusAddress(
=20
 ULONG
 FdoSetBusData(
-    _In_ PXENVIF_FDO        Fdo,
-    _In_ ULONG              DataType,
-    _In_ PVOID              Buffer,
-    _In_ ULONG              Offset,
-    _In_ ULONG              Length
+    _In_ PXENVIF_FDO                Fdo,
+    _In_ ULONG                      DataType,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Offset,
+    _In_ ULONG                      Length
     )
 {
     PBUS_INTERFACE_STANDARD BusInterface;
@@ -393,11 +393,11 @@ FdoSetBusData(
=20
 ULONG
 FdoGetBusData(
-    _In_ PXENVIF_FDO        Fdo,
-    _In_ ULONG              DataType,
-    _In_ PVOID              Buffer,
-    _In_ ULONG              Offset,
-    _In_ ULONG              Length
+    _In_ PXENVIF_FDO                Fdo,
+    _In_ ULONG                      DataType,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Offset,
+    _In_ ULONG                      Length
     )
 {
     PBUS_INTERFACE_STANDARD BusInterface;
diff --git a/src/xenvif/fdo=2Eh b/src/xenvif/fdo=2Eh
index 72017b7=2E=2E4d1da49 100644
--- a/src/xenvif/fdo=2Eh
+++ b/src/xenvif/fdo=2Eh
@@ -101,20 +101,20 @@ FdoTranslateBusAddress(
=20
 extern ULONG
 FdoSetBusData(
-    _In_ PXENVIF_FDO    Fdo,
-    _In_ ULONG          DataType,
-    _In_ PVOID          Buffer,
-    _In_ ULONG          Offset,
-    _In_ ULONG          Length
+    _In_ PXENVIF_FDO                Fdo,
+    _In_ ULONG                      DataType,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Offset,
+    _In_ ULONG                      Length
     );
=20
 extern ULONG
 FdoGetBusData(
-    _In_ PXENVIF_FDO    Fdo,
-    _In_ ULONG          DataType,
-    _In_ PVOID          Buffer,
-    _In_ ULONG          Offset,
-    _In_ ULONG          Length
+    _In_ PXENVIF_FDO                Fdo,
+    _In_ ULONG                      DataType,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Offset,
+    _In_ ULONG                      Length
     );
=20
 extern NTSTATUS
diff --git a/src/xenvif/frontend=2Ec b/src/xenvif/frontend=2Ec
index be0fccd=2E=2Ea35ed78 100644
--- a/src/xenvif/frontend=2Ec
+++ b/src/xenvif/frontend=2Ec
@@ -1138,20 +1138,20 @@ fail1:
 _IRQL_requires_max_(DISPATCH_LEVEL)
 NTSTATUS
 FrontendSetMulticastAddresses(
-    _In_ PXENVIF_FRONTEND       Frontend,
-    _Inout_ PETHERNET_ADDRESS   Address,
-    _In_ ULONG                  Count
+    _In_ PXENVIF_FRONTEND               Frontend,
+    _In_reads_(Count) PETHERNET_ADDRESS Address,
+    _In_ ULONG                          Count
     )
 {
-    PXENVIF_TRANSMITTER         Transmitter;
-    PXENVIF_MAC                 Mac;
-    KIRQL                       Irql;
-    PETHERNET_ADDRESS           MulticastAddress;
-    ULONG                       MulticastCount;
-    ULONG                       MulticastIndex;
-    ULONG                       Index;
-    BOOLEAN                     Change;
-    NTSTATUS                    status;
+    PXENVIF_TRANSMITTER                 Transmitter;
+    PXENVIF_MAC                         Mac;
+    KIRQL                               Irql;
+    PETHERNET_ADDRESS                   MulticastAddress;
+    ULONG                               MulticastCount;
+    ULONG                               MulticastIndex;
+    ULONG                               Index;
+    BOOLEAN                             Change;
+    NTSTATUS                            status;
=20
     Transmitter =3D FrontendGetTransmitter(Frontend);
     Mac =3D FrontendGetMac(Frontend);
@@ -2242,7 +2242,7 @@ _IRQL_requires_max_(DISPATCH_LEVEL)
 NTSTATUS
 FrontendSetHashMapping(
     _Out_ PXENVIF_FRONTEND  Frontend,
-    _In_ PULONG             Mapping,
+    _In_reads_(Size) PULONG Mapping,
     _In_ ULONG              Size
     )
 {
diff --git a/src/xenvif/frontend=2Eh b/src/xenvif/frontend=2Eh
index 41a9f10=2E=2E4da8b3d 100644
--- a/src/xenvif/frontend=2Eh
+++ b/src/xenvif/frontend=2Eh
@@ -198,9 +198,9 @@ FrontendIncrementStatistic(
 _IRQL_requires_max_(DISPATCH_LEVEL)
 extern NTSTATUS
 FrontendSetMulticastAddresses(
-    _In_ PXENVIF_FRONTEND       Frontend,
-    _Inout_ PETHERNET_ADDRESS   Address,
-    _In_ ULONG                  Count
+    _In_ PXENVIF_FRONTEND               Frontend,
+    _In_reads_(Count) PETHERNET_ADDRESS Address,
+    _In_ ULONG                          Count
     );
=20
 _IRQL_requires_max_(DISPATCH_LEVEL)
diff --git a/src/xenvif/parse=2Ec b/src/xenvif/parse=2Ec
index 4b860e6=2E=2E2cfb117 100644
--- a/src/xenvif/parse=2Ec
+++ b/src/xenvif/parse=2Ec
@@ -46,13 +46,13 @@
=20
 static FORCEINLINE BOOLEAN
 __ParsePullup(
-    _In_ XENVIF_PARSE_PULLUP    Pullup,
-    _In_ PVOID                  Argument,
-    _In_ PUCHAR                 StartVa,
-    _In_ ULONG                  StartLen,
-    _In_ ULONG                  Offset,
-    _In_ PXENVIF_PACKET_PAYLOAD Payload,
-    _In_ ULONG                  Length
+    _In_ XENVIF_PARSE_PULLUP                Pullup,
+    _In_ PVOID                              Argument,
+    _Inout_updates_bytes_(StartLen) PUCHAR  StartVa,
+    _In_ ULONG                              StartLen,
+    _In_ ULONG                              Offset,
+    _In_ PXENVIF_PACKET_PAYLOAD             Payload,
+    _In_ ULONG                              Length
     )
 {
     ASSERT3U(StartLen, >, Offset);
@@ -68,16 +68,16 @@ __ParsePullup(
=20
 static FORCEINLINE NTSTATUS
 __ParseTcpHeader(
-    _In_ PUCHAR                         StartVa,
-    _In_ ULONG                          StartLen,
-    _In_ ULONG                          Offset,
-    _In_ XENVIF_PARSE_PULLUP            Pullup,
-    _In_ PVOID                          Argument,
-    _Inout_ PXENVIF_PACKET_PAYLOAD      Payload,
-    _Out_ PXENVIF_PACKET_INFO           Info
+    _Inout_updates_bytes_(StartLen) PUCHAR  StartVa,
+    _In_ ULONG                              StartLen,
+    _In_ ULONG                              Offset,
+    _In_ XENVIF_PARSE_PULLUP                Pullup,
+    _In_ PVOID                              Argument,
+    _Inout_ PXENVIF_PACKET_PAYLOAD          Payload,
+    _Out_ PXENVIF_PACKET_INFO               Info
     )
 {
-    PTCP_HEADER                         Header;
+    PTCP_HEADER                             Header;
=20
     Info->TcpHeader=2EOffset =3D Offset;
=20
@@ -138,13 +138,13 @@ fail1:
=20
 static FORCEINLINE NTSTATUS
 __ParseUdpHeader(
-    _In_ PUCHAR                     StartVa,
-    _In_ ULONG                      StartLen,
-    _In_ ULONG                      Offset,
-    _In_ XENVIF_PARSE_PULLUP        Pullup,
-    _In_ PVOID                      Argument,
-    _Inout_ PXENVIF_PACKET_PAYLOAD  Payload,
-    _Out_ PXENVIF_PACKET_INFO       Info
+    _Inout_updates_bytes_(StartLen) PUCHAR  StartVa,
+    _In_ ULONG                              StartLen,
+    _In_ ULONG                              Offset,
+    _In_ XENVIF_PARSE_PULLUP                Pullup,
+    _In_ PVOID                              Argument,
+    _Inout_ PXENVIF_PACKET_PAYLOAD          Payload,
+    _Out_ PXENVIF_PACKET_INFO               Info
     )
 {
     Info->UdpHeader=2EOffset =3D Offset;
@@ -174,19 +174,19 @@ fail1:
=20
 static FORCEINLINE NTSTATUS
 __ParseIpVersion4Header(
-    _In_ PUCHAR                         StartVa,
-    _In_ ULONG                          StartLen,
-    _In_ ULONG                          Offset,
-    _In_ XENVIF_PARSE_PULLUP            Pullup,
-    _In_ PVOID                          Argument,
-    _Inout_ PXENVIF_PACKET_PAYLOAD      Payload,
-    _Out_ PXENVIF_PACKET_INFO           Info
+    _Inout_updates_bytes_(StartLen) PUCHAR  StartVa,
+    _In_ ULONG                              StartLen,
+    _In_ ULONG                              Offset,
+    _In_ XENVIF_PARSE_PULLUP                Pullup,
+    _In_ PVOID                              Argument,
+    _Inout_ PXENVIF_PACKET_PAYLOAD          Payload,
+    _Out_ PXENVIF_PACKET_INFO               Info
     )
 {
-    PIPV4_HEADER                        Header;
-    USHORT                              PacketLength;
-    USHORT                              FragmentOffsetAndFlags;
-    NTSTATUS                            status;
+    PIPV4_HEADER                            Header;
+    USHORT                                  PacketLength;
+    USHORT                                  FragmentOffsetAndFlags;
+    NTSTATUS                                status;
=20
     Info->IpHeader=2EOffset =3D Offset;
=20
@@ -289,21 +289,21 @@ fail1:
=20
 static FORCEINLINE NTSTATUS
 __ParseIpVersion6Header(
-    _In_ PUCHAR                         StartVa,
-    _In_ ULONG                          StartLen,
-    _In_ ULONG                          Offset,
-    _In_ XENVIF_PARSE_PULLUP            Pullup,
-    _In_ PVOID                          Argument,
-    _Inout_ PXENVIF_PACKET_PAYLOAD      Payload,
-    _Out_ PXENVIF_PACKET_INFO           Info
+    _Inout_updates_bytes_(StartLen) PUCHAR  StartVa,
+    _In_ ULONG                              StartLen,
+    _In_ ULONG                              Offset,
+    _In_ XENVIF_PARSE_PULLUP                Pullup,
+    _In_ PVOID                              Argument,
+    _Inout_ PXENVIF_PACKET_PAYLOAD          Payload,
+    _Out_ PXENVIF_PACKET_INFO               Info
     )
 {
-    PIPV6_HEADER                        Header;
-    USHORT                              PayloadLength;
-    UCHAR                               NextHeader;
-    ULONG                               Count;
-    BOOLEAN                             Finished;
-    NTSTATUS                            status;
+    PIPV6_HEADER                            Header;
+    USHORT                                  PayloadLength;
+    UCHAR                                   NextHeader;
+    ULONG                                   Count;
+    BOOLEAN                                 Finished;
+    NTSTATUS                                status;
=20
     Info->IpHeader=2EOffset =3D Offset;
=20
@@ -493,16 +493,16 @@ fail1:
=20
 static FORCEINLINE NTSTATUS
 __ParseLLCSnapHeader(
-    _In_ PUCHAR                         StartVa,
-    _In_ ULONG                          StartLen,
-    _In_ ULONG                          Offset,
-    _In_ XENVIF_PARSE_PULLUP            Pullup,
-    _In_ PVOID                          Argument,
-    _Inout_ PXENVIF_PACKET_PAYLOAD      Payload,
-    _Out_ PXENVIF_PACKET_INFO           Info
+    _Inout_updates_bytes_(StartLen) PUCHAR  StartVa,
+    _In_ ULONG                              StartLen,
+    _In_ ULONG                              Offset,
+    _In_ XENVIF_PARSE_PULLUP                Pullup,
+    _In_ PVOID                              Argument,
+    _Inout_ PXENVIF_PACKET_PAYLOAD          Payload,
+    _Out_ PXENVIF_PACKET_INFO               Info
     )
 {
-    PLLC_SNAP_HEADER                    Header;
+    PLLC_SNAP_HEADER                        Header;
=20
     Info->LLCSnapHeader=2EOffset =3D Offset;
=20
@@ -552,19 +552,19 @@ fail1:
=20
 static FORCEINLINE NTSTATUS
 __ParseEthernetHeader(
-    _In_ PUCHAR                         StartVa,
-    _In_ ULONG                          StartLen,
-    _In_ ULONG                          Offset,
-    _In_ XENVIF_PARSE_PULLUP            Pullup,
-    _In_ PVOID                          Argument,
-    _Inout_ PXENVIF_PACKET_PAYLOAD      Payload,
-    _Out_ PXENVIF_PACKET_INFO           Info
+    _Inout_updates_bytes_(StartLen) PUCHAR  StartVa,
+    _In_ ULONG                              StartLen,
+    _In_ ULONG                              Offset,
+    _In_ XENVIF_PARSE_PULLUP                Pullup,
+    _In_ PVOID                              Argument,
+    _Inout_ PXENVIF_PACKET_PAYLOAD          Payload,
+    _Out_ PXENVIF_PACKET_INFO               Info
     )
 {
-    PETHERNET_HEADER                    Header;
-    USHORT                              TypeOrLength;
-    BOOLEAN                             IsLLC;
-    NTSTATUS                            status;
+    PETHERNET_HEADER                        Header;
+    USHORT                                  TypeOrLength;
+    BOOLEAN                                 IsLLC;
+    NTSTATUS                                status;
=20
     Info->EthernetHeader=2EOffset =3D Offset;
=20
@@ -656,12 +656,12 @@ fail1:
=20
 NTSTATUS
 ParsePacket(
-    _In_ PUCHAR                     StartVa,
-    _In_ ULONG                      StartLen,
-    _In_ XENVIF_PARSE_PULLUP        Pullup,
-    _In_ PVOID                      Argument,
-    _Inout_ PXENVIF_PACKET_PAYLOAD  Payload,
-    _Out_ PXENVIF_PACKET_INFO       Info
+    _Inout_updates_bytes_(StartLen) PUCHAR  StartVa,
+    _In_ ULONG                              StartLen,
+    _In_ XENVIF_PARSE_PULLUP                Pullup,
+    _In_ PVOID                              Argument,
+    _Inout_ PXENVIF_PACKET_PAYLOAD          Payload,
+    _Out_ PXENVIF_PACKET_INFO               Info
     )
 {
     ASSERT(IsZeroMemory(Info, sizeof (XENVIF_PACKET_INFO)));
diff --git a/src/xenvif/pdo=2Ec b/src/xenvif/pdo=2Ec
index e8c9067=2E=2E18ffe7a 100644
--- a/src/xenvif/pdo=2Ec
+++ b/src/xenvif/pdo=2Ec
@@ -926,11 +926,11 @@ PdoTranslateBusAddress(
=20
 ULONG
 PdoSetBusData(
-    _In_ PXENVIF_PDO    Pdo,
-    _In_ ULONG          DataType,
-    _In_ PVOID          Buffer,
-    _In_ ULONG          Offset,
-    _In_ ULONG          Length
+    _In_ PXENVIF_PDO                Pdo,
+    _In_ ULONG                      DataType,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Offset,
+    _In_ ULONG                      Length
     )
 {
     Trace("<=3D=3D=3D>\n");
@@ -944,11 +944,11 @@ PdoSetBusData(
=20
 ULONG
 PdoGetBusData(
-    _In_ PXENVIF_PDO    Pdo,
-    _In_ ULONG          DataType,
-    _In_ PVOID          Buffer,
-    _In_ ULONG          Offset,
-    _In_ ULONG          Length
+    _In_ PXENVIF_PDO                Pdo,
+    _In_ ULONG                      DataType,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Offset,
+    _In_ ULONG                      Length
     )
 {
     Trace("<=3D=3D=3D>\n");
diff --git a/src/xenvif/pdo=2Eh b/src/xenvif/pdo=2Eh
index 517183a=2E=2Ecb1f8ef 100644
--- a/src/xenvif/pdo=2Eh
+++ b/src/xenvif/pdo=2Eh
@@ -112,20 +112,20 @@ PdoTranslateBusAddress(
=20
 extern ULONG
 PdoSetBusData(
-    _In_ PXENVIF_PDO    Pdo,
-    _In_ ULONG          DataType,
-    _In_ PVOID          Buffer,
-    _In_ ULONG          Offset,
-    _In_ ULONG          Length
+    _In_ PXENVIF_PDO                Pdo,
+    _In_ ULONG                      DataType,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Offset,
+    _In_ ULONG                      Length
     );
=20
 extern ULONG
 PdoGetBusData(
-    _In_ PXENVIF_PDO    Pdo,
-    _In_ ULONG          DataType,
-    _In_ PVOID          Buffer,
-    _In_ ULONG          Offset,
-    _In_ ULONG          Length
+    _In_ PXENVIF_PDO                Pdo,
+    _In_ ULONG                      DataType,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Offset,
+    _In_ ULONG                      Length
     );
=20
 extern PETHERNET_ADDRESS
diff --git a/src/xenvif/receiver=2Ec b/src/xenvif/receiver=2Ec
index 7ddb1e2=2E=2Eb25d84d 100644
--- a/src/xenvif/receiver=2Ec
+++ b/src/xenvif/receiver=2Ec
@@ -648,13 +648,13 @@ ReceiverRingProcessChecksum(
=20
 static BOOLEAN
 ReceiverRingPullup(
-    _In_ PVOID                      Argument,
-    _Inout_ PUCHAR                  DestinationVa,
-    _Inout_ PXENVIF_PACKET_PAYLOAD  Payload,
-    _In_ ULONG                      Length
+    _In_ PVOID                          Argument,
+    _Out_writes_bytes_(Length) PUCHAR   DestinationVa,
+    _Inout_ PXENVIF_PACKET_PAYLOAD      Payload,
+    _In_ ULONG                          Length
     )
 {
-    PMDL                            Mdl;
+    PMDL                                Mdl;
=20
     Mdl =3D Payload->Mdl;
     ASSERT3U(Payload->Offset, =3D=3D, 0);
@@ -4009,15 +4009,15 @@ fail1:
 _IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE NTSTATUS
 __ReceiverSetQueueAffinities(
-    _In_ PXENVIF_RECEIVER   Receiver,
-    _In_ PPROCESSOR_NUMBER  QueueAffinities,
-    _In_ ULONG              Count
+    _In_ PXENVIF_RECEIVER               Receiver,
+    _In_reads_(Count) PPROCESSOR_NUMBER QueueAffinities,
+    _In_ ULONG                          Count
     )
 {
-    PXENVIF_FRONTEND        Frontend;
-    ULONG                   Index;
-    NTSTATUS                status;
-    KIRQL                   Irql;
+    PXENVIF_FRONTEND                    Frontend;
+    ULONG                               Index;
+    NTSTATUS                            status;
+    KIRQL                               Irql;
=20
     Frontend =3D Receiver->Frontend;
=20
diff --git a/src/xenvif/registry=2Ec b/src/xenvif/registry=2Ec
index 4586079=2E=2E76bfddb 100644
--- a/src/xenvif/registry=2Ec
+++ b/src/xenvif/registry=2Ec
@@ -1155,17 +1155,17 @@ fail1:
=20
 NTSTATUS
 RegistryQueryBinaryValue(
-    _In_ HANDLE                     Key,
-    _In_ PSTR                       Name,
-    _Outptr_ PVOID                  *Buffer,
-    _Out_ PULONG                    Length
+    _In_ HANDLE                             Key,
+    _In_ PSTR                               Name,
+    _Outptr_result_buffer_(*Length) PVOID   *Buffer,
+    _Out_ PULONG                            Length
     )
 {
-    ANSI_STRING                     Ansi;
-    UNICODE_STRING                  Unicode;
-    PKEY_VALUE_PARTIAL_INFORMATION  Partial;
-    ULONG                           Size;
-    NTSTATUS                        status;
+    ANSI_STRING                             Ansi;
+    UNICODE_STRING                          Unicode;
+    PKEY_VALUE_PARTIAL_INFORMATION          Partial;
+    ULONG                                   Size;
+    NTSTATUS                                status;
=20
     RtlInitAnsiString(&Ansi, Name);
=20
@@ -1242,7 +1242,7 @@ NTSTATUS
 RegistryUpdateBinaryValue(
     _In_ HANDLE                     Key,
     _In_ PSTR                       Name,
-    _In_ PVOID                      Buffer,
+    _In_reads_bytes_(Length) PVOID  Buffer,
     _In_ ULONG                      Length
     )
 {
diff --git a/src/xenvif/registry=2Eh b/src/xenvif/registry=2Eh
index b77e4fb=2E=2Ec9a5488 100644
--- a/src/xenvif/registry=2Eh
+++ b/src/xenvif/registry=2Eh
@@ -165,18 +165,18 @@ RegistryQuerySzValue(
=20
 extern NTSTATUS
 RegistryQueryBinaryValue(
-    _In_ HANDLE     Key,
-    _In_ PSTR       Name,
-    _Outptr_ PVOID  *Buffer,
-    _Out_ PULONG    Length
+    _In_ HANDLE                             Key,
+    _In_ PSTR                               Name,
+    _Outptr_result_buffer_(*Length) PVOID   *Buffer,
+    _Out_ PULONG                            Length
     );
=20
 extern NTSTATUS
 RegistryUpdateBinaryValue(
-    _In_ HANDLE Key,
-    _In_ PSTR   Name,
-    _In_ PVOID  Buffer,
-    _In_ ULONG  Length
+    _In_ HANDLE                     Key,
+    _In_ PSTR                       Name,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Length
     );
=20
 extern NTSTATUS
diff --git a/src/xenvif/transmitter=2Ec b/src/xenvif/transmitter=2Ec
index 2549162=2E=2Eaff06b7 100644
--- a/src/xenvif/transmitter=2Ec
+++ b/src/xenvif/transmitter=2Ec
@@ -788,14 +788,14 @@ TransmitterRingDebugCallback(
=20
 static BOOLEAN
 TransmitterPullup(
-    _In_ PVOID                      Argument,
-    _Inout_ PUCHAR                  DestinationVa,
-    _Inout_ PXENVIF_PACKET_PAYLOAD  Payload,
-    _In_ ULONG                      Length
+    _In_ PVOID                          Argument,
+    _Out_writes_bytes_(Length) PUCHAR   DestinationVa,
+    _Inout_ PXENVIF_PACKET_PAYLOAD      Payload,
+    _In_ ULONG                          Length
     )
 {
-    PMDL                            Mdl;
-    ULONG                           Offset;
+    PMDL                                Mdl;
+    ULONG                               Offset;
=20
     UNREFERENCED_PARAMETER(Argument);
=20
@@ -5073,9 +5073,9 @@ TransmitterTeardown(
=20
 static FORCEINLINE VOID
 __TransmitterHashAccumulate(
-    _Inout_ PULONG  Accumulator,
-    _In_ PUCHAR     Array,
-    _In_ ULONG      Length
+    _Inout_ PULONG                  Accumulator,
+    _In_reads_bytes_(Length) PUCHAR Array,
+    _In_ ULONG                      Length
     )
 {
     ULONG           Current;
diff --git a/src/xenvif/vif=2Ec b/src/xenvif/vif=2Ec
index 279df15=2E=2Ec8dc446 100644
--- a/src/xenvif/vif=2Ec
+++ b/src/xenvif/vif=2Ec
@@ -840,14 +840,14 @@ VifMacQueryMulticastAddresses(
=20
 static NTSTATUS
 VifMacSetMulticastAddresses(
-    _In_ PINTERFACE         Interface,
-    _Out_ PETHERNET_ADDRESS Address,
-    _In_ ULONG              Count
+    _In_ PINTERFACE                     Interface,
+    _In_reads_(Count) PETHERNET_ADDRESS Address,
+    _In_ ULONG                          Count
     )
 {
-    PXENVIF_VIF_CONTEXT     Context =3D Interface->Context;
-    ULONG                   Index;
-    NTSTATUS                status;
+    PXENVIF_VIF_CONTEXT                 Context =3D Interface->Context;
+    ULONG                               Index;
+    NTSTATUS                            status;
=20
     status =3D STATUS_INVALID_PARAMETER;
     for (Index =3D 0; Index < Count; Index++) {
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.d2.b3e2e12e677acde1.1a12fa3d092.a5bdb04c909b7013=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 12 10:23:58 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 12 Oct 2026 10:23:58 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1446108.1662145 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGDCI-0005oa-Hf; Mon, 12 Oct 2026 10:23:58 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1446108.1662145; Mon, 12 Oct 2026 10:23:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGDCH-0005mu-NQ; Mon, 12 Oct 2026 10:23:57 +0000
Received: by outflank-mailman (input) for mailman id 1446108;
 Mon, 12 Oct 2026 10:23:56 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3dfc800080d7@swg.vates.tech>)
 id 1xGDCF-0005YG-F8
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 10:23:55 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGDCE-00BXVx-Pk
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 12:23:54 +0200
Received: from [10.42.69.10] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3dfc800080d7@swg.vates.tech>)
 id 6accb534-bab6-0a2a0a5309dd-0a2a450aa3ea-10
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 12:23:54 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-4011c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3dfc800080d7@swg.vates.tech>)
 id 6accb53a-f2d2-0a2a450a0019-b9ff1c22b3cf-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 12:23:54 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a12fa3dfc800080d7.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 12 Oct 2026 10:23:51 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 86EDE82A9F;
 Mon, 12 Oct 2026 12:23:50 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=BHZ18bnABM21iey9sEvG2sUs9T8LlSTxc8H9SibKN7I=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=O0IE8/tY3Ijt0s1sD3pJ6J1shU5PaJk9whYlwTXTn5PZZjSlv6TC4p6pPLC21oGnG1j+WrLok
 7vMaCvfNp9VjrHVe8ifXM8mJ52QNYAkGwg1nW+cgj9NDnfqwAgTfHMx9+RcHRCmGF/ZtUFNTLge
 DKPQmhqWNbk5V0kajt/bFR2YibVgoTXQzEhx3B4USKiIn8jrVTL866foy23T4YFCsFnkynS0I+B
 v3MGHYFx81e01JMn4pBVAgJS68SS9OYho0h2xRsggt0rBrjz1WF7otpf+I9T1h0rdb4nFHYWsN8
 54eXZzjF9pP2pgkoOg3SFqpD5/mFeSNHMybxt6GwhSiQ==
X-Zone-Loop: 7042696639b78b5f2ebe4161379ad515f7e0997c2ff7
x-campaign-type: default
x-transaction-id: b262c955-3799-4ceb-bbfb-3c4920e8669f
x-swg-uid: 01-c826603c-f715-42ef-ac23-910594cefaa1
X-Mailer: Sweego
Message-ID:
 <1791800631.8631fc262581453bbf619ec5b2062170.1a12fa3dfc800080d7@vates.tech>
x-swg-bid: 1791800631.8631fc262581453bbf619ec5b2062170.1a12fa3dfc800080d7
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 19/21] xenvif: Assert non-NULL pointers that code analysis cannot prove
Date: Mon, 12 Oct 2026 12:23:31 +0200
In-Reply-To: <1791800371.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@vates.tech>
References: <1791800371.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.df.cbbb997169e2d99e.1a12fa3dd70.296657250410f69c=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791800630640
X-purgate-ID: tlsNG-4011c0/1791800634-526DECFC-245FD8C3/0/0
X-purgate-type: clean
X-purgate-size: 4490

---=Part.df.cbbb997169e2d99e.1a12fa3dd70.296657250410f69c=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Code analysis reports that some pointers could be NULL when passed to
functions that require a valid pointer: the grant entry and the MDL of a
pending receiver fragment, and the rings released in ReceiverTeardown and
TransmitterTeardown=2E They cannot be NULL here, because xenvif sets them
itself during setup=2E Assert this before each use=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xenvif/receiver=2Ec    |  6 ++++++
 src/xenvif/transmitter=2Ec |  2 ++
 src/xenvif/vif=2Ec         | 26 ++++++++++++++++++++------
 3 files changed, 28 insertions(+), 6 deletions(-)

diff --git a/src/xenvif/receiver=2Ec b/src/xenvif/receiver=2Ec
index 68c2288=2E=2E3249d91 100644
--- a/src/xenvif/receiver=2Ec
+++ b/src/xenvif/receiver=2Ec
@@ -1929,6 +1929,8 @@ __ReceiverRingEmpty(
         Mdl =3D Fragment->Context;
         Fragment->Context =3D NULL;
=20
+        ASSERT3P(Fragment->Entry, !=3D, NULL);
+
         (VOID) XENBUS_GNTTAB(RevokeForeignAccess,
                              &Receiver->GnttabInterface,
                              Ring->GnttabCache,
@@ -3668,6 +3670,10 @@ ReceiverTeardown(
     while (--Index >=3D 0) {
         PXENVIF_RECEIVER_RING   Ring =3D Receiver->Ring[Index];
=20
+        // As Ring is expected to be a valid pointer,=20
+        // we assert it is not NULL before proceeding=2E
+        ASSERT3P(Ring, !=3D, NULL);
+
         Receiver->Ring[Index] =3D NULL;
         __ReceiverRingTeardown(Ring);
     }
diff --git a/src/xenvif/transmitter=2Ec b/src/xenvif/transmitter=2Ec
index 3263089=2E=2Ed3d77bd 100644
--- a/src/xenvif/transmitter=2Ec
+++ b/src/xenvif/transmitter=2Ec
@@ -5022,6 +5022,8 @@ TransmitterTeardown(
     while (--Index >=3D 0) {
         PXENVIF_TRANSMITTER_RING    Ring =3D Transmitter->Ring[Index];
=20
+        ASSERT3P(Ring, !=3D, NULL);
+
         Transmitter->Ring[Index] =3D NULL;
         __TransmitterRingTeardown(Ring);
     }
diff --git a/src/xenvif/vif=2Ec b/src/xenvif/vif=2Ec
index c8dc446=2E=2E69ec6b1 100644
--- a/src/xenvif/vif=2Ec
+++ b/src/xenvif/vif=2Ec
@@ -249,9 +249,17 @@ VifCallbackVersion8(
     _In_ union _XENVIF_VIF_CALLBACK_PARAMETERS_V9   *Parameters
     )
 {
-    PXENVIF_VIF_CONTEXT                             Context =3D _Argument=
;
-    XENVIF_VIF_CALLBACK_V8                          Callback =3D Context-=
>CallbackVersion8;
-    PVOID                                           Argument =3D Context-=
>ArgumentVersion8;
+    PXENVIF_VIF_CONTEXT                             Context;
+    XENVIF_VIF_CALLBACK_V8                          Callback;
+    PVOID                                           Argument;
+
+    // As _Argument is expected to be a valid context pointer,=20
+    // we assert it is not NULL before proceeding=2E
+    ASSERT3P(_Argument, !=3D, NULL);
+    Context =3D _Argument;
+    Callback =3D Context->CallbackVersion8;
+    Argument =3D Context->ArgumentVersion8;
+
=20
     switch (Type) {
     case XENVIF_TRANSMITTER_RETURN_PACKET: {
@@ -311,11 +319,17 @@ VifCallbackVersion9(
 {
 #define XENVIF_RECEIVER_QUEUE_MAX 1024 // Chosen to match IN_NDIS_MAX in =
XENNET
=20
-    PXENVIF_VIF_CONTEXT                             Context =3D _Argument=
;
-    XENVIF_VIF_CALLBACK_V9                          Callback =3D Context-=
>CallbackVersion9;
-    PVOID                                           Argument =3D Context-=
>ArgumentVersion9;
+    PXENVIF_VIF_CONTEXT                             Context;
+    XENVIF_VIF_CALLBACK_V9                          Callback;
+    PVOID                                           Argument;
     union _XENVIF_VIF_CALLBACK_PARAMETERS_V9        ParametersVersion9;
=20
+    ASSERT3P(_Argument, !=3D, NULL);
+   =20
+    Context =3D _Argument;
+    Callback =3D Context->CallbackVersion9;
+    Argument =3D Context->ArgumentVersion9;
+
     switch (Type) {
     case XENVIF_TRANSMITTER_RETURN_PACKET:
         ParametersVersion9=2ETransmitterReturnPacket=2ECookie =3D Paramet=
ers->TransmitterReturnPacket=2ECookie;
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.df.cbbb997169e2d99e.1a12fa3dd70.296657250410f69c=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 12 10:23:59 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 12 Oct 2026 10:23:59 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1446105.1662151 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGDCJ-0005pw-0C; Mon, 12 Oct 2026 10:23:59 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1446105.1662151; Mon, 12 Oct 2026 10:23:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGDCH-0005oV-Vl; Mon, 12 Oct 2026 10:23:57 +0000
Received: by outflank-mailman (input) for mailman id 1446105;
 Mon, 12 Oct 2026 10:23:55 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3dff800080d7@swg.vates.tech>)
 id 1xGDCF-0005WS-3E
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 10:23:55 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGDCE-00ECpK-FE
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 12:23:54 +0200
Received: from [10.42.69.4] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3dff800080d7@swg.vates.tech>)
 id 6accb52d-e002-0a2a0a5209dd-0a2a4504d294-24
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 12:23:54 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-ebf023.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3dff800080d7@swg.vates.tech>)
 id 6accb538-b57f-0a2a45040019-b9ff1c129951-4
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 12:23:54 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a12fa3dff800080d7.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 12 Oct 2026 10:23:51 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id C040782AAC;
 Mon, 12 Oct 2026 12:23:50 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=+bmZxJxruWrHPPmEIBEqCbTT0JnH9b949qt0occkvyc=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=VbPNGfxtboT2VyRrn0KXssvi6T+tnAxIOgvnHtVhGQhHN/P70yYgLIW0u2WgHgRB3APzO3FhO
 xd6DnIgObFZ4Zikz3sELr22iMHJVEsSr/ld+Vgk3dyW0RV7klXfpNKrk8f90cl8ryiuN+8Rl6QP
 K0Wpi4rwXa/YHPTTR/qzHbgc8raAvECLPLs7roM9C7JCs04OLxGxKbZxTUS+NAndU75LVjUkBAQ
 eY9CtJ81mWR/XDehp5HJj4F9q4L9qa48UMx6tZyQG/vgdLCqhjDA1TSyr8SsMrlXqivwTcKKSsN
 kXsi38k0bBVK2LLbo/ntE4/i6bqNxrfblDFsvdVzXcig==
X-Zone-Loop: f11e4ad5e5feabc09037629d2001b231672d81949b5d
x-campaign-type: default
x-transaction-id: 1492a739-b236-44cd-88f5-23b8f44cc9a3
x-swg-uid: 01-deb7ef88-7577-4d7e-80c9-d1dab0c29755
X-Mailer: Sweego
Message-ID:
 <1791800631.8631fc262581453bbf619ec5b2062170.1a12fa3dff800080d7@vates.tech>
x-swg-bid: 1791800631.8631fc262581453bbf619ec5b2062170.1a12fa3dff800080d7
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 20/21] xenvif: Check the statistic name in frontend
Date: Mon, 12 Oct 2026 12:23:32 +0200
In-Reply-To: <1791800371.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@vates.tech>
References: <1791800371.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.e0.542a3754e054027c.1a12fa3de5c.61a92433df32d297=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791800630876
X-purgate-ID: tlsNG-ebf023/1791800634-C34C3B50-BDD3C5E2/0/0
X-purgate-type: clean
X-purgate-size: 1271

---=Part.e0.542a3754e054027c.1a12fa3de5c.61a92433df32d297=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

CodeAnalysis raised a warning on this condition=2E
Name comes from the VIF interface caller and was only checked with an
ASSERT, so a release build could read past the end of the statistics
array=2E Return early when the name is out of range=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xenvif/frontend=2Ec | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/src/xenvif/frontend=2Ec b/src/xenvif/frontend=2Ec
index a35ed78=2E=2E4b4e69f 100644
--- a/src/xenvif/frontend=2Ec
+++ b/src/xenvif/frontend=2Ec
@@ -1800,6 +1800,10 @@ __FrontendQueryStatistic(
     ASSERT3U(Name, <, XENVIF_VIF_STATISTIC_COUNT);
=20
     *Value =3D 0;
+
+    if (Name >=3D XENVIF_VIF_STATISTIC_COUNT)
+        return;
+
     for (Index =3D 0; Index < Frontend->StatisticsCount; Index++) {
         PXENVIF_FRONTEND_STATISTICS Statistics;
=20
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.e0.542a3754e054027c.1a12fa3de5c.61a92433df32d297=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 12 10:23:59 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 12 Oct 2026 10:23:59 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1446104.1662154 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGDCJ-0005rN-2b; Mon, 12 Oct 2026 10:23:59 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1446104.1662154; Mon, 12 Oct 2026 10:23:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGDCI-0005pY-4K; Mon, 12 Oct 2026 10:23:58 +0000
Received: by outflank-mailman (input) for mailman id 1446104;
 Mon, 12 Oct 2026 10:23:55 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3dca100080d7@swg.vates.tech>)
 id 1xGDCF-0005W9-19
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 10:23:55 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGDCE-00FmsG-DU
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 12:23:54 +0200
Received: from [10.42.69.1] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3dca100080d7@swg.vates.tech>)
 id 6accb52a-2eae-0a2a0a5409dd-0a2a45018ffe-24
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 12:23:54 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3dca100080d7@swg.vates.tech>)
 id 6accb53a-5984-0a2a45010019-b9ff1c23aaff-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 12:23:54 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a12fa3dca100080d7.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 12 Oct 2026 10:23:50 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id C9EDD82A9F;
 Mon, 12 Oct 2026 12:23:49 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=fO9BFdKoiR/3XLRttaQSwqrAbkJST182f+EJKeZ9a8k=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=RDHNTvR2ZNesag5JSQDvQwvVuqz6Ovk7it1dv9QzA98eez8iiuX3KYHPH4xrp2beRsXflCHuG
 1pyn9MqNk9Z7h7Bsr04bB9GKxTJUblaC7w19V8I0rvvyxJXOS3nUINs4VPtI2ZRU26UQlUBurXL
 aZmig7DbRAGHyB3GzDqnV2X0NIG3b8peM5mcG/uWtO0+VlMwULYh98CmTiUhVKSvObZ0da01Rb+
 Gu3k5N44M0I+aZwYrhLM6IXdileRLm9BPEeoaT7oBwX1KSm7biJsm7zBnJumGmDpUqrsdSmNGuM
 AjHAxJ1p6yCxIfwd16eFi7k6UfXyssMrnFk6kZspKOzw==
X-Zone-Loop: f7fa73ec9224b0d3386523bd8f17f7dc38e026d87b44
x-campaign-type: default
x-transaction-id: a9d81f73-50d6-4ec8-ba32-449168be1bcd
x-swg-uid: 01-e7d4b679-a0e2-497c-a290-5cb6b2f204b2
X-Mailer: Sweego
Message-ID:
 <1791800630.8631fc262581453bbf619ec5b2062170.1a12fa3dca100080d7@vates.tech>
x-swg-bid: 1791800630.8631fc262581453bbf619ec5b2062170.1a12fa3dca100080d7
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 16/21] receiver: fix annotation errors:
Date: Mon, 12 Oct 2026 12:23:28 +0200
In-Reply-To: <1791800371.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@vates.tech>
References: <1791800371.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.dc.796784d053aff1dc.1a12fa3daa0.bf2c0550c21ba8b5=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791800629920
X-purgate-ID: tlsNG-d62444/1791800634-1D67C757-BF4175E5/0/0
X-purgate-type: clean
X-purgate-size: 2777

---=Part.dc.796784d053aff1dc.1a12fa3daa0.bf2c0550c21ba8b5=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

* KSERVICE_ROUTINE is already annotated in wdm=2Eh and
ReceiverRingEvtchnCallback() reuse it with _Use_decl_annotations_ so no ne=
ed
to re-annotate it=2E

* __ReceiverRingTeardown and ReceiverRingTeardown read the Ring param befo=
re
updating it, so Ring should be annotated as _Inout_ in both cases=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xenvif/receiver=2Ec | 18 +++++++++---------
 src/xenvif/receiver=2Eh |  2 +-
 2 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/src/xenvif/receiver=2Ec b/src/xenvif/receiver=2Ec
index b25d84d=2E=2E68c2288 100644
--- a/src/xenvif/receiver=2Ec
+++ b/src/xenvif/receiver=2Ec
@@ -2335,13 +2335,13 @@ KSERVICE_ROUTINE    ReceiverRingEvtchnCallback;
 _Use_decl_annotations_
 BOOLEAN
 ReceiverRingEvtchnCallback(
-    _In_ PKINTERRUPT            InterruptObject,
-    _In_ PVOID                  Argument
+    PKINTERRUPT            InterruptObject,
+    PVOID                  Argument
     )
 {
-    PXENVIF_RECEIVER_RING       Ring =3D Argument;
-    PXENVIF_RECEIVER            Receiver;
-    PXENVIF_FRONTEND            Frontend;
+    PXENVIF_RECEIVER_RING  Ring =3D Argument;
+    PXENVIF_RECEIVER       Receiver;
+    PXENVIF_FRONTEND       Frontend;
=20
     UNREFERENCED_PARAMETER(InterruptObject);
=20
@@ -2992,7 +2992,7 @@ __ReceiverRingDisconnect(
=20
 static FORCEINLINE VOID
 __ReceiverRingTeardown(
-    _Out_ PXENVIF_RECEIVER_RING Ring
+    _Inout_ PXENVIF_RECEIVER_RING Ring
     )
 {
     PXENVIF_RECEIVER            Receiver;
@@ -3649,11 +3649,11 @@ ReceiverDisconnect(
 _IRQL_requires_(PASSIVE_LEVEL)
 VOID
 ReceiverTeardown(
-    _Out_ PXENVIF_RECEIVER  Receiver
+    _Inout_ PXENVIF_RECEIVER    Receiver
     )
 {
-    PXENVIF_FRONTEND        Frontend;
-    LONG                    Index;
+    PXENVIF_FRONTEND            Frontend;
+    LONG                        Index;
=20
     Frontend =3D Receiver->Frontend;
=20
diff --git a/src/xenvif/receiver=2Eh b/src/xenvif/receiver=2Eh
index d2b86fa=2E=2Ede00995 100644
--- a/src/xenvif/receiver=2Eh
+++ b/src/xenvif/receiver=2Eh
@@ -82,7 +82,7 @@ ReceiverDisconnect(
 _IRQL_requires_(PASSIVE_LEVEL)
 extern VOID
 ReceiverTeardown(
-    _Out_ PXENVIF_RECEIVER  Receiver
+    _Inout_ PXENVIF_RECEIVER    Receiver
     );
=20
 _IRQL_requires_max_(APC_LEVEL)
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.dc.796784d053aff1dc.1a12fa3daa0.bf2c0550c21ba8b5=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 12 10:23:59 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 12 Oct 2026 10:23:59 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1446107.1662150 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGDCI-0005sB-Vc; Mon, 12 Oct 2026 10:23:58 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1446107.1662150; Mon, 12 Oct 2026 10:23:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGDCI-0005qp-A1; Mon, 12 Oct 2026 10:23:58 +0000
Received: by outflank-mailman (input) for mailman id 1446107;
 Mon, 12 Oct 2026 10:23:55 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3e0e600080d7@swg.vates.tech>)
 id 1xGDCF-0005XG-8V
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 10:23:55 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGDCE-00Fmsh-K3
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 12:23:54 +0200
Received: from [10.42.69.11] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3e0e600080d7@swg.vates.tech>)
 id 6accb52f-8faa-0a2a0a5109dd-0a2a450bde56-38
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 12:23:54 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-42698a.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a12fa3e0e600080d7@swg.vates.tech>)
 id 6accb532-b7e8-0a2a450b0019-b9ff1c22b35b-7
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 12:23:54 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a12fa3e0e600080d7.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 12 Oct 2026 10:23:51 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 05FBB82A8A;
 Mon, 12 Oct 2026 12:23:51 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=DU9NhEr7RZHMs0pCNvVaHKX33liPB8DPwM8EY0S3QDs=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=R6e3/la12meKMLNxl+bb+ZoBScRXtgoFu28ZE+zOd7g+JhakTfpoxt0n5T5u2rSbhHlXYrNvT
 slzQl4SljoXSdML1ypQOvZBJYyLQR4r5xCaJ1h6d/wOy7zGjonPXkY45VjqNDALdK3tqv+yfsWS
 vB1SrZJz4JxmkRe4IeGsM4iEvUxvg1TjdrxH9YPKnpUQwe6M+nA0KEPdEzl+dRxx3Zjq1MyIYiJ
 +GwX9fJ5XqfmJ7GxLrGqYhavfPvuhf5rV9wvEdkwb9uBtsLh6f7x2vH2EV2+PmQ2zURlVd38AtJ
 Fp1DViTZbePnXBrru/mbBNtSJugSJey8TwRkREpS7bVw==
X-Zone-Loop: 5d695a7f959c8f4ee0f1edf0eb37bd190ff8148f78a4
x-campaign-type: default
x-transaction-id: 52139ae0-5bb7-4a71-82b4-a37302ca7754
x-swg-uid: 01-4a2190a4-532e-4bee-b055-a0cbe8e8a682
X-Mailer: Sweego
Message-ID:
 <1791800631.8631fc262581453bbf619ec5b2062170.1a12fa3e0e600080d7@vates.tech>
x-swg-bid: 1791800631.8631fc262581453bbf619ec5b2062170.1a12fa3e0e600080d7
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 21/21] controller: fix annotations
Date: Mon, 12 Oct 2026 12:23:33 +0200
In-Reply-To: <1791800371.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@vates.tech>
References: <1791800371.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.e1.cabbd3b2bdd05235.1a12fa3df4a.4c79868569893f33=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791800631114
X-purgate-ID: tlsNG-42698a/1791800634-AA4DB9EA-81A846AF/0/0
X-purgate-type: clean
X-purgate-size: 2058

---=Part.e1.cabbd3b2bdd05235.1a12fa3df4a.4c79868569893f33=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

__ControllerAcquire|ReleaseLock() are wrappers on KeAcquireSpinLockAtDpcLev=
el()
which argument is annotated as Inout=2E
Annotate Controller accordingly in these and related functions=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xenvif/controller=2Ec | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/xenvif/controller=2Ec b/src/xenvif/controller=2Ec
index 37d10c4=2E=2E7a8b884 100644
--- a/src/xenvif/controller=2Ec
+++ b/src/xenvif/controller=2Ec
@@ -104,7 +104,7 @@ __ControllerFree(
 static FORCEINLINE VOID
 _IRQL_requires_(DISPATCH_LEVEL)
 __ControllerAcquireLock(
-    _Out_ PXENVIF_CONTROLLER    Controller
+    _Inout_ PXENVIF_CONTROLLER    Controller
     )
 {
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, DISPATCH_LEVEL);
@@ -115,7 +115,7 @@ __ControllerAcquireLock(
 static FORCEINLINE VOID
 _IRQL_requires_(DISPATCH_LEVEL)
 __ControllerReleaseLock(
-    _Out_ PXENVIF_CONTROLLER    Controller
+    _Inout_ PXENVIF_CONTROLLER    Controller
     )
 {
     KeReleaseSpinLockFromDpcLevel(&Controller->Lock);
@@ -125,7 +125,7 @@ _Acquires_nonreentrant_lock_(Controller)
 _IRQL_requires_(DISPATCH_LEVEL)
 static VOID
 ControllerAcquireLock(
-    _Out_ PXENVIF_CONTROLLER    Controller
+    _Inout_ PXENVIF_CONTROLLER    Controller
     )
 {
     __ControllerAcquireLock(Controller);
@@ -135,7 +135,7 @@ _Requires_lock_held_(Controller)
 _IRQL_requires_(DISPATCH_LEVEL)
 static VOID
 ControllerReleaseLock(
-    _Out_ PXENVIF_CONTROLLER    Controller
+    _Inout_ PXENVIF_CONTROLLER    Controller
     )
 {
     __ControllerReleaseLock(Controller);
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.e1.cabbd3b2bdd05235.1a12fa3df4a.4c79868569893f33=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 12 12:14:09 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 12 Oct 2026 12:14:09 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1446218.1662286 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGEuu-0003jY-PX; Mon, 12 Oct 2026 12:14:08 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1446218.1662286; Mon, 12 Oct 2026 12:14:08 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGEuu-0003jR-Mz; Mon, 12 Oct 2026 12:14:08 +0000
Received: by outflank-mailman (input) for mailman id 1446218;
 Mon, 12 Oct 2026 12:14:07 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <owen.smith@citrix.com>) id 1xGEut-0003j2-0u
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 12:14:07 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGEur-009s3e-Se
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 14:14:05 +0200
Received: from [10.42.69.3] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6acccf0d-e002-0a2a0a5209dd-0a2a4503903c-0
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 14:14:05 +0200
Received: from [40.107.200.41]
 (helo=CH5PR02CU005.outbound.protection.outlook.com)
 by tlsNG-33051d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6acccf0c-fae8-0a2a45030019-286bc829f968-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 14:14:05 +0200
Received: from SA6PR03MB7760.namprd03.prod.outlook.com (2603:10b6:806:43c::5)
 by SAAPR03MB661511.namprd03.prod.outlook.com (2603:10b6:802:300::6)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.496.20; Mon, 12 Oct
 2026 12:14:02 +0000
Received: from SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38]) by SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38%5]) with mapi id 15.21.0496.020; Mon, 12 Oct 2026
 12:14:02 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:x-ms-exchange-senderadcheck"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
 b=RFTXMDK7ubhJovtA6mbMArRCTGAejpXc6vNj/MKN0mr8IcJGCz/4YJJQANW2bcmEHILe7xATBstLbsqE8tp7Ol4Jl7r/SkUneIGpX1Z0lUXRoQSI5GebpCaPfzRJPy9iRQXUbb5Zmr5pLt2U3iXtzd2QxgvzrtyAmuaCyIZeDl6A1mRNHA1YiCFDckj7yPmaXOM1JN2i5Pi6K6Nv+tTCGCw9wFO47e7idktefK0PVhRkAMJlEo9oJmnPwBDpkv4v7Ww47g3AMMWA/fpPjFTWY0MhlyR0ABBn6sZK3k6AiUHVOpK+yVbzoiaxnfp3xY5k0LOxG1fEkHIFKEuOnFfivg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector10001;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=YWXlNkkG9v18nKvsD277BIUw8zgHaWhW+YaPfpyHM8o=;
 b=JtajcCK/Udxw5oRU9iHgHRZPfX8w9Ys4x8rjyqPYYe8CTo+Y43m9EpZ8bgYG3caBHdrkXh8kgdTcjZK24qKY31+ONOSHozaIcgqYar5dTFjzsHlwowDmSnY7Wh/bTbCt+kUA7UMZUloxs13k+FEXW/HGtXNXraollb6xmyWooOi5HIEN1p0tPBVqeMQUovDxgVqXURyLFWyeeTJXkQVRW0IYNiKLmsPjDFvy6AYz3iWkr4LZJMgROE9o2xFeNgSks8XbyupDTcfxL4NoLz2UCML2Yk/eeFMfPw5OYOFuARInmc7UUFdg1tMPn4blhbMA3XlFJsTdzRvojSSFGpDGaA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=YWXlNkkG9v18nKvsD277BIUw8zgHaWhW+YaPfpyHM8o=;
 b=G03Xdlc4910+mA3ie/BGMfWwcVPoUaUR1Z4TbnK8zYtGyD20dHSLHyj4/kKNgvSKKwAK2aqtuFJJlh7wuh+i3hY5v07cGmNbtptit/cLoSxw6zVfj8KqI58xoA16CdrzL4Ly+My+4hasnx04sp9g1qR7FyrKFe+mWXbBajZK8Zw=
From: Owen Smith <owen.smith@citrix.com>
To: =?iso-8859-1?Q?C=E9saire_Mounah?= <cesaire.mounah@vates.tech>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Subject: Re: [PATCH 20/21] xenvif: Check the statistic name in frontend
Thread-Topic: [PATCH 20/21] xenvif: Check the statistic name in frontend
Thread-Index: AQHdWjPRSGxRzJFFf06oQ8kYqWnWvLb5zXYW
Date: Mon, 12 Oct 2026 12:14:02 +0000
Message-ID:
 <SA6PR03MB7760745505A7B438B8166C09FE9F2@SA6PR03MB7760.namprd03.prod.outlook.com>
References:
 <1791800371.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@vates.tech>
 <1791800631.8631fc262581453bbf619ec5b2062170.1a12fa3dff800080d7@vates.tech>
In-Reply-To:
 <1791800631.8631fc262581453bbf619ec5b2062170.1a12fa3dff800080d7@vates.tech>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
msip_labels:
authentication-results: mx.microsoft.com 1; dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=citrix.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: SA6PR03MB7760:EE_|SAAPR03MB661511:EE_
x-ms-office365-filtering-correlation-id: 06092c72-ea2a-471f-d0e3-08df285a4dbd
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam:
 BCL:0;ARA:13230040|376014|366016|1800799024|23010399003|38070700021|56012099006|11063799006|4143699003|261009223027099003|10067099003|18002099003|22082099003|6133799003;
x-microsoft-antispam-message-info:
 ZhrcJRSK1I+YAEO/b15WwnyXw0ajt0lCBR+8VGeVfU3Qo5yqSMj9L8qBgZd8J12gHBDrqQJtF/eM/1wWMzMlyKN/+n5ndTicoLpa34NZBPa5UbpNm6DN6K5bchKgHjSHTuAL26QFjah+OoCh2h6eTVktKOU3TOjFbA2E5S3yZL/2h6DDNvg4Rm6BsxxG6dsOPaeVqYe+jFvk5asP225CQm5fvdWbWXOPktxnHs250RIsuT7gDt8Oc0E2EiTsnj8THec/Lly5NRcl5nBmKvXskqlGE9rCzRN5llaXfHizvFJP4U7tm3OrS2R/ohivD+f2jX6z8Nncb1rFx1S+amPWveu5+ETtuY5fiX6Vot7X9gw23LNLjfu18r+tf9Ex082/CKpsfvhcQqY6ygFhDxoMTMvL47YfRbwnCby2+oGBE6lG11bkWRBLwia2pIAj+inRPgbgfF0U8lXrdtflSNUzUV7+ENX9JDbvHrTVAzY3++xKn+mEM0FBbGLV0lnvptbH2BFuzxt5jhLIUuptgoTJzkfHfb7m3X6aTsBSfBITzEf0OluepddGu78tskXAiSa5HPqACxiP6HkIkQM7YYrVnRVvdmoe4ykZMHn8M9+Hss9/DywQX7rPpzFzd0N+MJ1u/z1Z2FoYnOh3QRgWYX0Sqbo1OMLNwWvbeD1sQ5Cf3RI=
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SA6PR03MB7760.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(366016)(1800799024)(23010399003)(38070700021)(56012099006)(11063799006)(4143699003)(261009223027099003)(10067099003)(18002099003)(22082099003)(6133799003);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?iso-8859-1?Q?CDI0hHy1Mo8kcJwKgMKrQmQ4ZWG6NOXwsvMc24q8m2HTf2OzUjQ7Vg0xUP?=
 =?iso-8859-1?Q?Zz2fxXSNlG7SzLaiwl7ffh4ED5wnAQD01VW3EtfYZsvdpWQnW+OitajxMG?=
 =?iso-8859-1?Q?rRrHlqBLk0HUeVrc9DNXy199QcwRfiq7zBDDTEqq5khgo6e4wYs/A9AjJL?=
 =?iso-8859-1?Q?aY4nAhzHXJnLSJSo+R+30yEGzdyLdoJk1aUJJz98aXc0OkXF7DTFJATurP?=
 =?iso-8859-1?Q?+SvPKogNKCqM4W38vDyD/v7Isws1rVo8O8yc5WR6ftn1IbF7GKO1/AyHdX?=
 =?iso-8859-1?Q?Gtpg9CHfIT3jBaiju3kQkSrPPRti3xpCrDVoSJouyY23mSs972I9andze+?=
 =?iso-8859-1?Q?YoFguFZ0LrkDDg7N73ZjTxY4lPOJy0vf+M8pClozu21WgEMjBvAkjj2jDm?=
 =?iso-8859-1?Q?+g+ZySjG3rQM+8sg6JY9M4oP+fGBu35QtK+1d4kNWtxO6Ehx115BSgXbP2?=
 =?iso-8859-1?Q?crl+KwPJzeoz5nWWoqbmKK6aW3MTGj46no7i5lpFqhR3t66P0tUEdaYa0w?=
 =?iso-8859-1?Q?n/fPNTiMNN2016dY9bTrXGZYOwHSNOBQRWPYkPNIvKJvHLILouSMyBFwXx?=
 =?iso-8859-1?Q?g7eFkZAGe77lKKWxswMD0jUMwESvWG+0hvy215ixpoMK6GLNJO4CCMUmv9?=
 =?iso-8859-1?Q?5ySH7XT6o+awLe1f2Qle8lzw3mQXhud8VUTaGFLQt/tB4tagegToKgrzx8?=
 =?iso-8859-1?Q?pVuf6JeNPlfrx6DJemvjI2IOd+BgGtAclrnqix8psxdwPYgCM6YASyXn5u?=
 =?iso-8859-1?Q?VtL3jLe4gVZw59wz+mAG5ZEsUpdiPfgAfh84UH3ZSn9TjYnBEX2vQ6VJU7?=
 =?iso-8859-1?Q?ohASzDkLl7icst9xMB8KHjEuf9wPUvo3mdtEux5TVUUMftYfcXJxhvkR9f?=
 =?iso-8859-1?Q?tzTknX8HSiO8fc8BZA+sUsxZAODYxkzjCgVmooyPhtbTBRizyDvociWlCu?=
 =?iso-8859-1?Q?GWa7rerLLIikXd9NxdXbqQXC8P5Zu/U3XyaCndmGqmcZAkRSJtSEhm6ZOV?=
 =?iso-8859-1?Q?K7D1KrbLAdpYb7abwi/MYjf35p2sE6VMHwNNMoID4sa77iOEICqMEPUQlG?=
 =?iso-8859-1?Q?spvPq8g2Y87dU7GQWhC8rVJrVXHlrN2nhDQVWuD6H3BQkrIJH3FTMeDWM2?=
 =?iso-8859-1?Q?korzPRmf7pEkhtx/MiYmiKcNfaUZHDW4vCUFzOslw3vO2yoIHiPRQvwCEV?=
 =?iso-8859-1?Q?zD4gEP6iDdql5jgUaoNxBYWhTQbnRdOrzEJgSQdkA69a7hCOoqXv3bC65Z?=
 =?iso-8859-1?Q?av7lmFfMQ6cu6MssY8VJOieE2hZr+1QnH2UkIxVFBpQr4T0dmXrh+oJVpi?=
 =?iso-8859-1?Q?hoBsWM6pDLvLbbpi8ZXlUfrlC121o7750fF+YPVbkb0veZxrGykqCPvsjZ?=
 =?iso-8859-1?Q?jca3T6NQLfrbJH+mx8mGecQXnBLi+RYT4I2oqiEjs4VUc8G02uxg5640it?=
 =?iso-8859-1?Q?XYNrHNXvUMJJTH/yqCEeZiwk87vnz8UIaPRjhSrZQMoT98v55ATpxMQv35?=
 =?iso-8859-1?Q?GA5IINvnomGe/Vs0hfIEB/jYyl7DfTzWWxbdVwG/2fGh9wmTftjq42WnZD?=
 =?iso-8859-1?Q?5PjZquAhFUAVyMVvTP09y1UUDKC1QcHbQSXtBMzBuc/kAjZmRTY+GchCNs?=
 =?iso-8859-1?Q?su1VgKRhUBD3SiEfQ349kVD6BywZXWRo1GheMap5+KSmdCiDkG2xxs7sBc?=
 =?iso-8859-1?Q?k732qcqSqDzkUMKy5mJ9gb4ChBEnClgKnk9xgO4dRLE1QwHz6mA30tJaE7?=
 =?iso-8859-1?Q?vPb40SAvdVaS6lByPngC1T7f0h2MbcMq0P3K5RqBk25Ed+?=
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-OriginatorOrg: citrix.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: SA6PR03MB7760.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 06092c72-ea2a-471f-d0e3-08df285a4dbd
X-MS-Exchange-CrossTenant-originalarrivaltime: 12 Oct 2026 12:14:02.5864
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: c6ItpkdnXReV4SenDqIVy9dNgnLRwv2AfuexfoJ08F6vdPiVe/Aj+TJNEc/6QJY4UzrqvY/7kceZHYFgHipsbA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: SAAPR03MB661511
X-purgate-ID: tlsNG-33051d/1791807245-6FAC44E9-7ECC0EFD/0/0
X-purgate-type: clean
X-purgate-size: 1979

This change isnt strictly necessary - the only callers of __FrontendQuerySt=
atistic
are the debug callback, which loops over all values of XENVIF_VIF_STATISTIC=
_*
and VifQueryStatistic, which already validates the statistic index is withi=
n
range (an additional check in the Query path is negligible difference)

I do get warnings where Name is cast to a ULONG
xenvif\src\xenvif\frontend.c(1811): warning C33010: Unchecked lower bound f=
or enum Name used as index
xenvif\src\xenvif\frontend.c(1845): warning C33010: Unchecked lower bound f=
or enum Name used as index

I'll post a follow up patch to resolve this

Owen

________________________________________
From: win-pv-devel <win-pv-devel-bounces@lists.xenproject.org> on behalf of=
 C=E9saire Mounah <cesaire.mounah@vates.tech>
Sent: 12 October 2026 11:23 AM
To: win-pv-devel@lists.xenproject.org
Cc: C=E9saire Mounah
Subject: [PATCH 20/21] xenvif: Check the statistic name in frontend

CodeAnalysis raised a warning on this condition.
Name comes from the VIF interface caller and was only checked with an
ASSERT, so a release build could read past the end of the statistics
array. Return early when the name is out of range.

Signed-off-by: C=E9saire Mounah <cesaire.mounah@vates.tech>
---
 src/xenvif/frontend.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/src/xenvif/frontend.c b/src/xenvif/frontend.c
index a35ed78..4b4e69f 100644
--- a/src/xenvif/frontend.c
+++ b/src/xenvif/frontend.c
@@ -1800,6 +1800,10 @@ __FrontendQueryStatistic(
     ASSERT3U(Name, <, XENVIF_VIF_STATISTIC_COUNT);

     *Value =3D 0;
+
+    if (Name >=3D XENVIF_VIF_STATISTIC_COUNT)
+        return;
+
     for (Index =3D 0; Index < Frontend->StatisticsCount; Index++) {
         PXENVIF_FRONTEND_STATISTICS Statistics;

--
2.55.0.windows.5



--
C=E9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen Orchestra - Vates solutions

web: https://vates.tech


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 12 12:15:17 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 12 Oct 2026 12:15:17 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1446219.1662291 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGEw0-0003s2-Ts; Mon, 12 Oct 2026 12:15:16 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1446219.1662291; Mon, 12 Oct 2026 12:15:16 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGEw0-0003rv-Qp; Mon, 12 Oct 2026 12:15:16 +0000
Received: by outflank-mailman (input) for mailman id 1446219;
 Mon, 12 Oct 2026 12:15:15 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <owen.smith@citrix.com>) id 1xGEvz-0003rp-Pu
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 12:15:15 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGEvy-005R2A-Tr
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 14:15:14 +0200
Received: from [10.42.69.4] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6acccf47-e002-0a2a0a5209dd-0a2a45049d50-38
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 14:15:14 +0200
Received: from [52.101.85.56]
 (helo=BYAPR05CU005.outbound.protection.outlook.com)
 by tlsNG-ebf023.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6acccf50-b57f-0a2a45040019-3465553869db-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 14:15:14 +0200
Received: from SA6PR03MB7760.namprd03.prod.outlook.com (2603:10b6:806:43c::5)
 by SAAPR03MB661511.namprd03.prod.outlook.com (2603:10b6:802:300::6)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.496.20; Mon, 12 Oct
 2026 12:15:11 +0000
Received: from SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38]) by SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38%5]) with mapi id 15.21.0496.020; Mon, 12 Oct 2026
 12:15:11 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:x-ms-exchange-senderadcheck"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
 b=opFPaZDTyCz4kSlZaA7DcboL8qSPJDYDeQons09tQHpMIIZl77+WdpFvbL0SooiIxo25bWgRMugVxl2ceTNEEbLYndP++LrsOvnD6JJ4dJqRemxUDbqF45krsaGUT3iwiHqbEmNpH2lGJvyhzOAW8CrOTanDUQNmHGU7LZ38CMcLqEWHVe941cHeYfwy0ZpQ338wK93PoRcagb7RNGHDKxNxAfpBUJdHTJswy+9FkYaaF91fCihkcuddBhD/3c1eCOigbiz1hvbnSUT0v774HRPm3S2MVIQTa/LrvEBEO2Cww4ZTevV+zp1vN+BWwZmKlnTW1L4VXBBUXqM+fjzYfQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector10001;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=oqWFgis7FZQtftIgFAZm4xbQz1DH9hryPCsFxmNSTys=;
 b=yWjw3+CCpZGiCUD/wXfwl/51YQ8a5Uoj46WeYHjD0cQpLUkyygUw3Cx2W4NBHY8sToSQZyPTOiFphEuo3530gusj6Z1pVcVm/fc22lbm61RDq+skcnq5e8dSC50Qw0mf+v9o2fm5ZHkvnG5ofAk2Gi9CeHRmSeI8Kx38xB1fyQgjZYao8Ou692PXzakcv5gMVgtoY2jdy4uPVp8Xza0xEp8ZA8AdLDnPl2nhc4145CmhcafjAjPrlBkGJsWgNSk/9ZKj4gIRSIbmnLdJuf/ZDo+3+XWtELptF7qmVPNCWGz8/fQH7v4gIGYOI0WOlsJFYfjNeggnbA+UOhFbk99xHQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=oqWFgis7FZQtftIgFAZm4xbQz1DH9hryPCsFxmNSTys=;
 b=uJfsAubo+wsz5pobaHhsfXGY6Y++M6qDzxOfSHi1jHCJ01QbFUloOxM+VU9KZ+MvNNjRWersupciA/8kI777RAM4SsQ5xjpJ48CMYutwYzhl8/ttu8flRxV5OKB0UOl+NdnBCbNF0pWlR4Snbm7C44RFHYIH5djOFNINYJ86uzo=
From: Owen Smith <owen.smith@citrix.com>
To: =?iso-8859-1?Q?C=E9saire_Mounah?= <cesaire.mounah@vates.tech>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Subject: Re: [PATCH 00/21] xenvif: update annotations to SAL 2.0
Thread-Topic: [PATCH 00/21] xenvif: update annotations to SAL 2.0
Thread-Index: AQHdWjM5yXkjGLVdpkOzXxuGXP+0Kbb50fYk
Date: Mon, 12 Oct 2026 12:15:11 +0000
Message-ID:
 <SA6PR03MB7760A41357DFABB108869D02FE9F2@SA6PR03MB7760.namprd03.prod.outlook.com>
References:
 <1791800371.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@vates.tech>
In-Reply-To:
 <1791800371.8631fc262581453bbf619ec5b2062170.1a12f9fe86400080d7@vates.tech>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
msip_labels:
authentication-results: mx.microsoft.com 1; dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=citrix.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: SA6PR03MB7760:EE_|SAAPR03MB661511:EE_
x-ms-office365-filtering-correlation-id: 50c93b79-06a1-496e-2224-08df285a76d5
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam:
 BCL:0;ARA:13230040|376014|366016|1800799024|23010399003|38070700021|56012099006|11063799006|261009223027099003|10067099003|18002099003|22082099003|6133799003|3023799007;
x-microsoft-antispam-message-info:
 h2uvI3unHs3lb+9LRRBKoyBKmtM/c1S7UHn5yPlbwFfY+HlVqwtr/nvy0x93DodoK6P/MxBsnUDo9xfY4OW+QuJuupextctVlLVmeJFVIo5IH6pdgZYdpPvjC2d3WmPoQhh9cJH2eiLWjK8/vw/VIzFuzPEdcaSez2TIUxzynPHI2oGgdO3dWEBhi4gZeYVnSg0LkrvN8AyM2CaO/DHgiQ4bhTAxrB340aZOVIGnnPuk/Zs4fYVKTfIHSwFFds9RjZGTQbd1OxNeeaFhG3fzsqTzXjd9YMLERqjZMLAPyVZ27q0l3KOzxG5VHxJktGt934t4DVJ89s2mGxwRYNEkHPyneryN02F3KXmE6FsXnJHJMyTgkIqv1NtmL5DggKX/7Cyw9Q+QFybg/ilZbrWnHhVrXIDBB+VVJq5c9tnCGdDHjNg/BNArXEe8FZyJiYdVGdYly14ftSG4K6v8FfOLbEbAHrtCxiZIifYdfpwhOo9+kGi4u+Be527gDLfxLyrnC6cBcmQPc4C1KgCFihcMcWR9IGzaiJ1nT10NQ0QGpYncRODDiZ0jEYIojkZnwRM0CD+KE0UDjpsmgKbsngm0OhMLvcwZJWiAYlPF3Ab+BOIa63zggQqr1IB/IYSuHWmRWhXZ+1qDoxVTW687aPdjKVzE17d5os6h/ZFaA+sshz8=
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SA6PR03MB7760.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(366016)(1800799024)(23010399003)(38070700021)(56012099006)(11063799006)(261009223027099003)(10067099003)(18002099003)(22082099003)(6133799003)(3023799007);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?iso-8859-1?Q?9nIwALFoZ3L7kxHcCHQouakch7fK2WXlAug2BoIvjiLklCVqsRlNmNRXpb?=
 =?iso-8859-1?Q?dzTxgSGcOzl6mGMULxsBn4ke12l7qgxpOKyb0Jcp20FXpGZKJQd1LPKYTI?=
 =?iso-8859-1?Q?CrS32V7GbnWs2/ac8Uw11hN/ulesabShYodELr8iYR4JWLTt9p1tcWJtmQ?=
 =?iso-8859-1?Q?mT2sCMEBrv4O58/4tRjAZLu8/Tfe7Ia50VjiIdZhjaw9Ma8L0RlGs7p0iK?=
 =?iso-8859-1?Q?JI6eS0fg+G/6UF67YUvePd8uegfOV64b9hlObLswZMBZZxJAMAF1SUie1P?=
 =?iso-8859-1?Q?tBWM2HqfriO5izCQjXsFlz/b3xmgIs4pbUO/PokjoQlcIC+4ZVcT1XiRdr?=
 =?iso-8859-1?Q?mfUctKF295Zuj0t0UkXoIudT0AYHQCQGvwnmUjPGCZocoGYTM3yaB5bhsW?=
 =?iso-8859-1?Q?vrH/15rfbkRpH19aQCIMqybmRO7E9ysz5HLCmrgFhn6DQ3fcQfRgePRg/s?=
 =?iso-8859-1?Q?KqfC/8AMaZEZNVSy+pnVQtsUU7s0t1RCAXLJldTL48XLSFehJbBT5YgvnV?=
 =?iso-8859-1?Q?Vq4zX1Ur/DuOULO8gkMqnI1Z+Nzwr0TehTzuMmMbZMOZcta2nyh0vqIfT3?=
 =?iso-8859-1?Q?Zw7igQcJSMLjFE7joEPlgTq3BhKp7K4Hbi901EFkQc4VIGhSvyVOun9Bfb?=
 =?iso-8859-1?Q?KCFCgqVXDJEpPBEQKPE3Q6xqIcHl89IPoDtzWUxceEur7PYtBsJfaHjhvC?=
 =?iso-8859-1?Q?9CqGUoZNYiyVcu1G5gUTaisbvgt7f1vEY/qdm80kVVKtsY9LBXJKYl52dm?=
 =?iso-8859-1?Q?adk+DNJPemeXiJVC52qPJITf+dHE9oHHpEeDXb6+GD7wGRTXCmCfNl/yn+?=
 =?iso-8859-1?Q?3ozqmMSA+QnpXHbmEKC2rbxEl6o09w9ybgC6dHX3vcBNccVEp2Ho0DbbDf?=
 =?iso-8859-1?Q?aPpPSESFlw0ev+PsvAF6XG37yIx7ILF0r+cvHvY/5yTtwFsBVXLVeq7oiq?=
 =?iso-8859-1?Q?nGM7Z2nnb5n9P9oAtHe6YDZaANStY5aRZQfkEa45H14uPPpOhUeTboTpcB?=
 =?iso-8859-1?Q?RKYdIY3soMxmDszP65y0BQkDiX7TzkzA2vdGaBiLuAUAuTIrIrnC/VLk+6?=
 =?iso-8859-1?Q?DMozQ6V1+/zES+HtS8HwmSWHPCO/6R4q4Jn6mUbD9voSdUv5TdHTf0l1Gx?=
 =?iso-8859-1?Q?PCU4nQui1777deqOWZ42+usBq/UB8nwChIhgGOQsBhfrzAEjLnU4hySlBW?=
 =?iso-8859-1?Q?jZfuqaVmTgWLMZufPY2ABmQbYfu2WxHVzpKXieKOZlXKLf3nczHuAeewgj?=
 =?iso-8859-1?Q?5F1zF4BM4PujH0ZtIXSgVxov5/F1CNhmxZzj6JjLoUVvwM+Jn6LIMy4tAU?=
 =?iso-8859-1?Q?iq928ndDK7XAIFpUhLxGmA8xYNw67lA8V6RB7aOp51+RaEM5UO4DqfLNdd?=
 =?iso-8859-1?Q?MOX/cQpbz3F+KIi39q/HXpgssER0n3qoXJ+/AMHsq883U3NqyLD+8iBA7I?=
 =?iso-8859-1?Q?eP152fb6o8Tawmy4+YvnBilCtb3G6r6QzutXMLiddgon97dSW2oNte9NEi?=
 =?iso-8859-1?Q?LIPnC33UNxIK453ezw0NGwpXD2geYC47VX5g8a7ACKXl5BFAy6KVw1I+r/?=
 =?iso-8859-1?Q?aQTfaQXBL5UuVdNsArkw3k0V5kJ7uum8kJG7MBB3QhUpjQs0B+LqLaFL6g?=
 =?iso-8859-1?Q?ApGH3hBrAxJRVwWJesGxFXcV6VcFB24g6M3tkfT3eMeC1LULAj5LBJcsjK?=
 =?iso-8859-1?Q?na5Gw+t9y34aQ9pwvJ2RAYTfG4H+mCJMjnE/EXxN4M4G0ZNEKmkWR7xA6h?=
 =?iso-8859-1?Q?JatXJTyG1c5bSgKcWF6Q1Dy7Ij/W40Sjo4TRHYUeODaWou?=
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-OriginatorOrg: citrix.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: SA6PR03MB7760.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 50c93b79-06a1-496e-2224-08df285a76d5
X-MS-Exchange-CrossTenant-originalarrivaltime: 12 Oct 2026 12:15:11.5196
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: vJZko4CWDOMaVOVagKXGhVEBiNIMbUCCiLiKZsrZUbIQ3VsSLCehL/7a8W21L+HMaIyVqn7Cmmv/ea8mNdCYMQ==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: SAAPR03MB661511
X-purgate-ID: tlsNG-ebf023/1791807314-583C0B50-608BE421/0/0
X-purgate-type: clean
X-purgate-size: 5393

This patch series looks good, all patches Reviewed-by: Owen Smith <owen.smi=
th@citrix.com>

There were a couple of trailing whitespace issues - I've fixed up in place
Owen

________________________________________
From: win-pv-devel <win-pv-devel-bounces@lists.xenproject.org> on behalf of=
 C=E9saire Mounah <cesaire.mounah@vates.tech>
Sent: 12 October 2026 11:19 AM
To: win-pv-devel@lists.xenproject.org
Cc: C=E9saire Mounah
Subject: [PATCH 00/21] xenvif: update annotations to SAL 2.0

This patch series updates the xenvif driver to use SAL 2.0 annotations and
fixes the issues found after code analysis.

It is organized into three parts: updating annotations to SAL 2.0,
fixing annotation issues, and minor fixes after code analysis.

Part 1: Update annotations to SAL 2.0
* xenvif: sync common helper files from xeniface and xenbus
* xenvif: convert to SAL 2.0 annotations
* Update string typedefs

Part 2: Fix annotation issues
* xenvif: fix direction annotations on written parameters
* xenvif: Annotate unannotated functions
* xenvif: Annotate buffer and array parameters with their sizes
* driver: fix annotations on nullable parameters
* driver: fix Dispatch() annotation
* fdo: fix str annotation of __FdoMultiSzToUpcaseAnsi
* driver: fix annotation of __FdoEnumerate
* fdo: annotate macro-defined functions
* xenvif: fix inconsistent annotation between declarations and
    definitions
* settings: fix annotation of SettingsSave and SettingsRestore
* pdo: fix annotation of __PdoSetPower
* receiver: fix annotation errors:
* transmitter,controller: fix some annotations
* vif: fix the annotation of typedef XENVIF_VIF_CALLBACK
* controller: fix annotations

Part 3: Minor fixes after code analysis
* fdo: suppress uninitialized memory '*Interface'
* xenvif: Assert non-NULL pointers that code analysis cannot prove
* xenvif: Check the statistic name in frontend

C=E9saire Mounah (21):
  xenvif: sync common helper files from xeniface and xenbus
  xenvif: convert to SAL 2.0 annotations
  Update string typedefs
  xenvif: fix direction annotations on written parameters
  xenvif: Annotate unannotated functions
  xenvif: Annotate buffer and array parameters with their sizes
  driver: fix annotations on nullable parameters
  driver: fix Dispatch() annotation
  fdo: fix str annotation of __FdoMultiSzToUpcaseAnsi
  driver: fix annotation of __FdoEnumerate
  fdo: suppress uninitialized memory '*Interface'
  fdo: annotate macro-defined functions
  xenvif: fix inconsistent annotation between declarations and
    definitions
  settings: fix annotation of SettingsSave and SettingsRestore
  pdo: fix annotation of __PdoSetPower
  receiver: fix annotation errors:
  transmitter,controller: fix some annotations
  vif: fix the annotation of typedef XENVIF_VIF_CALLBACK
  xenvif: Assert non-NULL pointers that code analysis cannot prove
  xenvif: Check the statistic name in frontend
  controller: fix annotations

 include/cache_interface.h     | 130 ++++-----
 include/debug_interface.h     |  88 +++---
 include/evtchn_interface.h    | 136 ++++-----
 include/gnttab_interface.h    | 148 +++++-----
 include/range_set_interface.h |  38 +--
 include/store_interface.h     |  84 +++---
 include/suspend_interface.h   |  24 +-
 include/unplug_interface.h    |  20 +-
 include/vif_interface.h       | 158 +++++-----
 src/xenvif/assert.h           | 116 ++++----
 src/xenvif/bus.c              |  68 ++---
 src/xenvif/bus.h              |   6 +-
 src/xenvif/checksum.c         |  80 +++---
 src/xenvif/checksum.h         |  50 ++--
 src/xenvif/controller.c       | 146 +++++-----
 src/xenvif/controller.h       |  52 ++--
 src/xenvif/dbg_print.h        |  39 +--
 src/xenvif/driver.c           |  38 +--
 src/xenvif/fdo.c              | 525 +++++++++++++++++-----------------
 src/xenvif/fdo.h              |  70 ++---
 src/xenvif/frontend.c         | 296 +++++++++----------
 src/xenvif/frontend.h         | 104 +++----
 src/xenvif/link.c             |  14 +-
 src/xenvif/link.h             |   6 +-
 src/xenvif/mac.c              | 120 ++++----
 src/xenvif/mac.h              |  70 ++---
 src/xenvif/mrsw.h             |   6 +-
 src/xenvif/mutex.h            |  10 +-
 src/xenvif/names.h            |  60 ++--
 src/xenvif/parse.c            | 142 ++++-----
 src/xenvif/parse.h            |  20 +-
 src/xenvif/pdo.c              | 414 +++++++++++++--------------
 src/xenvif/pdo.h              |  96 +++----
 src/xenvif/receiver.c         | 434 ++++++++++++++--------------
 src/xenvif/receiver.h         |  64 ++---
 src/xenvif/registry.c         | 436 ++++++++++++++++++----------
 src/xenvif/registry.h         | 198 +++++++------
 src/xenvif/settings.c         |  78 ++---
 src/xenvif/settings.h         |  20 +-
 src/xenvif/thread.c           |  36 +--
 src/xenvif/thread.h           |  18 +-
 src/xenvif/transmitter.c      | 406 +++++++++++++-------------
 src/xenvif/transmitter.h      |  80 +++---
 src/xenvif/util.h             | 102 ++++---
 src/xenvif/vif.c              | 258 +++++++++--------
 src/xenvif/vif.h              |  48 ++--
 46 files changed, 2885 insertions(+), 2667 deletions(-)

--
2.55.0.windows.5



--
C=E9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen Orchestra - Vates solutions

web: https://vates.tech


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 12 12:28:39 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 12 Oct 2026 12:28:39 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1446230.1662303 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGF8x-00067v-0F; Mon, 12 Oct 2026 12:28:39 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1446230.1662303; Mon, 12 Oct 2026 12:28:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGF8w-00067o-U4; Mon, 12 Oct 2026 12:28:38 +0000
Received: by outflank-mailman (input) for mailman id 1446230;
 Mon, 12 Oct 2026 12:28:38 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <owen.smith@citrix.com>) id 1xGF8w-00067i-0f
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 12:28:38 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGF8u-005TkX-QT
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 14:28:36 +0200
Received: from [10.42.69.5] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6accd273-bab6-0a2a0a5309dd-0a2a4505e32e-6
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 14:28:36 +0200
Received: from [160.101.131.8] (helo=na1pdmzitismtp01.tibco.com)
 by tlsNG-c201ff.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6accd273-4cb1-0a2a45050019-a06583088d8a-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 14:28:36 +0200
Received: from mewpvdipd2033.citrite.net (unknown [10.113.48.64])
 by na1pdmzitismtp01.tibco.com (Postfix) with ESMTP id 4460C456A795;
 Mon, 12 Oct 2026 08:26:23 -0400 (EDT)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; none
From: Owen Smith <owen.smith@citrix.com>
To: win-pv-devel@lists.xenproject.org
Cc: Owen Smith <owen.smith@citrix.com>
Subject: [PATCH] Cast Name to a ULONG before checking its valid
Date: Mon, 12 Oct 2026 13:28:31 +0100
Message-ID: <20261012122831.1033-1-owen.smith@citrix.com>
X-Mailer: git-send-email 2.51.2.windows.1
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-purgate-ID: tlsNG-c201ff/1791808116-728B62A1-CA22E047/0/0
X-purgate-type: clean
X-purgate-size: 1723

MSVC treats all unscoped enums as an int, so the signed value needs
casting to an unsigned before only checking against the maximum enum
value.
Fixes
warning C33010:  Unchecked lower bound for enum Name used as index

Signed-off-by: Owen Smith <owen.smith@citrix.com>
---
 src/xenvif/frontend.c | 6 +++---
 src/xenvif/vif.c      | 2 +-
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/xenvif/frontend.c b/src/xenvif/frontend.c
index 4b4e69f..b1701cf 100644
--- a/src/xenvif/frontend.c
+++ b/src/xenvif/frontend.c
@@ -1797,11 +1797,11 @@ __FrontendQueryStatistic(
 {
     ULONG                       Index;
 
-    ASSERT3U(Name, <, XENVIF_VIF_STATISTIC_COUNT);
+    ASSERT3U((ULONG)Name, <, XENVIF_VIF_STATISTIC_COUNT);
 
     *Value = 0;
 
-    if (Name >= XENVIF_VIF_STATISTIC_COUNT)
+    if ((ULONG)Name >= XENVIF_VIF_STATISTIC_COUNT)
         return;
 
     for (Index = 0; Index < Frontend->StatisticsCount; Index++) {
@@ -1833,7 +1833,7 @@ FrontendIncrementStatistic(
     PXENVIF_FRONTEND_STATISTICS Statistics;
     KIRQL                       Irql;
 
-    ASSERT3U(Name, <, XENVIF_VIF_STATISTIC_COUNT);
+    ASSERT3U((ULONG)Name, <, XENVIF_VIF_STATISTIC_COUNT);
 
     KeRaiseIrql(DISPATCH_LEVEL, &Irql);
 
diff --git a/src/xenvif/vif.c b/src/xenvif/vif.c
index 7328543..4937bb6 100644
--- a/src/xenvif/vif.c
+++ b/src/xenvif/vif.c
@@ -521,7 +521,7 @@ VifQueryStatistic(
     NTSTATUS                    status;
 
     status = STATUS_INVALID_PARAMETER;
-    if (Index >= XENVIF_VIF_STATISTIC_COUNT)
+    if ((ULONG)Index >= XENVIF_VIF_STATISTIC_COUNT)
         goto done;
 
     AcquireMrswLockShared(&Context->Lock);
-- 
2.51.2.windows.1



From win-pv-devel-bounces@lists.xenproject.org Mon Oct 12 12:29:51 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 12 Oct 2026 12:29:51 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1446237.1662308 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGFA7-0006Gu-4r; Mon, 12 Oct 2026 12:29:51 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1446237.1662308; Mon, 12 Oct 2026 12:29:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGFA7-0006Gm-23; Mon, 12 Oct 2026 12:29:51 +0000
Received: by outflank-mailman (input) for mailman id 1446237;
 Mon, 12 Oct 2026 12:29:49 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a130172e4400080d7@swg.vates.tech>)
 id 1xGFA5-0006Ge-SJ
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 12:29:49 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGFA5-009Rr3-9D
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 14:29:49 +0200
Received: from [10.42.69.5] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a130172e4400080d7@swg.vates.tech>)
 id 6accd2b5-2eae-0a2a0a5409dd-0a2a4505af10-6
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 14:29:49 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-c201ff.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a130172e4400080d7@swg.vates.tech>)
 id 6accd2bc-4cb1-0a2a45050019-b9ff1c238b5d-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 14:29:49 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a130172e4400080d7.002 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 12 Oct 2026 12:29:47 +0000
Received: from [192.168.1.61] (142.220.66.37.rev.sfr.net [37.66.220.142])
 (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 3654B822AD;
 Mon, 12 Oct 2026 14:29:47 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=KzZLB/X48AlOSA7OEi8febUnJNVyIg5d2iK4xEjxDsM=;
 h=from:subject:date:message-id:to:mime-version:content-type:in-reply-to:references:feedback-id;
 b=LyztrsvQXQ8XsBLZ/M7r37wfzQHVrBjwitzWAQ18qMKCvt8uO8zW5XSs52KZzj7SPzb5Nl8Zc
 CedX5o0UoWaKa7w39KEbQe8D7A3Y02JrbJ0vXvJdLvGgeoXbhgRVjLtMyouPeo44pu8/YQ8tvt+
 ImIwQ6F97AGSoPhfzDmsu4SYT5SEWDcrO154TlYdjtxxqUZXO3o9qIZtoq5gWHe3VsvQTsMxj+J
 v9FxgXDD7pPqPbKfdupmwUppGS5/vaYQ2pv/+LgJxn0cUmm0vOG1jmCWqjYVKLyUZwTbhEZPoYu
 RsBY7VOS7Q0YVUYKF79XBvbqQ2MEu57Q8ge9ERfx/i9A==
X-Zone-Loop: ace632871dc8e4e606d187cfd105c91e7b376bd1d88f
x-campaign-type: default
x-transaction-id: ab4182f7-b3ed-45d0-a661-cfb6049c4a86
x-swg-uid: 01-fd113374-1497-455e-b3eb-e40b6ba6a397
X-Mailer: Sweego
Message-ID:
 <1791808188.8631fc262581453bbf619ec5b2062170.1a130172e4400080d7@vates.tech>
x-swg-bid: 1791808188.8631fc262581453bbf619ec5b2062170.1a130172e4400080d7
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
Date: Mon, 12 Oct 2026 14:29:46 +0200
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH] Cast Name to a ULONG before checking its valid
To: Owen Smith <owen.smith@citrix.com>, win-pv-devel@lists.xenproject.org
References: <20261012122831.1033-1-owen.smith@citrix.com>
Content-Language: en-US
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
In-Reply-To: <20261012122831.1033-1-owen.smith@citrix.com>
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.f2.cdec3c207eec02c7.1a130172ba4.9d02e6b3d3b7d760=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791808187300
X-purgate-ID: tlsNG-c201ff/1791808189-F5EA92A1-E550FBB0/0/0
X-purgate-type: clean
X-purgate-size: 2330

---=Part.f2.cdec3c207eec02c7.1a130172ba4.9d02e6b3d3b7d760=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

On 12/10/2026 14:28, Owen Smith wrote:
> MSVC treats all unscoped enums as an int, so the signed value needs
> casting to an unsigned before only checking against the maximum enum
> value=2E
> Fixes
> warning C33010:  Unchecked lower bound for enum Name used as index
>=20
> Signed-off-by: Owen Smith <owen=2Esmith@citrix=2Ecom>

Reviewed-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>

> ---
>   src/xenvif/frontend=2Ec | 6 +++---
>   src/xenvif/vif=2Ec      | 2 +-
>   2 files changed, 4 insertions(+), 4 deletions(-)
>=20
> diff --git a/src/xenvif/frontend=2Ec b/src/xenvif/frontend=2Ec
> index 4b4e69f=2E=2Eb1701cf 100644
> --- a/src/xenvif/frontend=2Ec
> +++ b/src/xenvif/frontend=2Ec
> @@ -1797,11 +1797,11 @@ __FrontendQueryStatistic(
>   {
>       ULONG                       Index;
>  =20
> -    ASSERT3U(Name, <, XENVIF_VIF_STATISTIC_COUNT);
> +    ASSERT3U((ULONG)Name, <, XENVIF_VIF_STATISTIC_COUNT);
>  =20
>       *Value =3D 0;
>  =20
> -    if (Name >=3D XENVIF_VIF_STATISTIC_COUNT)
> +    if ((ULONG)Name >=3D XENVIF_VIF_STATISTIC_COUNT)
>           return;
>  =20
>       for (Index =3D 0; Index < Frontend->StatisticsCount; Index++) {
> @@ -1833,7 +1833,7 @@ FrontendIncrementStatistic(
>       PXENVIF_FRONTEND_STATISTICS Statistics;
>       KIRQL                       Irql;
>  =20
> -    ASSERT3U(Name, <, XENVIF_VIF_STATISTIC_COUNT);
> +    ASSERT3U((ULONG)Name, <, XENVIF_VIF_STATISTIC_COUNT);
>  =20
>       KeRaiseIrql(DISPATCH_LEVEL, &Irql);
>  =20
> diff --git a/src/xenvif/vif=2Ec b/src/xenvif/vif=2Ec
> index 7328543=2E=2E4937bb6 100644
> --- a/src/xenvif/vif=2Ec
> +++ b/src/xenvif/vif=2Ec
> @@ -521,7 +521,7 @@ VifQueryStatistic(
>       NTSTATUS                    status;
>  =20
>       status =3D STATUS_INVALID_PARAMETER;
> -    if (Index >=3D XENVIF_VIF_STATISTIC_COUNT)
> +    if ((ULONG)Index >=3D XENVIF_VIF_STATISTIC_COUNT)
>           goto done;
>  =20
>       AcquireMrswLockShared(&Context->Lock);



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.f2.cdec3c207eec02c7.1a130172ba4.9d02e6b3d3b7d760=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 12 21:00:42 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 12 Oct 2026 21:00:42 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1446609.1662725 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGN8T-0007sr-Ok; Mon, 12 Oct 2026 21:00:41 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1446609.1662725; Mon, 12 Oct 2026 21:00:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGN8T-0007sk-Lw; Mon, 12 Oct 2026 21:00:41 +0000
Received: by outflank-mailman (input) for mailman id 1446609;
 Mon, 12 Oct 2026 21:00:40 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a131ead1f30008d8d@swg.vates.tech>)
 id 1xGN8R-0007se-LU
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 21:00:40 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGN8Q-006b0G-TI
 for win-pv-devel@lists.xenproject.org; Mon, 12 Oct 2026 23:00:39 +0200
Received: from [10.42.69.12] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a131ead1f30008d8d@swg.vates.tech>)
 id 6acd4a62-8faa-0a2a0a5109dd-0a2a450c80e2-34
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 23:00:38 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-d25034.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a131ead1f30008d8d@swg.vates.tech>)
 id 6acd4a76-f479-0a2a450c0019-b9ff1c1299dd-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 12 Oct 2026 23:00:38 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a131ead1f30008d8d.002 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 12 Oct 2026 21:00:35 +0000
Received: from [192.168.1.61] (142.220.66.37.rev.sfr.net [37.66.220.142])
 (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 3025582826;
 Mon, 12 Oct 2026 23:00:34 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=5VHFRwIsGOTjZl72fuEsDRqFUWnCA3LMuY0Yzh+fQP0=;
 h=from:subject:date:message-id:to:mime-version:content-type:in-reply-to:references:feedback-id;
 b=gOVKM9iclOKSLmienkFBhgZ8G4fuSkdx4JBVRNKlEjcBKTpQ4j8E7n3pdi7im6ejV6FnPO/1y
 dMzQcWxDVXM8IdFf+wRNEWdlL2nD9yrxuUWW8nMNRgWoSEHI2ujr3oIbM3RezgTpBTPrUcTMede
 AxpWbC5ayRlOHPbiLlWvzV8Fh+ur1Tll/EKeRQ+5AiyxCo0Irpm4xBKtnIfGtm7Ll2V7b6BAJC5
 L6UY41XYu0Mhu1ULfxVrsOgRmV0EJ0BJkViI3XwPoqmzVuzj2DHnJd2Tz9JKJONyIaIVKdBqSEt
 +HkMv4/Y27E/1ueb3lG79iC3ntR/wM95QTPZWFVp9QrQ==
X-Zone-Loop: 35903148bdc0b75f800b9756be31fc11d9d931177c39
x-campaign-type: default
x-transaction-id: 55f0d865-0a10-4bb7-9fb9-226e2fca5535
x-swg-uid: 01-9a86e07e-3afb-4fef-b674-559a902f831d
X-Mailer: Sweego
Message-ID:
 <1791838835.8631fc262581453bbf619ec5b2062170.1a131ead1f30008d8d@vates.tech>
x-swg-bid: 1791838835.8631fc262581453bbf619ec5b2062170.1a131ead1f30008d8d
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
Date: Mon, 12 Oct 2026 23:00:33 +0200
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH 10/10] xencontrol: guard against NumberPages overflow in
 gnttab size calculation
Content-Language: en-US
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: david ambu <david.preetham@citrix.com>, win-pv-devel@lists.xenproject.org
References: <20261008120204.859-1-david.preetham@citrix.com>
 <20261008120204.859-10-david.preetham@citrix.com>
 <1791540657.8631fc262581453bbf619ec5b2062170.1a12024fd4a00080d7@vates.tech>
In-Reply-To: <1791540657.8631fc262581453bbf619ec5b2062170.1a12024fd4a00080d7@vates.tech>
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.11d.fd7dca1508489c5d.1a131eace4b.dafebeca4d9f2159=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791838834252
X-purgate-ID: tlsNG-d25034/1791838838-5113AA5B-463889B0/0/0
X-purgate-type: clean
X-purgate-size: 3475

---=Part.11d.fd7dca1508489c5d.1a131eace4b.dafebeca4d9f2159=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

On 09/10/2026 12:12, Tu Dinh wrote:
> On 08/10/2026 14:05, david ambu wrote:
>> FIELD_OFFSET(T, References[NumberPages]) with a caller-controlled
>> NumberPages can overflow ULONG, producing a Size smaller than the
>> actual allocation needed, leading to a heap buffer overrun=2E
>>
>> Add a guard rejecting NumberPages =3D=3D 0 or > XENCONTROL_GNTTAB_MAX_P=
AGES
>> (1M pages =3D 4 GB) in both XcGnttabPermitForeignAccess2 and
>> XcGnttabMapForeignPages=2E Define the limit as a named constant in
>> xencontrol=2Eh=2E
>>
>> Signed-off-by: david ambu <david=2Epreetham@citrix=2Ecom>
>> Assisted by Claude Sonnet 4=2E6
>> ---
>>    include/xencontrol=2Eh        |  3 +++
>>    src/xencontrol/xencontrol=2Ec | 10 ++++++++++
>>    2 files changed, 13 insertions(+)
>>
>> diff --git a/include/xencontrol=2Eh b/include/xencontrol=2Eh
>> index 4b916ec=2E=2Ee95e257 100644
>> --- a/include/xencontrol=2Eh
>> +++ b/include/xencontrol=2Eh
>> @@ -163,6 +163,9 @@ XcEvtchnUnmask(
>>        _In_ ULONG                  LocalPort
>>        );
>>   =20
>> +/*! Maximum NumberPages accepted by gnttab permit/map functions */
>> +#define XENCONTROL_GNTTAB_MAX_PAGES (1024 * 1024)
>> +
>>    /*! \brief Grant a \a RemoteDomain permission to access local newly =
allocated memory pages
>>        \param Xc Xencontrol handle returned by XcOpen()
>>        \param RemoteDomain ID of a remote domain that is being granted =
access
>> diff --git a/src/xencontrol/xencontrol=2Ec b/src/xencontrol/xencontrol=
=2Ec
>> index a68dcf6=2E=2E8f21867 100644
>> --- a/src/xencontrol/xencontrol=2Ec
>> +++ b/src/xencontrol/xencontrol=2Ec
>> @@ -407,6 +407,11 @@ XcGnttabPermitForeignAccess2(
>>        BOOL                                            Success;
>>        DWORD                                           Status;
>>   =20
>> +    if (NumberPages =3D=3D 0 || NumberPages > XENCONTROL_GNTTAB_MAX_PA=
GES) {
>=20
> I believe the boundary condition of NumberPages =3D=3D
> XENCONTROL_GNTTAB_MAX_PAGES still causes an overflow? So
> XENCONTROL_GNTTAB_MAX_PAGES should be (1024 * 1024 - 1) instead=2E

MAXULONG / PAGE_SIZE would be a better formulation still, only problem=20
being PAGE_SIZE is not defined for usermode targets=2E

>=20
>> +        Log(XLL_ERROR, L"Invalid NumberPages %lu", NumberPages);
>> +        return ERROR_INVALID_PARAMETER;
>> +    }
>> +
>>        In=2ERemoteDomain =3D RemoteDomain;
>>        In=2EAddress =3D Address;
>>        In=2ENumberPages =3D NumberPages;
>> @@ -508,6 +513,11 @@ XcGnttabMapForeignPages(
>>        BOOL                                        Success;
>>        DWORD                                       Status =3D ERROR_OUT=
OFMEMORY;
>>   =20
>> +    if (NumberPages =3D=3D 0 || NumberPages > XENCONTROL_GNTTAB_MAX_PA=
GES) {
>> +        Log(XLL_ERROR, L"Invalid NumberPages %lu", NumberPages);
>> +        return ERROR_INVALID_PARAMETER;
>> +    }
>> +
>>        Size =3D (ULONG)FIELD_OFFSET(XENIFACE_GNTTAB_MAP_FOREIGN_PAGES_I=
N_V2, References[NumberPages]);
>>        In =3D malloc(Size);
>>        if (!In)
>=20
>=20
>=20



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.11d.fd7dca1508489c5d.1a131eace4b.dafebeca4d9f2159=---


From win-pv-devel-bounces@lists.xenproject.org Tue Oct 13 08:01:59 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 13 Oct 2026 08:01:59 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1446733.1662831 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGXSQ-0003is-2L; Tue, 13 Oct 2026 08:01:58 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1446733.1662831; Tue, 13 Oct 2026 08:01:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGXSP-0003il-Vx; Tue, 13 Oct 2026 08:01:57 +0000
Received: by outflank-mailman (input) for mailman id 1446733;
 Tue, 13 Oct 2026 08:01:56 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <owen.smith@citrix.com>) id 1xGXSO-0003if-AI
 for win-pv-devel@lists.xenproject.org; Tue, 13 Oct 2026 08:01:56 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGXSN-00CLsj-3n
 for win-pv-devel@lists.xenproject.org; Tue, 13 Oct 2026 10:01:55 +0200
Received: from [10.42.69.12] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6acde571-8faa-0a2a0a5109dd-0a2a450c9972-8
 for <win-pv-devel@lists.xenproject.org>; Tue, 13 Oct 2026 10:01:54 +0200
Received: from [52.101.201.16]
 (helo=PH7PR06CU001.outbound.protection.outlook.com)
 by tlsNG-d25034.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6acde571-f479-0a2a450c0019-3465c91052ac-3
 for <win-pv-devel@lists.xenproject.org>; Tue, 13 Oct 2026 10:01:54 +0200
Received: from SA6PR03MB7760.namprd03.prod.outlook.com (2603:10b6:806:43c::5)
 by LV3PR03MB7429.namprd03.prod.outlook.com (2603:10b6:408:1a0::9)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.496.23; Tue, 13 Oct
 2026 08:01:51 +0000
Received: from SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38]) by SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38%5]) with mapi id 15.21.0496.021; Tue, 13 Oct 2026
 08:01:51 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:x-ms-exchange-senderadcheck"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
 b=Rc7+Kgzpl7m4rCh05jzE22eXGTW0fpsSkbti4OHqaXBvjdVW1vT2sBI29dnMbHvakZPPl7z11lzrhpLjQObkaH7ypIkG37NHN9XLqmab+1A76xnx5VfRd5/ZeUOYkPnnCPGq16T8bHOUyle4Tn78nSjtK/+0lpKF8foCmOlmVsE/3NpfqUj/XX0SKiunxhNF9+VS38i2QMYLM67VDruSr9Ju4x9b7uTBRI1XexehnMjachm/gPBokGyduhXbQq+zDnCkchv+f/jDL53OAvuAEFzw7sEOU/R214lnlyyKwZde/46yRnhiOI3AFlNIHoVIYmBR4odviTWpNwzTcYIL6Q==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector10001;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=JZ0DkIUP8KRJruQlwTvnur5cpmDeaSE8KwsCJ2ZspJE=;
 b=Wb8Tzfy4jtahF/jtDoN8LqJIV+pJftelv+T2F65NK9lfSSDIZqVsdA1/jDy4lfXIUHTTokb2bmWf73lBlH83KTtDZhOI8maAKAOn8CdNu0I1+e1RBv+gSyN5i0eBbpfxhEsBhmXDb2oyvUzBt4tm+v3mvPmABvmZc3KThGpZmULlpszp5LcqNNCe5mGBfHEnxH3hZlJQ3Md0vsb06f0qZBJ2DGYZYvCJyA8wpnUyIwxgLZ9zRGBLKCj+NMshWnwSNrGYMvbSxIibLbTh9OdctsefT/Erez/wZYADKGY1LL8MNvRmy/+MXicO0Ysr7CZSJ7Bg9ZwM6LsEi0Wl11YaYg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=JZ0DkIUP8KRJruQlwTvnur5cpmDeaSE8KwsCJ2ZspJE=;
 b=vYIIuWaUO94pEebesi8sTtkWsuDNycRlWqd+VxSKUwCUpsc3w1M47zMyIr4wTSKfi10GBKBk8ib7QAa9HDiXKMIgvF+TcXabxx8TVjNuG+wCa0Ek9s7Jlo1tHUOMTyF44+QLB+bz3TlSrotJpCi3ZFCSDMnTW/GUMeJbNCDQDQY=
From: Owen Smith <owen.smith@citrix.com>
To: Tu Dinh <ngoc-tu.dinh@vates.tech>, David ambu <david.preetham@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Subject: Re: [PATCH 10/10] xencontrol: guard against NumberPages overflow in
 gnttab size calculation
Thread-Topic: [PATCH 10/10] xencontrol: guard against NumberPages overflow in
 gnttab size calculation
Thread-Index: AQHdVx1buiM7764nOEueG4e52n1g9rb0/rcAgAVsf4CAALQqDQ==
Date: Tue, 13 Oct 2026 08:01:51 +0000
Message-ID:
 <SA6PR03MB776035DF58FE72CF4E3F20AFFE9E2@SA6PR03MB7760.namprd03.prod.outlook.com>
References: <20261008120204.859-1-david.preetham@citrix.com>
 <20261008120204.859-10-david.preetham@citrix.com>
 <1791540657.8631fc262581453bbf619ec5b2062170.1a12024fd4a00080d7@vates.tech>
 <1791838835.8631fc262581453bbf619ec5b2062170.1a131ead1f30008d8d@vates.tech>
In-Reply-To:
 <1791838835.8631fc262581453bbf619ec5b2062170.1a131ead1f30008d8d@vates.tech>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
msip_labels:
authentication-results: mx.microsoft.com 1; dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=citrix.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: SA6PR03MB7760:EE_|LV3PR03MB7429:EE_
x-ms-office365-filtering-correlation-id: b35179d9-f0b8-405c-20c9-08df29003d1b
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam:
 BCL:0;ARA:13230040|1800799024|366016|23010399003|376014|6133799003|10067099003|22082099003|18002099003|11063799006|4143699003|261009223027099003|38070700021|56012099006;
x-microsoft-antispam-message-info:
 pPngp0k5R48URjNPSavO9M+4mJU+007FX+di+t3GLT4k30Wzp8vts7sRstPBTrpwbZLo/LkIyZX9z+S7gXsPXQc7zz4nLyDOvbW49U1zT8g4HItQSZ2W68+RHBL8Akx0nNPT8vGEY6+5FcogfboKkx9j9tUW3rSQG6/JWWNykZYWPB41Uia8fVkKxcsFoR22GLu5kdtd1l/0YEkbxV6OBcU1UbCwtw2G0Loxo5xvMuJvKT22Kkph1J05727wdJh2gZrVjwco71U4aglrCt4UWJzsOe/GiS10fPSAokZqLua/kIt8uD51R2yxMJ/TWhqTI1EhwRzmGwrYVB6cHR5ZBDh5B/QCsNjThQYRPZ0Vw/l5tV+dUGTRJ6Bh3m+g71z9jhNVdNFuD2idAXB8j9feGNlnbdY/1QlGRWNM8gvzTOarmt5QGqR7uet5MPt/kYtVuZyznDO77TOCeyMrSgxGtwj8jyDH8kfVyJHeFbHkb9Wfb3DUEWLhSm3D2yKAW2mGdNDDZDj+7I1fZzsp+LnojpbYvHLx+X3bRWivrxfQ1AdxrvG2KpWPI0u/jIdPC7bH1a1ADtxKS4CNH0FCPjRIN0gvyiuFpPBx/tqGIYaMEy55uzZ48KPrHTz6MK5rKqPHNyNiwPF9BnqjmdZzMvl7JwjB6Rtu/IL0GM4MakUZe4jU1KGu7ePMdV8Sws1hNXzk/NQBseGq9piTZXSOhG8yP6iZhqdusWYlGt3GB5gADWE=
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SA6PR03MB7760.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(23010399003)(376014)(6133799003)(10067099003)(22082099003)(18002099003)(11063799006)(4143699003)(261009223027099003)(38070700021)(56012099006);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?iso-8859-1?Q?wdAfy1tDY8y+aANLsPVOUewdfheyY9JspEBM6eHcN1c0Du5ehFYSDglFIM?=
 =?iso-8859-1?Q?s9fjGKErGbT7jBCelsaink6S3kulux4uKTs5pU/G1GAEYNsBmcW9konQQ3?=
 =?iso-8859-1?Q?atK0YWlJ5tXspGIb0HAPDTynyPr81Zp4mhuHA7BgdfMvA5JxWLyLeuv0h9?=
 =?iso-8859-1?Q?Q+R3acGt000UDzUtNu/BGRovFQZ3t6YjHfTDh77dwc27sKB4Dj00HBew9B?=
 =?iso-8859-1?Q?HZLcZKMFUl6LyYHm0+ySl8AzYazdYJFFZYPlzrbdPPxwPbXhCb+EremUxQ?=
 =?iso-8859-1?Q?/Ls/C1akfaVIg/BrBDc4MRSYbz9SH1+TUp4b5G/zGFEwKHVNArJk1k2qeo?=
 =?iso-8859-1?Q?Z7qOT/DCTIhga/iCt/EziswW2a87MSGtpqHW5wgu9YlkE2Hin+1y0QXxg+?=
 =?iso-8859-1?Q?+uWW272+x3wmSIvoT04ZJNas6aPtOccEPto/5fCfoIzvmSTAyhe9Aiiip8?=
 =?iso-8859-1?Q?wK6MOQVA8ocM4X6Xj/jz1vJl0rpUtdAZNyObQFjl8Bo6f8piUw6SE035uO?=
 =?iso-8859-1?Q?elIm+wN5+fxyFTgGlbj3/ZSx/88qVaP9eW7krNB7LOdTTpY2c3zYjexux8?=
 =?iso-8859-1?Q?qDxsdLwBedEjYOlQfUy5YSM7DLCQgFArV+TrBnmxA2XXnz+ckMDA+xPZgx?=
 =?iso-8859-1?Q?LpoEjfQQdL8VkOWSCc6Z/DSaohMWFkYxBBy0ctPKduwAfFy6FdLVCIQkuL?=
 =?iso-8859-1?Q?pOGlSAH4FODBuFMHxUFC4LrtcCm/v9PmA0TFPkbucwRd/n4EXuQ7Fp4MMK?=
 =?iso-8859-1?Q?6iK8pB0G2GkgCXZTsyBGufo7rItgj0YYSgHf4MavGrzlj1c1WkEuC1G86l?=
 =?iso-8859-1?Q?lc3ip/C4dB3zS9E2R+Rat2OWvg4PIkcRW+fHPw4KVRw9SD9lECzXklStY/?=
 =?iso-8859-1?Q?FOfo/OfBCZRKI9iLcVZXyny3p+xI/yg+Ncoda0R+jPnU9COfx2L1hh2B/p?=
 =?iso-8859-1?Q?qSPTY001PJeW/TymkPBdNAJyxfTE23syvC3hkpZwuwpCLazCWvZnNElz6Z?=
 =?iso-8859-1?Q?esGPGFGxow1cKZueeltAowE18SDQ0wc5fpPKIUy+J9sZoMGS44ffxhlGCk?=
 =?iso-8859-1?Q?g0Tij2bL26jQjkSGm5AlzZuO64DzCDInAXcj+3Nj37rAPHkV6KPTN/aMEG?=
 =?iso-8859-1?Q?ByW1I9OIMgOfqdOMCIISbsg10jQdpWkMlWGwnghhIkZCBFzhXlyc6egzKS?=
 =?iso-8859-1?Q?ZsxMR+PoZ3F5EIPbQiTSTO9NERuEbrfiTNbNLxts+a+s2CZt9xET2vVrxN?=
 =?iso-8859-1?Q?/ylWuxGJVe8KG3DVRu+8GVuuEGAEBZNh/vyz29xDQD5U2uXXXNdCvsEgIA?=
 =?iso-8859-1?Q?g22YjjiX+U9O0m+0+Q7PCuW/tb2U0yb8A7DUBg0hTODNu91PFjeca5e48T?=
 =?iso-8859-1?Q?4hdzG5bdAKEiOxIu6eTVUJGczmx8TJQgwDiWRq5G14429HKH7DSVOorex/?=
 =?iso-8859-1?Q?/lEDlD+J0fbwE4rnJD6KqAOpJHp224r6LBG8A80Sinsf9EplVIvBdKekv4?=
 =?iso-8859-1?Q?5AolyCcOmHjTFlQYtHLlyEY3uX12cPOgMwMD7dO2yZJpMi2xhM/8eCSjZ5?=
 =?iso-8859-1?Q?6JEFASHbclyEJNcmHQofl+ACJUcHDie50jeoKlAgbQQuGwk6j0S9M0ZPO4?=
 =?iso-8859-1?Q?fYWSljJ5SkdjxmPe7zEP2CmH/3SkAq5fi3LrGjF/HtEsbw4ZC/EwmhkQDN?=
 =?iso-8859-1?Q?/eqb+FC2X4zwJSbz+Bpwndsvo0sgZPB0RMFlL8fRYL/aqxvMfeAMLjzJEy?=
 =?iso-8859-1?Q?xYq0N9szyIjl6ANm3fN1DkJahE2TDNlM1dHEiHUXWqLHvPNK22XvOrE4RM?=
 =?iso-8859-1?Q?3XKrW6/1Nw=3D=3D?=
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-OriginatorOrg: citrix.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: SA6PR03MB7760.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: b35179d9-f0b8-405c-20c9-08df29003d1b
X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Oct 2026 08:01:51.1637
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: H6ZBeXEqEoHWnBF092zFEKD10DsV0+aF4xdhefwFWgZ7/sYOxcnJ4+AmgvBFZUonk6rA60N1dVU8TRpcjZ+M9g==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV3PR03MB7429
X-purgate-ID: tlsNG-d25034/1791878514-770D9A5B-3DAF6FDB/0/0
X-purgate-type: clean
X-purgate-size: 1973

>>> diff --git a/src/xencontrol/xencontrol.c b/src/xencontrol/xencontrol.c=
=0A=
>>> index a68dcf6..8f21867 100644=0A=
>>> --- a/src/xencontrol/xencontrol.c=0A=
>>> +++ b/src/xencontrol/xencontrol.c=0A=
>>> @@ -407,6 +407,11 @@ XcGnttabPermitForeignAccess2(=0A=
>>>        BOOL                                            Success;=0A=
>>>        DWORD                                           Status;=0A=
>>>=0A=
>>> +    if (NumberPages =3D=3D 0 || NumberPages > XENCONTROL_GNTTAB_MAX_PA=
GES) {=0A=
>>=0A=
>> I believe the boundary condition of NumberPages =3D=3D=0A=
>> XENCONTROL_GNTTAB_MAX_PAGES still causes an overflow? So=0A=
>> XENCONTROL_GNTTAB_MAX_PAGES should be (1024 * 1024 - 1) instead.=0A=
>=0A=
>MAXULONG / PAGE_SIZE would be a better formulation still, only problem=0A=
>being PAGE_SIZE is not defined for usermode targets.=0A=
=0A=
Maximum number of pages allowed is also checked in IoctlGnttabMapForeignPag=
es=0A=
against a hard coded 1024*1024.=0A=
It would be good to have the same constant/#define referred to in both plac=
es.=0A=
=0A=
Eventually, this ends up in FdoPciHoleAllocate or FdoMemoryHoleAllocate, de=
pending=0A=
on the "UseMemoryHole" setting.=0A=
FdoPciHoleAllocate is limited to 4GiB - PAGE_SIZE bytes (i.e. 1024*1024 - 1=
 pages)=0A=
FdoMemoryHoleAllocate's allocations doesnt specify a maximum size, but the =
chances=0A=
of allocating a contiguous 4GB set of pages would be problematic.=0A=
=0A=
Its likely this check is excessively large, but I'm unsure as to what the s=
afe correct=0A=
maximum would be.=0A=
=0A=
>=0A=
>>=0A=
>>> +        Log(XLL_ERROR, L"Invalid NumberPages %lu", NumberPages);=0A=
>>> +        return ERROR_INVALID_PARAMETER;=0A=
>>> +    }=0A=
>>> +=0A=
>>>        In.RemoteDomain =3D RemoteDomain;=0A=
>>>        In.Address =3D Address;=0A=
>>>        In.NumberPages =3D NumberPages;=0A=
>>> @@ -508,6 +513,11 @@ XcGnttabMapForeignPages(=0A=
=0A=
Owen=0A=


From win-pv-devel-bounces@lists.xenproject.org Tue Oct 13 08:11:02 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 13 Oct 2026 08:11:02 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1446747.1662852 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGXbC-00061O-3F; Tue, 13 Oct 2026 08:11:02 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1446747.1662852; Tue, 13 Oct 2026 08:11:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGXbC-00061H-0j; Tue, 13 Oct 2026 08:11:02 +0000
Received: by outflank-mailman (input) for mailman id 1446747;
 Tue, 13 Oct 2026 08:11:00 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1345084a30008d8d@swg.vates.tech>)
 id 1xGXbA-000619-F8
 for win-pv-devel@lists.xenproject.org; Tue, 13 Oct 2026 08:11:00 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGXb9-0017UP-Rz
 for win-pv-devel@lists.xenproject.org; Tue, 13 Oct 2026 10:10:59 +0200
Received: from [10.42.69.11] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1345084a30008d8d@swg.vates.tech>)
 id 6acde793-2eae-0a2a0a5409dd-0a2a450bde1a-0
 for <win-pv-devel@lists.xenproject.org>; Tue, 13 Oct 2026 10:10:59 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-42698a.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1345084a30008d8d@swg.vates.tech>)
 id 6acde793-b7e8-0a2a450b0019-b9ff1c12a59d-3
 for <win-pv-devel@lists.xenproject.org>; Tue, 13 Oct 2026 10:10:59 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1345084a30008d8d.003 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Tue, 13 Oct 2026 08:10:54 +0000
Received: from [192.168.1.61] (142.220.66.37.rev.sfr.net [37.66.220.142])
 (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id CBBB5828F4;
 Tue, 13 Oct 2026 10:10:53 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=V7K+yCPv1kttvPs1EFlEf0RJTJ50ON8Hvd01pjQPhlY=;
 h=from:subject:date:message-id:to:mime-version:content-type:in-reply-to:references:feedback-id;
 b=oN2XVxtQd+DGZi+ZeSIXpUm5kT5f6rPoOtEaMlzpRRsbED97wUFqX3quVcNlL6nz/yPi/u+t0
 jIY0p+blODn8/VHgZSJLmSlwhwDoym6C2o4xk24K/LIjs231TDMTxGFRNl4tx5jwGRwcTFoTBfi
 QlKSdR0nHDUU9t6sqAqT7jB0og0fFOzMFfjBctVpXIgTwPqPWZjDfa7avwN/uGSf5+uOkLL4JHv
 jJcvci34qUw9wi2OgJwZKefYdE16rsFWMGPiaM83PQytp4Pb5SjF41e9DfE4ncM+LtfvDOko6Qj
 5YRC5n3YRxeFaw1IaVxP3fOJxwhjO4VV9mk/MgbQ/gUQ==
X-Zone-Loop: 4dfec43c2cb451ae476d1bcdc69e78336a2dd9cba7d4
x-campaign-type: default
x-transaction-id: a8b9892a-de28-47da-a79a-7c6b4965ed66
x-swg-uid: 01-f6d5e518-2a49-45d9-a75a-ae7a13cd4f80
X-Mailer: Sweego
Message-ID:
 <1791879054.8631fc262581453bbf619ec5b2062170.1a1345084a30008d8d@vates.tech>
x-swg-bid: 1791879054.8631fc262581453bbf619ec5b2062170.1a1345084a30008d8d
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
Date: Tue, 13 Oct 2026 10:10:53 +0200
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH 10/10] xencontrol: guard against NumberPages overflow in
 gnttab size calculation
Content-Language: en-US
To: Owen Smith <owen.smith@citrix.com>, David ambu
 <david.preetham@citrix.com>,
 "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <20261008120204.859-1-david.preetham@citrix.com>
 <20261008120204.859-10-david.preetham@citrix.com>
 <1791540657.8631fc262581453bbf619ec5b2062170.1a12024fd4a00080d7@vates.tech>
 <1791838835.8631fc262581453bbf619ec5b2062170.1a131ead1f30008d8d@vates.tech>
 <SA6PR03MB776035DF58FE72CF4E3F20AFFE9E2@SA6PR03MB7760.namprd03.prod.outlook.com>
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
In-Reply-To: <SA6PR03MB776035DF58FE72CF4E3F20AFFE9E2@SA6PR03MB7760.namprd03.prod.outlook.com>
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.12d.98a25ffb398bcad2.1a13450824c.144e6f3bec5c9a67=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791879053901
X-purgate-ID: tlsNG-42698a/1791879059-AAAD89EA-D8811829/0/0
X-purgate-type: clean
X-purgate-size: 2606

---=Part.12d.98a25ffb398bcad2.1a13450824c.144e6f3bec5c9a67=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

On 13/10/2026 10:01, Owen Smith wrote:
>>>> diff --git a/src/xencontrol/xencontrol=2Ec b/src/xencontrol/xencontro=
l=2Ec
>>>> index a68dcf6=2E=2E8f21867 100644
>>>> --- a/src/xencontrol/xencontrol=2Ec
>>>> +++ b/src/xencontrol/xencontrol=2Ec
>>>> @@ -407,6 +407,11 @@ XcGnttabPermitForeignAccess2(
>>>>         BOOL                                            Success;
>>>>         DWORD                                           Status;
>>>>
>>>> +    if (NumberPages =3D=3D 0 || NumberPages > XENCONTROL_GNTTAB_MAX_=
PAGES) {
>>>
>>> I believe the boundary condition of NumberPages =3D=3D
>>> XENCONTROL_GNTTAB_MAX_PAGES still causes an overflow? So
>>> XENCONTROL_GNTTAB_MAX_PAGES should be (1024 * 1024 - 1) instead=2E
>>
>> MAXULONG / PAGE_SIZE would be a better formulation still, only problem
>> being PAGE_SIZE is not defined for usermode targets=2E
>=20
> Maximum number of pages allowed is also checked in IoctlGnttabMapForeign=
Pages
> against a hard coded 1024*1024=2E
> It would be good to have the same constant/#define referred to in both p=
laces=2E
>=20
> Eventually, this ends up in FdoPciHoleAllocate or FdoMemoryHoleAllocate,=
 depending
> on the "UseMemoryHole" setting=2E
> FdoPciHoleAllocate is limited to 4GiB - PAGE_SIZE bytes (i=2Ee=2E 1024*1=
024 - 1 pages)
> FdoMemoryHoleAllocate's allocations doesnt specify a maximum size, but t=
he chances
> of allocating a contiguous 4GB set of pages would be problematic=2E
>=20
> Its likely this check is excessively large, but I'm unsure as to what th=
e safe correct
> maximum would be=2E

I think in general it'd be nice to bound the usermode grant consumption=20
to the actual free grant table space (and reserve some certain amount=20
for the kernel), but that doesn't look simple to implement=2E

SeLockMemoryPrivilege may also be worth checking in the caller path of=20
some ioctls=2E

>=20
>>
>>>
>>>> +        Log(XLL_ERROR, L"Invalid NumberPages %lu", NumberPages);
>>>> +        return ERROR_INVALID_PARAMETER;
>>>> +    }
>>>> +
>>>>         In=2ERemoteDomain =3D RemoteDomain;
>>>>         In=2EAddress =3D Address;
>>>>         In=2ENumberPages =3D NumberPages;
>>>> @@ -508,6 +513,11 @@ XcGnttabMapForeignPages(
>=20
> Owen



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.12d.98a25ffb398bcad2.1a13450824c.144e6f3bec5c9a67=---


From win-pv-devel-bounces@lists.xenproject.org Tue Oct 13 09:09:33 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 13 Oct 2026 09:09:33 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1446804.1662902 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGYVp-000791-DK; Tue, 13 Oct 2026 09:09:33 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1446804.1662902; Tue, 13 Oct 2026 09:09:33 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGYVp-00078t-AO; Tue, 13 Oct 2026 09:09:33 +0000
Received: by outflank-mailman (input) for mailman id 1446804;
 Tue, 13 Oct 2026 09:09:32 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <omeg@invisiblethingslab.com>) id 1xGYVo-00078h-Ob
 for win-pv-devel@lists.xenproject.org; Tue, 13 Oct 2026 09:09:32 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGYVo-008wcE-5G
 for win-pv-devel@lists.xenproject.org; Tue, 13 Oct 2026 11:09:32 +0200
Received: from [10.42.69.2] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <omeg@invisiblethingslab.com>)
 id 6acdf54b-e002-0a2a0a5209dd-0a2a4502b95c-8
 for <win-pv-devel@lists.xenproject.org>; Tue, 13 Oct 2026 11:09:32 +0200
Received: from [202.12.124.145] (helo=fout-b2-smtp.messagingengine.com)
 by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <omeg@invisiblethingslab.com>)
 id 6acdf54a-6ca4-0a2a45020019-ca0c7c91cf49-3
 for <win-pv-devel@lists.xenproject.org>; Tue, 13 Oct 2026 11:09:31 +0200
Received: from phl-compute-12.internal (phl-compute-12.internal [10.202.2.52])
 by mailfout.stl.internal (Postfix) with ESMTP id 608481D0014F
 for <win-pv-devel@lists.xenproject.org>; Tue, 13 Oct 2026 05:09:30 -0400 (EDT)
Received: from phl-frontend-03 ([10.202.2.162])
 by phl-compute-12.internal (MEProxy); Tue, 13 Oct 2026 05:09:30 -0400
Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue,
 13 Oct 2026 05:09:28 -0400 (EDT)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=fm2 header.d=invisiblethingslab.com header.i="@invisiblethingslab.com" header.h="Content-Transfer-Encoding:Content-Type:Date:From:In-Reply-To:Message-ID:MIME-Version:References:Subject:To"; dkim=pass header.s=fm2 header.d=messagingengine.com header.i="@messagingengine.com" header.h="Content-Transfer-Encoding:Content-Type:Date:Feedback-ID:From:In-Reply-To:Message-ID:MIME-Version:References:Subject:To:X-ME-Proxy:X-ME-Sender"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=cc:content-transfer-encoding
	:content-type:content-type:date:date:from:from:in-reply-to
	:in-reply-to:message-id:mime-version:references:reply-to:subject
	:subject:to:to; s=fm2; t=1791882569; x=1791968969; bh=nHKtULyl6U
	4X/pgEu8MPFoiu534IUUIEkTSdDDr4aQk=; b=f7V2yU4TKp1a4q7i+pKEcLX1an
	8kpZQUn3bxiHjEpOD+Wni243qReHdu+CYcZKj+tVRYj3EEV8q9+AHMhFBnqcWfCe
	p9VjUJhNu4SYNtu8dJuw5mh6WhZYLWDP1uPrrRqOayDVMnvU9J597R7ToqxYGh26
	908rf7hEt+H2zGVu7nzNpysGwQ+fS36G1c7mKXQf+RFS6c5idCLrKQkLJCNkm9U3
	+QmHQgXOaunQb5vBR4LcgrZvpFW171eYV6ld+uBX1RyaZegbQFlmHFGggiQjw6Az
	rR6JhFh2gfdTi30ulNbc7j7u95+Tvt6ktt7DHSzC++nYC5T8Zo5TIrVFsh1w==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
	messagingengine.com; h=cc:content-transfer-encoding:content-type
	:content-type:date:date:feedback-id:feedback-id:from:from
	:in-reply-to:in-reply-to:message-id:mime-version:references
	:reply-to:subject:subject:to:to:x-me-proxy:x-me-sender
	:x-me-sender:x-sasl-enc; s=fm2; t=1791882569; x=1791968969; bh=n
	HKtULyl6U4X/pgEu8MPFoiu534IUUIEkTSdDDr4aQk=; b=N+2DVLOu+yKZ0D7hK
	2TdYWc7yy02MKrrFYWJgKJQ+2zNKN0rm8baw7yJOdXkiVRYQqh51ELgLBpvaYmZ7
	SjPKr9a1j2OSH987lNHLnDvl4taxucVROyz2jwXUOOhZirYRWPjFCxf8aX3XeO7h
	6JXmdHyhjLZs+uvY8RYyVRn+NuvkAiOT0IhsDS26AtZulXCrMzOEycz8eUoQSUCU
	KZ5zj9nzmsucztvUg3eMMZPOhfQBZMtAcyFZLMBU5PO7OknSkjdqIm/FKG4AVJsZ
	OOBMxQ18+ExSsre80Y9LcmrkbpOmZzYNnj1yOXxGWid6OGD4ECtFhCw1CfL2nVUo
	oVmng==
X-DKIM2-Info: draft=ietf-dkim-dkim2-spec-06;
	repo=github.com/dkim2wg/interop; date=2026-10-04; sw=lmtpprox;
	action=sign d=invisiblethingslab.com a=rsa-sha256;
DKIM2-Signature: i=1; m=1; t=1791882569; d=invisiblethingslab.com;
	mf=PG9tZWdAaW52aXNpYmxldGhpbmdzbGFiLmNvbT4=;
	rt=PHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZz4=;
	s=fm2:rsa-sha256:NbkWnMXvTW77SvYbliHNAaqi9Vgm0yjg89hsA82mbNzEXCu
	tvRuVngh8j0qIekPskXUZarsOZA4sG2cV2AARea6Zcqv8JmB0KGd65uygdFtFeAI
	34lpGrlDZxuKWTD6pROjT+r0U4yBzW5jArJBN9bkebWzRmSFBemurg7s/NdXcU8/
	j8I999OQujkBjqCoYfq+XuTdmtXpjh4WhQZW5psAIfeFYpMdearTLfjx+VAiDfiv
	bHk70Oo2A/Duo0H7kSDKdCl8D7ZXd7zAV5LGQwojudtEMDOo9YQbl+jQLh99YLPQ
	6YRSnFxOdG/H1Lk+Jqy2zm+x2cQ7Q44A/U09Nmg==;
X-DKIM2-Info: draft=ietf-dkim-dkim2-spec-06;
	repo=github.com/dkim2wg/interop; date=2026-10-04; sw=lmtpprox;
	action=mi-m=1; hc=13;
	hn=content-language,content-transfer-encoding,content-type,date,
	feedback-id,from,in-reply-to,message-id,mime-version,references,
	subject,to,user-agent;
Message-Instance: m=1; h=sha256:AjYAHMlI94+ze2gj9ZgV1ErCliYMTbEVW+DBvp+Xmh8=:Liuap1p6ZL7nwGfuVWiVBVsPfQAAvg5Ir5df5SOcJLg=;
X-ME-Sender: <xms:SfXNamsS7RF2ttqg51Lx6Y0z8ik8Ea37m-kZtsnCwmezRNYTHTbUMw>
    <xme:SfXNamAHC9MaIoWcB0TTLe5LkXEFr4tfNIxE6sxKmWZD7d13PJh7ubhe-BY4OMR4O
    uBRc1QLINGTzDpIG9BN95RjeKN0beyxIY58nY-Wu1gclpT1GCMy>
X-ME-Received: <xmr:SfXNauVx8qkDlMZbdG0v2UBBN1FpbKbTUpNggxIRdI8306izmEPHg-a4-xg4BxOqvPHeh_FXHIos1HDkIBKz5SO4>
X-ME-Proxy-Cause: dmFkZTGacAmvnT9kb2wJiwkXmTYi0NlO2VV2gXKiqgs2sjdI+7Bfuzz9fDUrxfg1+GwZf+
    zPYvIIs1wSQc1N+mCZHatgogU+J/XGe/+mBFM3554vDyFCW6ndUmgeJb7m6bZsaJTfdzFX
    tmgYMsPPj7KySpLfMZ1iqkPoWKvTrApPFMc7hZ0h4KelvOoRX0oG289d/0TLRplmvZOD36
    UZ51M4JKo4AQELfYbd09d1JGWncnpsfjK0mF2qUuuRZtzAxR77l3Dq31/YN+0hxtMxAQva
    SomMRtbTLFujhTZaQ9nh6KrXqoiY1pYjCLp6EnseOhBMSnf3iCzQ7wEE3x2HWEn2C4R8GS
    TJ3zYGJUS2vEUzHRh30cHCdDzklXf7fBtQMbS3N3/o1Vnbm1n2Ma4+AjkHnAhIFPP+Dg8H
    FzfyimOxIzPC4aSddlTRn285Skg1liT3IcNjX5zR+mTvIZxkwbUUj2vdZGd5i4WrWXVZMg
    kzvhFSLbZSDZlcIanwLXIiR9w7o+fpGaXKbIa0PGDlc86BhidwLzAsNI5s1LF7+i8TZmtr
    Rult32J5MHd9sC6HH/H86ESj4Ja89NOJ2XNEH8WX0D/NwcE4bV1YyUxKX2Lp5D6ysm6hNj
    tMOwEGQBptO5tO/6DKWn2qAqna2XTgxeY52IFDzouY9tUTslH4luqfS0w1qg
X-ME-Proxy: <xmx:SfXNakBy63Al7olAEpR5WbyskAdzJxW2XNB5EvUAorDZLAxZX9Bt2w>
    <xmx:SfXNah9ze75vGNVDAftnSbyk36p5zBK1ne7_uIoHLzqzTBeDVzA_lQ>
    <xmx:SfXNarHxfI6qlz0Ku0WSo2mp2N8NYg5n_GHlTwDE9wuqKoCDW60QLA>
    <xmx:SfXNavPUsFRpuvXMThSyPP_NGEDvtgoTm9FR-55cIyuHyzPdX5lCMQ>
    <xmx:SfXNai7WL_KtWmAXqCd3ZyswEZ9AMDl4PyV1opKdPgBtv9Cy2xQGFMUR>
Feedback-ID: i409c4082:Fastmail
Message-ID: <91da5070-a06b-4317-8a49-2407bb730fba@invisiblethingslab.com>
Date: Tue, 13 Oct 2026 11:09:27 +0200
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH 10/10] xencontrol: guard against NumberPages overflow in
 gnttab size calculation
To: Tu Dinh <ngoc-tu.dinh@vates.tech>, Owen Smith <owen.smith@citrix.com>,
 David ambu <david.preetham@citrix.com>,
 "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <20261008120204.859-1-david.preetham@citrix.com>
 <20261008120204.859-10-david.preetham@citrix.com>
 <1791540657.8631fc262581453bbf619ec5b2062170.1a12024fd4a00080d7@vates.tech>
 <1791838835.8631fc262581453bbf619ec5b2062170.1a131ead1f30008d8d@vates.tech>
 <SA6PR03MB776035DF58FE72CF4E3F20AFFE9E2@SA6PR03MB7760.namprd03.prod.outlook.com>
 <1791879054.8631fc262581453bbf619ec5b2062170.1a1345084a30008d8d@vates.tech>
Content-Language: en-US
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
In-Reply-To: <1791879054.8631fc262581453bbf619ec5b2062170.1a1345084a30008d8d@vates.tech>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
X-purgate-ID: tlsNG-720697/1791882572-F10A02AC-EE304AA9/0/0
X-purgate-type: clean
X-purgate-size: 2262

On 13.10.2026 10:10, Tu Dinh wrote:
> On 13/10/2026 10:01, Owen Smith wrote:
>>>>> diff --git a/src/xencontrol/xencontrol.c b/src/xencontrol/xencontrol.c
>>>>> index a68dcf6..8f21867 100644
>>>>> --- a/src/xencontrol/xencontrol.c
>>>>> +++ b/src/xencontrol/xencontrol.c
>>>>> @@ -407,6 +407,11 @@ XcGnttabPermitForeignAccess2(
>>>>>          BOOL                                            Success;
>>>>>          DWORD                                           Status;
>>>>>
>>>>> +    if (NumberPages == 0 || NumberPages > XENCONTROL_GNTTAB_MAX_PAGES) {
>>>> I believe the boundary condition of NumberPages ==
>>>> XENCONTROL_GNTTAB_MAX_PAGES still causes an overflow? So
>>>> XENCONTROL_GNTTAB_MAX_PAGES should be (1024 * 1024 - 1) instead.
>>> MAXULONG / PAGE_SIZE would be a better formulation still, only problem
>>> being PAGE_SIZE is not defined for usermode targets.
>> Maximum number of pages allowed is also checked in IoctlGnttabMapForeignPages
>> against a hard coded 1024*1024.
>> It would be good to have the same constant/#define referred to in both places.
>>
>> Eventually, this ends up in FdoPciHoleAllocate or FdoMemoryHoleAllocate, depending
>> on the "UseMemoryHole" setting.
>> FdoPciHoleAllocate is limited to 4GiB - PAGE_SIZE bytes (i.e. 1024*1024 - 1 pages)
>> FdoMemoryHoleAllocate's allocations doesnt specify a maximum size, but the chances
>> of allocating a contiguous 4GB set of pages would be problematic.
>>
>> Its likely this check is excessively large, but I'm unsure as to what the safe correct
>> maximum would be.
> I think in general it'd be nice to bound the usermode grant consumption
> to the actual free grant table space (and reserve some certain amount
> for the kernel), but that doesn't look simple to implement.
>
> SeLockMemoryPrivilege may also be worth checking in the caller path of
> some ioctls.

I'll finally be sending my rework of the grant/map code soon, hopefully 
this week. Got caught up with other projects, but I'm testing it now. It 
includes new interface versions with bounded batched maps/unmaps, 
per-page error reporting and other improvements.

What's the policy on retaining old xenbus interface versions?


Rafał Wojdyła
Invisible Things Lab


From win-pv-devel-bounces@lists.xenproject.org Tue Oct 13 09:13:06 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 13 Oct 2026 09:13:06 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1446817.1662915 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGYZG-0000tL-SO; Tue, 13 Oct 2026 09:13:06 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1446817.1662915; Tue, 13 Oct 2026 09:13:06 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGYZG-0000tE-Pb; Tue, 13 Oct 2026 09:13:06 +0000
Received: by outflank-mailman (input) for mailman id 1446817;
 Tue, 13 Oct 2026 09:13:05 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a134895a470008d8d@swg.vates.tech>)
 id 1xGYZF-0000t8-NT
 for win-pv-devel@lists.xenproject.org; Tue, 13 Oct 2026 09:13:05 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGYZF-008xyb-4G
 for win-pv-devel@lists.xenproject.org; Tue, 13 Oct 2026 11:13:05 +0200
Received: from [10.42.69.1] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a134895a470008d8d@swg.vates.tech>)
 id 6acdf61e-bab6-0a2a0a5309dd-0a2a4501959c-10
 for <win-pv-devel@lists.xenproject.org>; Tue, 13 Oct 2026 11:13:05 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a134895a470008d8d@swg.vates.tech>)
 id 6acdf620-5984-0a2a45010019-b9ff1c239e57-3
 for <win-pv-devel@lists.xenproject.org>; Tue, 13 Oct 2026 11:13:05 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a134895a470008d8d.004 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Tue, 13 Oct 2026 09:12:59 +0000
Received: from [192.168.1.61] (142.220.66.37.rev.sfr.net [37.66.220.142])
 (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 74E48821D5;
 Tue, 13 Oct 2026 11:12:58 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=xgRB6LR1sLqtT9kbwQz/DuQVo5bsQQ2ExsrO3Mfvs+Q=;
 h=from:subject:date:message-id:to:mime-version:content-type:in-reply-to:references:feedback-id;
 b=NyjWbp7DgIpvuUewee9nkslhRWHg9dj708Q0C+B3jFQs4wYcQ5A+HzDAhaiGRJpRdXULI+HmJ
 NRMA+lO9S+bU1x27WiPio/9vQwF/twZNS9uNTiRnK5i7QFJel7G6NYMKw4+H88Dy/0Rvy+B5zPo
 Iar175AUqqXPCMkKbkXIjE+sXVTKzBPzeQgOV70SoYI0cZr70y354qzNpVd3uYyg5QNcinK0aU2
 GSPuSSKpQUsY3FScYXRn28d1GPyIrGH3W2qI4UK9omuBFGbeYJEMMbshBrocz39tk2fVawMPQEP
 niQ7vM1YtNcuEYTXMKO8Gl+QZ60wrDNnAp3t06JX4kfQ==
X-Zone-Loop: 26fb101022f990488b9cc2277f247ca387afbf5f9fc9
x-campaign-type: default
x-transaction-id: b523d919-4444-41c6-85e8-d666b750068f
x-swg-uid: 01-7d6bc15f-8634-445b-9470-c2eec6d7e20e
X-Mailer: Sweego
Message-ID:
 <1791882779.8631fc262581453bbf619ec5b2062170.1a134895a470008d8d@vates.tech>
x-swg-bid: 1791882779.8631fc262581453bbf619ec5b2062170.1a134895a470008d8d
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
Date: Tue, 13 Oct 2026 11:12:58 +0200
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH 10/10] xencontrol: guard against NumberPages overflow in
 gnttab size calculation
Content-Language: en-US
To: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>,
 Owen Smith <owen.smith@citrix.com>, David ambu <david.preetham@citrix.com>,
 "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <20261008120204.859-1-david.preetham@citrix.com>
 <20261008120204.859-10-david.preetham@citrix.com>
 <1791540657.8631fc262581453bbf619ec5b2062170.1a12024fd4a00080d7@vates.tech>
 <1791838835.8631fc262581453bbf619ec5b2062170.1a131ead1f30008d8d@vates.tech>
 <SA6PR03MB776035DF58FE72CF4E3F20AFFE9E2@SA6PR03MB7760.namprd03.prod.outlook.com>
 <1791879054.8631fc262581453bbf619ec5b2062170.1a1345084a30008d8d@vates.tech>
 <91da5070-a06b-4317-8a49-2407bb730fba@invisiblethingslab.com>
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
In-Reply-To: <91da5070-a06b-4317-8a49-2407bb730fba@invisiblethingslab.com>
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.145.e4bf9d1cc3666d95.1a1348957bc.20daa36a2d044dd=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791882778556
X-purgate-ID: tlsNG-d62444/1791882785-1F86F757-740ECB78/0/0
X-purgate-type: clean
X-purgate-size: 3779

---=Part.145.e4bf9d1cc3666d95.1a1348957bc.20daa36a2d044dd=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

On 13/10/2026 11:10, Rafa=C5=82 Wojdy=C5=82a wrote:
> On 13=2E10=2E2026 10:10, Tu Dinh wrote:
>> On 13/10/2026 10:01, Owen Smith wrote:
>>>>>> diff --git a/src/xencontrol/xencontrol=2Ec b/src/xencontrol/=20
>>>>>> xencontrol=2Ec
>>>>>> index a68dcf6=2E=2E8f21867 100644
>>>>>> --- a/src/xencontrol/xencontrol=2Ec
>>>>>> +++ b/src/xencontrol/xencontrol=2Ec
>>>>>> @@ -407,6 +407,11 @@ XcGnttabPermitForeignAccess2(
>>>>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 BOOL=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0 Success;
>>>>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DWORD=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 Status;
>>>>>>
>>>>>> +=C2=A0=C2=A0=C2=A0 if (NumberPages =3D=3D 0 || NumberPages >=20
>>>>>> XENCONTROL_GNTTAB_MAX_PAGES) {
>>>>> I believe the boundary condition of NumberPages =3D=3D
>>>>> XENCONTROL_GNTTAB_MAX_PAGES still causes an overflow? So
>>>>> XENCONTROL_GNTTAB_MAX_PAGES should be (1024 * 1024 - 1) instead=2E
>>>> MAXULONG / PAGE_SIZE would be a better formulation still, only proble=
m
>>>> being PAGE_SIZE is not defined for usermode targets=2E
>>> Maximum number of pages allowed is also checked in=20
>>> IoctlGnttabMapForeignPages
>>> against a hard coded 1024*1024=2E
>>> It would be good to have the same constant/#define referred to in=20
>>> both places=2E
>>>
>>> Eventually, this ends up in FdoPciHoleAllocate or=20
>>> FdoMemoryHoleAllocate, depending
>>> on the "UseMemoryHole" setting=2E
>>> FdoPciHoleAllocate is limited to 4GiB - PAGE_SIZE bytes (i=2Ee=2E=20
>>> 1024*1024 - 1 pages)
>>> FdoMemoryHoleAllocate's allocations doesnt specify a maximum size,=20
>>> but the chances
>>> of allocating a contiguous 4GB set of pages would be problematic=2E
>>>
>>> Its likely this check is excessively large, but I'm unsure as to what=
=20
>>> the safe correct
>>> maximum would be=2E
>> I think in general it'd be nice to bound the usermode grant consumption
>> to the actual free grant table space (and reserve some certain amount
>> for the kernel), but that doesn't look simple to implement=2E
>>
>> SeLockMemoryPrivilege may also be worth checking in the caller path of
>> some ioctls=2E
>=20
> I'll finally be sending my rework of the grant/map code soon, hopefully=
=20
> this week=2E Got caught up with other projects, but I'm testing it now=
=2E It=20
> includes new interface versions with bounded batched maps/unmaps, per-=
=20
> page error reporting and other improvements=2E

Great to hear=2E I can share our WIP test suite of evtchn/gnttab ioctls as=
=20
well as a few private fixes we've been working on on our side=2E

>=20
> What's the policy on retaining old xenbus interface versions?

Currently, old xenbus interface versions have to be retained=20
indefinitely, because since b0b9cc139600 old drivers could still bind to=
=20
devices without being aware of compatibility changes=2E

>=20
>=20
> Rafa=C5=82 Wojdy=C5=82a
> Invisible Things Lab
>=20



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.145.e4bf9d1cc3666d95.1a1348957bc.20daa36a2d044dd=---


From win-pv-devel-bounces@lists.xenproject.org Tue Oct 13 09:19:57 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 13 Oct 2026 09:19:57 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1446829.1662927 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGYft-0001va-IZ; Tue, 13 Oct 2026 09:19:57 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1446829.1662927; Tue, 13 Oct 2026 09:19:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGYft-0001vT-Fj; Tue, 13 Oct 2026 09:19:57 +0000
Received: by outflank-mailman (input) for mailman id 1446829;
 Tue, 13 Oct 2026 09:19:56 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <omeg@invisiblethingslab.com>) id 1xGYfs-0001vA-GY
 for win-pv-devel@lists.xenproject.org; Tue, 13 Oct 2026 09:19:56 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGYfr-008D7d-60
 for win-pv-devel@lists.xenproject.org; Tue, 13 Oct 2026 11:19:55 +0200
Received: from [10.42.69.11] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <omeg@invisiblethingslab.com>)
 id 6acdf7b2-2eae-0a2a0a5409dd-0a2a450bc66a-28
 for <win-pv-devel@lists.xenproject.org>; Tue, 13 Oct 2026 11:19:55 +0200
Received: from [202.12.124.145] (helo=fout-b2-smtp.messagingengine.com)
 by tlsNG-42698a.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <omeg@invisiblethingslab.com>)
 id 6acdf7b9-b7e8-0a2a450b0019-ca0c7c918c45-3
 for <win-pv-devel@lists.xenproject.org>; Tue, 13 Oct 2026 11:19:54 +0200
Received: from phl-compute-04.internal (phl-compute-04.internal [10.202.2.44])
 by mailfout.stl.internal (Postfix) with ESMTP id 3AB991D00167
 for <win-pv-devel@lists.xenproject.org>; Tue, 13 Oct 2026 05:19:53 -0400 (EDT)
Received: from phl-frontend-03 ([10.202.2.162])
 by phl-compute-04.internal (MEProxy); Tue, 13 Oct 2026 05:19:53 -0400
Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue,
 13 Oct 2026 05:19:51 -0400 (EDT)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=fm2 header.d=invisiblethingslab.com header.i="@invisiblethingslab.com" header.h="Content-Transfer-Encoding:Content-Type:Date:From:In-Reply-To:Message-ID:MIME-Version:References:Subject:To"; dkim=pass header.s=fm2 header.d=messagingengine.com header.i="@messagingengine.com" header.h="Content-Transfer-Encoding:Content-Type:Date:Feedback-ID:From:In-Reply-To:Message-ID:MIME-Version:References:Subject:To:X-ME-Proxy:X-ME-Sender"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=cc:content-transfer-encoding
	:content-type:content-type:date:date:from:from:in-reply-to
	:in-reply-to:message-id:mime-version:references:reply-to:subject
	:subject:to:to; s=fm2; t=1791883192; x=1791969592; bh=uw3n8mBDg/
	4TZYPIyZZSvsRdEQQFBE5EKZcOvyOrl8Q=; b=R9O3q7/3TTCF0HJwFzcXOgPIup
	AJYOH0Bi5FsOVj7s4LHvuQ61Hy5H6ocmJnqsXm8OxlR8yq5Q7XUH0jg+6cXjDogs
	QFpuGkCtGkD3odCVTGqPJhCREIu6H0+5/TDaaxL5hPZX4Bff7lmwuCf9pshV87VM
	iJoTRHh7ldYz8P1p7RGluoYY7rhSXuu9bNs4FXcynKTOQoFqOB/cBMeC3GQXyF3h
	GtqkQdTZTvmUy7QsUAfjazzF0w6foiHnYkJkoZZDXdnxk7Q23ySvA9WCkBXVE1xT
	EMW8FnvGCc+RJXEc49Pe+S4jYXeDd+zijuk9oLtlehN+x1QJMeTxl/LtEUnw==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
	messagingengine.com; h=cc:content-transfer-encoding:content-type
	:content-type:date:date:feedback-id:feedback-id:from:from
	:in-reply-to:in-reply-to:message-id:mime-version:references
	:reply-to:subject:subject:to:to:x-me-proxy:x-me-sender
	:x-me-sender:x-sasl-enc; s=fm2; t=1791883192; x=1791969592; bh=u
	w3n8mBDg/4TZYPIyZZSvsRdEQQFBE5EKZcOvyOrl8Q=; b=uX6ojV1QbCUXE+7iM
	Phh4I7iR4S6fdst1wMoCGa6V/pnFIAOOGfnQEfO32HHzoi2e4onIKwh+8P6H+Ptu
	0hZPdMVJIlUgx/4DGc2ctfzHoCyhreC4BviTNctn82zbFsy0SfvYaTK64fmAoWOd
	GpZ1nkZO9DPpqOuKzPnSQtFHVg/IAhGT5jxDw9EYd0WsXhemeEOkLiK2VxJjGxVM
	G9fwisR9uXpKn8jrQx20ZI6pdOgxCFMaVCyqLCA3LmJ+acSSlGxKxwMtU2TFsq0Y
	oVWjc6TF1tsfvDbSCihPsdwgbg57+4IH4nEIPPl1tKmECMtQigXmZXcv1WlMucFl
	tiifw==
X-DKIM2-Info: draft=ietf-dkim-dkim2-spec-06;
	repo=github.com/dkim2wg/interop; date=2026-10-04; sw=lmtpprox;
	action=sign d=invisiblethingslab.com a=rsa-sha256;
DKIM2-Signature: i=1; m=1; t=1791883192; d=invisiblethingslab.com;
	mf=PG9tZWdAaW52aXNpYmxldGhpbmdzbGFiLmNvbT4=;
	rt=PHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZz4=;
	s=fm2:rsa-sha256:V/Zmg58uNJP3t2TEOXlywN5FOpZpn9FXzmRHnd3mq5n2jqP
	R76PsTlpMfz+Z4INwNSxcgQlvlwU7tfwZM6DSxz08q7TgBsbPYolNZD1SnGMZe5u
	9CJCOikrY2jHOxg3++RLOvzBHSX6XkZiofHu91LrCkhNF4aHLKjOFwtXitA7hNUD
	ds+VUl5uVH451dnCi3sOCBxae3hEg2+ul0wcVLWEnzWS/YOAu5Jqh/qjTA6o2rff
	DFFeKcDY1lLmYa5jFgoTLI1j+v4VGPaI/skY7F6d1ZCT7eD5sp0kBkX8kyZ2LSAJ
	R2C3hX21u6Yhfc8E/mKFvtu7/Uh+hvTDE+qggHg==;
X-DKIM2-Info: draft=ietf-dkim-dkim2-spec-06;
	repo=github.com/dkim2wg/interop; date=2026-10-04; sw=lmtpprox;
	action=mi-m=1; hc=13;
	hn=content-language,content-transfer-encoding,content-type,date,
	feedback-id,from,in-reply-to,message-id,mime-version,references,
	subject,to,user-agent;
Message-Instance: m=1; h=sha256:yukfUM9VOBmHJa2puLIzDuzTzu4Gv5IhthQHNyALlyQ=:bLCt6LdNRk2HdWvpWl5SvyAhsX9khpMo3M4QBt9R5H0=;
X-ME-Sender: <xms:uPfNapaqfZ-D86yhlSKNPKnO3SQxR2KH4nyOXGznRftdg7sHqgSvgw>
    <xme:uPfNanYmO4kGNsDxmk0G6laDVTuteyDCYpEKIuw5CyYnlhotBEBiVy7uAx_CgZjX6
    AK8JcQRLBSqAHCVc09pSh35jwVMOARp3AokUqOzCWetBNgE_JY2>
X-ME-Received: <xmr:uPfNag9yb8nN7N5uuVwqe0b2W-b8uBshkfHo5w4Qvp0f4WmScwNJOf8mLsMlbxauH9ULjSRezxBCoa1CUW_f1yyN>
X-ME-Proxy-Cause: dmFkZTEQTBw9a6lAhq8SB7Jg5G4tGtmr2NV/+C+qjpASI4svktNnXSJY2IsYrttVPtomEC
    zujWWHiZbK1VXkwHMBO8r7xq59JzKssnIg6XPGrevmow5tppMR/UgFGBjaOHT7cxCv78DY
    shGfSju2lBd0okKD2wZ0leACuYBiTFnD0B0K0cOx3VbYb4hSTrVn5C43tGCs2TG06o4L7S
    oPJAj7EK/VpZLUk4nr7Aa6mfFJRTZTFHsKzSruoKtFnyS5inug+dXoMfMoJydu+nF5Fetb
    FXvQ73rTTeJ5HnnxeElLZWEoDuYk/NA72BNIiLsTCEkcJEIeSOxtLVQbhR1fhChhpE27rL
    fiRaEWLP/qsLpXUbtvHF8PjFDxIxxqC8tOPyfLIQQs3tb+gL+DfnITWEfm11zyWnUVIhir
    UNnCtLG4SDmw1BFt7BliMaGuP91Bo2PMsIL0pSr2P6QNq3/8xCRrfo3FXFD+wv+yw9cWpn
    rITOIFUGCESenCtYqubeKf6gANPzzqiFqMlntpkGPWFgugANtH6JfoJNbFziIoI0Iw72ou
    sj8L8NsHL6FolVAYO8d4p75C5uX0H7HjaxC/ULbzu8pterbZfWiFNhX7Dcd5kRBfATkk3n
    vG+vq6l+iuXJ7K3M2Fjwch5opAx/RgCsJT4kWz0vHE8UIqFw4EUCSQWeIPkw
X-ME-Proxy: <xmx:uPfNamgY4eUNcDKqInK487l08lIQ6_E0ByumPBWXL7Y7PMfArnUScA>
    <xmx:uPfNagcK5nmMLDny_S9swxIsyvks1oY-dwRkek4JC4I3hFmzYkOSpA>
    <xmx:uPfNatrc_jK0Yd9drshQg8dIxImFFcIKK-S20fwy9IMmuGrQ95xBFw>
    <xmx:uPfNalD40t3N3-Z_w-CSr5EmoM5eQHUMuOaCbWbn9sKMbvPu5WWykQ>
    <xmx:uPfNar4K4wTyfNJOV-buTcDozyPjCDY-FZ09rJvxYgHjtJGXNcQlFlP1>
Feedback-ID: i409c4082:Fastmail
Message-ID: <e75b8eda-8b3f-43c3-86c4-a8e610a7ae35@invisiblethingslab.com>
Date: Tue, 13 Oct 2026 11:19:50 +0200
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH 10/10] xencontrol: guard against NumberPages overflow in
 gnttab size calculation
To: Tu Dinh <ngoc-tu.dinh@vates.tech>, Owen Smith <owen.smith@citrix.com>,
 David ambu <david.preetham@citrix.com>,
 "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <20261008120204.859-1-david.preetham@citrix.com>
 <20261008120204.859-10-david.preetham@citrix.com>
 <1791540657.8631fc262581453bbf619ec5b2062170.1a12024fd4a00080d7@vates.tech>
 <1791838835.8631fc262581453bbf619ec5b2062170.1a131ead1f30008d8d@vates.tech>
 <SA6PR03MB776035DF58FE72CF4E3F20AFFE9E2@SA6PR03MB7760.namprd03.prod.outlook.com>
 <1791879054.8631fc262581453bbf619ec5b2062170.1a1345084a30008d8d@vates.tech>
 <91da5070-a06b-4317-8a49-2407bb730fba@invisiblethingslab.com>
 <1791882779.8631fc262581453bbf619ec5b2062170.1a134895a470008d8d@vates.tech>
Content-Language: en-US
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
In-Reply-To: <1791882779.8631fc262581453bbf619ec5b2062170.1a134895a470008d8d@vates.tech>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
X-purgate-ID: tlsNG-42698a/1791883194-AB4D39EA-0BCC5B08/0/0
X-purgate-type: clean
X-purgate-size: 3028

On 13.10.2026 11:12, Tu Dinh wrote:
> On 13/10/2026 11:10, Rafał Wojdyła wrote:
>> On 13.10.2026 10:10, Tu Dinh wrote:
>>> On 13/10/2026 10:01, Owen Smith wrote:
>>>>>>> diff --git a/src/xencontrol/xencontrol.c b/src/xencontrol/
>>>>>>> xencontrol.c
>>>>>>> index a68dcf6..8f21867 100644
>>>>>>> --- a/src/xencontrol/xencontrol.c
>>>>>>> +++ b/src/xencontrol/xencontrol.c
>>>>>>> @@ -407,6 +407,11 @@ XcGnttabPermitForeignAccess2(
>>>>>>>           BOOL                                            Success;
>>>>>>>           DWORD                                           Status;
>>>>>>>
>>>>>>> +    if (NumberPages == 0 || NumberPages >
>>>>>>> XENCONTROL_GNTTAB_MAX_PAGES) {
>>>>>> I believe the boundary condition of NumberPages ==
>>>>>> XENCONTROL_GNTTAB_MAX_PAGES still causes an overflow? So
>>>>>> XENCONTROL_GNTTAB_MAX_PAGES should be (1024 * 1024 - 1) instead.
>>>>> MAXULONG / PAGE_SIZE would be a better formulation still, only problem
>>>>> being PAGE_SIZE is not defined for usermode targets.
>>>> Maximum number of pages allowed is also checked in
>>>> IoctlGnttabMapForeignPages
>>>> against a hard coded 1024*1024.
>>>> It would be good to have the same constant/#define referred to in
>>>> both places.
>>>>
>>>> Eventually, this ends up in FdoPciHoleAllocate or
>>>> FdoMemoryHoleAllocate, depending
>>>> on the "UseMemoryHole" setting.
>>>> FdoPciHoleAllocate is limited to 4GiB - PAGE_SIZE bytes (i.e.
>>>> 1024*1024 - 1 pages)
>>>> FdoMemoryHoleAllocate's allocations doesnt specify a maximum size,
>>>> but the chances
>>>> of allocating a contiguous 4GB set of pages would be problematic.
>>>>
>>>> Its likely this check is excessively large, but I'm unsure as to what
>>>> the safe correct
>>>> maximum would be.
>>> I think in general it'd be nice to bound the usermode grant consumption
>>> to the actual free grant table space (and reserve some certain amount
>>> for the kernel), but that doesn't look simple to implement.
>>>
>>> SeLockMemoryPrivilege may also be worth checking in the caller path of
>>> some ioctls.
>> I'll finally be sending my rework of the grant/map code soon, hopefully
>> this week. Got caught up with other projects, but I'm testing it now. It
>> includes new interface versions with bounded batched maps/unmaps, per-
>> page error reporting and other improvements.
> Great to hear. I can share our WIP test suite of evtchn/gnttab ioctls as
> well as a few private fixes we've been working on on our side.
That would be nice, I was thinking of adding more comprehensive tests to 
the upstream repo.
>> What's the policy on retaining old xenbus interface versions?
> Currently, old xenbus interface versions have to be retained
> indefinitely, because since b0b9cc139600 old drivers could still bind to
> devices without being aware of compatibility changes.

-- 

Rafał Wojdyła

Invisible Things Lab



From win-pv-devel-bounces@lists.xenproject.org Tue Oct 13 09:58:53 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 13 Oct 2026 09:58:53 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1446864.1662967 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGZHZ-0001L0-1j; Tue, 13 Oct 2026 09:58:53 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1446864.1662967; Tue, 13 Oct 2026 09:58:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGZHY-0001Kt-VM; Tue, 13 Oct 2026 09:58:52 +0000
Received: by outflank-mailman (input) for mailman id 1446864;
 Tue, 13 Oct 2026 09:58:51 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a134b346ca0008425@swg.vates.tech>)
 id 1xGZHX-0001Kl-P9
 for win-pv-devel@lists.xenproject.org; Tue, 13 Oct 2026 09:58:51 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGZHW-000dhT-Pe
 for win-pv-devel@lists.xenproject.org; Tue, 13 Oct 2026 11:58:50 +0200
Received: from [10.42.69.2] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a134b346ca0008425@swg.vates.tech>)
 id 6ace00d0-e002-0a2a0a5209dd-0a2a4502d07c-30
 for <win-pv-devel@lists.xenproject.org>; Tue, 13 Oct 2026 11:58:50 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a134b346ca0008425@swg.vates.tech>)
 id 6ace00da-6ca4-0a2a45020019-b9ff1c12870b-3
 for <win-pv-devel@lists.xenproject.org>; Tue, 13 Oct 2026 11:58:50 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a134b346ca0008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Tue, 13 Oct 2026 09:58:46 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id AB2E882990;
 Tue, 13 Oct 2026 11:58:45 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=3HPwcetb8YGBNEGAc0n/cOActhjtQRRNbUrNx4N+aeQ=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:feedback-id;
 b=LPm3Ic3nPTpYJY481vyyMMr8tJ18B5RqqfggVELucghCNWyuUkR0Ym+7/o3wr9aUBKvhak+ox
 ZKVcYQikGyuqz+H6LyVLKKKOvSJTzb48XfySZZz821QIKwr/uG33nBlUBs72BuxAexrKFWbo5ue
 qAyW2VbyAlQT9vynuAPIUvfsT0y8P35dIzawkQLzN3BvF5XlIzYXGjDwTQSrcVn+ydIQ7L8VfyJ
 yBYT2itsM2c8RHokFp7mKTYAw74D4rtlpKbmbjYSCYmiFiwg8ebThdiGBZuMBZ3sf6S8w2EXvpU
 C5EwV44ezNdByv1Xi14iOQv6eUa/+tY3GiszpL63HjqQ==
X-Zone-Loop: c6a608a01de311cee79133598aa4e8e2a4f354e07537
x-campaign-type: default
x-transaction-id: 44516cdf-44c5-4cc1-90f5-719c77541ce3
x-swg-uid: 01-63935302-9ae4-4972-87eb-0ea2d6f090dc
X-Mailer: Sweego
Message-ID:
 <1791885526.8631fc262581453bbf619ec5b2062170.1a134b346ca0008425@vates.tech>
x-swg-bid: 1791885526.8631fc262581453bbf619ec5b2062170.1a134b346ca0008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [XENBUS PATCH] gnttab: Use for loop in GnttabRevokeForeignAccess
Date: Tue, 13 Oct 2026 11:58:42 +0200
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.14a.1a6df612a86380d2.1a134b3432a.81b299a07144dc25=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791885525802
X-purgate-ID: tlsNG-720697/1791885530-323D42AC-35538B9D/0/0
X-purgate-type: clean
X-purgate-size: 1174

---=Part.14a.1a6df612a86380d2.1a134b3432a.81b299a07144dc25=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

A while (Attempt++ < 100) loop leaves the final value at 101 after it
fails, because the value is checked before it's incremented=2E

Just use a normal for loop instead, which leaves the final Attempt at
100=2E

Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 src/xenbus/gnttab=2Ec | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/src/xenbus/gnttab=2Ec b/src/xenbus/gnttab=2Ec
index 3adcef4=2E=2Ebdf8b2b 100644
--- a/src/xenbus/gnttab=2Ec
+++ b/src/xenbus/gnttab=2Ec
@@ -571,8 +571,7 @@ GnttabRevokeForeignAccess(
=20
     flags =3D (volatile SHORT *)&Frame->Entry[Index]=2Eflags;
=20
-    Attempt =3D 0;
-    while (Attempt++ < 100) {
+    for (Attempt =3D 0; Attempt < 100; Attempt++) {
         uint16_t    Old;
         uint16_t    New;
=20
--=20
2=2E55=2E0=2Ewindows=2E3



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.14a.1a6df612a86380d2.1a134b3432a.81b299a07144dc25=---


From win-pv-devel-bounces@lists.xenproject.org Tue Oct 13 11:58:04 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 13 Oct 2026 11:58:04 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1447057.1663216 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGb8t-0006SS-7f; Tue, 13 Oct 2026 11:58:03 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1447057.1663216; Tue, 13 Oct 2026 11:58:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGb8t-0006SL-57; Tue, 13 Oct 2026 11:58:03 +0000
Received: by outflank-mailman (input) for mailman id 1447057;
 Tue, 13 Oct 2026 11:58:01 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a135205d930008425@swg.vates.tech>)
 id 1xGb8q-0006SB-Ne
 for win-pv-devel@lists.xenproject.org; Tue, 13 Oct 2026 11:58:01 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGb8p-000H3y-IF
 for win-pv-devel@lists.xenproject.org; Tue, 13 Oct 2026 13:57:59 +0200
Received: from [10.42.69.12] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a135205d930008425@swg.vates.tech>)
 id 6ace1cbc-2eae-0a2a0a5409dd-0a2a450c9d36-40
 for <win-pv-devel@lists.xenproject.org>; Tue, 13 Oct 2026 13:57:59 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-d25034.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a135205d930008425@swg.vates.tech>)
 id 6ace1cc6-f479-0a2a450c0019-b9ff1c229bad-3
 for <win-pv-devel@lists.xenproject.org>; Tue, 13 Oct 2026 13:57:59 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a135205d930008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Tue, 13 Oct 2026 11:57:55 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 1017381F62;
 Tue, 13 Oct 2026 13:57:55 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=mcL187rQNibbAXr9Da5xpMAXDhJD1AyNpshOdTKzO00=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:feedback-id;
 b=eIVQ/eKA6v/aNNd6YoLuPBQGgffb8BvH3bhqLVK2xgZv5QEV3L7/Mh6IdMkPYktbOV/aBxWK1
 J9DjsOOATdIXebB2QKtHsYLPdSbN9KIfjQ0GmN1T+TqlWZy2j0K4iBWGBCLGmB0Ina4Q9beTGKD
 416ZDEIQWlSAHgb3TSWAkixW/CjvGvV/ZgMk9IeFi+1kDfx+l7njZbTwTrkiLv2CfGrpdKrpKOO
 XOtDgP76G+mOsFFt5HG6SyafEgahd4MNXiVDTN+lsJA/L0rxHCo7Q8rUkzLFUVjTL0bg/HezHNX
 O1QrfEzaOrZ7lYm7c0u/GyvovF8K05gBZrgKZA17wbkA==
X-Zone-Loop: 702c6339e25229f31bcb9bc16332164388489f05ba2e
x-campaign-type: default
x-transaction-id: 698d3df7-4674-4b7d-a5e3-0b41767ddd51
x-swg-uid: 01-0f792533-ca02-49ea-9ff5-d88576af2e46
X-Mailer: Sweego
Message-ID:
 <1791892676.8631fc262581453bbf619ec5b2062170.1a135205d930008425@vates.tech>
x-swg-bid: 1791892676.8631fc262581453bbf619ec5b2062170.1a135205d930008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [PATCH] Set SkipBytes to 0 for contiguous allocations
Date: Tue, 13 Oct 2026 13:57:50 +0200
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.150.429a5be9b6b137c.1a135205a3e.e855972fe63e37f9=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791892675135
X-purgate-ID: tlsNG-d25034/1791892679-00ACCA5B-0C23CEEA/0/0
X-purgate-type: clean
X-purgate-size: 1478

---=Part.150.429a5be9b6b137c.1a135205a3e.e855972fe63e37f9=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

MmAllocatePagesForMdlEx requires that for contiguous allocations, if
MM_ALLOCATE_REQUIRE_CONTIGUOUS_CHUNKS is set and SkipBytes is nonzero,
then SkipBytes must be a power of two=2E Setting SkipBytes here is
unnecessary as contiguous allocations are still possible with SkipBytes
set to 0 anyway=2E

Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
To be applied to XenCons, XenHid, XenIface and XenNet as well=2E
---
 src/common/util=2Eh | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/src/common/util=2Eh b/src/common/util=2Eh
index 36f71f9=2E=2E9709a10 100644
--- a/src/common/util=2Eh
+++ b/src/common/util=2Eh
@@ -201,13 +201,12 @@ __AllocatePages(

     LowAddress=2EQuadPart =3D 0ull;
     HighAddress=2EQuadPart =3D ~0ull;
+    SkipBytes=2EQuadPart =3D 0ull;
     TotalBytes =3D (SIZE_T)PAGE_SIZE * Count;

     if (Contiguous) {
-        SkipBytes=2EQuadPart =3D TotalBytes;
         Flags =3D MM_ALLOCATE_REQUIRE_CONTIGUOUS_CHUNKS;
     } else {
-        SkipBytes=2EQuadPart =3D 0ull;
         Flags =3D MM_ALLOCATE_FULLY_REQUIRED;
     }

--
2=2E55=2E0=2Ewindows=2E3


-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.150.429a5be9b6b137c.1a135205a3e.e855972fe63e37f9=---


From win-pv-devel-bounces@lists.xenproject.org Tue Oct 13 12:31:48 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 13 Oct 2026 12:31:48 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1447654.1663586 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGbfY-0006aN-6G; Tue, 13 Oct 2026 12:31:48 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1447654.1663586; Tue, 13 Oct 2026 12:31:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGbfY-0006aI-2t; Tue, 13 Oct 2026 12:31:48 +0000
Received: by outflank-mailman (input) for mailman id 1447654;
 Tue, 13 Oct 2026 12:31:46 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1353f44130008425@swg.vates.tech>)
 id 1xGbfV-0006XU-Sm
 for win-pv-devel@lists.xenproject.org; Tue, 13 Oct 2026 12:31:46 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGbfV-00DJ0c-9S
 for win-pv-devel@lists.xenproject.org; Tue, 13 Oct 2026 14:31:45 +0200
Received: from [10.42.69.2] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1353f44130008425@swg.vates.tech>)
 id 6ace24a9-2eae-0a2a0a5409dd-0a2a4502d1f4-28
 for <win-pv-devel@lists.xenproject.org>; Tue, 13 Oct 2026 14:31:45 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1353f44130008425@swg.vates.tech>)
 id 6ace24b0-6ca4-0a2a45020019-b9ff1c23af39-3
 for <win-pv-devel@lists.xenproject.org>; Tue, 13 Oct 2026 14:31:45 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1353f44130008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Tue, 13 Oct 2026 12:31:41 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 63FC8827C1;
 Tue, 13 Oct 2026 14:31:40 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=EihSvMyAijXUXN67Mmja+g3i8vnp8CGymeLdb/loZ0c=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:feedback-id;
 b=X4K93k91i8ZjxVQqi0OlIBNq8GpzyMxQKdtNYTUviYtnnYYN6RE9nlz4vNaWigvMHgnuX5Lif
 lgA3Xf3hXLKqbD4RM7cY9u4qPXr3o+YxT8TC/0GycWUQJ54uhhQWgTlXhh+FtKacaOe67ceN/NA
 xH03DYusRyRWXlaREy9AyunS49QmQSFRYGHLdqxE0bI+bVXuOS1D6XU6LWYPNRN2eeEeZ7U3fxD
 2H0rkS/lz6agLJEDfBsQWK/ZwJy8EaNi4inJl/MV0hR20w1doYIYp7l0Z430afd3JhIyr39B31f
 WvmgM9pQEiAVpyucEYuqifuFHPiO6MztwTr7y1hx0TVA==
X-Zone-Loop: 0b45cd04878eabb463c41e74b39cb1d2e963259e2572
x-campaign-type: default
x-transaction-id: 02b4abdd-091d-47fe-9df8-757d348e77a2
x-swg-uid: 01-42d04656-18a8-4246-b890-98d485c32c93
X-Mailer: Sweego
Message-ID:
 <1791894701.8631fc262581453bbf619ec5b2062170.1a1353f44130008425@vates.tech>
x-swg-bid: 1791894701.8631fc262581453bbf619ec5b2062170.1a1353f44130008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [PATCH 1/4] gnttab: Don't free resources through an ASSERT
Date: Tue, 13 Oct 2026 14:31:32 +0200
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.15a.a317f07d510f2a48.1a1353f41b6.4a6b2b11ccc24904=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791894700470
X-purgate-ID: tlsNG-720697/1791894705-F32B12AC-76E4E79D/0/0
X-purgate-type: clean
X-purgate-size: 2364

---=Part.15a.a317f07d510f2a48.1a1353f41b6.4a6b2b11ccc24904=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

ASSERT macros skip evaluating their contents, so calling e=2Eg=2E
RevokeForeignAccess inside an ASSERT will end up causing the call to be
skipped in release builds=2E

Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 src/xeniface/ioctl_gnttab=2Ec | 20 +++++++++++---------
 1 file changed, 11 insertions(+), 9 deletions(-)

diff --git a/src/xeniface/ioctl_gnttab=2Ec b/src/xeniface/ioctl_gnttab=2Ec
index b903387=2E=2Eb5f2ce9 100644
--- a/src/xeniface/ioctl_gnttab=2Ec
+++ b/src/xeniface/ioctl_gnttab=2Ec
@@ -153,13 +153,16 @@ GnttabStopSharing(
     _In_ ULONG                          NumberPages
 )
 {
+    NTSTATUS                            status;
+
     if (Context->Grants !=3D NULL) {
         for (ULONG Page =3D 0; Page < NumberPages; Page++) {
-            ASSERT(NT_SUCCESS(XENBUS_GNTTAB(RevokeForeignAccess,
-                                            &Fdo->GnttabInterface,
-                                            Fdo->GnttabCache,
-                                            FALSE,
-                                            Context->Grants[Page])));
+            status =3D XENBUS_GNTTAB(RevokeForeignAccess,
+                                   &Fdo->GnttabInterface,
+                                   Fdo->GnttabCache,
+                                   FALSE,
+                                   Context->Grants[Page]);
+            ASSERT(NT_SUCCESS(status));
         }
=20
         RtlZeroMemory(Context->Grants, Context->NumberPages * sizeof(Cont=
ext->Grants[0]));
@@ -794,10 +797,9 @@ fail11:
=20
 fail10:
     Error("Fail10\n");
-    ASSERT(NT_SUCCESS(XENBUS_GNTTAB(UnmapForeignPages,
-                                    &Fdo->GnttabInterface,
-                                    Context->Address
-                                    )));
+    XENBUS_GNTTAB(UnmapForeignPages,
+                  &Fdo->GnttabInterface,
+                  Context->Address);
=20
 fail9:
     Error("Fail9\n");
--=20
2=2E55=2E0=2Ewindows=2E3



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.15a.a317f07d510f2a48.1a1353f41b6.4a6b2b11ccc24904=---


From win-pv-devel-bounces@lists.xenproject.org Tue Oct 13 12:32:47 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 13 Oct 2026 12:32:47 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1447730.1663590 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGbgV-0007FY-9k; Tue, 13 Oct 2026 12:32:47 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1447730.1663590; Tue, 13 Oct 2026 12:32:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGbgV-0007FO-6K; Tue, 13 Oct 2026 12:32:47 +0000
Received: by outflank-mailman (input) for mailman id 1447730;
 Tue, 13 Oct 2026 12:32:46 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1354039d30008425@swg.vates.tech>)
 id 1xGbgU-0007Eh-56
 for win-pv-devel@lists.xenproject.org; Tue, 13 Oct 2026 12:32:46 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGbgT-00FNtP-Hw
 for win-pv-devel@lists.xenproject.org; Tue, 13 Oct 2026 14:32:45 +0200
Received: from [10.42.69.5] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1354039d30008425@swg.vates.tech>)
 id 6ace24e9-bab6-0a2a0a5309dd-0a2a4505af4c-14
 for <win-pv-devel@lists.xenproject.org>; Tue, 13 Oct 2026 14:32:45 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-c201ff.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1354039d30008425@swg.vates.tech>)
 id 6ace24ed-4cb1-0a2a45050019-b9ff1c22897b-3
 for <win-pv-devel@lists.xenproject.org>; Tue, 13 Oct 2026 14:32:45 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1354039d30008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Tue, 13 Oct 2026 12:32:43 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 5B28382A4A;
 Tue, 13 Oct 2026 14:32:43 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=YCjjrcEBx9avlUuUk8tv467P6UjQrUhODVe2tocyZ/g=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=Q/4dXVIoZAT63cCl0D5oYQBgxiwlXIIYWOCbG1BqgYbEjtvAlUf/+SzryJt9tJmrQkONn1EQU
 9tAj63O3tLskfHdAJpF8ma04MJqyWZ1K1qKz6gLglz+iYrWdefxV4ISIUm1fPe97NIY79V1JY7f
 BCWNr0qITxs9OsQdy8T17+aRuFpfbiEvQ9aJVn01udEEJe6LJdLCXVpp/E0tr8yIAmCIIIqagBS
 ih2qFkYkNmtCVVTIYB21X8q9sHxaKAIbKSBfK+TdEdComUTNVePKyP2sxlFwQU4H+WyqyFDaIWV
 D4s/a9N0wW1dJTDl3CMLGjSTiEkm4+owFqHu4hdm9a3w==
X-Zone-Loop: dc509f7200755205f233406964a8b622f84b7907cc9d
x-campaign-type: default
x-transaction-id: d55d94fd-a35d-461c-83ef-fd2794142aa6
x-swg-uid: 01-0b1b791f-e2bc-4fa5-9d9e-7dbfbb87abd0
X-Mailer: Sweego
Message-ID:
 <1791894764.8631fc262581453bbf619ec5b2062170.1a1354039d30008425@vates.tech>
x-swg-bid: 1791894764.8631fc262581453bbf619ec5b2062170.1a1354039d30008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [PATCH 2/4] gnttab: Don't use GnttabStopSharing to clean up GnttabPermitForeignAccess
Date: Tue, 13 Oct 2026 14:32:36 +0200
In-Reply-To: <1791894701.8631fc262581453bbf619ec5b2062170.1a1353f44130008425@vates.tech>
References: <1791894701.8631fc262581453bbf619ec5b2062170.1a1353f44130008425@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.15c.d2255ea1ec52087a.1a1354037a8.4f2a52cf0223e2c0=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791894763432
X-purgate-ID: tlsNG-c201ff/1791894765-73ABF2A1-B67FAAA6/0/0
X-purgate-type: clean
X-purgate-size: 2887

---=Part.15c.d2255ea1ec52087a.1a1354037a8.4f2a52cf0223e2c0=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

In case where MmProbeAndLockPages fails (Context->Mdl !=3D NULL &&
Context->KernelVa =3D=3D NULL), GnttabStopSharing does not keep track of t=
he
failure and goes straight to MmUnlockPages anyway=2E This causes the same
pages to be invalidly unlocked without being locked=2E

Convert GnttabPermitForeignAccess to use normal goto cleanup instead=2E

Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 src/xeniface/ioctl_gnttab=2Ec | 33 +++++++++++++++++++++++++++++----
 1 file changed, 29 insertions(+), 4 deletions(-)

diff --git a/src/xeniface/ioctl_gnttab=2Ec b/src/xeniface/ioctl_gnttab=2Ec
index b5f2ce9=2E=2Ec018cd3 100644
--- a/src/xeniface/ioctl_gnttab=2Ec
+++ b/src/xeniface/ioctl_gnttab=2Ec
@@ -252,7 +252,6 @@ GnttabPermitForeignAccess(
         } except(EXCEPTION_EXECUTE_HANDLER) {
             Status =3D GetExceptionCode();
             Error("Failed to lock user pages: 0x%x\n", Status);
-            Page =3D 0;
             goto fail5;
         }
     }
@@ -271,7 +270,7 @@ GnttabPermitForeignAccess(
         Info("Grants[%lu] =3D %p\n", Page, Context->Grants[Page]);
 #endif
         if (!NT_SUCCESS(Status))
-            goto fail5;
+            goto fail6;
     }
=20
     if (Context->KernelVa !=3D NULL) {
@@ -298,21 +297,47 @@ GnttabPermitForeignAccess(
 fail6:
     Error("Fail6\n");
=20
+    for (ULONG Revoke =3D 0; Revoke < Page; Revoke++) {
+        XENBUS_GNTTAB(RevokeForeignAccess,
+                      &Fdo->GnttabInterface,
+                      Fdo->GnttabCache,
+                      FALSE,
+                      Context->Grants[Revoke]);
+    }
+
+    if (Context->KernelVa =3D=3D NULL) {
+        try {
+            MmUnlockPages(Context->Mdl);
+        } except(EXCEPTION_EXECUTE_HANDLER) {
+            Error("Failed to unlock user pages: 0x%x\n", GetExceptionCode=
());
+        }
+    }
+
 fail5:
     Error("Fail5\n");
=20
+    IoFreeMdl(Context->Mdl);
+    Context->Mdl =3D NULL;
+
 fail4:
     Error("Fail4\n");
=20
+    if (Context->KernelVa !=3D NULL) {
+        __FreePoolWithTag(Context->KernelVa, XENIFACE_POOL_TAG);
+        Context->KernelVa =3D NULL;
+    }
+
 fail3:
     Error("Fail3\n");
=20
+    __FreePoolWithTag(Context->Grants, XENIFACE_POOL_TAG);
+    Context->Grants =3D NULL;
+
 fail2:
     Error("Fail2\n");
=20
 fail1:
-    Error("Fail1\n");
-    GnttabStopSharing(Fdo, Context, Page);
+    Error("Fail1 (%08x)\n", Status);
     return Status;
 }
=20
--=20
2=2E55=2E0=2Ewindows=2E3



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.15c.d2255ea1ec52087a.1a1354037a8.4f2a52cf0223e2c0=---


From win-pv-devel-bounces@lists.xenproject.org Tue Oct 13 12:32:48 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 13 Oct 2026 12:32:48 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1447731.1663593 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGbgW-0007HM-Au; Tue, 13 Oct 2026 12:32:48 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1447731.1663593; Tue, 13 Oct 2026 12:32:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGbgW-0007HE-7o; Tue, 13 Oct 2026 12:32:48 +0000
Received: by outflank-mailman (input) for mailman id 1447731;
 Tue, 13 Oct 2026 12:32:46 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a135403aa70008425@swg.vates.tech>)
 id 1xGbgU-0007Em-9F
 for win-pv-devel@lists.xenproject.org; Tue, 13 Oct 2026 12:32:46 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGbgT-00CzLm-MJ
 for win-pv-devel@lists.xenproject.org; Tue, 13 Oct 2026 14:32:45 +0200
Received: from [10.42.69.2] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a135403aa70008425@swg.vates.tech>)
 id 6ace24e7-2eae-0a2a0a5409dd-0a2a4502861c-16
 for <win-pv-devel@lists.xenproject.org>; Tue, 13 Oct 2026 14:32:45 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a135403aa70008425@swg.vates.tech>)
 id 6ace24ed-6ca4-0a2a45020019-b9ff1c23b463-3
 for <win-pv-devel@lists.xenproject.org>; Tue, 13 Oct 2026 14:32:45 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a135403aa70008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Tue, 13 Oct 2026 12:32:44 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id AEA6082B4F;
 Tue, 13 Oct 2026 14:32:43 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=/oU6detyEZAqIkga1uulXLfeUSls9FVLfozbT+L7oXU=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=h3ZIKcv8dreEFJfxErFAtrC1H3WEENl+ABnTWuPVHl2w0Cs5lJ3Sw78C+HZFz9Cpmh3UOyhvA
 N+wa6bnJJX74lQ4aVwe156oes6mtwTM9atwu+AJebUkOWrD4jBaf9TL6RASUTu1GHQIFatFgz+N
 TDtxi1dXe78msFBp/nsPr+ntNPqANiIZYhkRmkh9IUzbovGDB2C04YCIjhrm4GkK1c2JiBZlHk8
 BEex24XtMxkYCe4IXC8wKX5pjcSygbf8/8ir+EYWzosMkZu5cd6FaygayNQZaye9IRrllQUtZ9e
 k06fWTYot9zk0Qt1CWxbFhBGvMvxK6NH7CGfmJnrx8Ug==
X-Zone-Loop: 0455ed86afd72233e4647e9094b5f62a0ecf04967abc
x-campaign-type: default
x-transaction-id: e75a52a4-2467-40d2-a812-2646b8444240
x-swg-uid: 01-b01a6893-b020-4a57-90b4-30702641a80d
X-Mailer: Sweego
Message-ID:
 <1791894764.8631fc262581453bbf619ec5b2062170.1a135403aa70008425@vates.tech>
x-swg-bid: 1791894764.8631fc262581453bbf619ec5b2062170.1a135403aa70008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [PATCH 3/4] Fix buffer handling of MapForeignPages and PermitForeignAccess
Date: Tue, 13 Oct 2026 14:32:37 +0200
In-Reply-To: <20261013123241.1598-1-ngoc-tu.dinh@vates.tech>
References: <1791894701.8631fc262581453bbf619ec5b2062170.1a1353f44130008425@vates.tech>
 <20261013123241.1598-1-ngoc-tu.dinh@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.15d.50c25ebd655f42ca.1a1354038f9.218b26ec2f750f87=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791894763769
X-purgate-ID: tlsNG-720697/1791894765-66CB22AC-EF85755C/0/0
X-purgate-type: clean
X-purgate-size: 6824

---=Part.15d.50c25ebd655f42ca.1a1354038f9.218b26ec2f750f87=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

MapForeignPages:
* In is used directly to store the references coming from In1, so we
  must allocate its entire size rather than just the header=2E
* As a result, the input size must be bound before allocating In=2E
* Relax the input buffer size restriction so that an input with
  fewer NumberPages than provided by the IOCTL buffer size will be
  accepted=2E

PermitForeignAccess:
* Relax the output buffer size restriction so that an output with
  fewer NumberPages than provided by the IOCTL buffer size will be
  accepted=2E

Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 src/xeniface/ioctl_gnttab=2Ec | 45 ++++++++++++++++++++-----------------
 1 file changed, 25 insertions(+), 20 deletions(-)

diff --git a/src/xeniface/ioctl_gnttab=2Ec b/src/xeniface/ioctl_gnttab=2Ec
index c018cd3=2E=2Edd1f4bb 100644
--- a/src/xeniface/ioctl_gnttab=2Ec
+++ b/src/xeniface/ioctl_gnttab=2Ec
@@ -358,6 +358,7 @@ IoctlGnttabPermitForeignAccess(
     PXENIFACE_GNTTAB_PERMIT_FOREIGN_ACCESS_OUT Out =3D Irp->UserBuffer;
     PXENIFACE_GNTTAB_CONTEXT Context;
     ULONG Page;
+    ULONG OutputSize;
     ULONG ControlCode =3D IoGetCurrentIrpStackLocation(Irp)->Parameters=
=2EDeviceIoControl=2EIoControlCode;
=20
     Status =3D STATUS_INVALID_BUFFER_SIZE;
@@ -400,7 +401,9 @@ IoctlGnttabPermitForeignAccess(
     }
=20
     Status =3D STATUS_INVALID_BUFFER_SIZE;
-    if (OutLen !=3D (ULONG)FIELD_OFFSET(XENIFACE_GNTTAB_PERMIT_FOREIGN_AC=
CESS_OUT, References[In->NumberPages]))
+    OutputSize =3D (ULONG)FIELD_OFFSET(XENIFACE_GNTTAB_PERMIT_FOREIGN_ACC=
ESS_OUT, References)
+        + In->NumberPages * sizeof(ULONG);
+    if (OutLen < OutputSize)
         goto fail6;
=20
     Status =3D STATUS_NO_MEMORY;
@@ -442,7 +445,7 @@ IoctlGnttabPermitForeignAccess(
     // Pass the result to user mode=2E
 #pragma prefast(suppress: 6320) // we want to catch all exceptions
     try {
-        ProbeForWrite(Out, OutLen, 1);
+        ProbeForWrite(Out, OutputSize, 1);
         Out->Address =3D Context->UserVa;
=20
         for (Page =3D 0; Page < Context->NumberPages; Page++) {
@@ -452,7 +455,7 @@ IoctlGnttabPermitForeignAccess(
         }
     } except(EXCEPTION_EXECUTE_HANDLER) {
         Status =3D GetExceptionCode();
-        Error("Exception 0x%lx while probing/writing output buffer at %p,=
 size 0x%lx\n", Status, Out, OutLen);
+        Error("Exception 0x%lx while probing/writing output buffer at %p,=
 size 0x%lx\n", Status, Out, OutputSize);
         goto fail9;
     }
=20
@@ -633,7 +636,7 @@ IoctlGnttabMapForeignPages(
     PXENIFACE_GNTTAB_MAP_FOREIGN_PAGES_IN_V2    In =3D NULL;
     // XENIFACE_GNTTAB_MAP_FOREIGN_PAGES_OUT_V2 is the same as XENIFACE_G=
NTTAB_MAP_FOREIGN_PAGES_OUT
     PXENIFACE_GNTTAB_MAP_FOREIGN_PAGES_OUT Out =3D Irp->UserBuffer;
-    ULONG NumberPages;
+    ULONG ReferenceSize;
     PXENIFACE_GNTTAB_CONTEXT Context;
     ULONG ControlCode =3D IoGetCurrentIrpStackLocation(Irp)->Parameters=
=2EDeviceIoControl=2EIoControlCode;
=20
@@ -656,26 +659,30 @@ IoctlGnttabMapForeignPages(
             goto fail2;
=20
         In1 =3D Buffer;
-        NumberPages =3D (InLen - (ULONG)FIELD_OFFSET(XENIFACE_GNTTAB_MAP_=
FOREIGN_PAGES_IN, References)) / sizeof(ULONG);
+        ReferenceSize =3D InLen - (ULONG)FIELD_OFFSET(XENIFACE_GNTTAB_MAP=
_FOREIGN_PAGES_IN, References);
+        if (ReferenceSize > 1024 * 1024 * sizeof(ULONG))
+            goto fail3;
         status =3D __CaptureUserBuffer(Buffer, InLen, &In1);
         if (!NT_SUCCESS(status))
-            goto fail3;
+            goto fail4;
=20
         Context->UseRequestId =3D TRUE;
         Context->RequestId =3D In1->RequestId;
=20
         // legacy IOCTL, convert the input to v2
         status =3D STATUS_NO_MEMORY;
-        In =3D __AllocatePoolWithTag(NonPagedPool, sizeof(*In), XENIFACE_=
POOL_TAG);
+        In =3D __AllocatePoolWithTag(NonPagedPool,
+                                   (ULONG)FIELD_OFFSET(XENIFACE_GNTTAB_MA=
P_FOREIGN_PAGES_IN, References) + ReferenceSize,
+                                   XENIFACE_POOL_TAG);
         if (In =3D=3D NULL)
-            goto fail4;
+            goto fail5;
=20
         In->RemoteDomain =3D In1->RemoteDomain;
         In->NumberPages =3D In1->NumberPages;
         In->NotifyOffset =3D In1->NotifyOffset;
         In->NotifyPort =3D In1->NotifyPort;
         In->Flags =3D In1->Flags;
-        memcpy(&In->References, &In1->References, NumberPages * sizeof(UL=
ONG));
+        memcpy(&In->References, &In1->References, ReferenceSize);
=20
         __FreeCapturedBuffer(In1);
         In1 =3D NULL;
@@ -686,10 +693,12 @@ IoctlGnttabMapForeignPages(
             goto fail2;
=20
         In =3D Buffer;
-        NumberPages =3D (InLen - (ULONG)FIELD_OFFSET(XENIFACE_GNTTAB_MAP_=
FOREIGN_PAGES_IN_V2, References)) / sizeof(ULONG);
+        ReferenceSize =3D InLen - (ULONG)FIELD_OFFSET(XENIFACE_GNTTAB_MAP=
_FOREIGN_PAGES_IN_V2, References);
+        if (ReferenceSize > 1024 * 1024 * sizeof(ULONG))
+            goto fail3;
         status =3D __CaptureUserBuffer(Buffer, InLen, &In);
         if (!NT_SUCCESS(status))
-            goto fail3;
+            goto fail4;
=20
         Context->UseRequestId =3D FALSE;
         Context->RequestId =3D 0;
@@ -699,18 +708,14 @@ IoctlGnttabMapForeignPages(
     status =3D STATUS_INVALID_PARAMETER;
     if (In->NumberPages =3D=3D 0 ||
         In->NumberPages > 1024 * 1024 ||
-        In->NumberPages !=3D NumberPages) {
-        goto fail5;
+        In->NumberPages * sizeof(ULONG) > ReferenceSize) {
+        goto fail6;
     }
=20
     if ((In->Flags & XENIFACE_GNTTAB_USE_NOTIFY_OFFSET) &&
         (In->NotifyOffset >=3D In->NumberPages * PAGE_SIZE)) {
-        goto fail6;
-    }
-
-    status =3D STATUS_INVALID_BUFFER_SIZE;
-    if (InLen !=3D (ULONG)FIELD_OFFSET(XENIFACE_GNTTAB_MAP_FOREIGN_PAGES_=
IN_V2, References[In->NumberPages]))
         goto fail7;
+    }
=20
     Context->RemoteDomain =3D In->RemoteDomain;
     Context->NumberPages =3D In->NumberPages;
@@ -837,14 +842,14 @@ fail7:
=20
 fail6:
     Error("Fail6\n");
+    __FreeCapturedBuffer(In);
=20
 fail5:
     Error("Fail5\n");
-    __FreeCapturedBuffer(In);
+    __FreeCapturedBuffer(In1);
=20
 fail4:
     Error("Fail4\n");
-    __FreeCapturedBuffer(In1);
=20
 fail3:
     Error("Fail3\n");
--=20
2=2E55=2E0=2Ewindows=2E3



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.15d.50c25ebd655f42ca.1a1354038f9.218b26ec2f750f87=---


From win-pv-devel-bounces@lists.xenproject.org Tue Oct 13 12:32:48 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 13 Oct 2026 12:32:48 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1447732.1663598 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGbgW-0007Hl-F6; Tue, 13 Oct 2026 12:32:48 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1447732.1663598; Tue, 13 Oct 2026 12:32:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGbgW-0007HW-9K; Tue, 13 Oct 2026 12:32:48 +0000
Received: by outflank-mailman (input) for mailman id 1447732;
 Tue, 13 Oct 2026 12:32:46 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a135403b730008425@swg.vates.tech>)
 id 1xGbgU-0007Eu-ES
 for win-pv-devel@lists.xenproject.org; Tue, 13 Oct 2026 12:32:46 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGbgT-00FNtP-RO
 for win-pv-devel@lists.xenproject.org; Tue, 13 Oct 2026 14:32:45 +0200
Received: from [10.42.69.5] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a135403b730008425@swg.vates.tech>)
 id 6ace24e9-bab6-0a2a0a5309dd-0a2a4505af4c-16
 for <win-pv-devel@lists.xenproject.org>; Tue, 13 Oct 2026 14:32:45 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-c201ff.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a135403b730008425@swg.vates.tech>)
 id 6ace24ed-4cb1-0a2a45050019-b9ff1c228d1d-3
 for <win-pv-devel@lists.xenproject.org>; Tue, 13 Oct 2026 14:32:45 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a135403b730008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Tue, 13 Oct 2026 12:32:44 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id DE7D182B69;
 Tue, 13 Oct 2026 14:32:43 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=p7oifEi5V9DJ1ebomqgAAsfHICOSh+e0HiMEGiGEuz8=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=OJUXDocAMiqcLriInr8HpEIVCUGMdsC9SKl8RYadENO6HpGcnX0/ynhxWQj7S/6HuKa+1s23D
 uwvp1juyaI/EsvZymccsaESpkYPDNDVrkkwpKfnsrHDqzyz0WiCMe78Pk9H7nBnn+Q7SmzT5ZPV
 SAhkM2gmOvYjlF3lRWtzGpVF6QoMCnYOURxsoewajOuXSmMzYmRPS+0tBjkWkvVc+LQHiY7U09W
 wy/KXgElMdJBvtY7xEZ/Ush/gYfwcL7Nd/b3g8c7VVOWfirtwcSrLu6vlMOQK+X7499UrwWD4GO
 QuZJIBWJrUuxh5VbTvLxLirAu1E4tYhEkow2BYaKH9Rw==
X-Zone-Loop: 526da4d00d06d36cb4e3d3a86fc917d5b37415872670
x-campaign-type: default
x-transaction-id: b940a2a9-1047-4278-8005-0292428771d7
x-swg-uid: 01-a6e72c1e-1af3-4009-a58f-a59b1e6e3618
X-Mailer: Sweego
Message-ID:
 <1791894764.8631fc262581453bbf619ec5b2062170.1a135403b730008425@vates.tech>
x-swg-bid: 1791894764.8631fc262581453bbf619ec5b2062170.1a135403b730008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [PATCH 4/4] Define a common GNTTAB_MAX_PAGES
Date: Tue, 13 Oct 2026 14:32:38 +0200
In-Reply-To: <20261013123241.1598-1-ngoc-tu.dinh@vates.tech>
References: <1791894701.8631fc262581453bbf619ec5b2062170.1a1353f44130008425@vates.tech>
 <20261013123241.1598-1-ngoc-tu.dinh@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.15e.8dc2c94ded2c2d11.1a1354039bc.209f3805a185a38a=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791894763964
X-purgate-ID: tlsNG-c201ff/1791894765-F4CA02A1-C70F5D64/0/0
X-purgate-type: clean
X-purgate-size: 2675

---=Part.15e.8dc2c94ded2c2d11.1a1354039bc.209f3805a185a38a=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Each grant must not exceed 4GB to avoid overflow=2E So use MAXULONG
divided by PAGE_SIZE as the limit instead of 1024*1024, as the latter
will overflow when multiplied with PAGE_SIZE=2E

Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 src/xeniface/ioctl_gnttab=2Ec | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/src/xeniface/ioctl_gnttab=2Ec b/src/xeniface/ioctl_gnttab=2Ec
index dd1f4bb=2E=2E0dab8e2 100644
--- a/src/xeniface/ioctl_gnttab=2Ec
+++ b/src/xeniface/ioctl_gnttab=2Ec
@@ -36,6 +36,8 @@
 #include "irp_queue=2Eh"
 #include "util=2Eh"
=20
+#define GNTTAB_MAX_PAGES    (MAXULONG / PAGE_SIZE)
+
 // Complete a canceled gnttab IRP, cleanup associated grant/map=2E
 _Function_class_(IO_WORKITEM_ROUTINE)
 VOID
@@ -391,7 +393,7 @@ IoctlGnttabPermitForeignAccess(
     }
=20
     Status =3D STATUS_INVALID_PARAMETER;
-    if (In->NumberPages =3D=3D 0 || In->NumberPages > 1024 * 1024) {
+    if (In->NumberPages =3D=3D 0 || In->NumberPages > GNTTAB_MAX_PAGES) {
         goto fail4;
     }
=20
@@ -660,7 +662,7 @@ IoctlGnttabMapForeignPages(
=20
         In1 =3D Buffer;
         ReferenceSize =3D InLen - (ULONG)FIELD_OFFSET(XENIFACE_GNTTAB_MAP=
_FOREIGN_PAGES_IN, References);
-        if (ReferenceSize > 1024 * 1024 * sizeof(ULONG))
+        if (ReferenceSize > GNTTAB_MAX_PAGES * sizeof(ULONG))
             goto fail3;
         status =3D __CaptureUserBuffer(Buffer, InLen, &In1);
         if (!NT_SUCCESS(status))
@@ -694,7 +696,7 @@ IoctlGnttabMapForeignPages(
=20
         In =3D Buffer;
         ReferenceSize =3D InLen - (ULONG)FIELD_OFFSET(XENIFACE_GNTTAB_MAP=
_FOREIGN_PAGES_IN_V2, References);
-        if (ReferenceSize > 1024 * 1024 * sizeof(ULONG))
+        if (ReferenceSize > GNTTAB_MAX_PAGES * sizeof(ULONG))
             goto fail3;
         status =3D __CaptureUserBuffer(Buffer, InLen, &In);
         if (!NT_SUCCESS(status))
@@ -707,7 +709,7 @@ IoctlGnttabMapForeignPages(
     // At this point we only access In=2E
     status =3D STATUS_INVALID_PARAMETER;
     if (In->NumberPages =3D=3D 0 ||
-        In->NumberPages > 1024 * 1024 ||
+        In->NumberPages > GNTTAB_MAX_PAGES ||
         In->NumberPages * sizeof(ULONG) > ReferenceSize) {
         goto fail6;
     }
--=20
2=2E55=2E0=2Ewindows=2E3



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.15e.8dc2c94ded2c2d11.1a1354039bc.209f3805a185a38a=---


From win-pv-devel-bounces@lists.xenproject.org Tue Oct 13 12:34:32 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 13 Oct 2026 12:34:32 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1447756.1663621 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGbiC-0007oS-NV; Tue, 13 Oct 2026 12:34:32 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1447756.1663621; Tue, 13 Oct 2026 12:34:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGbiC-0007oL-L6; Tue, 13 Oct 2026 12:34:32 +0000
Received: by outflank-mailman (input) for mailman id 1447756;
 Tue, 13 Oct 2026 12:34:32 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13541d6e20008425@swg.vates.tech>)
 id 1xGbiC-0007oF-0l
 for win-pv-devel@lists.xenproject.org; Tue, 13 Oct 2026 12:34:32 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGbiB-001zgD-Dh
 for win-pv-devel@lists.xenproject.org; Tue, 13 Oct 2026 14:34:31 +0200
Received: from [10.42.69.3] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13541d6e20008425@swg.vates.tech>)
 id 6ace2550-bab6-0a2a0a5309dd-0a2a450399d2-10
 for <win-pv-devel@lists.xenproject.org>; Tue, 13 Oct 2026 14:34:31 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-33051d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13541d6e20008425@swg.vates.tech>)
 id 6ace2557-fae8-0a2a45030019-b9ff1c129a2b-3
 for <win-pv-devel@lists.xenproject.org>; Tue, 13 Oct 2026 14:34:31 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a13541d6e20008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Tue, 13 Oct 2026 12:34:29 +0000
Received: from [192.168.1.61] (142.220.66.37.rev.sfr.net [37.66.220.142])
 (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 15A4082233
 for <win-pv-devel@lists.xenproject.org>; Tue, 13 Oct 2026 14:34:29 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=lokWsB4dzkPMfceCAnpKiita+81oiSs/VycuQUweg3E=;
 h=from:subject:date:message-id:to:mime-version:content-type:in-reply-to:references:feedback-id;
 b=UNckRvkbY+tYL8ipB/Ba8N3y/TAm0CQQjXBFoq2ynVhNc+6WG5fst+hZSUUAaBX3ZSpogAdLN
 m9ffeGlOGG4m1tUiTrkfjUjwnBb6xjh1K/p+C09OIIL7CkHOUisvXOpJjWWuvzbjUA5oUiY0BrQ
 Dc4fioVYiQN58b7h17VUXi1fzU+EGZ+k3GdO8KnC3s2p9EWdf1LpxBNwMkjZHV9K2AOxRKXCjPB
 fOX6sQ8nCGApbhTxAQMPF8kcV0vACreLOarAu66p3hezCEkdvcF9eXklZ4N4RkDcOv1j8HRduvC
 kljqexkkm6r6Y4IZr8R0euWz9HIlDWne2mzRuptwbvxA==
X-Zone-Loop: 5cb8fd3c62ec19f21fc61141b3e8e62b2e3228447903
x-campaign-type: default
x-transaction-id: b52cd2a8-35aa-44ac-b360-da62e1382693
x-swg-uid: 01-3dde54ed-925e-49ad-bca7-40bf23b0605d
X-Mailer: Sweego
Message-ID:
 <1791894869.8631fc262581453bbf619ec5b2062170.1a13541d6e20008425@vates.tech>
x-swg-bid: 1791894869.8631fc262581453bbf619ec5b2062170.1a13541d6e20008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
Date: Tue, 13 Oct 2026 14:34:28 +0200
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH 1/4] gnttab: Don't free resources through an ASSERT
Content-Language: en-US
To: win-pv-devel@lists.xenproject.org
References: <1791894701.8631fc262581453bbf619ec5b2062170.1a1353f44130008425@vates.tech>
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
In-Reply-To: <1791894701.8631fc262581453bbf619ec5b2062170.1a1353f44130008425@vates.tech>
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.15f.3b9c9ce74f10e9e.1a13541d487.e7bd905947a57457=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791894869127
X-purgate-ID: tlsNG-33051d/1791894871-74C884E9-D1801CA9/0/0
X-purgate-type: clean
X-purgate-size: 722

---=Part.15f.3b9c9ce74f10e9e.1a13541d487.e7bd905947a57457=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

On 13/10/2026 14:32, Tu Dinh wrote:
> ASSERT macros skip evaluating their contents, so calling e=2Eg=2E
> RevokeForeignAccess inside an ASSERT will end up causing the call to be
> skipped in release builds=2E
>=20
> Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>

These 4 patches are meant to be applied on top of David's 10-patch=20
series and tested in that context=2E


-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.15f.3b9c9ce74f10e9e.1a13541d487.e7bd905947a57457=---


From win-pv-devel-bounces@lists.xenproject.org Tue Oct 13 12:37:29 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 13 Oct 2026 12:37:29 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1447784.1663635 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGbl3-0008Jl-6y; Tue, 13 Oct 2026 12:37:29 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1447784.1663635; Tue, 13 Oct 2026 12:37:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGbl3-0008Je-4B; Tue, 13 Oct 2026 12:37:29 +0000
Received: by outflank-mailman (input) for mailman id 1447784;
 Tue, 13 Oct 2026 12:37:28 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <owen.smith@citrix.com>) id 1xGbl2-0008JB-80
 for win-pv-devel@lists.xenproject.org; Tue, 13 Oct 2026 12:37:28 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGbl1-0020On-Ka
 for win-pv-devel@lists.xenproject.org; Tue, 13 Oct 2026 14:37:27 +0200
Received: from [10.42.69.11] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ace25fe-2eae-0a2a0a5409dd-0a2a450b8a4a-42
 for <win-pv-devel@lists.xenproject.org>; Tue, 13 Oct 2026 14:37:27 +0200
Received: from [40.93.194.67]
 (helo=SN4PR0501CU005.outbound.protection.outlook.com)
 by tlsNG-42698a.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ace2605-b7e8-0a2a450b0019-285dc2437b3a-3
 for <win-pv-devel@lists.xenproject.org>; Tue, 13 Oct 2026 14:37:27 +0200
Received: from SA6PR03MB7760.namprd03.prod.outlook.com (2603:10b6:806:43c::5)
 by SA3PR03MB8205.namprd03.prod.outlook.com (2603:10b6:806:47e::16)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.496.23; Tue, 13 Oct
 2026 12:37:22 +0000
Received: from SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38]) by SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38%5]) with mapi id 15.21.0496.021; Tue, 13 Oct 2026
 12:37:22 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:x-ms-exchange-senderadcheck"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
 b=QVchzX9HP9LEuF2DcGrj6/KDv8i0glYkV3L7v5UYkIKHNMZZcdxzx+i948MblXklh0f+8fay7UOByFD1x1BSywX67//WRqqYXau0+l2lmt3z5AqxIw6tbTjgBXeiztZpBgJ8rrEVrnKYX4bbB3jOAGEXhGMcc0xtKea13jRMWtFLEhB7JKMoOps5+N/xRo0/l5zkXKyn7WhX6HSz/MyYH3JMIbYX3fIwJ6hEfV66FP5IcPuuflfe9lRVkkzemajTsS9jZ+Z5a3cxvDgGHxYUuz8Wbe7lPym00Bbv/niTMyMQqOh/td04cWbxtQWoOOG+rn81bTGjMaR8YbnO7WaIew==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector10001;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=ufbJGT8E4vGjyceASOwC1GVcrXTA5nnA9/7b8yxwfcA=;
 b=NVG+qoGy7hhPNQdqhyA9Jrcjwp9V3GCWHQuutI3Zgs/DO7WKP6YLTrqeg4LYktt+Qr325KlfV4pbpNy45F81xiNLj1SK/QvYxW2RpeZgl0jFOznBaRKhyPGSgyBAMaNr9uv0AF/cA9H7uqHbPE9Aja/URbKR0xr0T4f1t+BruJiX+EDmJ6lByqOKCNG6SfJ7lgHf/W1HUETrl9DeELgaFvZNOMa1WRR37fnwmaMjWrQzgZ/KpRya+gPuIY4KcDZckMd/G+A5kYFCIMIciMjz90fmwhq1mdSs1ZUEWcHVA8jWzC/7n3hh/c1KCD82/Sj58Xh+b+fCHpvDctiNLqCPvQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=ufbJGT8E4vGjyceASOwC1GVcrXTA5nnA9/7b8yxwfcA=;
 b=fcEftJ7T4ROVU9jQMz14ebT/07ioHaaxelsrf24z630p7o1UC0yp/OqjDccGyqI0Jn6Jr48Q3VTqx/s/GPRoBjZ+dnLIqlpnRDwHukDsLW+OLOV2f1/R3k+c6cm/L7RWybOYLwoUIo6nthHiMBaYJFk88ByXQw5UKXIKQJOy9JI=
From: Owen Smith <owen.smith@citrix.com>
To: Tu Dinh <ngoc-tu.dinh@vates.tech>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Subject: Re: [XENBUS PATCH] gnttab: Use for loop in GnttabRevokeForeignAccess
Thread-Topic: [XENBUS PATCH] gnttab: Use for loop in GnttabRevokeForeignAccess
Thread-Index: AQHdWvl6RKebT8c0s0OBZl2k+g2Z5rb7aSsi
Date: Tue, 13 Oct 2026 12:37:22 +0000
Message-ID:
 <SA6PR03MB77600049224B669A80607B75FE9E2@SA6PR03MB7760.namprd03.prod.outlook.com>
References:
 <1791885526.8631fc262581453bbf619ec5b2062170.1a134b346ca0008425@vates.tech>
In-Reply-To:
 <1791885526.8631fc262581453bbf619ec5b2062170.1a134b346ca0008425@vates.tech>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
msip_labels:
authentication-results: mx.microsoft.com 1; dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=citrix.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: SA6PR03MB7760:EE_|SA3PR03MB8205:EE_
x-ms-office365-filtering-correlation-id: 46a19b4f-dac8-4ac6-1945-08df2926baad
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam:
 BCL:0;ARA:13230040|1800799024|366016|23010399003|376014|38070700021|56012099006|11063799006|261009223027099003|10067099003|22082099003|18002099003;
x-microsoft-antispam-message-info:
 QjRY/YQVgIOwYtw7TmjZcBpHtOc2W+PRuyoPdO6kZyOmDHu9yecNExnghzy0orbJ9UVpqjtO0Nz1r38uxoTviPxqFpYvBE3lwR0S2dXHJhslk4HmkFZFuLHxZaOApcxCvirnyPx7alMZaKvaakedrd/XeKzDtHqgr+Dxs3Svv5ecCHDRY4Y8rhoBhDZltHKPUMcqx4Hrr9v+46xPONop4tc1TLYE1A5EsVnIt7bfYyLB6wrHxpMChiwLMOnINkrgZTFTJpa918mCMSrM2aMdyOc5mWFcIDkCkiqG16U1TPeBhQpM/Y+vOtIkX387MBoDjl0zp0gIOgIelD0zughccDJwTZG37HV4Hicvb6z5EIoWlAQau4mD2lXsfMAZh718KP7/Fzi37Ags/BMBWllyjXyqesKFK7dAq9b4ePtDIeswxCi7c0cdFsCcA2uVZJNLghQBwmd3VkMC9QNOgdvpWcH2dmaykECPHvgLdJJTKNsZNWdLn5ioa1B6NIBRqQySSDF3qEHAHuLZTkL3EoI4IfvSBIcD3SzGLxWYzB2Mhxe6dm8HA/QvgUyUR5QGNZ0rFAz6EiDPCRopKzgUeYXbgEN4B2rFU6MYnk1Kl7f3PdzPi2fIqWcDjkK1XywAI9nrcblDZ/we7weJ1qbjJQXVt/ffgJTKByOaQ/6MOz9OOdM=
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SA6PR03MB7760.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(23010399003)(376014)(38070700021)(56012099006)(11063799006)(261009223027099003)(10067099003)(22082099003)(18002099003);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?us-ascii?Q?QxdTbNJH3TVxMYXsqpzF51nDGXb6LsoOAxZzP22v3ilRSZrIT5XwzTOoNUG2?=
 =?us-ascii?Q?wKBsGAYGHlAPiRYR+SfdRk9Clirb9mxcw9xk0IK/XckP8oWStRrfb+DQF/fs?=
 =?us-ascii?Q?L1BWev+2tvaxIxuEXKOTSSVfW3l33QuOrK0yXfmeVUUwymzis3dIo2yhrMsv?=
 =?us-ascii?Q?StX/Y9mCaodjvmMrtacX41eo3x6WR1wI5rO/9GYGorESuXSyGrzcn7YZbL/F?=
 =?us-ascii?Q?/0DtJ8fQm8JEvTb1l1g5oNa21mpmquCtAcGOSTZdz9dBtO2stieKbArAR41S?=
 =?us-ascii?Q?QHz2uJkk3WC4ydK7lce0dv9MmFqP3tQ1gkfxi4G3dpZLN+LepFuJitrE/YqS?=
 =?us-ascii?Q?qX4ccH7+ZXDajbxT2cEzC+IMPO5Qo0nS/ic26jOaQa/z938OSMtoQj5enjaD?=
 =?us-ascii?Q?ETa5mLfV48T/E9BHbxvb6O/vn9gUK65qwZzI4EBwrUYHhdxioErNq87RI5kB?=
 =?us-ascii?Q?1zFXUPPECI4XxWEesDpm281VgUuIuRoffu2URfncqB8+07aNUu4CZ0QlwOe0?=
 =?us-ascii?Q?Q67CMCcYqQS3VUFohjnRt3V58hNfViVmWnoBX/XlmD4fMJKoYdaQYizfxJNR?=
 =?us-ascii?Q?+rAmm6IboUaGzG0lX7kPyzQHraDK9AhKu212HUA6sVnhrpuQt/R8QrkXEP9w?=
 =?us-ascii?Q?FrMUyy155sdxc+d1x7yv1xB/9utVKWR+DYgiWqNfpTKECeN98BC5vT2Bn+K8?=
 =?us-ascii?Q?JCPyYUFLHV0ITgXs6FZ8Mlj3rdgYP3ZfbBLHv0kCLKdQssb5uvHpuvaxrUx6?=
 =?us-ascii?Q?IPvmDaPdZJyPesUmwfnKNADS0fFXfQEv4vOAvmttW51Dg4GUZADTtW9BbU56?=
 =?us-ascii?Q?CpLO0FpsoPZEnqDBtWIZRK0ArSZTlREoS54tAUQRmqI51yyKBabMIIeHk8lN?=
 =?us-ascii?Q?K1IbTy5SPHFHLbRqYITerwk5y2rN3XIVYMw7014hBvdzeeXjI/CS78W8vVjF?=
 =?us-ascii?Q?TxzLVJVtgACVyvZ91NeleKGbcalJMxGx4mP2bfCPvhdbuxmoSWawaSLVGfwe?=
 =?us-ascii?Q?9XMAz2j8U4UVRECVWeQwNHHxMVJqPxQBFqt2ufvHCRjk7UN+ZeUUVxW1ecTS?=
 =?us-ascii?Q?RNiBqAiBWmgdQAF1nigldwdlxqNteptPK0F2wWG6LE4WOXRUzvFtNrPLeTW9?=
 =?us-ascii?Q?ldre8AlTmVVLGnaSRLjECgKES/bQ7IXvKDSWT2tj9Eay8pwgfzng415OErMU?=
 =?us-ascii?Q?5yIPlrVgOUVb51qP1FqgTCEdLnqm+YFUIotiKRNfCpNvO90qv4OxXH1F3ECi?=
 =?us-ascii?Q?nOT1k351cHMbF7RKp5+PXn/dbWTBvQ/nYrYALZY4Nk1OztG/Xr75FVtVYCKb?=
 =?us-ascii?Q?EiPzIpZMlEcSEdubKH2i7yiINv9m+gxW3C8Q9KrqA6CcjIhrNCHQPsbs3ARm?=
 =?us-ascii?Q?lh7dh17w26d+Fqrgs1gHoZRCTiOljqRYzwqu1Pmkrp6WtINKDEuBkDqJnNo0?=
 =?us-ascii?Q?tgXu2S1VwwjCwRCfZxr3SvwHTWwUJyNhXVVRVgAMDTC76ta5zAvy8WnQAFuS?=
 =?us-ascii?Q?DRP2S1fkQy0ueh0c5Eyn5We3tBvvu6ZEm+Oa1v+K78g53Ndt1qNIlQ/ETNEi?=
 =?us-ascii?Q?azfs880CSU3zsYJm/hxvnlZ22s+jPiT7l4iQRTMfJbvbjw5F9RQbZY2GdEe+?=
 =?us-ascii?Q?AGOfsTRex8vBdapb+2nxkSesky0lBcp7GXrDAVVWZla403PzZqlPM5ccYCe2?=
 =?us-ascii?Q?BfN79rr7fD62BKh8NtBt8s6/GIfDTWvuCxs7pstpPzp0fpW1?=
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-OriginatorOrg: citrix.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: SA6PR03MB7760.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 46a19b4f-dac8-4ac6-1945-08df2926baad
X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Oct 2026 12:37:22.6616
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: 2f4x9rKCX2/jX2BE/d2fxNTzT8qEOEsggHdhelDJIWKNebtl3MdeoQIOgz06u3iTnHFB5iNWJGqHDmnKvmVF5w==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA3PR03MB8205
X-purgate-ID: tlsNG-42698a/1791895047-AAAD89EA-378E3A3C/0/0
X-purgate-type: clean
X-purgate-size: 1278

Reviewed-by: Owen Smith <owen.smith@citrix.com>

________________________________________
From: win-pv-devel <win-pv-devel-bounces@lists.xenproject.org> on behalf of=
 Tu Dinh <ngoc-tu.dinh@vates.tech>
Sent: 13 October 2026 10:58 AM
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh
Subject: [XENBUS PATCH] gnttab: Use for loop in GnttabRevokeForeignAccess

A while (Attempt++ < 100) loop leaves the final value at 101 after it
fails, because the value is checked before it's incremented.

Just use a normal for loop instead, which leaves the final Attempt at
100.

Signed-off-by: Tu Dinh <ngoc-tu.dinh@vates.tech>
---
 src/xenbus/gnttab.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/src/xenbus/gnttab.c b/src/xenbus/gnttab.c
index 3adcef4..bdf8b2b 100644
--- a/src/xenbus/gnttab.c
+++ b/src/xenbus/gnttab.c
@@ -571,8 +571,7 @@ GnttabRevokeForeignAccess(

     flags =3D (volatile SHORT *)&Frame->Entry[Index].flags;

-    Attempt =3D 0;
-    while (Attempt++ < 100) {
+    for (Attempt =3D 0; Attempt < 100; Attempt++) {
         uint16_t    Old;
         uint16_t    New;

--
2.55.0.windows.3



--
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates solutions

web: https://vates.tech


From win-pv-devel-bounces@lists.xenproject.org Tue Oct 13 12:37:39 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 13 Oct 2026 12:37:39 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1447785.1663638 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGblD-0008RJ-8d; Tue, 13 Oct 2026 12:37:39 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1447785.1663638; Tue, 13 Oct 2026 12:37:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGblD-0008RA-5t; Tue, 13 Oct 2026 12:37:39 +0000
Received: by outflank-mailman (input) for mailman id 1447785;
 Tue, 13 Oct 2026 12:37:37 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <owen.smith@citrix.com>) id 1xGblB-0008PD-LA
 for win-pv-devel@lists.xenproject.org; Tue, 13 Oct 2026 12:37:37 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGblB-000Pw5-20
 for win-pv-devel@lists.xenproject.org; Tue, 13 Oct 2026 14:37:37 +0200
Received: from [10.42.69.5] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ace2609-8faa-0a2a0a5109dd-0a2a4505bc3e-22
 for <win-pv-devel@lists.xenproject.org>; Tue, 13 Oct 2026 14:37:37 +0200
Received: from [40.93.201.32]
 (helo=CY3PR05CU001.outbound.protection.outlook.com)
 by tlsNG-c201ff.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ace260f-4cb1-0a2a45050019-285dc920b7eb-3
 for <win-pv-devel@lists.xenproject.org>; Tue, 13 Oct 2026 14:37:36 +0200
Received: from SA6PR03MB7760.namprd03.prod.outlook.com (2603:10b6:806:43c::5)
 by SA3PR03MB8205.namprd03.prod.outlook.com (2603:10b6:806:47e::16)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.496.23; Tue, 13 Oct
 2026 12:37:29 +0000
Received: from SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38]) by SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38%5]) with mapi id 15.21.0496.021; Tue, 13 Oct 2026
 12:37:28 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:x-ms-exchange-senderadcheck"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
 b=XfH/lQHCsreI2iIkQfsE8RaRkWtfg0yG2FnFrsvmraieA5xf4q5cqk5fAJSPx6T17aMs7fk/PoM90PYOJS1Dtr06D2IDiX3yKtcy+gYWei39A52ybQIi90ddeQ4njIg3Z24LudXrOUQhz5M+N0SVYAa46wY+964dwMIO2brTDF8oZchY8aikd7i06GcL7yyy5oogAsDbtb3OjyXp32tWr+3iJvnP1yiwA/h+i4mqAHWJY6lQzRup5JNYZ158j4yXYHUyOhEMjryQ8xGLcyOAAgur2RkGruZWf1pqvZXj8kyFXXRadrGuUHZY/SMPqBA4qP0/w37RRTbi+64ymye/DQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector10001;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=AMbylGVYmR4hcmhFMc3zhYahx52UbWMgFWWKCdGdn+s=;
 b=wofs5vnIXGtruVXsA3O6H28uD0zGyWK/57MWMvgPVoj6CwEYsU05zRsXdvHkE3Ex930y5LtZutebWt0kCx9WPWx/M7P6rYMNPdP9Nw+HLECCqgGUOs5I3wFeaEqGJT7fTcGzqvBRKuM+mqAghceQu+TtmsSeY2wVrFLJmgPxOxdjj7Tuh4F0YIy7C/5rEocoRCw23sJqoWCEVjs9l3Ycc0ukfe74jzxF07WaiXlfA97N/4sG3iaz4WO5r4Bm9DEPpQl8ohwTvA2O2mfrVBSiDhWm4sGHsuGFJNmimeU65TFx1CVeufirxojRk7x+J3BvakCNQSV6W4wuMj1cJsJgnQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=AMbylGVYmR4hcmhFMc3zhYahx52UbWMgFWWKCdGdn+s=;
 b=GetMecKc33UGW6wq3MrVijGPRs2Cg0uqxQmUV8v6OShWfDs3QdFbEQ854NFEZ1juXelLBaKILwC4G7nHnTUttxcpC3BxPdru1HwJL57AVgJMBaLUiQB2a8GsnzLGGZh/U6TQtJmB6Syl1JuhPO7y2Ds1VJi0ovQlOY9S8h59YD8=
From: Owen Smith <owen.smith@citrix.com>
To: Tu Dinh <ngoc-tu.dinh@vates.tech>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Subject: Re: [PATCH] Set SkipBytes to 0 for contiguous allocations
Thread-Topic: [PATCH] Set SkipBytes to 0 for contiguous allocations
Thread-Index: AQHdWwohReBLwnIrXE+S+XztkTkZ1rb7aR8L
Date: Tue, 13 Oct 2026 12:37:28 +0000
Message-ID:
 <SA6PR03MB776012959AA25E8FAFDB0C26FE9E2@SA6PR03MB7760.namprd03.prod.outlook.com>
References:
 <1791892676.8631fc262581453bbf619ec5b2062170.1a135205d930008425@vates.tech>
In-Reply-To:
 <1791892676.8631fc262581453bbf619ec5b2062170.1a135205d930008425@vates.tech>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
msip_labels:
authentication-results: mx.microsoft.com 1; dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=citrix.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: SA6PR03MB7760:EE_|SA3PR03MB8205:EE_
x-ms-office365-filtering-correlation-id: 3567adf1-854e-4b9e-9a30-08df2926be63
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam:
 BCL:0;ARA:13230040|1800799024|366016|23010399003|376014|38070700021|56012099006|11063799006|261009223027099003|10067099003|22082099003|18002099003;
x-microsoft-antispam-message-info:
 QNbyO0ulT2Vk7RWXNyBppMx2+IJhHAuG9ylvnhn9gktBkoxnRd4tMw7uwAF2kri7H9l1CqWOONLv9Lv2+S1VqA+Dh66AnRvFrKgnQMtAWPntPI6Hxpg2DR0FrbGrTmrp44x+obCHtWad0lT3xXh6mpgZGcxPAPonu+c4e+wC0SYYRfncjLTXEocT2ezxFmubMp4Yk714s2QtuEXvh9QHjvUpsEdx5BqYw13Tq8wqml9FlNVaaghu4jIWVcpui8nGCzbOSKNLKJkfSs1BG1XQCMs72QNrSPutJsmuIWTwzb8Bp42hF69B89528SgdvskNcehDms4Ju1DkP5VC0RH/SMB9N2jPQQOvDOCNJc8q1itlmE3gESSg8UUED8oL5q/dqjCwy7hjgTxQ+TIuweSWuao+0mEIrKL2TTXYTqIMprvwvQGnHYcv1+b0Hnbu+uCM3h7ymZlhFTILkI5sZQ1RgD/HFtlGU1CcTugJ3RuikpvFvkc0fckkltP6GX8bviQPX1L2N6SNWoPKzgD0wDB9QOsgnSYZnKg8I3gy808+kkxZeuyz2BICthOEI5HjUl4rzL1zcHS1Q3NDAfGFPy61j2L3+tEZzlTUAyL62qCSieHbbZG9GxaD8j20ZM22c7Xq05uBU1vGWqrbHYmMvTzjL+BBcVChxZ/G6w3znPWtnvQ=
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SA6PR03MB7760.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(23010399003)(376014)(38070700021)(56012099006)(11063799006)(261009223027099003)(10067099003)(22082099003)(18002099003);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?us-ascii?Q?OyVbxi044qLiNfxy7X+q/sjT+5QtBiF1GJqiscD7dz90M7DL6QVulQuY8c8E?=
 =?us-ascii?Q?rNz8S0IJ+X8e7NJDZ5qGadZfJm/8WkaVu/Dz8+7SmKI3wh0bv+t9YFuWAOeE?=
 =?us-ascii?Q?Wk6dWHhJIuz+9iicMU5JqZ7O7T6cGxMGL9E/MxvgCFDh0cfpVxhYqVHiodBv?=
 =?us-ascii?Q?x3QOv1kziIjLv+Z6qrD4SPW04ozoosw1MjU2nVatyQykm/XHgL1lwMv3DI8r?=
 =?us-ascii?Q?Y3DwBYkxK+KTopMpTXpt2u5Lz9EnjMDQKY3OqI2XIOPDOIY8oU8+8cT8QkNu?=
 =?us-ascii?Q?z1AgIERBQOCSanb9TiY935i6q2CbSAOZ+KodoWA/ZRXSyQQrKA7bYgCWuXSU?=
 =?us-ascii?Q?Oi67nV5YJ9l2BtrfmFZLUicUdPR/SOf7qcfuDbuUbrCbd/qUPfUANKVGY+y5?=
 =?us-ascii?Q?Es2q/L3DuRBe3AY+pD/RQPKUAVBC3tBC4nMnVtgF7jzIDbLeBwY4Nl1M7DQ2?=
 =?us-ascii?Q?LRSFDT7zb6l+DZf8F06c5QqTEjxm7mUUUihdSCQD1/xYQKtHLHLVhhgvaIpw?=
 =?us-ascii?Q?yfs2jPiImDLlj1J5leyE3BStCQbVHflqt/aLgfcNF6XoeOrSd+d/Fa6RI1ye?=
 =?us-ascii?Q?Fcez7o+oLDgc2cWLmjvx2+MY8FRTyC7b8cWlS2EdwNrBISxbcQ273OUvjLLR?=
 =?us-ascii?Q?m+Lq77yXzQHomVczIZws5gvHKdq3guP0w3B9WVF4dQO+8FPeVOsg9xZfR4WB?=
 =?us-ascii?Q?sZnfDnt5Jsd03zBXDucIe/gQvmKBHbnk2X3iZxhQzLMshmCCc/qDp7Hs5iUE?=
 =?us-ascii?Q?87kKhbi4bNO6jkUuCUySL3Jr0wLTv+NU7QmZDao6MkVQ/zzmPqcRE8v95kxT?=
 =?us-ascii?Q?lqDswhAgdMSJYH2ptALaO0t6H577/ccvx3FfRXaQQGKbgtH4/vrPt3KO8Gz0?=
 =?us-ascii?Q?bViy0SyMkGknNx2zIRoAJ5e5jTfdVagYW0txa4PfkSfHZ45ImlELllS7mtdb?=
 =?us-ascii?Q?TcfSdUHBaYkUwrbP4lsLk/SH8yt6yETkKTmufr10R4re/tTZ2t7ugIMoFx7e?=
 =?us-ascii?Q?xiRFiGEypeFO4Wv0HWvBV+fwUcZrrlGZtxWhA6siy57PhqUHIO+MXTgLm3sR?=
 =?us-ascii?Q?DIHhy+tUBoxwIWgkUNXz5gtMzhJQ/3n8B0YVXEKPzxAXKk6igAe4C2p85iBN?=
 =?us-ascii?Q?O9/Csc3KinE/26MMraJA5apw2/wc+crzQnaABvEiD/Jw28ylfKH6n0BO9suQ?=
 =?us-ascii?Q?c8xMw3XNOSEmiahp444fvoPNRSixrP6jAiZCWq0rkLG8wZx1C+SyURYZczVn?=
 =?us-ascii?Q?CONodwuduM4h46V8NTDaf6q0n/XM114NXoPY91AMD0WVM10enT0EvHhj//o8?=
 =?us-ascii?Q?pcPMxktG2MAjuFhC9mF/36Ua+gHhQfgjpfyzQeHuQPK2GPQ/eIwqDYeW/NUO?=
 =?us-ascii?Q?Cp76S3vP3+uN1hzsv9d+IuVRCIFSc7PM/LhbpXi9+8gRqv3eXxbz4ebMdOuY?=
 =?us-ascii?Q?s4+MpERwBSuHJHWAdwvDDoM3coFjHr+mR8om29Br6kkQUFLkwffBHSyOiAKB?=
 =?us-ascii?Q?NMOYvAymrFJU7yGCEYbX47ARYPU+1xY/ahVKTERdWyUOd0DASJXDhguaVO3M?=
 =?us-ascii?Q?0U3IWsge+BkhBMlQrZFeF8HYqMBS8WChR9t8FbJ4mIwvhxyAf6THYOkOXATB?=
 =?us-ascii?Q?vumwy6pbBk5eAkhlP1V8bQZX+a7k5VKPBSVT2DUj3Y48pJjbNAdKQGwJYlKV?=
 =?us-ascii?Q?RslID6oxuDIRyB0hTT4eKeeM5BKPKlV+KymxtaQCql5qojvI?=
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-OriginatorOrg: citrix.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: SA6PR03MB7760.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 3567adf1-854e-4b9e-9a30-08df2926be63
X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Oct 2026 12:37:28.8888
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: eBttqUXGJu2oxjFAOXT2GYiV1Hpm0OTg+E3NgegImeZCJ8RFkhfnEJ9TeiC7cn3214ybi8pQ+TNOarJ3bOLmRQ==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA3PR03MB8205
X-purgate-ID: tlsNG-c201ff/1791895056-F60AA2A1-1FD1405F/0/0
X-purgate-type: clean
X-purgate-size: 1575

Reviewed-by: Owen Smith <owen.smith@citrix.com>

________________________________________
From: win-pv-devel <win-pv-devel-bounces@lists.xenproject.org> on behalf of=
 Tu Dinh <ngoc-tu.dinh@vates.tech>
Sent: 13 October 2026 12:57 PM
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh
Subject: [PATCH] Set SkipBytes to 0 for contiguous allocations

MmAllocatePagesForMdlEx requires that for contiguous allocations, if
MM_ALLOCATE_REQUIRE_CONTIGUOUS_CHUNKS is set and SkipBytes is nonzero,
then SkipBytes must be a power of two. Setting SkipBytes here is
unnecessary as contiguous allocations are still possible with SkipBytes
set to 0 anyway.

Signed-off-by: Tu Dinh <ngoc-tu.dinh@vates.tech>
---
To be applied to XenCons, XenHid, XenIface and XenNet as well.
---
 src/common/util.h | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/src/common/util.h b/src/common/util.h
index 36f71f9..9709a10 100644
--- a/src/common/util.h
+++ b/src/common/util.h
@@ -201,13 +201,12 @@ __AllocatePages(

     LowAddress.QuadPart =3D 0ull;
     HighAddress.QuadPart =3D ~0ull;
+    SkipBytes.QuadPart =3D 0ull;
     TotalBytes =3D (SIZE_T)PAGE_SIZE * Count;

     if (Contiguous) {
-        SkipBytes.QuadPart =3D TotalBytes;
         Flags =3D MM_ALLOCATE_REQUIRE_CONTIGUOUS_CHUNKS;
     } else {
-        SkipBytes.QuadPart =3D 0ull;
         Flags =3D MM_ALLOCATE_FULLY_REQUIRED;
     }

--
2.55.0.windows.3


--
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates solutions

web: https://vates.tech


From win-pv-devel-bounces@lists.xenproject.org Tue Oct 13 12:37:44 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 13 Oct 2026 12:37:44 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1447788.1663643 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGblI-00005V-AL; Tue, 13 Oct 2026 12:37:44 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1447788.1663643; Tue, 13 Oct 2026 12:37:44 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGblI-00005M-7Q; Tue, 13 Oct 2026 12:37:44 +0000
Received: by outflank-mailman (input) for mailman id 1447788;
 Tue, 13 Oct 2026 12:37:43 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13544b2440008425@swg.vates.tech>)
 id 1xGblH-000050-1P
 for win-pv-devel@lists.xenproject.org; Tue, 13 Oct 2026 12:37:43 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGblG-000Pxe-EZ
 for win-pv-devel@lists.xenproject.org; Tue, 13 Oct 2026 14:37:42 +0200
Received: from [10.42.69.3] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13544b2440008425@swg.vates.tech>)
 id 6ace260c-e002-0a2a0a5209dd-0a2a4503dbc2-36
 for <win-pv-devel@lists.xenproject.org>; Tue, 13 Oct 2026 14:37:42 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-33051d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13544b2440008425@swg.vates.tech>)
 id 6ace2615-fae8-0a2a45030019-b9ff1c22b607-3
 for <win-pv-devel@lists.xenproject.org>; Tue, 13 Oct 2026 14:37:42 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a13544b2440008425.004 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Tue, 13 Oct 2026 12:37:36 +0000
Received: from [192.168.1.61] (142.220.66.37.rev.sfr.net [37.66.220.142])
 (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 5A19882A53;
 Tue, 13 Oct 2026 14:37:36 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=QkBKsavXOSrbMFX+ep8lkrl7w3ENS3H9XAgWu7WQbVA=;
 h=from:subject:date:message-id:to:mime-version:content-type:in-reply-to:references:feedback-id;
 b=OUF69bFPzQDKrPQBtdRLKfpdS454dhvwu7RewWM3606pzJG4piJN5UhBqCd5siZD0p8U8QQMP
 81k995NaygvdW8WlB53h7pXmZiu7wYasYDFgvrvZQFuisi2Onbl30eGnhtka1ETvzq9ySLnu1SH
 ZrkF7kaz1AksokD9zC/YTdZnq0cKKz9D2Gq0TZC+sAONs+qwKcb65wchUXU6JIAqCs4IzPFT5C1
 fLDw8qquE81Nx4QNwqMmQTu5dpBIL0QtbC4LRNjhrqxoJTqu8P6VYZLywi18WoqGKDefbJcdNqc
 B4rTXOyBnZhKy8J9II2RICwIhn7LzlioHGS3FY7uYG2g==
X-Zone-Loop: 2718cc3f6b78b6005089df5537ac95724caffaf1d369
x-campaign-type: default
x-transaction-id: 7a5461ec-9f21-427d-94fe-6b7a5f0024b2
x-swg-uid: 01-d343afce-0e35-48b4-8472-2071b6004c95
X-Mailer: Sweego
Message-ID:
 <1791895057.8631fc262581453bbf619ec5b2062170.1a13544b2440008425@vates.tech>
x-swg-bid: 1791895057.8631fc262581453bbf619ec5b2062170.1a13544b2440008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
Date: Tue, 13 Oct 2026 14:37:36 +0200
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: Re: [PATCH 10/10] xencontrol: guard against NumberPages overflow in
 gnttab size calculation
To: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>,
 Owen Smith <owen.smith@citrix.com>, David ambu <david.preetham@citrix.com>,
 "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <20261008120204.859-1-david.preetham@citrix.com>
 <20261008120204.859-10-david.preetham@citrix.com>
 <1791540657.8631fc262581453bbf619ec5b2062170.1a12024fd4a00080d7@vates.tech>
 <1791838835.8631fc262581453bbf619ec5b2062170.1a131ead1f30008d8d@vates.tech>
 <SA6PR03MB776035DF58FE72CF4E3F20AFFE9E2@SA6PR03MB7760.namprd03.prod.outlook.com>
 <1791879054.8631fc262581453bbf619ec5b2062170.1a1345084a30008d8d@vates.tech>
 <91da5070-a06b-4317-8a49-2407bb730fba@invisiblethingslab.com>
 <1791882779.8631fc262581453bbf619ec5b2062170.1a134895a470008d8d@vates.tech>
 <e75b8eda-8b3f-43c3-86c4-a8e610a7ae35@invisiblethingslab.com>
Content-Language: en-US
In-Reply-To: <e75b8eda-8b3f-43c3-86c4-a8e610a7ae35@invisiblethingslab.com>
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.160.d51472298c51a62b.1a13544b041.4a9554b8237a8d67=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791895056450
X-purgate-ID: tlsNG-33051d/1791895062-7488A4E9-F7EB9F1C/0/0
X-purgate-type: clean
X-purgate-size: 4355

---=Part.160.d51472298c51a62b.1a13544b041.4a9554b8237a8d67=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

On 13/10/2026 11:20, Rafa=C5=82 Wojdy=C5=82a wrote:
> On 13=2E10=2E2026 11:12, Tu Dinh wrote:
>> On 13/10/2026 11:10, Rafa=C5=82 Wojdy=C5=82a wrote:
>>> On 13=2E10=2E2026 10:10, Tu Dinh wrote:
>>>> On 13/10/2026 10:01, Owen Smith wrote:
>>>>>>>> diff --git a/src/xencontrol/xencontrol=2Ec b/src/xencontrol/
>>>>>>>> xencontrol=2Ec
>>>>>>>> index a68dcf6=2E=2E8f21867 100644
>>>>>>>> --- a/src/xencontrol/xencontrol=2Ec
>>>>>>>> +++ b/src/xencontrol/xencontrol=2Ec
>>>>>>>> @@ -407,6 +407,11 @@ XcGnttabPermitForeignAccess2(
>>>>>>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 BOOL=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0 Success;
>>>>>>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 DWORD=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0 Status;
>>>>>>>>
>>>>>>>> +=C2=A0=C2=A0=C2=A0 if (NumberPages =3D=3D 0 || NumberPages >
>>>>>>>> XENCONTROL_GNTTAB_MAX_PAGES) {
>>>>>>> I believe the boundary condition of NumberPages =3D=3D
>>>>>>> XENCONTROL_GNTTAB_MAX_PAGES still causes an overflow? So
>>>>>>> XENCONTROL_GNTTAB_MAX_PAGES should be (1024 * 1024 - 1) instead=2E
>>>>>> MAXULONG / PAGE_SIZE would be a better formulation still, only=20
>>>>>> problem
>>>>>> being PAGE_SIZE is not defined for usermode targets=2E
>>>>> Maximum number of pages allowed is also checked in
>>>>> IoctlGnttabMapForeignPages
>>>>> against a hard coded 1024*1024=2E
>>>>> It would be good to have the same constant/#define referred to in
>>>>> both places=2E
>>>>>
>>>>> Eventually, this ends up in FdoPciHoleAllocate or
>>>>> FdoMemoryHoleAllocate, depending
>>>>> on the "UseMemoryHole" setting=2E
>>>>> FdoPciHoleAllocate is limited to 4GiB - PAGE_SIZE bytes (i=2Ee=2E
>>>>> 1024*1024 - 1 pages)
>>>>> FdoMemoryHoleAllocate's allocations doesnt specify a maximum size,
>>>>> but the chances
>>>>> of allocating a contiguous 4GB set of pages would be problematic=2E
>>>>>
>>>>> Its likely this check is excessively large, but I'm unsure as to wha=
t
>>>>> the safe correct
>>>>> maximum would be=2E
>>>> I think in general it'd be nice to bound the usermode grant consumpti=
on
>>>> to the actual free grant table space (and reserve some certain amount
>>>> for the kernel), but that doesn't look simple to implement=2E
>>>>
>>>> SeLockMemoryPrivilege may also be worth checking in the caller path o=
f
>>>> some ioctls=2E
>>> I'll finally be sending my rework of the grant/map code soon, hopefull=
y
>>> this week=2E Got caught up with other projects, but I'm testing it now=
=2E It
>>> includes new interface versions with bounded batched maps/unmaps, per-
>>> page error reporting and other improvements=2E
>> Great to hear=2E I can share our WIP test suite of evtchn/gnttab ioctls=
 as
>> well as a few private fixes we've been working on on our side=2E
> That would be nice, I was thinking of adding more comprehensive tests to=
=20
> the upstream repo=2E

I've sent patches for issues revealed by our test suite=2E

Unfortunately the tests are written in C# as a companion of our own=20
guest agent, so they're unlikely to fit upstream as it is=2E They're=20
posted here https://github=2Ecom/xcp-ng/win-pv-drivers/tree/dnt/next if=20
you want to check them out (they should be merged in our repo eventually)

>>> What's the policy on retaining old xenbus interface versions?
>> Currently, old xenbus interface versions have to be retained
>> indefinitely, because since b0b9cc139600 old drivers could still bind t=
o
>> devices without being aware of compatibility changes=2E
>=20



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.160.d51472298c51a62b.1a13544b041.4a9554b8237a8d67=---


From win-pv-devel-bounces@lists.xenproject.org Tue Oct 13 12:40:31 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 13 Oct 2026 12:40:31 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1447798.1663647 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGbnz-0001RO-Ib; Tue, 13 Oct 2026 12:40:31 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1447798.1663647; Tue, 13 Oct 2026 12:40:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGbnz-0001RG-Fr; Tue, 13 Oct 2026 12:40:31 +0000
Received: by outflank-mailman (input) for mailman id 1447798;
 Tue, 13 Oct 2026 12:40:30 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1354746fb0008425@swg.vates.tech>)
 id 1xGbny-0001RA-2F
 for win-pv-devel@lists.xenproject.org; Tue, 13 Oct 2026 12:40:30 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGbnx-000Qgv-Dh
 for win-pv-devel@lists.xenproject.org; Tue, 13 Oct 2026 14:40:29 +0200
Received: from [10.42.69.10] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1354746fb0008425@swg.vates.tech>)
 id 6ace26bc-8faa-0a2a0a5109dd-0a2a450a9e4e-2
 for <win-pv-devel@lists.xenproject.org>; Tue, 13 Oct 2026 14:40:29 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-4011c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1354746fb0008425@swg.vates.tech>)
 id 6ace26bd-f2d2-0a2a450a0019-b9ff1c229381-3
 for <win-pv-devel@lists.xenproject.org>; Tue, 13 Oct 2026 14:40:29 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1354746fb0008425.002 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Tue, 13 Oct 2026 12:40:26 +0000
Received: from [192.168.1.61] (142.220.66.37.rev.sfr.net [37.66.220.142])
 (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 61AE881B76;
 Tue, 13 Oct 2026 14:40:25 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=Pc2sDaZH2D9g62DkKIRA0N5w+7IBybtDfbPu4o9eAqQ=;
 h=from:subject:date:message-id:to:mime-version:content-type:in-reply-to:references:feedback-id;
 b=nC2EmWuI9mDW+S4/SDqV51JEzg3osrkwTYrASHjiae/K+U7qN0fPZQu9zjKnISiUH6vWwWcMH
 ahur9piEm1GrMFXcaUx3SPvn18WLx4tRD8/SIKWQpuJzE9emh+7bMv7Xt5JnyjnUpBsJXSjo2iX
 h1eEI/N8Vnu5XsY1Q9d7L80542Cfgbx/GPi2B6PPF8HvyZy/VokDcJ2NB+nCxv3O29YGf0qsnMq
 jhIbDen0LWXfjrhZzI3KoXGe67LjEya0nf+tewU/ojoUH4Esz/IWILh3PJaACdY1y6EfuRrzb+J
 sbo6wBfA2hftC1LAmRugnWj51TWDpVwV9jKCB5Il78Fw==
X-Zone-Loop: 0342a46336a2a3472c6de9bfaac459a9d46c58c321d1
x-campaign-type: default
x-transaction-id: 3f122f3c-653f-4039-aa10-00e233ec3fac
x-swg-uid: 01-23c79ef5-0d0f-4ebc-869e-b8a3191eda4f
X-Mailer: Sweego
Message-ID:
 <1791895226.8631fc262581453bbf619ec5b2062170.1a1354746fb0008425@vates.tech>
x-swg-bid: 1791895226.8631fc262581453bbf619ec5b2062170.1a1354746fb0008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
Date: Tue, 13 Oct 2026 14:40:25 +0200
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH 01/10] xeniface: fix NULL KernelVa dereference in
 GnttabFreeGrant notify
Content-Language: en-US
To: david ambu <david.preetham@citrix.com>, win-pv-devel@lists.xenproject.org
References: <20261008120204.859-1-david.preetham@citrix.com>
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
In-Reply-To: <20261008120204.859-1-david.preetham@citrix.com>
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.161.324a4d8c1c0cc65.1a13547446a.2d4c8ec477b80039=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791895225450
X-purgate-ID: tlsNG-4011c0/1791895229-59FDECFC-FFA38A63/0/0
X-purgate-type: clean
X-purgate-size: 2012

---=Part.161.324a4d8c1c0cc65.1a13547446a.2d4c8ec477b80039=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

On 08/10/2026 14:05, david ambu wrote:
> For V2 grants with user-supplied memory, KernelVa is NULL=2E
> Fall back to UserVa for the notify offset write in that case=2E
>=20
> Signed-off-by: david ambu <david=2Epreetham@citrix=2Ecom>
> Assisted by Claude Sonnet 4=2E6

Entire series except Patch 10:

Reviewed-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>

Since Patch 10 is still under discussion, IMO we can hold back that=20
patch alone and commit the remaining 9 to make sure that we have the=20
necessary driver fixes=2E

> ---
>   src/xeniface/ioctl_gnttab=2Ec | 12 +++++++++++-
>   1 file changed, 11 insertions(+), 1 deletion(-)
>=20
> diff --git a/src/xeniface/ioctl_gnttab=2Ec b/src/xeniface/ioctl_gnttab=
=2Ec
> index 770f0dc=2E=2E35767a2 100644
> --- a/src/xeniface/ioctl_gnttab=2Ec
> +++ b/src/xeniface/ioctl_gnttab=2Ec
> @@ -482,7 +482,17 @@ GnttabFreeGrant(
>       ASSERT(KeGetCurrentIrql() <=3D APC_LEVEL);
>  =20
>       if (Context->Flags & XENIFACE_GNTTAB_USE_NOTIFY_OFFSET) {
> -        ((PCHAR)Context->KernelVa)[Context->NotifyOffset] =3D 0;
> +        if (Context->KernelVa !=3D NULL) {
> +            ((PCHAR)Context->KernelVa)[Context->NotifyOffset] =3D 0;
> +        } else {
> +#pragma prefast(suppress:6320)
> +            try {
> +                ((PCHAR)Context->UserVa)[Context->NotifyOffset] =3D 0;
> +            } except(EXCEPTION_EXECUTE_HANDLER) {
> +                Error("Failed to write notify offset 0x%x: 0x%x\n",
> +                      Context->NotifyOffset, GetExceptionCode());
> +            }
> +        }
>       }
>  =20
>       if (Context->Flags & XENIFACE_GNTTAB_USE_NOTIFY_PORT) {



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.161.324a4d8c1c0cc65.1a13547446a.2d4c8ec477b80039=---


From win-pv-devel-bounces@lists.xenproject.org Tue Oct 13 12:57:06 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 13 Oct 2026 12:57:06 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1447843.1663716 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGc42-0005Fe-M2; Tue, 13 Oct 2026 12:57:06 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1447843.1663716; Tue, 13 Oct 2026 12:57:06 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGc42-0005FX-JH; Tue, 13 Oct 2026 12:57:06 +0000
Received: by outflank-mailman (input) for mailman id 1447843;
 Tue, 13 Oct 2026 12:57:05 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <owen.smith@citrix.com>) id 1xGc41-0005FN-GL
 for win-pv-devel@lists.xenproject.org; Tue, 13 Oct 2026 12:57:05 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGc40-007z0T-Op
 for win-pv-devel@lists.xenproject.org; Tue, 13 Oct 2026 14:57:04 +0200
Received: from [10.42.69.9] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ace2a9f-8faa-0a2a0a5109dd-0a2a4509b312-6
 for <win-pv-devel@lists.xenproject.org>; Tue, 13 Oct 2026 14:57:04 +0200
Received: from [40.93.195.6]
 (helo=SN4PR2101CU001.outbound.protection.outlook.com)
 by tlsNG-bad1c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ace2a9f-be1a-0a2a45090019-285dc306c1e6-3
 for <win-pv-devel@lists.xenproject.org>; Tue, 13 Oct 2026 14:57:04 +0200
Received: from SA6PR03MB7760.namprd03.prod.outlook.com (2603:10b6:806:43c::5)
 by LV4PPF8D30909F3.namprd03.prod.outlook.com
 (2603:10b6:40f:fc02::212) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.496.24; Tue, 13 Oct
 2026 12:57:00 +0000
Received: from SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38]) by SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38%5]) with mapi id 15.21.0496.021; Tue, 13 Oct 2026
 12:57:00 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:x-ms-exchange-senderadcheck"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
 b=RWjG+YcnrKw1Ej+2CWorz7WUOH5fSORElqFh15aXRCXWo1a9RkFBmfj5f0ZdqzcvffIkCc9x7VssoM6r4EVDAJAlZg4fKEFb4dGxnNm95kwRBQv03ZV7GHNIoOaazyCLB344xOrKykxSF2WH4Remrp/Uz8c3ErVb057BKgUbDaUFOR46KPiemGkh8OOMPPUURrm3l4JZPxyHAzKuT/3yRm011NzmR3yx3W1oVdI91723hm5YGiiOX/CbtP22JdmAvq9zOK5lcKWqe3IeeOtVSrSw2IJm1u5T/o3LPGkkwhk17UgCZwEzsMpiNo919f9NANNU1k4lRcbdfnM4cbsuJw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector10001;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=1roS/X8zXNI3sDyrQDHenbWI8SuCQBkKQa7JrPrjHa0=;
 b=ofLLGadd+NDWpUf3hkiT6DlRSj6HBPNcXU14JQFv8cxk/PHPyB0yYF7GNx4wyfDeUlyfiROQC15ds0f3h5sX3K6Zb2gxqfGHcwXr+CE4ZeM1+BJZBEN8mGH2DyMRVZZRsCy14IVeI3ohJhyF/XxGas2hwZ1BV7LQKas9GLsOxVABEhHS5N4zgPyxJDwzWeZFHEElqQL9oF6OPJiBIm7ok4HyJ6/QFP6QCgLGKhG4Sem6/GuVqP1mvhHm9SuNKGAcDPSSWtmKHak/8azPSuFpyZjN82fRezKfP10YL0jbRHBjnhtWxhyfQkpNBOaS3roWsILvTwy7wpnALxeUf1SHCA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=1roS/X8zXNI3sDyrQDHenbWI8SuCQBkKQa7JrPrjHa0=;
 b=AlOfvnjpGoUHReXnDonI1Q669RkYCmVoYG8U2qJq66iVbxqZReVwLrP/kdSRuM2yBK1LTTbwOzESMoUVIUcOQ48ViFCE9OP0cbsUEKi+rRu8RFRz7JrLD8C9TALXynug7YlEMAJBc5sGi1iZHTKqnqNtujyyW7OfSUWHGB9NgW8=
From: Owen Smith <owen.smith@citrix.com>
To: Tu Dinh <ngoc-tu.dinh@vates.tech>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Subject: Re: [PATCH 1/4] gnttab: Don't free resources through an ASSERT
Thread-Topic: [PATCH 1/4] gnttab: Don't free resources through an ASSERT
Thread-Index: AQHdWw7Y7AK1x+NTrU236ercBDKk9rb7aEIAgAAFhD8=
Date: Tue, 13 Oct 2026 12:57:00 +0000
Message-ID:
 <SA6PR03MB7760A486EB1D2FB40960C6BBFE9E2@SA6PR03MB7760.namprd03.prod.outlook.com>
References:
 <1791894701.8631fc262581453bbf619ec5b2062170.1a1353f44130008425@vates.tech>
 <1791894869.8631fc262581453bbf619ec5b2062170.1a13541d6e20008425@vates.tech>
In-Reply-To:
 <1791894869.8631fc262581453bbf619ec5b2062170.1a13541d6e20008425@vates.tech>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
msip_labels:
authentication-results: mx.microsoft.com 1; dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=citrix.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: SA6PR03MB7760:EE_|LV4PPF8D30909F3:EE_
x-ms-office365-filtering-correlation-id: 7830b36c-7cb8-414c-07b5-08df29297897
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam:
 BCL:0;ARA:13230040|1800799024|23010399003|376014|366016|38070700021|56012099006|11063799006|4143699003|261009223027099003|10067099003|22082099003|18002099003;
x-microsoft-antispam-message-info:
 dapip212Rt3Y1QzkKWmPJ/UB/CDWInKDIVppg2hJvzC2lQVVlb7CYq0uktU1y5kuB78MEhLfBWZRdDi1zGMEsAPK9/EYS7wgngZGq4WpYt4tGC5lQhcX5VYMFNTyMtQ2n3pa870mWi/eHmxZSZAB2v4khIaqMa606XAzuqAX5PmbnKWFSSGcYCvZ73+9oAWoVPE2Zy4UJFRGZqZkv4Dn+4fmPxSG6c+oyI8XEogDup8BQzny1Pwjr4dZ5xKIHzH3nTapTuok3yzOu5lu4E4DfyY9WzdC7gnLkJ+TkZiLL/NEzDlMjzY525FsDfKmVe2uz8Lf+o+VGVHBiHObL5dg/Yds9eX6zVuBK87f898kc+HDeXLwqTdnuOTHvhubdRL7hNM/n6KJDunz9m0b4dvOU4stCBlFqFDWHa5SmdFYaA1kKya1mzsiPfJvL3sEhRDqDkFT1mEcE3RCu8I9QHIuMn1TzqW87qBIQGEVKox8yf7EVW7pc4KlBR/58oudEgcv8gGksog2bbOGIxhj0qy1x1R/APCQGsHjcoa9k45JYA/BiBlhFfvO1njuwJux+oQOhJ17Qc+9M8tdGOrd+FaGwp+Kf9cj1YWrvhm+hIIUjZEWjBXbJAVb/gn7kOiVRO2vr7ynH2mzTss0+jF8mx0laib0s8YkrAD2ufvIOBf9qtE=
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SA6PR03MB7760.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(23010399003)(376014)(366016)(38070700021)(56012099006)(11063799006)(4143699003)(261009223027099003)(10067099003)(22082099003)(18002099003);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?us-ascii?Q?vFVFQj1RPo/XzzDe13v71BO8Yd5Gkeztud90LWSwhAZc1ACwNtvULRYtzK+1?=
 =?us-ascii?Q?AvtOVSzWPum6TrJxPGYfsJu5xxeXyWPQN8RTgiRoftSIOx+wtHtroq046xYp?=
 =?us-ascii?Q?oM0DrSOUeg64QhL068M0tjjgZU4EaoifBFRmTsAPNq1U9pTzWBkVgLdNHo8C?=
 =?us-ascii?Q?0VILUU91XnyVGOsKVId17QGbhhIANpwO5a0fKUij64BqaK1yMdMZmvb/gz2N?=
 =?us-ascii?Q?U4hGvqcBIaWRA5ELcC7j5Gh5j69mPppj9mZebDSIRji9TP90B4W7stvFxGDl?=
 =?us-ascii?Q?a+baG2exkrsJi8vTu9sv/juLKgVXMDXU48+HQc6Oq/RAqhbDT21LDae5iPGi?=
 =?us-ascii?Q?nkqxQE1czzrvDFQ6+1jTyB9oBfIe0dWxn9ZODRLaZ8VfuwFJO/mE4Z+yvOYE?=
 =?us-ascii?Q?ByLlxT+8ttYk1yokdg1PdU98jujgIuEzebbx4QgH2ciyYsKfyGJ/bNuh7Esd?=
 =?us-ascii?Q?BTMv0j0M62HNZ3WO7u/Aw10OXf1ZH86yaesqedIh4gkaVgZCTsWfNsjwVQpW?=
 =?us-ascii?Q?TOMM4dOKpMWlXcFyyA/IiIXWrJA84eqWzlVKfuNz0gWZUgFsAunR9XqfwBNO?=
 =?us-ascii?Q?/BiHu1MJV+HShoo54EqfyN4koc5PYfvuvF1I7RRvSEhqrf8XhssWeYCrfKZC?=
 =?us-ascii?Q?1SCHZaMPNrrol2fPD1G0ND03AADrk/LdrtlXyVeKUpX0VwonkROisBPQY8Lq?=
 =?us-ascii?Q?KjF1q5vrVnTkvT+56RqPxoLE2Tuzji93GcRyPIwPkOnt4TstTYvzDSb3rUa2?=
 =?us-ascii?Q?ZQGlDOoTcqg77lSIEAct4PTAneC8xg+t/4L72zvL+LCX6xfqFAc5G9eL/eJz?=
 =?us-ascii?Q?GEPxg4YlL9teN3+GgdVkWLShpcWAR78MwQdQNR1d461gEUxdju40UOabxlGZ?=
 =?us-ascii?Q?+4HtYJoqWPOAYZ9uNykYfHHWTQ1HQLeAjn6ahHuuFAuhfPoeb6iX7ViDQSqL?=
 =?us-ascii?Q?hdKPsqZUGGk+PCp8WieW3f8wZh4Smya2g26KvC1c0YA29MMKqfRbdGAHO4gq?=
 =?us-ascii?Q?U//dVA5dUexbtl30+kLu3HP5kwNgNR+2wSrVePEzMzbbcsljw+z1V8QHY957?=
 =?us-ascii?Q?cYJl2ccCVdtwZqn/ktwJNf1uYvLmTRenn7fAdrTOUVY3g9y3jRBnmoRysc3X?=
 =?us-ascii?Q?tH7oCNQXNyvUZJlokFJQzZ6Eh3TvIh4GfpQuh82LPsuH2sXDKjzvbstiRDcE?=
 =?us-ascii?Q?+tmlFVmZOGA5E7lupk93G4NaiOrMQPiCdzSoMfBVlk5VhQNydnvyLgFknYu4?=
 =?us-ascii?Q?8I9UpZv2h4lG+BbMmHXEd7RUUHj4xdlflzjobYV8VzaHI5p1zbR6l5hxmCY1?=
 =?us-ascii?Q?7q/FoiF56AIgWVPy9nT0XMQyHgwWgw0YFge6aGxwAn/xJlUED6cJcFu1b1wF?=
 =?us-ascii?Q?4do6wsKnBNT2Ny+Q8aeeY8TjgiuXx0YZ0u9jzZ6ERVnB2x6rn7JU7pbuv5/2?=
 =?us-ascii?Q?SxNpFXJJeCIMMeg5Gs1f7xtxtvfAYRnIYVF+fkrlVLPndbcgrq0pigmng5an?=
 =?us-ascii?Q?TuMN9i7S3GVOkFmvenyFFrfSLcOU9o/jC2dHw2ZUfDrLfK6mCIvgz4HTXpp+?=
 =?us-ascii?Q?KtLQOnoEmwPnqe828k+CBHk/GmlV6Ake6gCzAXUtrlAaHvONBPDh/1D0l+G8?=
 =?us-ascii?Q?BnbdnMhmZHQ8YTSD+XBpWYMhIB/73yW41Yy+hoFKdTaEubYPqpIm/22fD7f7?=
 =?us-ascii?Q?XXmPbpn786SRfCutIVHuYCc+u0qRN2RuiFuJhOz4HTGW+Jvb?=
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-OriginatorOrg: citrix.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: SA6PR03MB7760.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 7830b36c-7cb8-414c-07b5-08df29297897
X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Oct 2026 12:57:00.3244
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: hCDDTJS6FRTZ0L7VY9PfJjzrZxWWNbTNwvMczDeLAvQ4af5rQKm7W4wvH3d0u/CGwZ2qC2Xd5pBbBdK8YPOzfw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV4PPF8D30909F3
X-purgate-ID: tlsNG-bad1c0/1791896224-3ACDF034-A932888F/0/0
X-purgate-type: clean
X-purgate-size: 892

These 4 patches, on top of David's first 9 patches

Reviewed-by: Owen Smith <owen.smith@citrix.com>

________________________________________
From: win-pv-devel <win-pv-devel-bounces@lists.xenproject.org> on behalf of=
 Tu Dinh <ngoc-tu.dinh@vates.tech>
Sent: 13 October 2026 1:34 PM
To: win-pv-devel@lists.xenproject.org
Subject: Re: [PATCH 1/4] gnttab: Don't free resources through an ASSERT

On 13/10/2026 14:32, Tu Dinh wrote:
> ASSERT macros skip evaluating their contents, so calling e.g.
> RevokeForeignAccess inside an ASSERT will end up causing the call to be
> skipped in release builds.
>
> Signed-off-by: Tu Dinh <ngoc-tu.dinh@vates.tech>

These 4 patches are meant to be applied on top of David's 10-patch
series and tested in that context.


--
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates solutions

web: https://vates.tech


From win-pv-devel-bounces@lists.xenproject.org Tue Oct 13 15:40:17 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 13 Oct 2026 15:40:17 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1448046.1664034 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGebw-0003uM-Re; Tue, 13 Oct 2026 15:40:16 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1448046.1664034; Tue, 13 Oct 2026 15:40:16 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGebw-0003uF-PA; Tue, 13 Oct 2026 15:40:16 +0000
Received: by outflank-mailman (input) for mailman id 1448046;
 Tue, 13 Oct 2026 15:40:14 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <david.preetham@citrix.com>) id 1xGebu-0003u9-M1
 for win-pv-devel@lists.xenproject.org; Tue, 13 Oct 2026 15:40:14 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGebt-00DVge-S1
 for win-pv-devel@lists.xenproject.org; Tue, 13 Oct 2026 17:40:13 +0200
Received: from [10.42.69.11] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <david.preetham@citrix.com>)
 id 6ace50dd-bab6-0a2a0a5309dd-0a2a450be47e-2
 for <win-pv-devel@lists.xenproject.org>; Tue, 13 Oct 2026 17:40:13 +0200
Received: from [209.85.218.43] (helo=mail-ej1-f43.google.com)
 by tlsNG-42698a.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <david.preetham@citrix.com>)
 id 6ace50dd-b7e8-0a2a450b0019-d155da2ba4a1-3
 for <win-pv-devel@lists.xenproject.org>; Tue, 13 Oct 2026 17:40:13 +0200
Received: by mail-ej1-f43.google.com with SMTP id
 a640c23a62f3a-c20ce3c118aso409597266b.0
 for <win-pv-devel@lists.xenproject.org>; Tue, 13 Oct 2026 08:40:13 -0700 (PDT)
Received: from mewpvdipd1063.citrite.net ([52.174.59.202])
 by smtp.gmail.com with ESMTPSA id
 a640c23a62f3a-c31a9a3bbe2sm596381066b.27.2026.10.13.08.40.11
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Tue, 13 Oct 2026 08:40:12 -0700 (PDT)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=google header.d=citrix.com header.i="@citrix.com" header.h="Content-Transfer-Encoding:MIME-Version:Message-ID:Date:Subject:Cc:To:From"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=citrix.com; s=google; t=1791906013; x=1792510813; darn=lists.xenproject.org;
        h=content-transfer-encoding:mime-version:message-id:date:subject:cc
         :to:from:from:to:cc:subject:date:message-id:reply-to:content-type;
        bh=z3fGph0yoj9DUWpez+gKB/nIx94n2dSIlmXmrDWpstw=;
        b=GMuBKY3IZAdm+AF3k65zSmDrtx5J4I4UbaH+RGGEm6jebVDT3fmvk81j0s0Nl24fE+
         KtKFCcwDnuYpga2rY88J8Ze4JvszUsWpCse3udJ2s1ZuEEIqFfousGOHFMKci9/8Qj4V
         sCeU99fgMgSpaaUHvo6xqAF9qWyxijW013ATo=
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20260707; t=1791906013; x=1792510813;
        h=content-transfer-encoding:mime-version:message-id:date:subject:cc
         :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date
         :message-id:reply-to:content-type;
        bh=z3fGph0yoj9DUWpez+gKB/nIx94n2dSIlmXmrDWpstw=;
        b=O2nhb26vWwruzzkOsTrLLQ+kLev3dx/VZUh7mPmz56MsdSvOnbhpTTzsbZDm1HJF2V
         AJTgg/fpopOX/2voybjFRcldbOx10CR9WPhTS+gO+n5caVeTryDMWJrecZCOCYykz50G
         r7pyZK731Hw6Rpo8a349QQLRcNirj/DEKHyriF6V+AuPWI3zJfLCIYY559N6hdcuvWvq
         aacwMKXuM9DLu8s3i3kHhZVBSU2YvPbYyGeWZJL6053jLjApCiQRI9gN6A40qYAxaapd
         bBSLd3iciZB/tE5w+dfS3PBjWtZ5fl19qTThAdt1dNI0JWL6xV4ZZN6W4c0WE9O0eb5J
         0L5g==
X-Gm-Message-State: AFq9FYJw07aW5gW4Q+COxMB5kqmhXm70jPvMQdIv/1hP44+juoJ9BIc9
	bQNrXdUtX3AZfkfCa+tN6kqiYJwJufERR/VC3H7hgn8VZABb2eFjecTVR+QxPgnEPfavjEGkyet
	/3ocI
X-Gm-Gg: AYBFou1RToeuIKsyzP8+CdbCrXEuEGtwfSpx2SES/jRYgIyJUVV/qZBNejqCBjGVsvm
	5TukTOLDiyftNtjXzaRiELcfMcrv6nqYkDkY6QR8kEjB9aV2z7+A3B/iZYkHXio78PGVyyzTXkR
	zHYRpvmfQ6G7auUd/LCgicZHXcj/HRRHRfvzUFYaYbH6/M9K2TRSKEgsY20ap9AuuM7sX0VMH9N
	zwC3kuq2l66799WAj7ShArXFuVEzKZc+k9S6KBAvGEjDuePJXvq2YGrLwlQb2dEWa5qY4L8jGSN
	WMAfSQ5QPNFJUpE3OZ9YwioWu3VWZhaIHbMlyzdkoJal1R8EGeKG8kVtswHUunPZnSbA4B4gav0
	X192FO1Sg+11SAWnkYkyGIsebwlWVKZKKy4lGbKCq40NTvr4xGV75YJEKfYEQcgI+8EG4GOqObU
	dE5//U0BwmRTogDmzhpjtv02OYT30PAkfiH/rgh/q3RlwqbomBDvusaDUSm8cqZe+iufBcb2loe
	4Uv9vWxgyZ9v/rhUsD5trqr1TiO5h027i9mvQ==
X-Received: by 2002:a17:907:2d26:b0:c2e:62af:b6fe with SMTP id a640c23a62f3a-c31a9d0eb37mr1161024466b.8.1791906012578;
        Tue, 13 Oct 2026 08:40:12 -0700 (PDT)
From: david ambu <david.preetham@citrix.com>
To: win-pv-devel@lists.xenproject.org
Cc: david ambu <david.preetham@citrix.com>
Subject: [PATCH] xeniface: fix double-free of Path in IoctlStoreAddWatch fail8 path
Date: Tue, 13 Oct 2026 16:39:15 +0100
Message-ID: <20261013153915.337-1-david.preetham@citrix.com>
X-Mailer: git-send-email 2.51.0.windows.1
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-purgate-ID: tlsNG-42698a/1791906013-A84CB9EA-DDD62510/0/0
X-purgate-type: clean
X-purgate-size: 846

Context->Path and Path point to the same buffer. On WatchAdd failure,
fail8 freed Context->Path then fell through to fail4 which freed Path
again, causing a double-free and heap corruption.

Remove the free from fail8; fail4 already handles it via the Path
variable.

Signed-off-by: david ambu <david.preetham@citrix.com>
Assisted by Claude Sonnet 4.6
---
 src/xeniface/ioctl_store.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/src/xeniface/ioctl_store.c b/src/xeniface/ioctl_store.c
index e0072f0..c3beca2 100644
--- a/src/xeniface/ioctl_store.c
+++ b/src/xeniface/ioctl_store.c
@@ -602,8 +602,6 @@ IoctlStoreAddWatch(
     return status;
 
 fail8:
-    __FreeCapturedBuffer(Context->Path);
-
     Error("Fail8\n");
     ThreadAlert(Context->Thread);
     ThreadJoin(Context->Thread);
-- 
2.51.0.windows.1



From win-pv-devel-bounces@lists.xenproject.org Wed Oct 14 06:37:31 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 14 Oct 2026 06:37:31 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1448468.1664496 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGscE-0005Us-Ll; Wed, 14 Oct 2026 06:37:30 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1448468.1664496; Wed, 14 Oct 2026 06:37:30 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGscE-0005Uk-Ia; Wed, 14 Oct 2026 06:37:30 +0000
Received: by outflank-mailman (input) for mailman id 1448468;
 Wed, 14 Oct 2026 06:37:28 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <owen.smith@citrix.com>) id 1xGscC-0005Ue-L2
 for win-pv-devel@lists.xenproject.org; Wed, 14 Oct 2026 06:37:28 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGscA-00ByXG-AS
 for win-pv-devel@lists.xenproject.org; Wed, 14 Oct 2026 08:37:26 +0200
Received: from [10.42.69.6] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6acf231f-2eae-0a2a0a5409dd-0a2a4506e46e-18
 for <win-pv-devel@lists.xenproject.org>; Wed, 14 Oct 2026 08:37:26 +0200
Received: from [40.107.209.9]
 (helo=PH8PR06CU001.outbound.protection.outlook.com)
 by tlsNG-16d1c6.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6acf2324-195a-0a2a45060019-286bd10978ff-3
 for <win-pv-devel@lists.xenproject.org>; Wed, 14 Oct 2026 08:37:25 +0200
Received: from SA6PR03MB7760.namprd03.prod.outlook.com (2603:10b6:806:43c::5)
 by SJ0PR03MB6519.namprd03.prod.outlook.com (2603:10b6:a03:38f::11)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.496.23; Wed, 14 Oct
 2026 06:37:21 +0000
Received: from SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38]) by SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38%5]) with mapi id 15.21.0522.011; Wed, 14 Oct 2026
 06:37:20 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:x-ms-exchange-senderadcheck"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
 b=NDQyU6UfdLO1k/b8BTAAPdn0dMxtyTj6bEf/G1wsvJK7J8E6k8q0ycFDXoqZgF+M62BIvJ3PbtW6c+2/gxGO+hgLvm36Rc7Ag4YFFkqOxEXT4VsgAJYA1kBk7QWanhlM1fd3CXFsYc7jYN+FMqX1kF04qkakp8/6e8dVONwVWcFlXouC0G0d9tC478BoXfjBHIWtZ9+m9ji2BR2F98TsOOqWv9MuZ/6Kigxa1qAbT0oA52R1gO9mLC3Og0H+thow251i3D91o0IXAZov6WQKgOP3YYhSU1Kh1wyBtO445WFcMsF8ROdQ19yYBaqG8K7XZGn55R4Hr/WMGy/D25IMkQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector10001;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=3rpFk7hRBckyxrGeUQCyZSPfuG7kwha7opwtqDdxkno=;
 b=O8y8za4NLGA1msbI/N9UBMOD74y14qkVobnhsPnWLlHkQk1j51l9BeUTmLVpvBHEqNOgvMz52lPabgh1gTrqrWHqdyAK0YFAY0BOcE/QDEzfqltV4XVtU1wPKb1bQSmjHgTMmo3YmdLehAIbZ8buWTILc3W/qTgQm/PLRAS9kR8ZaHZT2vLwkphhvCh4P+T3h4Ncf6vAV2QviEU+VCGohHIh7TGsJIIzkiUXUIT4AdqrBsT2ElLpzorrtYFdk+On9ehko2rJWN3VvP2rd8xQ8fdmVrakRAesggJlhkBQFfWJtkcF7iX3/LZPXnhXuiAswvS9ZK4KOCd+zzej4R2IJA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=3rpFk7hRBckyxrGeUQCyZSPfuG7kwha7opwtqDdxkno=;
 b=KPCWsFoF4+DMbaKMVx51COYkeMzCRmjR+BAudxRhYYWv3eEFWcjYTWBHXsyKNs4/wS77xyIEzxu93jQU1wlsvS686sGwkj5judsT5FnWyqZkTQwJkCZY22od5izLTbukyJ0J0+W3nFyjNniMnxcuZGADFZMZzpg3W8k+W8qg/hs=
From: Owen Smith <owen.smith@citrix.com>
To: David ambu <david.preetham@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Subject: Re: [PATCH] xeniface: fix double-free of Path in IoctlStoreAddWatch
 fail8 path
Thread-Topic: [PATCH] xeniface: fix double-free of Path in IoctlStoreAddWatch
 fail8 path
Thread-Index: AQHdWykqiaxC3KUfPEGFbUwAmUTmDLb8lmdv
Date: Wed, 14 Oct 2026 06:37:20 +0000
Message-ID:
 <SA6PR03MB776098814D8EC71BE3CEA709FE9D2@SA6PR03MB7760.namprd03.prod.outlook.com>
References: <20261013153915.337-1-david.preetham@citrix.com>
In-Reply-To: <20261013153915.337-1-david.preetham@citrix.com>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
msip_labels:
authentication-results: mx.microsoft.com 1; dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=citrix.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: SA6PR03MB7760:EE_|SJ0PR03MB6519:EE_
x-ms-office365-filtering-correlation-id: 4fbe0500-02ce-4377-e73a-08df29bd9968
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam:
 BCL:0;ARA:13230040|376014|366016|1800799024|23010399003|11063799006|38070700021|18002099003|56012099006|22082099003|261009223027099003|10067099003;
x-microsoft-antispam-message-info:
 UgOjm3I9W6esqESYg1EAmb4izM4qh4Tz3gdwR6Ni+IakMnhjx+UtC54pJFPbL08APbvEeTwpa28R8iW+eKtvEdj1sohbNmceL8+bHPrjRDHSXOrAh7/dmyge1bH1NqC61WyAc553z+IV9EOim3pdD7bmyUrit9N1Iq+DEIg6FDrZwnzfS8IMzttUmS7Ft/44Uu1FQGxKYh+Gq9+OzGbvKf5hWlr34hsoyYbu03bMb/xy4TS8n9aT4vh6//Rpm902p4LaXusOx+0urSPMyMiFu4lqWxCZmACylJfZT1WPB9KTnebW+FcNmzBg0ib0aI3/rmT/qFKawsYpQ+a1bWm5Y2aRf+qhLW44JzDnGqkUXXyKlZdbCS9r1g8nRxwpnlV06yq/UlGWEcr+/+AhICCT3cB09DZdAiYVWvkG3fDg9WSJ+Am7YNbED3yZg5yGFGrsLKnjeT8XYzCCDG355vPzrAm36ZRx4Tsx/hUxvZYXUr+3QTTD1f9bq3oTAojCUoTLnVMLXsErklwfQXrJPLKODa1NhqGSiNeH9M08lxGDX67OrIiE5cUhATSUD26VFnfcDhqXxvl+XG5AoFIJf74bqn93YWvjIbgZXPe1CMdtqcdsXfW4p7nFU8QgQUqeAdjNOSX7bEq/qZRwM1lH5lJS4Wpd+OWQKpOj3v/R5+JxcniaogjPcnhHFsH/hKe1rNw14GwVCudftX9ub8rssXdCG/IIxZgEEr2rhtNbF741QWs=
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SA6PR03MB7760.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(366016)(1800799024)(23010399003)(11063799006)(38070700021)(18002099003)(56012099006)(22082099003)(261009223027099003)(10067099003);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?us-ascii?Q?wIeN0xUyt+OPL2jQp/55Fyb1rQB1DdzEtJnho9siTAdCF/tFaYan65ewRttz?=
 =?us-ascii?Q?RzfTbNC9nT9ILNch3ypu/UPPUKnEhdEcHbLY4RguESMwemERPwhCY1x2ZKL4?=
 =?us-ascii?Q?POD40QmtqOyeii8o2V6QBWyglazLXqhIXttaudKwIpLLdBZnM2JEfJM/FIIB?=
 =?us-ascii?Q?2Sm8M+NZSmZ4+SLx+CwvaJMJwRdBX3p2rCCsGAcMPSAObJnfZDN/Eq8hUJD7?=
 =?us-ascii?Q?/yRRcvqeMGqBAWxCroOqFOLZctFtk+H644EMjEjG0wk4U4EFPQwDoi2vjRZW?=
 =?us-ascii?Q?+ufDj3C8OjoK0h+qZQXJFJzoDyghB8a+C36OesUoKodnhQ7tctNHKUALY/oP?=
 =?us-ascii?Q?sl/Y84r+L8XTxpYVG3cthqFN9y1lLgeMT3jzLDs0odUxCy8lAV/MvrMfMqUo?=
 =?us-ascii?Q?7sWIGmzkObSRRS71Cui46nkpJILHkqBrp6ztpt7jb29rMK1/0nTp2TjYbtsa?=
 =?us-ascii?Q?COS7PS4utQUyKzLuVkGEthUfGmJJI9KA10F1fGMzxaVJu5UwROrtBvBNQoH+?=
 =?us-ascii?Q?vp/BmaSYuaQv4ma9GNiYfkUmwLF9/6EendCedlOQRuboCOj8R7RYqDZckuZL?=
 =?us-ascii?Q?DOV+Ty7rpha/eGwDoqlLPsDCEUU5GxgSx+RHWOqiJuDiClkPV27oiyBpm7O4?=
 =?us-ascii?Q?GvqXRJP0WySKLUAhGtMeHN/N3DBCFKSg6vbyYrls29YU3rE9zxFnOv/Ft6yk?=
 =?us-ascii?Q?9HR5kzaA3AoWv8srBsO8nNMNgVAWs5MkVq06fhyMyiCuHZGVZbNBbzfhGJsP?=
 =?us-ascii?Q?KQpkhwDByvwhto9WVb4iIDoWnkpIinzfTF2t4jqDd5t1xDh+kcqO8zsmgeAA?=
 =?us-ascii?Q?PzzMNgfB6P183FIh80y5kKBu2pGKLBLiGTnNGxRETj1950eExRdg11W0AyCA?=
 =?us-ascii?Q?PBRduLDhCJqwuhFkPI79HQzFxAfN5rKEqS7tueaNP5DWkF6PNPeO0fABeLYr?=
 =?us-ascii?Q?j07xNdeFwkV/K/uZQk9aGKfXjpjQndKlcdCdOI6oXUOLdI1T2rwzfPUdxv87?=
 =?us-ascii?Q?aNyU3iDCGm62YdtafKbLWV6UJ+Z706T3DeQP8Ns4mw43m+VqS7kiA0988lbW?=
 =?us-ascii?Q?CP4Ff+RE9mmQwODWOe0pRrCFirY1niIwTLXmT2uOCQ4R0DwOY77UUF90xbhY?=
 =?us-ascii?Q?6Yza03jX8JB12OhxGRwzs1msqefuNSxOvjDCeQqol5gNR8EzqKr7TUoVPV5Z?=
 =?us-ascii?Q?iyLggQiUw9H9a0vYzzl//EjfcJWLuJXEgTSPVMUkYXgFvdApvBBU6R4iDVTB?=
 =?us-ascii?Q?/Y4j4N8SBPqXOh9hwZUeiIxPZS33Uyck+iPXscCxI/UY1fepG+Jz2wDkoCuf?=
 =?us-ascii?Q?xt62fML4d0D+1PV2EIy00Y1xPppLG3xyPn4i/1cAfwUhoL3OvILzzSmDfHZz?=
 =?us-ascii?Q?/Uh+LoDpbLKMsYBWrAxzYw8b78gDMhslLYxzXFBLrnJpb7k2NlFq+3Yw5P+i?=
 =?us-ascii?Q?62vtmG/EEBREd2FXz+s4nOoKl9F/tJuaorA1iCdaayjgJtrDmtcIDwZ12K5E?=
 =?us-ascii?Q?P4YIUImeyosIl4KrWlLlfcFiLTCkunzgvM6pRwZXlLsqdft/fLWi9rMe5Dvt?=
 =?us-ascii?Q?jBEYNmqJEfGruU9vIWvLfkBfBidnvhps3uVCrY/JeBNukPQnStwkdP5c5KzC?=
 =?us-ascii?Q?43FJQ/LzOcIQWptumsvPVIRfdKMd7aiAp5gxs6Wn4+QaGK7nx6l0yIb8HrX3?=
 =?us-ascii?Q?SIUJnXoEWQxdw4Pb77YagyEoVCsj60QfRbxStD3FGc2sOMET?=
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-OriginatorOrg: citrix.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: SA6PR03MB7760.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 4fbe0500-02ce-4377-e73a-08df29bd9968
X-MS-Exchange-CrossTenant-originalarrivaltime: 14 Oct 2026 06:37:20.9169
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: SG+sx4ui1FOVBqVDebEd5tESqqWTcLyE+YwduXjSy6K5CbsWuLqGPw5Ki448zMhWK1EuDL1X5Pw1ZEYXaSF5jA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR03MB6519
X-purgate-ID: tlsNG-16d1c6/1791959846-F647377B-862990A4/0/0
X-purgate-type: clean
X-purgate-size: 1234

Reviewed-by: Owen Smith <owen.smith@citrix.com>

________________________________________
From: win-pv-devel <win-pv-devel-bounces@lists.xenproject.org> on behalf of=
 david ambu <david.preetham@citrix.com>
Sent: 13 October 2026 4:39 PM
To: win-pv-devel@lists.xenproject.org
Cc: David ambu
Subject: [PATCH] xeniface: fix double-free of Path in IoctlStoreAddWatch fa=
il8 path

Context->Path and Path point to the same buffer. On WatchAdd failure,
fail8 freed Context->Path then fell through to fail4 which freed Path
again, causing a double-free and heap corruption.

Remove the free from fail8; fail4 already handles it via the Path
variable.

Signed-off-by: david ambu <david.preetham@citrix.com>
Assisted by Claude Sonnet 4.6
---
 src/xeniface/ioctl_store.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/src/xeniface/ioctl_store.c b/src/xeniface/ioctl_store.c
index e0072f0..c3beca2 100644
--- a/src/xeniface/ioctl_store.c
+++ b/src/xeniface/ioctl_store.c
@@ -602,8 +602,6 @@ IoctlStoreAddWatch(
     return status;

 fail8:
-    __FreeCapturedBuffer(Context->Path);
-
     Error("Fail8\n");
     ThreadAlert(Context->Thread);
     ThreadJoin(Context->Thread);
--
2.51.0.windows.1




From win-pv-devel-bounces@lists.xenproject.org Wed Oct 14 07:11:13 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 14 Oct 2026 07:11:13 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1448485.1664517 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGt8r-0004nS-B0; Wed, 14 Oct 2026 07:11:13 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1448485.1664517; Wed, 14 Oct 2026 07:11:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGt8r-0004nL-8R; Wed, 14 Oct 2026 07:11:13 +0000
Received: by outflank-mailman (input) for mailman id 1448485;
 Wed, 14 Oct 2026 07:11:11 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1394026d40008425@swg.vates.tech>)
 id 1xGt8p-0004nF-Fh
 for win-pv-devel@lists.xenproject.org; Wed, 14 Oct 2026 07:11:11 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGt8o-000F18-Le
 for win-pv-devel@lists.xenproject.org; Wed, 14 Oct 2026 09:11:10 +0200
Received: from [10.42.69.4] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1394026d40008425@swg.vates.tech>)
 id 6acf2b0b-e002-0a2a0a5209dd-0a2a4504e522-10
 for <win-pv-devel@lists.xenproject.org>; Wed, 14 Oct 2026 09:11:10 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-ebf023.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1394026d40008425@swg.vates.tech>)
 id 6acf2b0d-b57f-0a2a45040019-b9ff1c2280a1-3
 for <win-pv-devel@lists.xenproject.org>; Wed, 14 Oct 2026 09:11:10 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1394026d40008425.002 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Wed, 14 Oct 2026 07:11:07 +0000
Received: from [192.168.1.61] (142.220.66.37.rev.sfr.net [37.66.220.142])
 (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 15A9581D08;
 Wed, 14 Oct 2026 09:11:07 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=JptUraNkhWqkEjtDZ+zsBFlVJx7Lbm/VASRuLcotg08=;
 h=from:subject:date:message-id:to:mime-version:content-type:in-reply-to:references:feedback-id;
 b=ZN5XeCEY1ZFrFl42j+hFWnV6mCUlK6hvqEKxvv3i3UZtuagpRcdwXVFG5D7pSw15yrxcFDkIG
 RNkbS5G3XUD7rIHxU9x/Aj/RaP2UC1+joy1RYjvQpqQ6MoAIaA825XZYEnK5Tc3Gtg0O8F0ZdPy
 39LwvNNHeMju6IEfrw9xTppTmkFzdSylQnqc7cxjapLBDCX5DZndw7c3WJ6IC9koPgSqdYM5iDK
 Yllnx0GhCIWDY3hx3YrtBGJFnX/8v5ciLSrnfuS1ltmDllFNhIJUSxUHyyQsx541h10XSsf6isu
 I4lJKLUVaqCkC9l9yTlipmPYGRfBFhRzGd2qs+tuOEhg==
X-Zone-Loop: 2834cc9478b2dc8e0e648259448127615497c73c9b18
x-campaign-type: default
x-transaction-id: 0aedb519-f568-4279-91a1-4f3aaa0b1fd2
x-swg-uid: 01-22788745-74f7-463b-a2f0-e72f4af9a4eb
X-Mailer: Sweego
Message-ID:
 <1791961868.8631fc262581453bbf619ec5b2062170.1a1394026d40008425@vates.tech>
x-swg-bid: 1791961868.8631fc262581453bbf619ec5b2062170.1a1394026d40008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
Date: Wed, 14 Oct 2026 09:11:06 +0200
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH] Set SkipBytes to 0 for contiguous allocations
Content-Language: en-US
To: Owen Smith <owen.smith@citrix.com>,
 "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <1791892676.8631fc262581453bbf619ec5b2062170.1a135205d930008425@vates.tech>
 <SA6PR03MB776012959AA25E8FAFDB0C26FE9E2@SA6PR03MB7760.namprd03.prod.outlook.com>
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
In-Reply-To: <SA6PR03MB776012959AA25E8FAFDB0C26FE9E2@SA6PR03MB7760.namprd03.prod.outlook.com>
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.18d.f49ed9565ba5d8ea.1a139402385.5a512662e4a60d8=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791961867142
X-purgate-ID: tlsNG-ebf023/1791961870-51AD0B50-75486032/0/0
X-purgate-type: clean
X-purgate-size: 2249

---=Part.18d.f49ed9565ba5d8ea.1a139402385.5a512662e4a60d8=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Hi Owen,

Could you apply this to XenCons, XenHid, XenIface and XenNet as well?

Thanks,

On 13/10/2026 14:37, Owen Smith wrote:
> Reviewed-by: Owen Smith <owen=2Esmith@citrix=2Ecom>
>=20
> ________________________________________
> From: win-pv-devel <win-pv-devel-bounces@lists=2Exenproject=2Eorg> on be=
half of Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
> Sent: 13 October 2026 12:57 PM
> To: win-pv-devel@lists=2Exenproject=2Eorg
> Cc: Tu Dinh
> Subject: [PATCH] Set SkipBytes to 0 for contiguous allocations
>=20
> MmAllocatePagesForMdlEx requires that for contiguous allocations, if
> MM_ALLOCATE_REQUIRE_CONTIGUOUS_CHUNKS is set and SkipBytes is nonzero,
> then SkipBytes must be a power of two=2E Setting SkipBytes here is
> unnecessary as contiguous allocations are still possible with SkipBytes
> set to 0 anyway=2E
>=20
> Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
> ---
> To be applied to XenCons, XenHid, XenIface and XenNet as well=2E
> ---
>   src/common/util=2Eh | 3 +--
>   1 file changed, 1 insertion(+), 2 deletions(-)
>=20
> diff --git a/src/common/util=2Eh b/src/common/util=2Eh
> index 36f71f9=2E=2E9709a10 100644
> --- a/src/common/util=2Eh
> +++ b/src/common/util=2Eh
> @@ -201,13 +201,12 @@ __AllocatePages(
>=20
>       LowAddress=2EQuadPart =3D 0ull;
>       HighAddress=2EQuadPart =3D ~0ull;
> +    SkipBytes=2EQuadPart =3D 0ull;
>       TotalBytes =3D (SIZE_T)PAGE_SIZE * Count;
>=20
>       if (Contiguous) {
> -        SkipBytes=2EQuadPart =3D TotalBytes;
>           Flags =3D MM_ALLOCATE_REQUIRE_CONTIGUOUS_CHUNKS;
>       } else {
> -        SkipBytes=2EQuadPart =3D 0ull;
>           Flags =3D MM_ALLOCATE_FULLY_REQUIRED;
>       }
>=20
> --
> 2=2E55=2E0=2Ewindows=2E3
>=20
>=20
> --
> Ngoc Tu Dinh | Vates XCP-ng Developer
>=20
> XCP-ng & Xen Orchestra - Vates solutions
>=20
> web: https://vates=2Etech
>=20



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.18d.f49ed9565ba5d8ea.1a139402385.5a512662e4a60d8=---


From win-pv-devel-bounces@lists.xenproject.org Wed Oct 14 08:08:19 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 14 Oct 2026 08:08:19 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1448516.1664540 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGu26-00067d-6s; Wed, 14 Oct 2026 08:08:18 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1448516.1664540; Wed, 14 Oct 2026 08:08:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGu26-00067U-3y; Wed, 14 Oct 2026 08:08:18 +0000
Received: by outflank-mailman (input) for mailman id 1448516;
 Wed, 14 Oct 2026 08:08:17 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <owen.smith@citrix.com>) id 1xGu25-00067O-M9
 for win-pv-devel@lists.xenproject.org; Wed, 14 Oct 2026 08:08:17 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGu25-000R35-2y
 for win-pv-devel@lists.xenproject.org; Wed, 14 Oct 2026 10:08:17 +0200
Received: from [10.42.69.6] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6acf3869-8faa-0a2a0a5109dd-0a2a4506d374-44
 for <win-pv-devel@lists.xenproject.org>; Wed, 14 Oct 2026 10:08:17 +0200
Received: from [160.101.131.9] (helo=na1pdmzitismtp02.tibco.com)
 by tlsNG-16d1c6.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6acf3870-195a-0a2a45060019-a0658309bf08-3
 for <win-pv-devel@lists.xenproject.org>; Wed, 14 Oct 2026 10:08:16 +0200
Received: from mewpvdipd2033.citrite.net (unknown [10.113.48.64])
 by na1pdmzitismtp02.tibco.com (Postfix) with ESMTP id 5014385A25C8;
 Wed, 14 Oct 2026 04:07:43 -0400 (EDT)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; none
From: Owen Smith <owen.smith@citrix.com>
To: win-pv-devel@lists.xenproject.org
Cc: Owen Smith <owen.smith@citrix.com>
Subject: [PATCH xencons] Sync util.h from XenBus
Date: Wed, 14 Oct 2026 09:08:09 +0100
Message-ID: <20261014080812.1981-1-owen.smith@citrix.com>
X-Mailer: git-send-email 2.51.2.windows.1
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-purgate-ID: tlsNG-16d1c6/1791965296-F76C877B-F11B0DD4/0/0
X-purgate-type: clean
X-purgate-size: 1643

Pulls XenBus changes from:
04a0331ca73e7d32502a101724fe6972673fb910
Set SkipBytes to 0 for contiguous allocations

0cc8590c6f7e55a785c77370e80e95cb882ada70
Move TIME_* macros to util.h

Signed-off-by: Owen Smith <owen.smith@citrix.com>
---
 src/xencons/util.h | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/src/xencons/util.h b/src/xencons/util.h
index fb4134a..9709a10 100644
--- a/src/xencons/util.h
+++ b/src/xencons/util.h
@@ -30,8 +30,8 @@
  * SUCH DAMAGE.
  */
 
-#ifndef _XENCONS_UTIL_H
-#define _XENCONS_UTIL_H
+#ifndef _COMMON_UTIL_H
+#define _COMMON_UTIL_H
 
 #include <ntddk.h>
 #include <intrin.h>
@@ -41,6 +41,11 @@
 #define	P2ROUNDUP(_t, _x, _a)   \
         (-(-((_t)(_x)) & -(((_t)(_a)))))
 
+#define TIME_US(_us)            ((_us) * 10ll)
+#define TIME_MS(_ms)            (TIME_US((_ms) * 1000ll))
+#define TIME_S(_s)              (TIME_MS((_s) * 1000ll))
+#define TIME_RELATIVE(_t)       (-(_t))
+
 static FORCEINLINE LONG
 __ffs(
     _In_ unsigned long long mask
@@ -196,13 +201,12 @@ __AllocatePages(
 
     LowAddress.QuadPart = 0ull;
     HighAddress.QuadPart = ~0ull;
+    SkipBytes.QuadPart = 0ull;
     TotalBytes = (SIZE_T)PAGE_SIZE * Count;
 
     if (Contiguous) {
-        SkipBytes.QuadPart = TotalBytes;
         Flags = MM_ALLOCATE_REQUIRE_CONTIGUOUS_CHUNKS;
     } else {
-        SkipBytes.QuadPart = 0ull;
         Flags = MM_ALLOCATE_FULLY_REQUIRED;
     }
 
@@ -377,4 +381,4 @@ __tolower(
     return 'a' + Character - 'A';
 }
 
-#endif  // _XENCONS_UTIL_H
+#endif  // _COMMON_UTIL_H
-- 
2.51.2.windows.1



From win-pv-devel-bounces@lists.xenproject.org Wed Oct 14 08:08:19 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 14 Oct 2026 08:08:19 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1448517.1664544 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGu27-00068s-7v; Wed, 14 Oct 2026 08:08:19 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1448517.1664544; Wed, 14 Oct 2026 08:08:19 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGu27-00068l-58; Wed, 14 Oct 2026 08:08:19 +0000
Received: by outflank-mailman (input) for mailman id 1448517;
 Wed, 14 Oct 2026 08:08:18 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <owen.smith@citrix.com>) id 1xGu26-00067l-DH
 for win-pv-devel@lists.xenproject.org; Wed, 14 Oct 2026 08:08:18 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGu25-00BGxs-QR
 for win-pv-devel@lists.xenproject.org; Wed, 14 Oct 2026 10:08:17 +0200
Received: from [10.42.69.5] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6acf386b-2eae-0a2a0a5409dd-0a2a45059248-26
 for <win-pv-devel@lists.xenproject.org>; Wed, 14 Oct 2026 10:08:17 +0200
Received: from [160.101.131.9] (helo=na1pdmzitismtp02.tibco.com)
 by tlsNG-c201ff.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6acf3870-4cb1-0a2a45050019-a0658309d540-3
 for <win-pv-devel@lists.xenproject.org>; Wed, 14 Oct 2026 10:08:17 +0200
Received: from mewpvdipd2033.citrite.net (unknown [10.113.48.64])
 by na1pdmzitismtp02.tibco.com (Postfix) with ESMTP id 13BCE85A25CA;
 Wed, 14 Oct 2026 04:07:43 -0400 (EDT)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; none
From: Owen Smith <owen.smith@citrix.com>
To: win-pv-devel@lists.xenproject.org
Cc: Owen Smith <owen.smith@citrix.com>
Subject: [PATCH xenhid] Sync util.h from XenBus
Date: Wed, 14 Oct 2026 09:08:10 +0100
Message-ID: <20261014080812.1981-2-owen.smith@citrix.com>
X-Mailer: git-send-email 2.51.2.windows.1
In-Reply-To: <20261014080812.1981-1-owen.smith@citrix.com>
References: <20261014080812.1981-1-owen.smith@citrix.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-purgate-ID: tlsNG-c201ff/1791965297-738BE2A1-A4BDE479/0/0
X-purgate-type: clean
X-purgate-size: 2062

Pulls XenBus changes from:
04a0331ca73e7d32502a101724fe6972673fb910
Set SkipBytes to 0 for contiguous allocations

0cc8590c6f7e55a785c77370e80e95cb882ada70
Move TIME_* macros to util.h

Signed-off-by: Owen Smith <owen.smith@citrix.com>
---
 src/xenhid/util.h | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/src/xenhid/util.h b/src/xenhid/util.h
index 4f2b289..9709a10 100644
--- a/src/xenhid/util.h
+++ b/src/xenhid/util.h
@@ -30,8 +30,8 @@
  * SUCH DAMAGE.
  */
 
-#ifndef _XENHID_UTIL_H
-#define _XENHID_UTIL_H
+#ifndef _COMMON_UTIL_H
+#define _COMMON_UTIL_H
 
 #include <ntddk.h>
 #include <intrin.h>
@@ -41,6 +41,11 @@
 #define	P2ROUNDUP(_t, _x, _a)   \
         (-(-((_t)(_x)) & -(((_t)(_a)))))
 
+#define TIME_US(_us)            ((_us) * 10ll)
+#define TIME_MS(_ms)            (TIME_US((_ms) * 1000ll))
+#define TIME_S(_s)              (TIME_MS((_s) * 1000ll))
+#define TIME_RELATIVE(_t)       (-(_t))
+
 static FORCEINLINE LONG
 __ffs(
     _In_ unsigned long long mask
@@ -89,7 +94,7 @@ __CpuId(
     _Out_opt_ PULONG    EDX
     )
 {
-    int                 Value[4] = {0};
+    int         Value[4] = {0};
 
     __cpuid(Value, Leaf);
 
@@ -196,13 +201,12 @@ __AllocatePages(
 
     LowAddress.QuadPart = 0ull;
     HighAddress.QuadPart = ~0ull;
+    SkipBytes.QuadPart = 0ull;
     TotalBytes = (SIZE_T)PAGE_SIZE * Count;
 
     if (Contiguous) {
-        SkipBytes.QuadPart = TotalBytes;
         Flags = MM_ALLOCATE_REQUIRE_CONTIGUOUS_CHUNKS;
     } else {
-        SkipBytes.QuadPart = 0ull;
         Flags = MM_ALLOCATE_FULLY_REQUIRED;
     }
 
@@ -262,7 +266,7 @@ __FreePages(
     _In_ PMDL   Mdl
     )
 {
-    PUCHAR      MdlMappedSystemVa;
+    PUCHAR	MdlMappedSystemVa;
 
     ASSERT(Mdl->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA);
     MdlMappedSystemVa = Mdl->MappedSystemVa;
@@ -377,4 +381,4 @@ __tolower(
     return 'a' + Character - 'A';
 }
 
-#endif  // _XENHID_UTIL_H
+#endif  // _COMMON_UTIL_H
-- 
2.51.2.windows.1



From win-pv-devel-bounces@lists.xenproject.org Wed Oct 14 08:08:20 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 14 Oct 2026 08:08:20 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1448518.1664548 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGu28-0006Ak-9T; Wed, 14 Oct 2026 08:08:20 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1448518.1664548; Wed, 14 Oct 2026 08:08:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGu28-0006Ab-6T; Wed, 14 Oct 2026 08:08:20 +0000
Received: by outflank-mailman (input) for mailman id 1448518;
 Wed, 14 Oct 2026 08:08:19 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <owen.smith@citrix.com>) id 1xGu27-000695-EU
 for win-pv-devel@lists.xenproject.org; Wed, 14 Oct 2026 08:08:19 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGu26-00BGxs-RC
 for win-pv-devel@lists.xenproject.org; Wed, 14 Oct 2026 10:08:18 +0200
Received: from [10.42.69.5] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6acf386b-2eae-0a2a0a5409dd-0a2a45059248-30
 for <win-pv-devel@lists.xenproject.org>; Wed, 14 Oct 2026 10:08:18 +0200
Received: from [160.101.131.9] (helo=na1pdmzitismtp02.tibco.com)
 by tlsNG-c201ff.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6acf3871-4cb1-0a2a45050019-a0658309d54e-3
 for <win-pv-devel@lists.xenproject.org>; Wed, 14 Oct 2026 10:08:18 +0200
Received: from mewpvdipd2033.citrite.net (unknown [10.113.48.64])
 by na1pdmzitismtp02.tibco.com (Postfix) with ESMTP id CAFFC85A25CB;
 Wed, 14 Oct 2026 04:07:44 -0400 (EDT)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; none
From: Owen Smith <owen.smith@citrix.com>
To: win-pv-devel@lists.xenproject.org
Cc: Owen Smith <owen.smith@citrix.com>
Subject: [PATCH xeniface] Sync util.h from XenBus
Date: Wed, 14 Oct 2026 09:08:11 +0100
Message-ID: <20261014080812.1981-3-owen.smith@citrix.com>
X-Mailer: git-send-email 2.51.2.windows.1
In-Reply-To: <20261014080812.1981-1-owen.smith@citrix.com>
References: <20261014080812.1981-1-owen.smith@citrix.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-purgate-ID: tlsNG-c201ff/1791965298-720AA2A1-F2CD41CB/0/0
X-purgate-type: clean
X-purgate-size: 3231

Pulls XenBus changes from:
04a0331ca73e7d32502a101724fe6972673fb910
Set SkipBytes to 0 for contiguous allocations

0cc8590c6f7e55a785c77370e80e95cb882ada70
Move TIME_* macros to util.h

Signed-off-by: Owen Smith <owen.smith@citrix.com>
---
 src/xeniface/util.h | 42 +++++++++++++++++++++++-------------------
 1 file changed, 23 insertions(+), 19 deletions(-)

diff --git a/src/xeniface/util.h b/src/xeniface/util.h
index 79aee6d..9709a10 100644
--- a/src/xeniface/util.h
+++ b/src/xeniface/util.h
@@ -30,8 +30,8 @@
  * SUCH DAMAGE.
  */
 
-#ifndef _XENIFACE_UTIL_H
-#define _XENIFACE_UTIL_H
+#ifndef _COMMON_UTIL_H
+#define _COMMON_UTIL_H
 
 #include <ntddk.h>
 #include <intrin.h>
@@ -41,6 +41,11 @@
 #define	P2ROUNDUP(_t, _x, _a)   \
         (-(-((_t)(_x)) & -(((_t)(_a)))))
 
+#define TIME_US(_us)            ((_us) * 10ll)
+#define TIME_MS(_ms)            (TIME_US((_ms) * 1000ll))
+#define TIME_S(_s)              (TIME_MS((_s) * 1000ll))
+#define TIME_RELATIVE(_t)       (-(_t))
+
 static FORCEINLINE LONG
 __ffs(
     _In_ unsigned long long mask
@@ -108,8 +113,8 @@ __CpuId(
 
 static FORCEINLINE LONG
 __InterlockedAdd(
-    _Inout_ LONG    *Value,
-    _In_ LONG       Delta
+    _In_ LONG   *Value,
+    _In_ LONG   Delta
     )
 {
     LONG        New;
@@ -125,8 +130,8 @@ __InterlockedAdd(
 
 static FORCEINLINE LONG
 __InterlockedSubtract(
-    _Inout_ LONG    *Value,
-    _In_ LONG       Delta
+    _In_ LONG   *Value,
+    _In_ LONG   Delta
     )
 {
     LONG        New;
@@ -196,13 +201,12 @@ __AllocatePages(
 
     LowAddress.QuadPart = 0ull;
     HighAddress.QuadPart = ~0ull;
+    SkipBytes.QuadPart = 0ull;
     TotalBytes = (SIZE_T)PAGE_SIZE * Count;
 
     if (Contiguous) {
-        SkipBytes.QuadPart = TotalBytes;
         Flags = MM_ALLOCATE_REQUIRE_CONTIGUOUS_CHUNKS;
     } else {
-        SkipBytes.QuadPart = 0ull;
         Flags = MM_ALLOCATE_FULLY_REQUIRED;
     }
 
@@ -277,15 +281,15 @@ __FreePages(
 
 static FORCEINLINE PSTR
 __strtok_r(
-    _Inout_opt_ PSTR    Buffer,
-    _In_ PSTR           Delimiter,
+    _In_opt_ PSTR   Buffer,
+    _In_ PSTR       Delimiter,
     _When_(Buffer != NULL, _Outptr_)
     _When_(Buffer == NULL, _Inout_)
-    PSTR                *Context
+    PSTR            *Context
     )
 {
-    PSTR                Token;
-    PSTR                End;
+    PSTR            Token;
+    PSTR            End;
 
     if (Buffer != NULL)
         *Context = Buffer;
@@ -317,15 +321,15 @@ __strtok_r(
 
 static FORCEINLINE PWSTR
 __wcstok_r(
-    _Inout_opt_ PWSTR   Buffer,
-    _In_ PWSTR          Delimiter,
+    _In_opt_ PWSTR  Buffer,
+    _In_ PWSTR      Delimiter,
     _When_(Buffer != NULL, _Outptr_)
     _When_(Buffer == NULL, _Inout_)
-    PWSTR               *Context
+    PWSTR           *Context
     )
 {
-    PWSTR               Token;
-    PWSTR               End;
+    PWSTR           Token;
+    PWSTR           End;
 
     if (Buffer != NULL)
         *Context = Buffer;
@@ -377,4 +381,4 @@ __tolower(
     return 'a' + Character - 'A';
 }
 
-#endif  // _XENIFACE_UTIL_H
+#endif  // _COMMON_UTIL_H
-- 
2.51.2.windows.1



From win-pv-devel-bounces@lists.xenproject.org Wed Oct 14 08:08:21 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 14 Oct 2026 08:08:21 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1448519.1664551 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGu29-0006CL-AR; Wed, 14 Oct 2026 08:08:21 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1448519.1664551; Wed, 14 Oct 2026 08:08:21 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGu29-0006CE-7e; Wed, 14 Oct 2026 08:08:21 +0000
Received: by outflank-mailman (input) for mailman id 1448519;
 Wed, 14 Oct 2026 08:08:19 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <owen.smith@citrix.com>) id 1xGu27-0006AM-Rw
 for win-pv-devel@lists.xenproject.org; Wed, 14 Oct 2026 08:08:19 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGu27-000R35-8d
 for win-pv-devel@lists.xenproject.org; Wed, 14 Oct 2026 10:08:19 +0200
Received: from [10.42.69.11] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6acf386e-8faa-0a2a0a5109dd-0a2a450bd16a-34
 for <win-pv-devel@lists.xenproject.org>; Wed, 14 Oct 2026 10:08:19 +0200
Received: from [160.101.131.9] (helo=na1pdmzitismtp02.tibco.com)
 by tlsNG-42698a.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6acf3872-b7e8-0a2a450b0019-a06583099610-3
 for <win-pv-devel@lists.xenproject.org>; Wed, 14 Oct 2026 10:08:19 +0200
Received: from mewpvdipd2033.citrite.net (unknown [10.113.48.64])
 by na1pdmzitismtp02.tibco.com (Postfix) with ESMTP id 8DBB185A25C8;
 Wed, 14 Oct 2026 04:07:45 -0400 (EDT)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; none
From: Owen Smith <owen.smith@citrix.com>
To: win-pv-devel@lists.xenproject.org
Cc: Owen Smith <owen.smith@citrix.com>
Subject: [PATCH xennet] Sync util.h from XenBus
Date: Wed, 14 Oct 2026 09:08:12 +0100
Message-ID: <20261014080812.1981-4-owen.smith@citrix.com>
X-Mailer: git-send-email 2.51.2.windows.1
In-Reply-To: <20261014080812.1981-1-owen.smith@citrix.com>
References: <20261014080812.1981-1-owen.smith@citrix.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-purgate-ID: tlsNG-42698a/1791965299-1B2DC9EA-0E07EEA5/0/0
X-purgate-type: clean
X-purgate-size: 3876

Pulls XenBus changes from:
04a0331ca73e7d32502a101724fe6972673fb910
Set SkipBytes to 0 for contiguous allocations

0cc8590c6f7e55a785c77370e80e95cb882ada70
Move TIME_* macros to util.h

Signed-off-by: Owen Smith <owen.smith@citrix.com>
---
 src/xennet/util.h | 54 +++++++++++++++++++++++++----------------------
 1 file changed, 29 insertions(+), 25 deletions(-)

diff --git a/src/xennet/util.h b/src/xennet/util.h
index 59ca37e..9709a10 100644
--- a/src/xennet/util.h
+++ b/src/xennet/util.h
@@ -30,8 +30,8 @@
  * SUCH DAMAGE.
  */
 
-#ifndef _XENNET_UTIL_H
-#define _XENNET_UTIL_H
+#ifndef _COMMON_UTIL_H
+#define _COMMON_UTIL_H
 
 #include <ntddk.h>
 #include <intrin.h>
@@ -41,6 +41,11 @@
 #define	P2ROUNDUP(_t, _x, _a)   \
         (-(-((_t)(_x)) & -(((_t)(_a)))))
 
+#define TIME_US(_us)            ((_us) * 10ll)
+#define TIME_MS(_ms)            (TIME_US((_ms) * 1000ll))
+#define TIME_S(_s)              (TIME_MS((_s) * 1000ll))
+#define TIME_RELATIVE(_t)       (-(_t))
+
 static FORCEINLINE LONG
 __ffs(
     _In_ unsigned long long mask
@@ -89,7 +94,7 @@ __CpuId(
     _Out_opt_ PULONG    EDX
     )
 {
-    int                 Value[4] = {0};
+    int         Value[4] = {0};
 
     __cpuid(Value, Leaf);
 
@@ -108,12 +113,12 @@ __CpuId(
 
 static FORCEINLINE LONG
 __InterlockedAdd(
-    _Inout_ LONG    *Value,
-    _In_ LONG       Delta
+    _In_ LONG   *Value,
+    _In_ LONG   Delta
     )
 {
-    LONG            New;
-    LONG            Old;
+    LONG        New;
+    LONG        Old;
 
     do {
         Old = *Value;
@@ -125,12 +130,12 @@ __InterlockedAdd(
 
 static FORCEINLINE LONG
 __InterlockedSubtract(
-    _Inout_ LONG    *Value,
-    _In_ LONG       Delta
+    _In_ LONG   *Value,
+    _In_ LONG   Delta
     )
 {
-    LONG            New;
-    LONG            Old;
+    LONG        New;
+    LONG        Old;
 
     do {
         Old = *Value;
@@ -196,13 +201,12 @@ __AllocatePages(
 
     LowAddress.QuadPart = 0ull;
     HighAddress.QuadPart = ~0ull;
+    SkipBytes.QuadPart = 0ull;
     TotalBytes = (SIZE_T)PAGE_SIZE * Count;
 
     if (Contiguous) {
-        SkipBytes.QuadPart = TotalBytes;
         Flags = MM_ALLOCATE_REQUIRE_CONTIGUOUS_CHUNKS;
     } else {
-        SkipBytes.QuadPart = 0ull;
         Flags = MM_ALLOCATE_FULLY_REQUIRED;
     }
 
@@ -262,7 +266,7 @@ __FreePages(
     _In_ PMDL   Mdl
     )
 {
-    PUCHAR      MdlMappedSystemVa;
+    PUCHAR	MdlMappedSystemVa;
 
     ASSERT(Mdl->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA);
     MdlMappedSystemVa = Mdl->MappedSystemVa;
@@ -277,15 +281,15 @@ __FreePages(
 
 static FORCEINLINE PSTR
 __strtok_r(
-    _Inout_opt_ PSTR    Buffer,
-    _In_ PSTR           Delimiter,
+    _In_opt_ PSTR   Buffer,
+    _In_ PSTR       Delimiter,
     _When_(Buffer != NULL, _Outptr_)
     _When_(Buffer == NULL, _Inout_)
-    PSTR                *Context
+    PSTR            *Context
     )
 {
-    PSTR                Token;
-    PSTR                End;
+    PSTR            Token;
+    PSTR            End;
 
     if (Buffer != NULL)
         *Context = Buffer;
@@ -317,15 +321,15 @@ __strtok_r(
 
 static FORCEINLINE PWSTR
 __wcstok_r(
-    _Inout_opt_ PWSTR   Buffer,
-    _In_ PWSTR          Delimiter,
+    _In_opt_ PWSTR  Buffer,
+    _In_ PWSTR      Delimiter,
     _When_(Buffer != NULL, _Outptr_)
     _When_(Buffer == NULL, _Inout_)
-    PWSTR               *Context
+    PWSTR           *Context
     )
 {
-    PWSTR               Token;
-    PWSTR               End;
+    PWSTR           Token;
+    PWSTR           End;
 
     if (Buffer != NULL)
         *Context = Buffer;
@@ -377,4 +381,4 @@ __tolower(
     return 'a' + Character - 'A';
 }
 
-#endif  // _XENNET_UTIL_H
+#endif  // _COMMON_UTIL_H
-- 
2.51.2.windows.1



From win-pv-devel-bounces@lists.xenproject.org Wed Oct 14 08:17:12 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 14 Oct 2026 08:17:12 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1448561.1664573 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGuAi-0000IE-Bs; Wed, 14 Oct 2026 08:17:12 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1448561.1664573; Wed, 14 Oct 2026 08:17:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGuAi-0000I4-9E; Wed, 14 Oct 2026 08:17:12 +0000
Received: by outflank-mailman (input) for mailman id 1448561;
 Wed, 14 Oct 2026 08:17:10 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1397b99c30008425@swg.vates.tech>)
 id 1xGuAg-0000Ht-LB
 for win-pv-devel@lists.xenproject.org; Wed, 14 Oct 2026 08:17:10 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGuAf-00CMRz-L7
 for win-pv-devel@lists.xenproject.org; Wed, 14 Oct 2026 10:17:09 +0200
Received: from [10.42.69.1] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1397b99c30008425@swg.vates.tech>)
 id 6acf3a7c-e002-0a2a0a5209dd-0a2a4501c8ec-40
 for <win-pv-devel@lists.xenproject.org>; Wed, 14 Oct 2026 10:17:09 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1397b99c30008425@swg.vates.tech>)
 id 6acf3a48-5984-0a2a45010019-b9ff1c12825d-3
 for <win-pv-devel@lists.xenproject.org>; Wed, 14 Oct 2026 10:16:09 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1397b99c30008425.002 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Wed, 14 Oct 2026 08:16:04 +0000
Received: from [192.168.1.61] (142.220.66.37.rev.sfr.net [37.66.220.142])
 (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id E844F82A13;
 Wed, 14 Oct 2026 10:16:02 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=HJ7q+JG2PQFJbyu+G+WRT7rjvLtxC8WUX2e4ke8/IV0=;
 h=from:subject:date:message-id:to:mime-version:content-type:in-reply-to:references:feedback-id;
 b=LIEiJbkkym2lcr7A0BdmvERBTZ/qWGyDNseJ/xHURfVbs/r06aPt3FkLW7o6D5bU9oUQ9sLIU
 sdRk0+v5B7ndI2f5WRxqlBb4otMrlv+jvVhv+6lPnnN91uykYfxPmjGiT5zWzktyW2d+i80M2GJ
 mOIo25+xebl+7u6s4kNWKIwY97sfI8W33TR47pvjJm3A2OZtER84d49OgaBIoXB5YdGPcrCuVmA
 kly439w0fpt12qWtePpfF5pwoDH73hwVaoYFrFw0iVltludy2htBN6MQT4M4ijzr5s6CyGRIeIC
 3lPSTvht/oZ0z+F4GQUHlv138v88PkVTBOs29LpvgX4Q==
X-Zone-Loop: efb3a4549edd67c51b031aa63e11322b16f803a54e2a
x-campaign-type: default
x-transaction-id: 7603d9f1-815b-460f-8675-2edc388da793
x-swg-uid: 01-2ddbfc27-5a8c-42b4-a502-b1d30f365ee7
X-Mailer: Sweego
Message-ID:
 <1791965764.8631fc262581453bbf619ec5b2062170.1a1397b99c30008425@vates.tech>
x-swg-bid: 1791965764.8631fc262581453bbf619ec5b2062170.1a1397b99c30008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
Date: Wed, 14 Oct 2026 10:16:02 +0200
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH xencons] Sync util.h from XenBus
Content-Language: en-US
To: Owen Smith <owen.smith@citrix.com>, win-pv-devel@lists.xenproject.org
References: <20261014080812.1981-1-owen.smith@citrix.com>
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
In-Reply-To: <20261014080812.1981-1-owen.smith@citrix.com>
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.196.9b72f9931ef20bd.1a1397b95bc.5adc9e0724d07a01=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791965763005
X-purgate-ID: tlsNG-d62444/1791965769-BFA6E757-2B479A15/13/0
X-purgate-type: bulk
X-purgate-size: 2290

---=Part.196.9b72f9931ef20bd.1a1397b95bc.5adc9e0724d07a01=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

On 14/10/2026 10:08, Owen Smith wrote:
> Pulls XenBus changes from:
> 04a0331ca73e7d32502a101724fe6972673fb910
> Set SkipBytes to 0 for contiguous allocations
>=20
> 0cc8590c6f7e55a785c77370e80e95cb882ada70
> Move TIME_* macros to util=2Eh
>=20
> Signed-off-by: Owen Smith <owen=2Esmith@citrix=2Ecom>

All 4 patches:

Reviewed-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>

> ---
>   src/xencons/util=2Eh | 14 +++++++++-----
>   1 file changed, 9 insertions(+), 5 deletions(-)
>=20
> diff --git a/src/xencons/util=2Eh b/src/xencons/util=2Eh
> index fb4134a=2E=2E9709a10 100644
> --- a/src/xencons/util=2Eh
> +++ b/src/xencons/util=2Eh
> @@ -30,8 +30,8 @@
>    * SUCH DAMAGE=2E
>    */
>  =20
> -#ifndef _XENCONS_UTIL_H
> -#define _XENCONS_UTIL_H
> +#ifndef _COMMON_UTIL_H
> +#define _COMMON_UTIL_H
>  =20
>   #include <ntddk=2Eh>
>   #include <intrin=2Eh>
> @@ -41,6 +41,11 @@
>   #define	P2ROUNDUP(_t, _x, _a)   \
>           (-(-((_t)(_x)) & -(((_t)(_a)))))
>  =20
> +#define TIME_US(_us)            ((_us) * 10ll)
> +#define TIME_MS(_ms)            (TIME_US((_ms) * 1000ll))
> +#define TIME_S(_s)              (TIME_MS((_s) * 1000ll))
> +#define TIME_RELATIVE(_t)       (-(_t))
> +
>   static FORCEINLINE LONG
>   __ffs(
>       _In_ unsigned long long mask
> @@ -196,13 +201,12 @@ __AllocatePages(
>  =20
>       LowAddress=2EQuadPart =3D 0ull;
>       HighAddress=2EQuadPart =3D ~0ull;
> +    SkipBytes=2EQuadPart =3D 0ull;
>       TotalBytes =3D (SIZE_T)PAGE_SIZE * Count;
>  =20
>       if (Contiguous) {
> -        SkipBytes=2EQuadPart =3D TotalBytes;
>           Flags =3D MM_ALLOCATE_REQUIRE_CONTIGUOUS_CHUNKS;
>       } else {
> -        SkipBytes=2EQuadPart =3D 0ull;
>           Flags =3D MM_ALLOCATE_FULLY_REQUIRED;
>       }
>  =20
> @@ -377,4 +381,4 @@ __tolower(
>       return 'a' + Character - 'A';
>   }
>  =20
> -#endif  // _XENCONS_UTIL_H
> +#endif  // _COMMON_UTIL_H



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.196.9b72f9931ef20bd.1a1397b95bc.5adc9e0724d07a01=---


From win-pv-devel-bounces@lists.xenproject.org Wed Oct 14 10:11:59 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 14 Oct 2026 10:11:59 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1448682.1664741 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGvxn-0007iD-52; Wed, 14 Oct 2026 10:11:59 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1448682.1664741; Wed, 14 Oct 2026 10:11:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGvxn-0007i5-2G; Wed, 14 Oct 2026 10:11:59 +0000
Received: by outflank-mailman (input) for mailman id 1448682;
 Wed, 14 Oct 2026 10:11:57 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a139e5ab9f0008425@swg.vates.tech>)
 id 1xGvxl-0007gZ-BH
 for win-pv-devel@lists.xenproject.org; Wed, 14 Oct 2026 10:11:57 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGvxk-00Cogy-KI
 for win-pv-devel@lists.xenproject.org; Wed, 14 Oct 2026 12:11:56 +0200
Received: from [10.42.69.6] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a139e5ab9f0008425@swg.vates.tech>)
 id 6acf5567-8faa-0a2a0a5109dd-0a2a4506abfa-18
 for <win-pv-devel@lists.xenproject.org>; Wed, 14 Oct 2026 12:11:56 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-16d1c6.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a139e5ab9f0008425@swg.vates.tech>)
 id 6acf556c-195a-0a2a45060019-b9ff1c23b0b1-3
 for <win-pv-devel@lists.xenproject.org>; Wed, 14 Oct 2026 12:11:56 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a139e5ab9f0008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Wed, 14 Oct 2026 10:11:55 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 893EC80D81;
 Wed, 14 Oct 2026 12:11:54 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=L6HdAjtoWFr+MOmZE6uzdBCNdcTo8CQPf4UUg9xKccE=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:feedback-id;
 b=e9w+okaZ5Hxbq3ULx8R2+0Qxw2YkgRBYtDC4a0GGxnW3Q2dhrhHb/tJu4T8YMxQwdWfyd2aGN
 rMkAzRNLUQwJY6mX4xZAwQzGYoFoEqZt2AUwb/abLFb3/jbiTnUB+QdE9uXFZ4WdQ/bKpVWec7s
 WStvpb/HCS0dp91C6WBzWM5QqfavgNK0F4dtDZi0sydj4Uq5FDsi5ijgPRZY83YH/31pGeZz6oy
 5YN3rw5PlIQatkeBmXJstLr5hI7OQGrBgzbVGC6fh/NCCUMSEgp/HdlWa9a1i9Bj9E3qAcktEao
 U9e2VBHo48E4qHp7v8tMbP+lSYt7bTIPUKDzWDo/G9wg==
X-Zone-Loop: a68fb6b117423bb4f8a8f9fde550d9e02b6cd6982d02
x-campaign-type: default
x-transaction-id: 2675fbb0-2dbf-4542-8373-b325de86b13d
x-swg-uid: 01-fe6ec7a4-e589-4d9b-b077-5a97e4017686
X-Mailer: Sweego
Message-ID:
 <1791972715.8631fc262581453bbf619ec5b2062170.1a139e5ab9f0008425@vates.tech>
x-swg-bid: 1791972715.8631fc262581453bbf619ec5b2062170.1a139e5ab9f0008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [PATCH] Add VIF interface V11
Date: Wed, 14 Oct 2026 12:11:46 +0200
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.1b6.70fb94640de66da.1a139e5a884.63eb493a5a1a0dc2=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791972714628
X-purgate-ID: tlsNG-16d1c6/1791972716-FE87577B-19CAEC4F/0/0
X-purgate-type: clean
X-purgate-size: 10511

---=Part.1b6.70fb94640de66da.1a139e5a884.63eb493a5a1a0dc2=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

This version adds a MaxCount output to QueryRingCount that represents
the maximum number of rings supported by the current XenVif/XenNet=2E

Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 include/revision=2Eh      |  3 +-
 include/vif_interface=2Eh | 59 +++++++++++++++++++++++++++++++---
 src/xenvif/vif=2Ec        | 70 +++++++++++++++++++++++++++++++++++++++--
 3 files changed, 123 insertions(+), 9 deletions(-)

diff --git a/include/revision=2Eh b/include/revision=2Eh
index d23639f=2E=2E4e6a454 100644
--- a/include/revision=2Eh
+++ b/include/revision=2Eh
@@ -46,6 +46,7 @@
     DEFINE_REVISION(0x09000002,  2,  9,   2,  1,   1),  \
     DEFINE_REVISION(0x09000003,  2,  10,  2,  1,   1),  \
     DEFINE_REVISION(0x09000004,  2,  10,  2,  1,   2),  \
-    DEFINE_REVISION(0x09000005,  2,  10,  2,  1,   3)
+    DEFINE_REVISION(0x09000005,  2,  10,  2,  1,   3),  \
+    DEFINE_REVISION(0x09000006,  2,  11,  2,  1,   3)
=20
 #endif  // _REVISION_H
diff --git a/include/vif_interface=2Eh b/include/vif_interface=2Eh
index cc2f626=2E=2E66053a1 100644
--- a/include/vif_interface=2Eh
+++ b/include/vif_interface=2Eh
@@ -567,17 +567,32 @@ typedef NTSTATUS
     _Out_ PULONGLONG            Value
     );
=20
+/*! \typedef XENVIF_VIF_QUERY_RING_COUNT_V8
+    \brief Query the number of shared rings between frontend
+    and backend
+
+    \param Interface The interface header
+    \param Count Buffer to receive the count
+*/
+typedef VOID
+(*XENVIF_VIF_QUERY_RING_COUNT_V8)(
+    _In_ PINTERFACE Interface,
+    _Out_ PULONG    Count
+    );
+
 /*! \typedef XENVIF_VIF_QUERY_RING_COUNT
     \brief Query the number of shared rings between frontend
     and backend
=20
     \param Interface The interface header
     \param Count Buffer to receive the count
+    \param MaxCount Buffer to receive the maximum possible ring count
 */
 typedef VOID
 (*XENVIF_VIF_QUERY_RING_COUNT)(
     _In_ PINTERFACE Interface,
-    _Out_ PULONG    Count
+    _Out_ PULONG    Count,
+    _Out_ PULONG    MaxCount
     );
=20
 /*! \typedef XENVIF_VIF_UPDATE_HASH_MAPPING
@@ -900,7 +915,7 @@ struct _XENVIF_VIF_INTERFACE_V8 {
     XENVIF_VIF_ENABLE_V8                            EnableVersion8;
     XENVIF_VIF_DISABLE                              Disable;
     XENVIF_VIF_QUERY_STATISTIC                      QueryStatistic;
-    XENVIF_VIF_QUERY_RING_COUNT                     QueryRingCount;
+    XENVIF_VIF_QUERY_RING_COUNT_V8                  QueryRingCountVersion=
8;
     XENVIF_VIF_UPDATE_HASH_MAPPING                  UpdateHashMapping;
     XENVIF_VIF_RECEIVER_RETURN_PACKET               ReceiverReturnPacket;
     XENVIF_VIF_RECEIVER_SET_OFFLOAD_OPTIONS         ReceiverSetOffloadOpt=
ions;
@@ -934,7 +949,7 @@ struct _XENVIF_VIF_INTERFACE_V9 {
     XENVIF_VIF_ENABLE_V9                            EnableVersion9;
     XENVIF_VIF_DISABLE                              Disable;
     XENVIF_VIF_QUERY_STATISTIC                      QueryStatistic;
-    XENVIF_VIF_QUERY_RING_COUNT                     QueryRingCount;
+    XENVIF_VIF_QUERY_RING_COUNT_V8                  QueryRingCountVersion=
8;
     XENVIF_VIF_UPDATE_HASH_MAPPING                  UpdateHashMapping;
     XENVIF_VIF_RECEIVER_RETURN_PACKET               ReceiverReturnPacket;
     XENVIF_VIF_RECEIVER_SET_OFFLOAD_OPTIONS         ReceiverSetOffloadOpt=
ions;
@@ -962,6 +977,40 @@ struct _XENVIF_VIF_INTERFACE_V9 {
     \ingroup interfaces
 */
 struct _XENVIF_VIF_INTERFACE_V10 {
+    INTERFACE                                       Interface;
+    XENVIF_VIF_ACQUIRE                              Acquire;
+    XENVIF_VIF_RELEASE                              Release;
+    XENVIF_VIF_ENABLE                               Enable;
+    XENVIF_VIF_DISABLE                              Disable;
+    XENVIF_VIF_QUERY_STATISTIC                      QueryStatistic;
+    XENVIF_VIF_QUERY_RING_COUNT_V8                  QueryRingCountVersion=
8;
+    XENVIF_VIF_UPDATE_HASH_MAPPING                  UpdateHashMapping;
+    XENVIF_VIF_RECEIVER_RETURN_PACKET               ReceiverReturnPacket;
+    XENVIF_VIF_RECEIVER_SET_OFFLOAD_OPTIONS         ReceiverSetOffloadOpt=
ions;
+    XENVIF_VIF_RECEIVER_SET_BACKFILL_SIZE           ReceiverSetBackfillSi=
ze;
+    XENVIF_VIF_RECEIVER_QUERY_RING_SIZE             ReceiverQueryRingSize=
;
+    XENVIF_VIF_RECEIVER_SET_HASH_ALGORITHM          ReceiverSetHashAlgori=
thm;
+    XENVIF_VIF_RECEIVER_QUERY_HASH_CAPABILITIES     ReceiverQueryHashCapa=
bilities;
+    XENVIF_VIF_RECEIVER_UPDATE_HASH_PARAMETERS      ReceiverUpdateHashPar=
ameters;
+    XENVIF_VIF_TRANSMITTER_QUEUE_PACKET             TransmitterQueuePacke=
t;
+    XENVIF_VIF_TRANSMITTER_QUERY_OFFLOAD_OPTIONS    TransmitterQueryOfflo=
adOptions;
+    XENVIF_VIF_TRANSMITTER_QUERY_LARGE_PACKET_SIZE  TransmitterQueryLarge=
PacketSize;
+    XENVIF_VIF_TRANSMITTER_QUERY_RING_SIZE          TransmitterQueryRingS=
ize;
+    XENVIF_VIF_MAC_QUERY_STATE                      MacQueryState;
+    XENVIF_VIF_MAC_QUERY_MAXIMUM_FRAME_SIZE         MacQueryMaximumFrameS=
ize;
+    XENVIF_VIF_MAC_QUERY_PERMANENT_ADDRESS          MacQueryPermanentAddr=
ess;
+    XENVIF_VIF_MAC_QUERY_CURRENT_ADDRESS            MacQueryCurrentAddres=
s;
+    XENVIF_VIF_MAC_QUERY_MULTICAST_ADDRESSES        MacQueryMulticastAddr=
esses;
+    XENVIF_VIF_MAC_SET_MULTICAST_ADDRESSES          MacSetMulticastAddres=
ses;
+    XENVIF_VIF_MAC_SET_FILTER_LEVEL                 MacSetFilterLevel;
+    XENVIF_VIF_MAC_QUERY_FILTER_LEVEL               MacQueryFilterLevel;
+};
+
+/*! \struct _XENVIF_VIF_INTERFACE_V11
+    \brief VIF interface version 11
+    \ingroup interfaces
+*/
+struct _XENVIF_VIF_INTERFACE_V11 {
     INTERFACE                                       Interface;
     XENVIF_VIF_ACQUIRE                              Acquire;
     XENVIF_VIF_RELEASE                              Release;
@@ -991,7 +1040,7 @@ struct _XENVIF_VIF_INTERFACE_V10 {
     XENVIF_VIF_MAC_QUERY_FILTER_LEVEL               MacQueryFilterLevel;
 };
=20
-typedef struct _XENVIF_VIF_INTERFACE_V10 XENVIF_VIF_INTERFACE, *PXENVIF_V=
IF_INTERFACE;
+typedef struct _XENVIF_VIF_INTERFACE_V11 XENVIF_VIF_INTERFACE, *PXENVIF_V=
IF_INTERFACE;
=20
 /*! \def XENVIF_VIF
     \brief Macro at assist in method invocation
@@ -1002,6 +1051,6 @@ typedef struct _XENVIF_VIF_INTERFACE_V10 XENVIF_VIF_=
INTERFACE, *PXENVIF_VIF_INTE
 #endif  // _WINDLL
=20
 #define XENVIF_VIF_INTERFACE_VERSION_MIN    8
-#define XENVIF_VIF_INTERFACE_VERSION_MAX    10
+#define XENVIF_VIF_INTERFACE_VERSION_MAX    11
=20
 #endif  // _XENVIF_INTERFACE_H
diff --git a/src/xenvif/vif=2Ec b/src/xenvif/vif=2Ec
index 4937bb6=2E=2E4396fcc 100644
--- a/src/xenvif/vif=2Ec
+++ b/src/xenvif/vif=2Ec
@@ -536,7 +536,7 @@ done:
 }
=20
 static VOID
-VifQueryRingCount(
+VifQueryRingCountVersion8(
     _In_ PINTERFACE     Interface,
     _Out_ PULONG        Count
     )
@@ -550,6 +550,23 @@ VifQueryRingCount(
     ReleaseMrswLockShared(&Context->Lock);
 }
=20
+static VOID
+VifQueryRingCount(
+    _In_ PINTERFACE     Interface,
+    _Out_ PULONG        Count,
+    _Out_ PULONG        MaxCount
+    )
+{
+    PXENVIF_VIF_CONTEXT Context =3D Interface->Context;
+
+    AcquireMrswLockShared(&Context->Lock);
+
+    *Count =3D FrontendGetNumQueues(Context->Frontend);
+    *MaxCount =3D FrontendGetMaxQueues(Context->Frontend);
+
+    ReleaseMrswLockShared(&Context->Lock);
+}
+
 static NTSTATUS
 VifUpdateHashMapping(
     _In_ PINTERFACE         Interface,
@@ -1008,7 +1025,7 @@ static struct _XENVIF_VIF_INTERFACE_V8 VifInterfaceV=
ersion8 =3D {
     VifEnableVersion8,
     VifDisable,
     VifQueryStatistic,
-    VifQueryRingCount,
+    VifQueryRingCountVersion8,
     VifUpdateHashMapping,
     VifReceiverReturnPacket,
     VifReceiverSetOffloadOptions,
@@ -1038,7 +1055,7 @@ static struct _XENVIF_VIF_INTERFACE_V9 VifInterfaceV=
ersion9 =3D {
     VifEnableVersion9,
     VifDisable,
     VifQueryStatistic,
-    VifQueryRingCount,
+    VifQueryRingCountVersion8,
     VifUpdateHashMapping,
     VifReceiverReturnPacket,
     VifReceiverSetOffloadOptions,
@@ -1068,6 +1085,36 @@ static struct _XENVIF_VIF_INTERFACE_V10 VifInterfac=
eVersion10 =3D {
     VifEnable,
     VifDisable,
     VifQueryStatistic,
+    VifQueryRingCountVersion8,
+    VifUpdateHashMapping,
+    VifReceiverReturnPacket,
+    VifReceiverSetOffloadOptions,
+    VifReceiverSetBackfillSize,
+    VifReceiverQueryRingSize,
+    VifReceiverSetHashAlgorithm,
+    VifReceiverQueryHashCapabilities,
+    VifReceiverUpdateHashParameters,
+    VifTransmitterQueuePacket,
+    VifTransmitterQueryOffloadOptions,
+    VifTransmitterQueryLargePacketSize,
+    VifTransmitterQueryRingSize,
+    VifMacQueryState,
+    VifMacQueryMaximumFrameSize,
+    VifMacQueryPermanentAddress,
+    VifMacQueryCurrentAddress,
+    VifMacQueryMulticastAddresses,
+    VifMacSetMulticastAddresses,
+    VifMacSetFilterLevel,
+    VifMacQueryFilterLevel
+};
+
+static struct _XENVIF_VIF_INTERFACE_V11 VifInterfaceVersion11 =3D {
+    { sizeof (struct _XENVIF_VIF_INTERFACE_V11), 11, NULL, NULL, NULL },
+    VifAcquire,
+    VifRelease,
+    VifEnable,
+    VifDisable,
+    VifQueryStatistic,
     VifQueryRingCount,
     VifUpdateHashMapping,
     VifReceiverReturnPacket,
@@ -1211,6 +1258,23 @@ VifGetInterface(
         status =3D STATUS_SUCCESS;
         break;
     }
+    case 11: {
+        struct _XENVIF_VIF_INTERFACE_V11 *VifInterface;
+
+        VifInterface =3D (struct _XENVIF_VIF_INTERFACE_V11 *)Interface;
+
+        status =3D STATUS_BUFFER_OVERFLOW;
+        if (Size < sizeof (struct _XENVIF_VIF_INTERFACE_V11))
+            break;
+
+        *VifInterface =3D VifInterfaceVersion11;
+
+        ASSERT3U(Interface->Version, =3D=3D, Version);
+        Interface->Context =3D Context;
+
+        status =3D STATUS_SUCCESS;
+        break;
+    }
     default:
         status =3D STATUS_NOT_SUPPORTED;
         break;
--=20
2=2E55=2E0=2Ewindows=2E3



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.1b6.70fb94640de66da.1a139e5a884.63eb493a5a1a0dc2=---


From win-pv-devel-bounces@lists.xenproject.org Wed Oct 14 10:28:47 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 14 Oct 2026 10:28:47 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1448693.1664751 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGwE3-0001h5-F3; Wed, 14 Oct 2026 10:28:47 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1448693.1664751; Wed, 14 Oct 2026 10:28:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGwE3-0001gj-8y; Wed, 14 Oct 2026 10:28:47 +0000
Received: by outflank-mailman (input) for mailman id 1448693;
 Wed, 14 Oct 2026 10:28:46 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a139f509b70008425@swg.vates.tech>)
 id 1xGwE2-0001gF-GG
 for win-pv-devel@lists.xenproject.org; Wed, 14 Oct 2026 10:28:46 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGwE1-00Crwu-LY
 for win-pv-devel@lists.xenproject.org; Wed, 14 Oct 2026 12:28:45 +0200
Received: from [10.42.69.1] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a139f509b70008425@swg.vates.tech>)
 id 6acf5951-bab6-0a2a0a5309dd-0a2a4501bbde-26
 for <win-pv-devel@lists.xenproject.org>; Wed, 14 Oct 2026 12:28:45 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a139f509b70008425@swg.vates.tech>)
 id 6acf595d-5984-0a2a45010019-b9ff1c229341-3
 for <win-pv-devel@lists.xenproject.org>; Wed, 14 Oct 2026 12:28:45 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a139f509b70008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Wed, 14 Oct 2026 10:28:42 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 0EE8A82A79;
 Wed, 14 Oct 2026 12:28:42 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=8LZAdaIO/5qxSUxg5ngDyjpfdcvn9+fl7AVttMQF4AY=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=B7ZPv9hdNjmam4uQRVN5gYhJTZBm9mKvZRcWRAA5xLt96YrqTyACeak4K3b4KEJn04IvnR+Tp
 0yL7tXWASkQjxr1FEtHE5NvPYu9p5cwmJO/IPhYSHVG4LyCpMGQiS0vfZeizkUcDU3D+hAFljHL
 xUxdZZn3YLA2njYyGmwmGLEMh8Wtm3WyLv0p4Tc7Qr1lJjCeJ24qZ1IW1uCaIC467tD3eiedbBJ
 URLRk1I3njNZ8PU5vGOL6Gw7UwI4m+g3Oi9WYbY3G0ZUqdVD2DG1k3MnW4HN9NjtdYkzeiFgD7m
 uOfa2eu08V2GJPwC9e35nmCb5oJBb0jctKBZf7993Cag==
X-Zone-Loop: ba691c6efa84af492e5850026206c61e153d48889183
x-campaign-type: default
x-transaction-id: 112255e4-2cab-4323-954c-9f8e6d771e3c
x-swg-uid: 01-02a47e69-3f8a-414b-8ac0-f67775df4131
X-Mailer: Sweego
Message-ID:
 <1791973722.8631fc262581453bbf619ec5b2062170.1a139f509b70008425@vates.tech>
x-swg-bid: 1791973722.8631fc262581453bbf619ec5b2062170.1a139f509b70008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [PATCH 2/3] receiver: Remove dependencies on HVM_MAX_VCPUS
Date: Wed, 14 Oct 2026 12:28:23 +0200
In-Reply-To: <20261014102836.1114-1-ngoc-tu.dinh@vates.tech>
References: <1791972715.8631fc262581453bbf619ec5b2062170.1a139e5ab9f0008425@vates.tech>
 <20261014102836.1114-1-ngoc-tu.dinh@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.1bc.954edb23ce1218fc.1a139f507fe.2171c9e58cffc716=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791973722110
X-purgate-ID: tlsNG-d62444/1791973725-1EC61757-E916355F/0/0
X-purgate-type: clean
X-purgate-size: 5397

---=Part.1bc.954edb23ce1218fc.1a139f507fe.2171c9e58cffc716=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

For Receiver->GetList, XenNet can use KeQueryMaximumProcessorCountEx(
ALL_PROCESSOR_GROUPS) instead=2E

PutList is only used to replace the per-CPU GetList, so keep it as is=2E

Queue is indexed not by CPU index but by queue index, so allocate it
using the max count returned by QueryRingCount V11 instead=2E

Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
@Owen: For this patch, I've chosen an approach that doesn't involve
changing the datapath since I haven't had the time to benchmark the
changes in detail=2E I think PutList/GetList can be moved into Queue on a
later date if needed=2E
---
 src/xennet/receiver=2Ec | 59 ++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 53 insertions(+), 6 deletions(-)

diff --git a/src/xennet/receiver=2Ec b/src/xennet/receiver=2Ec
index 565d31b=2E=2Ed58f095 100644
--- a/src/xennet/receiver=2Ec
+++ b/src/xennet/receiver=2Ec
@@ -33,7 +33,6 @@
 #include <ndis=2Eh>
 #include <procgrp=2Eh>
 #include <tcpip=2Eh>
-#include <xen=2Eh>
 #include <ethernet=2Eh>

 #include "util=2Eh"
@@ -52,9 +51,11 @@ typedef struct _XENNET_RECEIVER_QUEUE {
 struct _XENNET_RECEIVER {
     PXENNET_ADAPTER             Adapter;
     NDIS_HANDLE                 NetBufferListPool;
+    ULONG                       ProcessorCount;
+    ULONG                       RingCount;
     PNET_BUFFER_LIST            PutList;
-    PNET_BUFFER_LIST            GetList[HVM_MAX_VCPUS];
-    XENNET_RECEIVER_QUEUE       Queue[HVM_MAX_VCPUS];
+    PNET_BUFFER_LIST            *GetList;
+    XENNET_RECEIVER_QUEUE       *Queue;
     LONG                        Indicated;
     LONG                        Returned;
     XENVIF_VIF_OFFLOAD_OPTIONS  OffloadOptions;
@@ -486,6 +487,7 @@ ReceiverInitialize(
     )
 {
     NET_BUFFER_LIST_POOL_PARAMETERS Params;
+    ULONG                           Dummy;
     ULONG                           Index;
     NDIS_STATUS                     status;

@@ -500,6 +502,24 @@ ReceiverInitialize(
     RtlZeroMemory(*Receiver, sizeof(XENNET_RECEIVER));
     (*Receiver)->Adapter =3D Adapter;

+    (*Receiver)->ProcessorCount =3D KeQueryMaximumProcessorCountEx(ALL_PR=
OCESSOR_GROUPS);
+    XENVIF_VIF(QueryRingCount,
+               AdapterGetVifInterface(Adapter),
+               &Dummy,
+               &(*Receiver)->RingCount);
+
+    (*Receiver)->GetList =3D __AllocatePoolWithTag(NonPagedPool,
+                                                 (*Receiver)->ProcessorCo=
unt * sizeof(PNET_BUFFER_LIST),
+                                                 RECEIVER_POOL_TAG);
+    if ((*Receiver)->GetList =3D=3D NULL)
+        goto fail2;
+
+    (*Receiver)->Queue =3D __AllocatePoolWithTag(NonPagedPool,
+                                               (*Receiver)->RingCount * s=
izeof(XENNET_RECEIVER_QUEUE),
+                                               RECEIVER_POOL_TAG);
+    if ((*Receiver)->Queue =3D=3D NULL)
+        goto fail3;
+
     RtlZeroMemory(&Params, sizeof(NET_BUFFER_LIST_POOL_PARAMETERS));
     Params=2EHeader=2EType =3D NDIS_OBJECT_TYPE_DEFAULT;
     Params=2EHeader=2ERevision =3D NET_BUFFER_LIST_POOL_PARAMETERS_REVISI=
ON_1;
@@ -514,9 +534,9 @@ ReceiverInitialize(

     status =3D NDIS_STATUS_RESOURCES;
     if ((*Receiver)->NetBufferListPool =3D=3D NULL)
-        goto fail2;
+        goto fail4;

-    for (Index =3D 0; Index < HVM_MAX_VCPUS; Index++) {
+    for (Index =3D 0; Index < (*Receiver)->RingCount; Index++) {
         PXENNET_RECEIVER_QUEUE  Queue =3D &(*Receiver)->Queue[Index];

         KeInitializeSpinLock(&Queue->Lock);
@@ -524,8 +544,29 @@ ReceiverInitialize(

     return NDIS_STATUS_SUCCESS;

+fail4:
+    Error("fail4\n");
+
+    __FreePoolWithTag((*Receiver)->Queue, RECEIVER_POOL_TAG);
+    (*Receiver)->Queue =3D NULL;
+
+fail3:
+    Error("fail3\n");
+
+    (*Receiver)->RingCount =3D 0;
+    __FreePoolWithTag((*Receiver)->GetList, RECEIVER_POOL_TAG);
+    (*Receiver)->GetList =3D NULL;
+
 fail2:
+    Error("fail2\n");
+
+    (*Receiver)->ProcessorCount =3D 0;
+    __FreePoolWithTag(*Receiver, RECEIVER_POOL_TAG);
+    *Receiver =3D NULL;
+
 fail1:
+    Error("fail1 (%08x)\n", status);
+
     return status;
 }

@@ -541,7 +582,7 @@ ReceiverTeardown(

     ASSERT3U(Receiver->Returned, =3D=3D, Receiver->Indicated);

-    for (Index =3D 0; Index < HVM_MAX_VCPUS; Index++) {
+    for (Index =3D 0; Index < Receiver->ProcessorCount; Index++) {
         NetBufferList =3D Receiver->GetList[Index];

         while (NetBufferList !=3D NULL) {
@@ -571,6 +612,12 @@ ReceiverTeardown(
     NdisFreeNetBufferListPool(Receiver->NetBufferListPool);
     Receiver->NetBufferListPool =3D NULL;

+    __FreePoolWithTag(Receiver->Queue, RECEIVER_POOL_TAG);
+    Receiver->Queue =3D NULL;
+
+    __FreePoolWithTag(Receiver->GetList, RECEIVER_POOL_TAG);
+    Receiver->GetList =3D NULL;
+
     Receiver->Adapter =3D NULL;

     __FreePoolWithTag(Receiver, RECEIVER_POOL_TAG);
--
2=2E55=2E0=2Ewindows=2E3


-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.1bc.954edb23ce1218fc.1a139f507fe.2171c9e58cffc716=---


From win-pv-devel-bounces@lists.xenproject.org Wed Oct 14 10:28:47 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 14 Oct 2026 10:28:47 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1448692.1664745 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGwE3-0001gl-C0; Wed, 14 Oct 2026 10:28:47 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1448692.1664745; Wed, 14 Oct 2026 10:28:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGwE3-0001ga-7d; Wed, 14 Oct 2026 10:28:47 +0000
Received: by outflank-mailman (input) for mailman id 1448692;
 Wed, 14 Oct 2026 10:28:46 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a139f508f30008425@swg.vates.tech>)
 id 1xGwE2-0001gE-9F
 for win-pv-devel@lists.xenproject.org; Wed, 14 Oct 2026 10:28:46 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGwE1-0049uY-Lz
 for win-pv-devel@lists.xenproject.org; Wed, 14 Oct 2026 12:28:45 +0200
Received: from [10.42.69.2] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a139f508f30008425@swg.vates.tech>)
 id 6acf5952-8faa-0a2a0a5109dd-0a2a45028356-34
 for <win-pv-devel@lists.xenproject.org>; Wed, 14 Oct 2026 12:28:45 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a139f508f30008425@swg.vates.tech>)
 id 6acf595d-6ca4-0a2a45020019-b9ff1c23a4af-3
 for <win-pv-devel@lists.xenproject.org>; Wed, 14 Oct 2026 12:28:45 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a139f508f30008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Wed, 14 Oct 2026 10:28:42 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id A713C8217C;
 Wed, 14 Oct 2026 12:28:41 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=iqF3g/bg8Oc+tih2r17pCcLFBJvZwurGDQNYTj0cVqk=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=Ukdy5TfRL3Ds23abIsBuYuKzokRryeSZrfEO3qfbXIZba46hO5y2ho+o8Jyqq0KJRZHBU/58G
 zyTqP30PMsNONYgBFInfeao9SggGrcxWtHbVkNKWos1tAjsv3+zVr7qo5JNl5mJ0gJJ+C6AYKS9
 +7ctaL4HKLW4td1cEYkeQims4o1rFu/buvdy46y/pgsK47pdqQ6Nvr9slc4dsWKYeGfozlvSv6j
 gTrts6JfImI8hlPNQ8EAe83OVNN8PeX2kQX+p1CT4P8THHNORCdBDenfIXSFLd4LcrVtUi2SWcj
 tgidE4SwOLwxAId7H8AYnd5SF1Rx+Dt9FnOSudvLqTnA==
X-Zone-Loop: f5df351e7a55a8ac19969fe84e68ab6af3bb4756ecb2
x-campaign-type: default
x-transaction-id: 13781006-77de-4504-94cc-438e25170999
x-swg-uid: 01-2a59def0-ce97-4c67-bf67-addde52041c8
X-Mailer: Sweego
Message-ID:
 <1791973722.8631fc262581453bbf619ec5b2062170.1a139f508f30008425@vates.tech>
x-swg-bid: 1791973722.8631fc262581453bbf619ec5b2062170.1a139f508f30008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [PATCH 1/3] Add definitions and usage of VIF interface V11
Date: Wed, 14 Oct 2026 12:28:22 +0200
In-Reply-To: <1791972715.8631fc262581453bbf619ec5b2062170.1a139e5ab9f0008425@vates.tech>
References: <1791972715.8631fc262581453bbf619ec5b2062170.1a139e5ab9f0008425@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.1bb.a39b2ce44155b7d6.1a139f50695.ad258cb3a0596eb9=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791973721750
X-purgate-ID: tlsNG-720697/1791973725-F1CAA2AC-D99476C8/0/0
X-purgate-type: clean
X-purgate-size: 9763

---=Part.1bb.a39b2ce44155b7d6.1a139f50695.ad258cb3a0596eb9=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Requires a non-functional change in AdapterSetGeneralAttributes to
account for the new MaxCount parameter=2E

Testing shows that an old driver with FeatureScore=3D0xFE will still
outrank a new driver with FeatureScore=3D0xFF even if its device ID no
longer matches=2E So delete the TODO line in the INF=2E

Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 include/vif_interface=2Eh | 65 ++++++++++++++++++++++++++++++++++++-----
 src/xennet=2Einf          | 14 ++++-----
 src/xennet/adapter=2Ec    |  4 ++-
 3 files changed, 66 insertions(+), 17 deletions(-)

diff --git a/include/vif_interface=2Eh b/include/vif_interface=2Eh
index 05d472e=2E=2E66053a1 100644
--- a/include/vif_interface=2Eh
+++ b/include/vif_interface=2Eh
@@ -499,9 +499,9 @@ typedef union _XENVIF_VIF_CALLBACK_PARAMETERS_V10 XENV=
IF_VIF_CALLBACK_PARAMETERS
 */
 typedef VOID
 (*XENVIF_VIF_CALLBACK)(
-    _In_opt_ PVOID                          Argument,
-    _In_ XENVIF_VIF_CALLBACK_TYPE           Type,
-    _In_ PXENVIF_VIF_CALLBACK_PARAMETERS    Parameters
+    _In_opt_ PVOID                              Argument,
+    _In_ XENVIF_VIF_CALLBACK_TYPE               Type,
+    _In_opt_ PXENVIF_VIF_CALLBACK_PARAMETERS    Parameters
     );
=20
 typedef NTSTATUS
@@ -567,17 +567,32 @@ typedef NTSTATUS
     _Out_ PULONGLONG            Value
     );
=20
+/*! \typedef XENVIF_VIF_QUERY_RING_COUNT_V8
+    \brief Query the number of shared rings between frontend
+    and backend
+
+    \param Interface The interface header
+    \param Count Buffer to receive the count
+*/
+typedef VOID
+(*XENVIF_VIF_QUERY_RING_COUNT_V8)(
+    _In_ PINTERFACE Interface,
+    _Out_ PULONG    Count
+    );
+
 /*! \typedef XENVIF_VIF_QUERY_RING_COUNT
     \brief Query the number of shared rings between frontend
     and backend
=20
     \param Interface The interface header
     \param Count Buffer to receive the count
+    \param MaxCount Buffer to receive the maximum possible ring count
 */
 typedef VOID
 (*XENVIF_VIF_QUERY_RING_COUNT)(
     _In_ PINTERFACE Interface,
-    _Out_ PULONG    Count
+    _Out_ PULONG    Count,
+    _Out_ PULONG    MaxCount
     );
=20
 /*! \typedef XENVIF_VIF_UPDATE_HASH_MAPPING
@@ -900,7 +915,7 @@ struct _XENVIF_VIF_INTERFACE_V8 {
     XENVIF_VIF_ENABLE_V8                            EnableVersion8;
     XENVIF_VIF_DISABLE                              Disable;
     XENVIF_VIF_QUERY_STATISTIC                      QueryStatistic;
-    XENVIF_VIF_QUERY_RING_COUNT                     QueryRingCount;
+    XENVIF_VIF_QUERY_RING_COUNT_V8                  QueryRingCountVersion=
8;
     XENVIF_VIF_UPDATE_HASH_MAPPING                  UpdateHashMapping;
     XENVIF_VIF_RECEIVER_RETURN_PACKET               ReceiverReturnPacket;
     XENVIF_VIF_RECEIVER_SET_OFFLOAD_OPTIONS         ReceiverSetOffloadOpt=
ions;
@@ -934,7 +949,7 @@ struct _XENVIF_VIF_INTERFACE_V9 {
     XENVIF_VIF_ENABLE_V9                            EnableVersion9;
     XENVIF_VIF_DISABLE                              Disable;
     XENVIF_VIF_QUERY_STATISTIC                      QueryStatistic;
-    XENVIF_VIF_QUERY_RING_COUNT                     QueryRingCount;
+    XENVIF_VIF_QUERY_RING_COUNT_V8                  QueryRingCountVersion=
8;
     XENVIF_VIF_UPDATE_HASH_MAPPING                  UpdateHashMapping;
     XENVIF_VIF_RECEIVER_RETURN_PACKET               ReceiverReturnPacket;
     XENVIF_VIF_RECEIVER_SET_OFFLOAD_OPTIONS         ReceiverSetOffloadOpt=
ions;
@@ -962,6 +977,40 @@ struct _XENVIF_VIF_INTERFACE_V9 {
     \ingroup interfaces
 */
 struct _XENVIF_VIF_INTERFACE_V10 {
+    INTERFACE                                       Interface;
+    XENVIF_VIF_ACQUIRE                              Acquire;
+    XENVIF_VIF_RELEASE                              Release;
+    XENVIF_VIF_ENABLE                               Enable;
+    XENVIF_VIF_DISABLE                              Disable;
+    XENVIF_VIF_QUERY_STATISTIC                      QueryStatistic;
+    XENVIF_VIF_QUERY_RING_COUNT_V8                  QueryRingCountVersion=
8;
+    XENVIF_VIF_UPDATE_HASH_MAPPING                  UpdateHashMapping;
+    XENVIF_VIF_RECEIVER_RETURN_PACKET               ReceiverReturnPacket;
+    XENVIF_VIF_RECEIVER_SET_OFFLOAD_OPTIONS         ReceiverSetOffloadOpt=
ions;
+    XENVIF_VIF_RECEIVER_SET_BACKFILL_SIZE           ReceiverSetBackfillSi=
ze;
+    XENVIF_VIF_RECEIVER_QUERY_RING_SIZE             ReceiverQueryRingSize=
;
+    XENVIF_VIF_RECEIVER_SET_HASH_ALGORITHM          ReceiverSetHashAlgori=
thm;
+    XENVIF_VIF_RECEIVER_QUERY_HASH_CAPABILITIES     ReceiverQueryHashCapa=
bilities;
+    XENVIF_VIF_RECEIVER_UPDATE_HASH_PARAMETERS      ReceiverUpdateHashPar=
ameters;
+    XENVIF_VIF_TRANSMITTER_QUEUE_PACKET             TransmitterQueuePacke=
t;
+    XENVIF_VIF_TRANSMITTER_QUERY_OFFLOAD_OPTIONS    TransmitterQueryOfflo=
adOptions;
+    XENVIF_VIF_TRANSMITTER_QUERY_LARGE_PACKET_SIZE  TransmitterQueryLarge=
PacketSize;
+    XENVIF_VIF_TRANSMITTER_QUERY_RING_SIZE          TransmitterQueryRingS=
ize;
+    XENVIF_VIF_MAC_QUERY_STATE                      MacQueryState;
+    XENVIF_VIF_MAC_QUERY_MAXIMUM_FRAME_SIZE         MacQueryMaximumFrameS=
ize;
+    XENVIF_VIF_MAC_QUERY_PERMANENT_ADDRESS          MacQueryPermanentAddr=
ess;
+    XENVIF_VIF_MAC_QUERY_CURRENT_ADDRESS            MacQueryCurrentAddres=
s;
+    XENVIF_VIF_MAC_QUERY_MULTICAST_ADDRESSES        MacQueryMulticastAddr=
esses;
+    XENVIF_VIF_MAC_SET_MULTICAST_ADDRESSES          MacSetMulticastAddres=
ses;
+    XENVIF_VIF_MAC_SET_FILTER_LEVEL                 MacSetFilterLevel;
+    XENVIF_VIF_MAC_QUERY_FILTER_LEVEL               MacQueryFilterLevel;
+};
+
+/*! \struct _XENVIF_VIF_INTERFACE_V11
+    \brief VIF interface version 11
+    \ingroup interfaces
+*/
+struct _XENVIF_VIF_INTERFACE_V11 {
     INTERFACE                                       Interface;
     XENVIF_VIF_ACQUIRE                              Acquire;
     XENVIF_VIF_RELEASE                              Release;
@@ -991,7 +1040,7 @@ struct _XENVIF_VIF_INTERFACE_V10 {
     XENVIF_VIF_MAC_QUERY_FILTER_LEVEL               MacQueryFilterLevel;
 };
=20
-typedef struct _XENVIF_VIF_INTERFACE_V10 XENVIF_VIF_INTERFACE, *PXENVIF_V=
IF_INTERFACE;
+typedef struct _XENVIF_VIF_INTERFACE_V11 XENVIF_VIF_INTERFACE, *PXENVIF_V=
IF_INTERFACE;
=20
 /*! \def XENVIF_VIF
     \brief Macro at assist in method invocation
@@ -1002,6 +1051,6 @@ typedef struct _XENVIF_VIF_INTERFACE_V10 XENVIF_VIF_=
INTERFACE, *PXENVIF_VIF_INTE
 #endif  // _WINDLL
=20
 #define XENVIF_VIF_INTERFACE_VERSION_MIN    8
-#define XENVIF_VIF_INTERFACE_VERSION_MAX    10
+#define XENVIF_VIF_INTERFACE_VERSION_MAX    11
=20
 #endif  // _XENVIF_INTERFACE_H
diff --git a/src/xennet=2Einf b/src/xennet=2Einf
index 79730e8=2E=2E49a1733 100644
--- a/src/xennet=2Einf
+++ b/src/xennet=2Einf
@@ -56,15 +56,15 @@ xennet=2Esys
=20
 [Inst=2ENT@INF_ARCH@]
 %XenNetName%=3DXenNet_Inst,\
-XENVIF\VEN_@VENDOR_PREFIX@@VENDOR_DEVICE_ID@&DEV_NET&REV_09000005,\
-XENVIF\VEN_@VENDOR_PREFIX@0001&DEV_NET&REV_09000005,\
-XENVIF\VEN_@VENDOR_PREFIX@0002&DEV_NET&REV_09000005
+XENVIF\VEN_@VENDOR_PREFIX@@VENDOR_DEVICE_ID@&DEV_NET&REV_09000006,\
+XENVIF\VEN_@VENDOR_PREFIX@0001&DEV_NET&REV_09000006,\
+XENVIF\VEN_@VENDOR_PREFIX@0002&DEV_NET&REV_09000006
=20
 [Inst=2ENT@INF_ARCH@=2E10=2E0=2E=2E=2E25398]
 %XenNetName%=3DXenNet_Inst_25H2,\
-XENVIF\VEN_@VENDOR_PREFIX@@VENDOR_DEVICE_ID@&DEV_NET&REV_09000005,\
-XENVIF\VEN_@VENDOR_PREFIX@0001&DEV_NET&REV_09000005,\
-XENVIF\VEN_@VENDOR_PREFIX@0002&DEV_NET&REV_09000005
+XENVIF\VEN_@VENDOR_PREFIX@@VENDOR_DEVICE_ID@&DEV_NET&REV_09000006,\
+XENVIF\VEN_@VENDOR_PREFIX@0001&DEV_NET&REV_09000006,\
+XENVIF\VEN_@VENDOR_PREFIX@0002&DEV_NET&REV_09000006
=20
 [XenNet_Inst]=20
 Characteristics=3D0x84
@@ -74,7 +74,6 @@ BusType=3D1
 *PhysicalMediaType=3D14	; NdisPhysicalMedium802_3
 CopyFiles=3DXenNet_Copyfiles
 AddReg=3DXennet_Inst_AddReg
-; TODO: Remove during next PDO version bump
 FeatureScore=3D0xFE
=20
 [XenNet_Inst_25H2]
@@ -85,7 +84,6 @@ BusType=3D1
 *PhysicalMediaType=3D14	; NdisPhysicalMedium802_3
 CopyFiles=3DXenNet_Copyfiles
 AddReg=3DXennet_Inst_AddReg
-; TODO: Remove during next PDO version bump
 FeatureScore=3D0xFE
=20
 [XenNet_Inst_AddReg]=20
diff --git a/src/xennet/adapter=2Ec b/src/xennet/adapter=2Ec
index 965315d=2E=2Ec7fbe44 100644
--- a/src/xennet/adapter=2Ec
+++ b/src/xennet/adapter=2Ec
@@ -3001,6 +3001,7 @@ AdapterSetGeneralAttributes(
     ULONG                                       Types;
     NDIS_RECEIVE_SCALE_CAPABILITIES             Rss;
     NDIS_STATUS                                 ndisStatus;
+    ULONG                                       MaxRingCount;
     NTSTATUS                                    status;
=20
     RtlZeroMemory(&Adapter->Capabilities, sizeof(Adapter->Capabilities));
@@ -3110,7 +3111,8 @@ AdapterSetGeneralAttributes(
=20
     XENVIF_VIF(QueryRingCount,
                &Adapter->VifInterface,
-               &Rss=2ENumberOfReceiveQueues);
+               &Rss=2ENumberOfReceiveQueues,
+               &MaxRingCount);
     Rss=2ENumberOfInterruptMessages =3D Rss=2ENumberOfReceiveQueues;
=20
     if ((ULONG)Adapter->Properties=2Enumrssqueues < Rss=2ENumberOfReceive=
Queues)
--=20
2=2E55=2E0=2Ewindows=2E3



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.1bb.a39b2ce44155b7d6.1a139f50695.ad258cb3a0596eb9=---


From win-pv-devel-bounces@lists.xenproject.org Wed Oct 14 10:28:48 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 14 Oct 2026 10:28:48 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1448695.1664753 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGwE4-0001jT-E1; Wed, 14 Oct 2026 10:28:48 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1448695.1664753; Wed, 14 Oct 2026 10:28:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGwE4-0001jK-B1; Wed, 14 Oct 2026 10:28:48 +0000
Received: by outflank-mailman (input) for mailman id 1448695;
 Wed, 14 Oct 2026 10:28:47 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a139f50b4c0008425@swg.vates.tech>)
 id 1xGwE2-0001gL-OW
 for win-pv-devel@lists.xenproject.org; Wed, 14 Oct 2026 10:28:47 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGwE2-003PY6-5L
 for win-pv-devel@lists.xenproject.org; Wed, 14 Oct 2026 12:28:46 +0200
Received: from [10.42.69.6] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a139f50b4c0008425@swg.vates.tech>)
 id 6acf594f-2eae-0a2a0a5409dd-0a2a4506c916-38
 for <win-pv-devel@lists.xenproject.org>; Wed, 14 Oct 2026 12:28:46 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-16d1c6.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a139f50b4c0008425@swg.vates.tech>)
 id 6acf595d-195a-0a2a45060019-b9ff1c228ea1-3
 for <win-pv-devel@lists.xenproject.org>; Wed, 14 Oct 2026 12:28:45 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a139f50b4c0008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Wed, 14 Oct 2026 10:28:42 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 3FABD82B1B;
 Wed, 14 Oct 2026 12:28:42 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=TxqPYUuDWN4NnECnfF35tw4VDDb+RlJMbXNLd4kZX3o=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=mozXCtpl8Ya4atnb+L7BD4apykShhDX+WSCCOjqZXsTCp5cixgZyO2UmgGmCynFptMPD93qjU
 e0xtbmqvmVXy77YiiFhIBqu4umEH1NKTJXJqeyPg0PxAhKuuCT5oc5TQ8Ktt6YngJlIXUx/Po+G
 4Ah4UuAh2+DfFw2EGI8+HGI5XRfPUcFNWlr/SCvbUKCsvv6vnbtaMCWtwRsewJ6yJFP4l6QRzFr
 1mNWAV7Vg1kr4RJ9tG1yn+GrZXE/tvPM0Q5+2Msw4ltDZOMLnU2/ad4mscK20K6nNHeuOxw6gaD
 BYrqP5EJIf9a9xMurRPkwXZeSDfAO/6W/fntNZoLBKKQ==
X-Zone-Loop: 3b7471d02da72687ff1d99c959c811734f112bbd3ad2
x-campaign-type: default
x-transaction-id: 6e4bec4b-50f9-444a-a6f8-0b96de95cbc7
x-swg-uid: 01-f520edd4-7065-414b-be75-b88d6e169728
X-Mailer: Sweego
Message-ID:
 <1791973723.8631fc262581453bbf619ec5b2062170.1a139f50b4c0008425@vates.tech>
x-swg-bid: 1791973723.8631fc262581453bbf619ec5b2062170.1a139f50b4c0008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [PATCH 3/3] Remove Xen headers
Date: Wed, 14 Oct 2026 12:28:24 +0200
In-Reply-To: <20261014102836.1114-1-ngoc-tu.dinh@vates.tech>
References: <1791972715.8631fc262581453bbf619ec5b2062170.1a139e5ab9f0008425@vates.tech>
 <20261014102836.1114-1-ngoc-tu.dinh@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.1bd.82cfeb874111ddef.1a139f50914.8615136935272d19=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791973722389
X-purgate-ID: tlsNG-16d1c6/1791973726-F7ECC4DB-EB013244/0/0
X-purgate-type: clean
X-purgate-size: 89840

---=Part.1bd.82cfeb874111ddef.1a139f50914.8615136935272d19=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

As a pure NDIS driver, XenNet doesn't need Xen headers at all=2E

Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 get_xen_headers=2Epy                       |  74 --
 include/xen-types=2Eh                      |  59 --
 include/xen-version=2Eh                    |  38 -
 include/xen-warnings=2Eh                   |  43 -
 include/xen=2Eh                            |  44 -
 include/xen/public/arch-x86/xen-x86_32=2Eh | 169 ----
 include/xen/public/arch-x86/xen-x86_64=2Eh | 202 -----
 include/xen/public/arch-x86/xen=2Eh        | 338 --------
 include/xen/public/hvm/hvm_info_table=2Eh  |  74 --
 include/xen/public/xen-compat=2Eh          |  44 -
 include/xen/public/xen=2Eh                 | 995 -----------------------
 11 files changed, 2080 deletions(-)
 delete mode 100644 get_xen_headers=2Epy
 delete mode 100644 include/xen-types=2Eh
 delete mode 100644 include/xen-version=2Eh
 delete mode 100644 include/xen-warnings=2Eh
 delete mode 100644 include/xen=2Eh
 delete mode 100644 include/xen/public/arch-x86/xen-x86_32=2Eh
 delete mode 100644 include/xen/public/arch-x86/xen-x86_64=2Eh
 delete mode 100644 include/xen/public/arch-x86/xen=2Eh
 delete mode 100644 include/xen/public/hvm/hvm_info_table=2Eh
 delete mode 100644 include/xen/public/xen-compat=2Eh
 delete mode 100644 include/xen/public/xen=2Eh

diff --git a/get_xen_headers=2Epy b/get_xen_headers=2Epy
deleted file mode 100644
index 2d4d0f6=2E=2E0000000
--- a/get_xen_headers=2Epy
+++ /dev/null
@@ -1,74 +0,0 @@
-#!python -u
-
-import os, sys
-import shutil
-import subprocess
-import re
-
-def shell(command, dir =3D '=2E'):
-    print("in '%s' execute '%s'" % (dir, ' '=2Ejoin(command)))
-    sys=2Estdout=2Eflush()
-
-    sub =3D subprocess=2EPopen(' '=2Ejoin(command), cwd=3Ddir,
-                           stdout=3Dsubprocess=2EPIPE,
-                           stderr=3Dsubprocess=2ESTDOUT)
-
-    for line in sub=2Estdout:
-        print(line=2Edecode(sys=2Egetdefaultencoding())=2Erstrip())
-
-    sub=2Ewait()
-
-    return sub=2Ereturncode
-
-def get_repo(url, working):
-    shell(['git', 'clone', '--no-checkout', url, working])
-
-def get_branch(tag, working):
-    shell(['git', 'checkout', '-b', 'tmp', tag], working)
-
-def put_branch(working):
-    shell(['git', 'checkout', 'master'], working)
-    shell(['git', 'branch', '-d', 'tmp'], working)
-
-def copy_file(working, dir, name):
-    try:
-        os=2Emakedirs('include\\xen\\%s' % dir)
-    except OSError:
-        None
-
-    src =3D open('%s\\xen\\include\\%s\\%s' % (working, dir, name), 'r')
-    dst =3D open('include\\xen\\%s\\%s' % (dir, name), 'w', newline=3D'\n=
')
-
-    print(name)
-
-    for line in src:
-        line =3D re=2Esub(' unsigned long', ' ULONG_PTR', line)
-        line =3D re=2Esub('\(unsigned long', '(ULONG_PTR', line)
-        line =3D re=2Esub(' long', ' LONG_PTR', line)
-        line =3D re=2Esub('\(long', '(LONG_PTR', line)
-        dst=2Ewrite(line)
-
-    dst=2Eclose()
-    src=2Eclose()
-
-if __name__ =3D=3D '__main__':
-    tag =3D sys=2Eargv[1]
-    working =3D sys=2Eargv[2]
-
-    get_repo('git://xenbits=2Exen=2Eorg/xen=2Egit', working)
-    get_branch(tag, working)
-
-    shell(['git', 'rm', '-r', '-f', 'xen'], 'include')
-
-    copy_file(working, 'public', 'xen=2Eh')
-    copy_file(working, 'public', 'xen-compat=2Eh')
-
-    copy_file(working, 'public\\arch-x86', 'xen=2Eh')
-    copy_file(working, 'public\\arch-x86', 'xen-x86_32=2Eh')
-    copy_file(working, 'public\\arch-x86', 'xen-x86_64=2Eh')
-
-    copy_file(working, 'public\\hvm', 'hvm_info_table=2Eh')
-
-    put_branch(working)
-
-    shell(['git', 'add', 'xen'], 'include')
diff --git a/include/xen-types=2Eh b/include/xen-types=2Eh
deleted file mode 100644
index b618af2=2E=2E0000000
--- a/include/xen-types=2Eh
+++ /dev/null
@@ -1,59 +0,0 @@
-/* Copyright (c) Xen Project=2E
- * Copyright (c) Cloud Software Group, Inc=2E
- * All rights reserved=2E
- *
- * Redistribution and use in source and binary forms,
- * with or without modification, are permitted provided
- * that the following conditions are met:
- *
- * *   Redistributions of source code must retain the above
- *     copyright notice, this list of conditions and the
- *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above
- *     copyright notice, this list of conditions and the
- *     following disclaimer in the documentation and/or other
- *     materials provided with the distribution=2E
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE=2E
- */
-
-#ifndef _XEN_TYPES_H
-#define _XEN_TYPES_H
-
-#include <ntddk=2Eh>
-
-// Define types necessary to include xen headers
-
-typedef CHAR    int8_t;
-typedef SHORT   int16_t;
-typedef LONG    int32_t;
-typedef LONG64  int64_t;
-
-typedef UCHAR   uint8_t;
-typedef USHORT  uint16_t;
-typedef ULONG   uint32_t;
-typedef ULONG64 uint64_t;
-
-#define xen_mb()    KeMemoryBarrier()
-#if defined(_M_IX86) || defined(_M_X64)
-#define xen_wmb()   KeMemoryBarrierWithoutFence()
-#define xen_rmb()   KeMemoryBarrierWithoutFence()
-#else
-#define xen_wmb()   KeMemoryBarrier()
-#define xen_rmb()   KeMemoryBarrier()
-#endif
-
-#endif  // _XEN_TYPES_H
diff --git a/include/xen-version=2Eh b/include/xen-version=2Eh
deleted file mode 100644
index 224ca88=2E=2E0000000
--- a/include/xen-version=2Eh
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Copyright (c) Xen Project=2E
- * Copyright (c) Cloud Software Group, Inc=2E
- * All rights reserved=2E
- *
- * Redistribution and use in source and binary forms,
- * with or without modification, are permitted provided
- * that the following conditions are met:
- *
- * *   Redistributions of source code must retain the above
- *     copyright notice, this list of conditions and the
- *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above
- *     copyright notice, this list of conditions and the
- *     following disclaimer in the documentation and/or other
- *     materials provided with the distribution=2E
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE=2E
- */
-
-#ifndef _XEN_VERSION_H
-#define _XEN_VERSION_H
-
-#define __XEN_INTERFACE_VERSION__ __XEN_LATEST_INTERFACE_VERSION__
-
-#endif  // _XEN_VERSION_H
diff --git a/include/xen-warnings=2Eh b/include/xen-warnings=2Eh
deleted file mode 100644
index 30c0f7d=2E=2E0000000
--- a/include/xen-warnings=2Eh
+++ /dev/null
@@ -1,43 +0,0 @@
-/* Copyright (c) Xen Project=2E
- * Copyright (c) Cloud Software Group, Inc=2E
- * All rights reserved=2E
- *
- * Redistribution and use in source and binary forms,
- * with or without modification, are permitted provided
- * that the following conditions are met:
- *
- * *   Redistributions of source code must retain the above
- *     copyright notice, this list of conditions and the
- *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above
- *     copyright notice, this list of conditions and the
- *     following disclaimer in the documentation and/or other
- *     materials provided with the distribution=2E
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE=2E
- */
-
-#ifndef _XEN_WARNINGS_H
-#define _XEN_WARNINGS_H
-
-#include <ntddk=2Eh>
-
-// Disable warnings necessary to include xen headers
-
-# pragma warning(disable:4214) // nonstandard extension used : bit field =
types other than int
-# pragma warning(disable:4200) // nonstandard extension used : zero-sized=
 array in struct/union
-
-#endif  // _XEN_WARNINGS_H
diff --git a/include/xen=2Eh b/include/xen=2Eh
deleted file mode 100644
index 2cee266=2E=2E0000000
--- a/include/xen=2Eh
+++ /dev/null
@@ -1,44 +0,0 @@
-/* Copyright (c) Xen Project=2E
- * Copyright (c) Cloud Software Group, Inc=2E
- * All rights reserved=2E
- *
- * Redistribution and use in source and binary forms,
- * with or without modification, are permitted provided
- * that the following conditions are met:
- *
- * *   Redistributions of source code must retain the above
- *     copyright notice, this list of conditions and the
- *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above
- *     copyright notice, this list of conditions and the
- *     following disclaimer in the documentation and/or other
- *     materials provided with the distribution=2E
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE=2E
- */
-
-#ifndef _XEN_H
-#define _XEN_H
-
-#include <ntddk=2Eh>
-
-#include <xen-version=2Eh>
-#include <xen-types=2Eh>
-#include <xen-warnings=2Eh>
-
-#include <public/hvm/hvm_info_table=2Eh>
-
-#endif  // _XEN_H
diff --git a/include/xen/public/arch-x86/xen-x86_32=2Eh b/include/xen/publ=
ic/arch-x86/xen-x86_32=2Eh
deleted file mode 100644
index d23340b=2E=2E0000000
--- a/include/xen/public/arch-x86/xen-x86_32=2Eh
+++ /dev/null
@@ -1,169 +0,0 @@
-/************************************************************************=
******
- * xen-x86_32=2Eh
- *
- * Guest OS interface to x86 32-bit Xen=2E
- *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
- * Copyright (c) 2004-2007, K A Fraser
- */
-
-#ifndef __XEN_PUBLIC_ARCH_X86_XEN_X86_32_H__
-#define __XEN_PUBLIC_ARCH_X86_XEN_X86_32_H__
-
-/*
- * Hypercall interface:
- *  Input:  %ebx, %ecx, %edx, %esi, %edi, %ebp (arguments 1-6)
- *  Output: %eax
- * Access is via hypercall page (set up by guest loader or via a Xen MSR)=
:
- *  call hypercall_page + hypercall-number * 32
- * Clobbered: Argument registers (e=2Eg=2E, 2-arg hypercall clobbers %ebx=
,%ecx)
- */
-
-/*
- * These flat segments are in the Xen-private section of every GDT=2E Sin=
ce these
- * are also present in the initial GDT, many OSes will be able to avoid
- * installing their own GDT=2E
- */
-#define FLAT_RING1_CS 0xe019    /* GDT index 259 */
-#define FLAT_RING1_DS 0xe021    /* GDT index 260 */
-#define FLAT_RING1_SS 0xe021    /* GDT index 260 */
-#define FLAT_RING3_CS 0xe02b    /* GDT index 261 */
-#define FLAT_RING3_DS 0xe033    /* GDT index 262 */
-#define FLAT_RING3_SS 0xe033    /* GDT index 262 */
-
-#define FLAT_KERNEL_CS FLAT_RING1_CS
-#define FLAT_KERNEL_DS FLAT_RING1_DS
-#define FLAT_KERNEL_SS FLAT_RING1_SS
-#define FLAT_USER_CS    FLAT_RING3_CS
-#define FLAT_USER_DS    FLAT_RING3_DS
-#define FLAT_USER_SS    FLAT_RING3_SS
-
-#define __HYPERVISOR_VIRT_START_PAE    0xF5800000
-#define __MACH2PHYS_VIRT_START_PAE     0xF5800000
-#define __MACH2PHYS_VIRT_END_PAE       0xF6800000
-#define HYPERVISOR_VIRT_START_PAE      xen_mk_ulong(__HYPERVISOR_VIRT_STA=
RT_PAE)
-#define MACH2PHYS_VIRT_START_PAE       xen_mk_ulong(__MACH2PHYS_VIRT_STAR=
T_PAE)
-#define MACH2PHYS_VIRT_END_PAE         xen_mk_ulong(__MACH2PHYS_VIRT_END_=
PAE)
-
-/* Non-PAE bounds are obsolete=2E */
-#define __HYPERVISOR_VIRT_START_NONPAE 0xFC000000
-#define __MACH2PHYS_VIRT_START_NONPAE  0xFC000000
-#define __MACH2PHYS_VIRT_END_NONPAE    0xFC400000
-#define HYPERVISOR_VIRT_START_NONPAE   \
-    xen_mk_ulong(__HYPERVISOR_VIRT_START_NONPAE)
-#define MACH2PHYS_VIRT_START_NONPAE    \
-    xen_mk_ulong(__MACH2PHYS_VIRT_START_NONPAE)
-#define MACH2PHYS_VIRT_END_NONPAE      \
-    xen_mk_ulong(__MACH2PHYS_VIRT_END_NONPAE)
-
-#define __HYPERVISOR_VIRT_START __HYPERVISOR_VIRT_START_PAE
-#define __MACH2PHYS_VIRT_START  __MACH2PHYS_VIRT_START_PAE
-#define __MACH2PHYS_VIRT_END    __MACH2PHYS_VIRT_END_PAE
-
-#ifndef HYPERVISOR_VIRT_START
-#define HYPERVISOR_VIRT_START xen_mk_ulong(__HYPERVISOR_VIRT_START)
-#endif
-
-#define MACH2PHYS_VIRT_START  xen_mk_ulong(__MACH2PHYS_VIRT_START)
-#define MACH2PHYS_VIRT_END    xen_mk_ulong(__MACH2PHYS_VIRT_END)
-#define MACH2PHYS_NR_ENTRIES  ((MACH2PHYS_VIRT_END-MACH2PHYS_VIRT_START)>=
>2)
-#ifndef machine_to_phys_mapping
-#define machine_to_phys_mapping ((ULONG_PTR *)MACH2PHYS_VIRT_START)
-#endif
-
-/* 32-/64-bit invariability for control interfaces (domctl/sysctl)=2E */
-#if defined(__XEN__) || defined(__XEN_TOOLS__)
-#undef ___DEFINE_XEN_GUEST_HANDLE
-#define ___DEFINE_XEN_GUEST_HANDLE(name, type)                  \
-    typedef struct { type *p; }                                 \
-        __guest_handle_ ## name;                                \
-    typedef struct { union { type *p; uint64_aligned_t q; }; }  \
-        __guest_handle_64_ ## name
-#undef set_xen_guest_handle_raw
-#define set_xen_guest_handle_raw(hnd, val)                  \
-    do { if ( sizeof(hnd) =3D=3D 8 ) *(uint64_t *)&(hnd) =3D 0;   \
-         (hnd)=2Ep =3D val;                                     \
-    } while ( 0 )
-#define  int64_aligned_t  int64_t __attribute__((aligned(8)))
-#define uint64_aligned_t uint64_t __attribute__((aligned(8)))
-#define __XEN_GUEST_HANDLE_64(name) __guest_handle_64_ ## name
-#define XEN_GUEST_HANDLE_64(name) __XEN_GUEST_HANDLE_64(name)
-#endif
-
-#ifndef __ASSEMBLY__
-
-struct cpu_user_regs {
-    uint32_t ebx;
-    uint32_t ecx;
-    uint32_t edx;
-    uint32_t esi;
-    uint32_t edi;
-    uint32_t ebp;
-    uint32_t eax;
-    uint16_t error_code;    /* private */
-    uint16_t entry_vector;  /* private */
-    uint32_t eip;
-    uint16_t cs;
-    uint8_t  saved_upcall_mask;
-    uint8_t  _pad0;
-    uint32_t eflags;        /* eflags=2EIF =3D=3D !saved_upcall_mask */
-    uint32_t esp;
-    uint16_t ss, _pad1;
-    uint16_t es, _pad2;
-    uint16_t ds, _pad3;
-    uint16_t fs, _pad4;
-    uint16_t gs, _pad5;
-};
-typedef struct cpu_user_regs cpu_user_regs_t;
-DEFINE_XEN_GUEST_HANDLE(cpu_user_regs_t);
-
-/*
- * Page-directory addresses above 4GB do not fit into architectural %cr3=
=2E
- * When accessing %cr3, or equivalent field in vcpu_guest_context, guests
- * must use the following accessor macros to pack/unpack valid MFNs=2E
- */
-#define xen_pfn_to_cr3(pfn) (((unsigned)(pfn) << 12) | ((unsigned)(pfn) >=
> 20))
-#define xen_cr3_to_pfn(cr3) (((unsigned)(cr3) >> 12) | ((unsigned)(cr3) <=
< 20))
-
-struct arch_vcpu_info {
-    ULONG_PTR cr2;
-    ULONG_PTR pad[5]; /* sizeof(vcpu_info_t) =3D=3D 64 */
-};
-typedef struct arch_vcpu_info arch_vcpu_info_t;
-
-struct xen_callback {
-    ULONG_PTR cs;
-    ULONG_PTR eip;
-};
-typedef struct xen_callback xen_callback_t;
-
-#endif /* !__ASSEMBLY__ */
-
-#endif /* __XEN_PUBLIC_ARCH_X86_XEN_X86_32_H__ */
-
-/*
- * Local variables:
- * mode: C
- * c-file-style: "BSD"
- * c-basic-offset: 4
- * tab-width: 4
- * indent-tabs-mode: nil
- * End:
- */
diff --git a/include/xen/public/arch-x86/xen-x86_64=2Eh b/include/xen/publ=
ic/arch-x86/xen-x86_64=2Eh
deleted file mode 100644
index 2f53f69=2E=2E0000000
--- a/include/xen/public/arch-x86/xen-x86_64=2Eh
+++ /dev/null
@@ -1,202 +0,0 @@
-/************************************************************************=
******
- * xen-x86_64=2Eh
- *
- * Guest OS interface to x86 64-bit Xen=2E
- *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
- * Copyright (c) 2004-2006, K A Fraser
- */
-
-#ifndef __XEN_PUBLIC_ARCH_X86_XEN_X86_64_H__
-#define __XEN_PUBLIC_ARCH_X86_XEN_X86_64_H__
-
-/*
- * Hypercall interface:
- *  Input:  %rdi, %rsi, %rdx, %r10, %r8, %r9 (arguments 1-6)
- *  Output: %rax
- * Access is via hypercall page (set up by guest loader or via a Xen MSR)=
:
- *  call hypercall_page + hypercall-number * 32
- * Clobbered: argument registers (e=2Eg=2E, 2-arg hypercall clobbers %rdi=
,%rsi)
- */
-
-/*
- * 64-bit segment selectors
- * These flat segments are in the Xen-private section of every GDT=2E Sin=
ce these
- * are also present in the initial GDT, many OSes will be able to avoid
- * installing their own GDT=2E
- */
-
-#define FLAT_RING3_CS32 0xe023  /* GDT index 260 */
-#define FLAT_RING3_CS64 0xe033  /* GDT index 261 */
-#define FLAT_RING3_DS32 0xe02b  /* GDT index 262 */
-#define FLAT_RING3_DS64 0x0000  /* NULL selector */
-#define FLAT_RING3_SS32 0xe02b  /* GDT index 262 */
-#define FLAT_RING3_SS64 0xe02b  /* GDT index 262 */
-
-#define FLAT_KERNEL_DS64 FLAT_RING3_DS64
-#define FLAT_KERNEL_DS32 FLAT_RING3_DS32
-#define FLAT_KERNEL_DS   FLAT_KERNEL_DS64
-#define FLAT_KERNEL_CS64 FLAT_RING3_CS64
-#define FLAT_KERNEL_CS32 FLAT_RING3_CS32
-#define FLAT_KERNEL_CS   FLAT_KERNEL_CS64
-#define FLAT_KERNEL_SS64 FLAT_RING3_SS64
-#define FLAT_KERNEL_SS32 FLAT_RING3_SS32
-#define FLAT_KERNEL_SS   FLAT_KERNEL_SS64
-
-#define FLAT_USER_DS64 FLAT_RING3_DS64
-#define FLAT_USER_DS32 FLAT_RING3_DS32
-#define FLAT_USER_DS   FLAT_USER_DS64
-#define FLAT_USER_CS64 FLAT_RING3_CS64
-#define FLAT_USER_CS32 FLAT_RING3_CS32
-#define FLAT_USER_CS   FLAT_USER_CS64
-#define FLAT_USER_SS64 FLAT_RING3_SS64
-#define FLAT_USER_SS32 FLAT_RING3_SS32
-#define FLAT_USER_SS   FLAT_USER_SS64
-
-#define __HYPERVISOR_VIRT_START 0xFFFF800000000000
-#define __HYPERVISOR_VIRT_END   0xFFFF880000000000
-#define __MACH2PHYS_VIRT_START  0xFFFF800000000000
-#define __MACH2PHYS_VIRT_END    0xFFFF804000000000
-
-#ifndef HYPERVISOR_VIRT_START
-#define HYPERVISOR_VIRT_START xen_mk_ulong(__HYPERVISOR_VIRT_START)
-#define HYPERVISOR_VIRT_END   xen_mk_ulong(__HYPERVISOR_VIRT_END)
-#endif
-
-#define MACH2PHYS_VIRT_START  xen_mk_ulong(__MACH2PHYS_VIRT_START)
-#define MACH2PHYS_VIRT_END    xen_mk_ulong(__MACH2PHYS_VIRT_END)
-#define MACH2PHYS_NR_ENTRIES  ((MACH2PHYS_VIRT_END-MACH2PHYS_VIRT_START)>=
>3)
-#ifndef machine_to_phys_mapping
-#define machine_to_phys_mapping ((ULONG_PTR *)HYPERVISOR_VIRT_START)
-#endif
-
-/*
- * int HYPERVISOR_set_segment_base(unsigned int which, ULONG_PTR base)
- *  @which =3D=3D SEGBASE_*  ;  @base =3D=3D 64-bit base address
- * Returns 0 on success=2E
- */
-#define SEGBASE_FS          0
-#define SEGBASE_GS_USER     1
-#define SEGBASE_GS_KERNEL   2
-#define SEGBASE_GS_USER_SEL 3 /* Set user %gs specified in base[15:0] */
-
-/*
- * int HYPERVISOR_iret(void)
- * All arguments are on the kernel stack, in the following format=2E
- * Never returns if successful=2E Current kernel context is lost=2E
- * The saved CS is mapped as follows:
- *   RING0 -> RING3 kernel mode=2E
- *   RING1 -> RING3 kernel mode=2E
- *   RING2 -> RING3 kernel mode=2E
- *   RING3 -> RING3 user mode=2E
- * However RING0 indicates that the guest kernel should return to iteself
- * directly with
- *      orb   $3,1*8(%rsp)
- *      iretq
- * If flags contains VGCF_in_syscall:
- *   Restore RAX, RIP, RFLAGS, RSP=2E
- *   Discard R11, RCX, CS, SS=2E
- * Otherwise:
- *   Restore RAX, R11, RCX, CS:RIP, RFLAGS, SS:RSP=2E
- * All other registers are saved on hypercall entry and restored to user=
=2E
- */
-/* Guest exited in SYSCALL context? Return to guest with SYSRET? */
-#define _VGCF_in_syscall 8
-#define VGCF_in_syscall  (1<<_VGCF_in_syscall)
-#define VGCF_IN_SYSCALL  VGCF_in_syscall
-
-#ifndef __ASSEMBLY__
-
-struct iret_context {
-    /* Top of stack (%rsp at point of hypercall)=2E */
-    uint64_t rax, r11, rcx, flags, rip, cs, rflags, rsp, ss;
-    /* Bottom of iret stack frame=2E */
-};
-
-#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
-/* Anonymous union includes both 32- and 64-bit names (e=2Eg=2E, eax/rax)=
=2E */
-#define __DECL_REG(name) union { \
-    uint64_t r ## name, e ## name; \
-    uint32_t _e ## name; \
-}
-#else
-/* Non-gcc sources must always use the proper 64-bit name (e=2Eg=2E, rax)=
=2E */
-#define __DECL_REG(name) uint64_t r ## name
-#endif
-
-struct cpu_user_regs {
-    uint64_t r15;
-    uint64_t r14;
-    uint64_t r13;
-    uint64_t r12;
-    __DECL_REG(bp);
-    __DECL_REG(bx);
-    uint64_t r11;
-    uint64_t r10;
-    uint64_t r9;
-    uint64_t r8;
-    __DECL_REG(ax);
-    __DECL_REG(cx);
-    __DECL_REG(dx);
-    __DECL_REG(si);
-    __DECL_REG(di);
-    uint32_t error_code;    /* private */
-    uint32_t entry_vector;  /* private */
-    __DECL_REG(ip);
-    uint16_t cs, _pad0[1];
-    uint8_t  saved_upcall_mask;
-    uint8_t  _pad1[3];
-    __DECL_REG(flags);      /* rflags=2EIF =3D=3D !saved_upcall_mask */
-    __DECL_REG(sp);
-    uint16_t ss, _pad2[3];
-    uint16_t es, _pad3[3];
-    uint16_t ds, _pad4[3];
-    uint16_t fs, _pad5[3]; /* Non-zero =3D> takes precedence over fs_base=
=2E     */
-    uint16_t gs, _pad6[3]; /* Non-zero =3D> takes precedence over gs_base=
_usr=2E */
-};
-typedef struct cpu_user_regs cpu_user_regs_t;
-DEFINE_XEN_GUEST_HANDLE(cpu_user_regs_t);
-
-#undef __DECL_REG
-
-#define xen_pfn_to_cr3(pfn) ((ULONG_PTR)(pfn) << 12)
-#define xen_cr3_to_pfn(cr3) ((ULONG_PTR)(cr3) >> 12)
-
-struct arch_vcpu_info {
-    ULONG_PTR cr2;
-    ULONG_PTR pad; /* sizeof(vcpu_info_t) =3D=3D 64 */
-};
-typedef struct arch_vcpu_info arch_vcpu_info_t;
-
-typedef ULONG_PTR xen_callback_t;
-
-#endif /* !__ASSEMBLY__ */
-
-#endif /* __XEN_PUBLIC_ARCH_X86_XEN_X86_64_H__ */
-
-/*
- * Local variables:
- * mode: C
- * c-file-style: "BSD"
- * c-basic-offset: 4
- * tab-width: 4
- * indent-tabs-mode: nil
- * End:
- */
diff --git a/include/xen/public/arch-x86/xen=2Eh b/include/xen/public/arch=
-x86/xen=2Eh
deleted file mode 100644
index 05db77f=2E=2E0000000
--- a/include/xen/public/arch-x86/xen=2Eh
+++ /dev/null
@@ -1,338 +0,0 @@
-/************************************************************************=
******
- * arch-x86/xen=2Eh
- *
- * Guest OS interface to x86 Xen=2E
- *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
- * Copyright (c) 2004-2006, K A Fraser
- */
-
-#include "=2E=2E/xen=2Eh"
-
-#ifndef __XEN_PUBLIC_ARCH_X86_XEN_H__
-#define __XEN_PUBLIC_ARCH_X86_XEN_H__
-
-/* Structural guest handles introduced in 0x00030201=2E */
-#if __XEN_INTERFACE_VERSION__ >=3D 0x00030201
-#define ___DEFINE_XEN_GUEST_HANDLE(name, type) \
-    typedef struct { type *p; } __guest_handle_ ## name
-#else
-#define ___DEFINE_XEN_GUEST_HANDLE(name, type) \
-    typedef type * __guest_handle_ ## name
-#endif
-
-/*
- * XEN_GUEST_HANDLE represents a guest pointer, when passed as a field
- * in a struct in memory=2E
- * XEN_GUEST_HANDLE_PARAM represent a guest pointer, when passed as an
- * hypercall argument=2E
- * XEN_GUEST_HANDLE_PARAM and XEN_GUEST_HANDLE are the same on X86 but
- * they might not be on other architectures=2E
- */
-#define __DEFINE_XEN_GUEST_HANDLE(name, type) \
-    ___DEFINE_XEN_GUEST_HANDLE(name, type);   \
-    ___DEFINE_XEN_GUEST_HANDLE(const_##name, const type)
-#define DEFINE_XEN_GUEST_HANDLE(name)   __DEFINE_XEN_GUEST_HANDLE(name, n=
ame)
-#define __XEN_GUEST_HANDLE(name)        __guest_handle_ ## name
-#define XEN_GUEST_HANDLE(name)          __XEN_GUEST_HANDLE(name)
-#define XEN_GUEST_HANDLE_PARAM(name)    XEN_GUEST_HANDLE(name)
-#define set_xen_guest_handle_raw(hnd, val)  do { (hnd)=2Ep =3D val; } whi=
le (0)
-#define set_xen_guest_handle(hnd, val) set_xen_guest_handle_raw(hnd, val)
-
-#if defined(__i386__)
-#include "xen-x86_32=2Eh"
-#elif defined(__x86_64__)
-#include "xen-x86_64=2Eh"
-#endif
-
-#ifndef __ASSEMBLY__
-typedef ULONG_PTR xen_pfn_t;
-#define PRI_xen_pfn "lx"
-#endif
-
-#define XEN_HAVE_PV_GUEST_ENTRY 1
-
-#define XEN_HAVE_PV_UPCALL_MASK 1
-
-/*
- * `incontents 200 segdesc Segment Descriptor Tables
- */
-/*
- * ` enum neg_errnoval
- * ` HYPERVISOR_set_gdt(const xen_pfn_t frames[], unsigned int entries);
- * `
- */
-/*
- * A number of GDT entries are reserved by Xen=2E These are not situated =
at the
- * start of the GDT because some stupid OSes export hard-coded selector v=
alues
- * in their ABI=2E These hard-coded values are always near the start of t=
he GDT,
- * so Xen places itself out of the way, at the far end of the GDT=2E
- *
- * NB The LDT is set using the MMUEXT_SET_LDT op of HYPERVISOR_mmuext_op
- */
-#define FIRST_RESERVED_GDT_PAGE  14
-#define FIRST_RESERVED_GDT_BYTE  (FIRST_RESERVED_GDT_PAGE * 4096)
-#define FIRST_RESERVED_GDT_ENTRY (FIRST_RESERVED_GDT_BYTE / 8)
-
-
-/*
- * ` enum neg_errnoval
- * ` HYPERVISOR_update_descriptor(u64 pa, u64 desc);
- * `
- * ` @pa   The machine physical address of the descriptor to
- * `       update=2E Must be either a descriptor page or writable=2E
- * ` @desc The descriptor value to update, in the same format as a
- * `       native descriptor table entry=2E
- */
-
-/* Maximum number of virtual CPUs in legacy multi-processor guests=2E */
-#define XEN_LEGACY_MAX_VCPUS 32
-
-#ifndef __ASSEMBLY__
-
-typedef ULONG_PTR xen_ulong_t;
-#define PRI_xen_ulong "lx"
-
-/*
- * ` enum neg_errnoval
- * ` HYPERVISOR_stack_switch(ULONG_PTR ss, ULONG_PTR esp);
- * `
- * Sets the stack segment and pointer for the current vcpu=2E
- */
-
-/*
- * ` enum neg_errnoval
- * ` HYPERVISOR_set_trap_table(const struct trap_info traps[]);
- * `
- */
-/*
- * Send an array of these to HYPERVISOR_set_trap_table()=2E
- * Terminate the array with a sentinel entry, with traps[]=2Eaddress=3D=
=3D0=2E
- * The privilege level specifies which modes may enter a trap via a softw=
are
- * interrupt=2E On x86/64, since rings 1 and 2 are unavailable, we alloca=
te
- * privilege levels as follows:
- *  Level =3D=3D 0: Noone may enter
- *  Level =3D=3D 1: Kernel may enter
- *  Level =3D=3D 2: Kernel may enter
- *  Level =3D=3D 3: Everyone may enter
- */
-#define TI_GET_DPL(_ti)      ((_ti)->flags & 3)
-#define TI_GET_IF(_ti)       ((_ti)->flags & 4)
-#define TI_SET_DPL(_ti,_dpl) ((_ti)->flags |=3D (_dpl))
-#define TI_SET_IF(_ti,_if)   ((_ti)->flags |=3D ((!!(_if))<<2))
-struct trap_info {
-    uint8_t       vector;  /* exception vector                           =
   */
-    uint8_t       flags;   /* 0-3: privilege level; 4: clear event enable=
?  */
-    uint16_t      cs;      /* code selector                              =
   */
-    ULONG_PTR address; /* code offset                                   *=
/
-};
-typedef struct trap_info trap_info_t;
-DEFINE_XEN_GUEST_HANDLE(trap_info_t);
-
-typedef uint64_t tsc_timestamp_t; /* RDTSC timestamp */
-
-/*
- * The following is all CPU context=2E Note that the fpu_ctxt block is fi=
lled
- * in by FXSAVE if the CPU has feature FXSR; otherwise FSAVE is used=2E
- *
- * Also note that when calling DOMCTL_setvcpucontext and VCPU_initialise
- * for HVM and PVH guests, not all information in this structure is updat=
ed:
- *
- * - For HVM guests, the structures read include: fpu_ctxt (if
- * VGCT_I387_VALID is set), flags, user_regs, debugreg[*]
- *
- * - PVH guests are the same as HVM guests, but additionally use ctrlreg[=
3] to
- * set cr3=2E All other fields not used should be set to 0=2E
- */
-struct vcpu_guest_context {
-    /* FPU registers come first so they can be aligned for FXSAVE/FXRSTOR=
=2E */
-    struct { char x[512]; } fpu_ctxt;       /* User-level FPU registers  =
   */
-#define VGCF_I387_VALID                (1<<0)
-#define VGCF_IN_KERNEL                 (1<<2)
-#define _VGCF_i387_valid               0
-#define VGCF_i387_valid                (1<<_VGCF_i387_valid)
-#define _VGCF_in_kernel                2
-#define VGCF_in_kernel                 (1<<_VGCF_in_kernel)
-#define _VGCF_failsafe_disables_events 3
-#define VGCF_failsafe_disables_events  (1<<_VGCF_failsafe_disables_events=
)
-#define _VGCF_syscall_disables_events  4
-#define VGCF_syscall_disables_events   (1<<_VGCF_syscall_disables_events)
-#define _VGCF_online                   5
-#define VGCF_online                    (1<<_VGCF_online)
-    ULONG_PTR flags;                    /* VGCF_* flags                 *=
/
-    struct cpu_user_regs user_regs;         /* User-level CPU registers  =
   */
-    struct trap_info trap_ctxt[256];        /* Virtual IDT               =
   */
-    ULONG_PTR ldt_base, ldt_ents;       /* LDT (linear address, # ents) *=
/
-    ULONG_PTR gdt_frames[16], gdt_ents; /* GDT (machine frames, # ents) *=
/
-    ULONG_PTR kernel_ss, kernel_sp;     /* Virtual TSS (only SS1/SP1)   *=
/
-    /* NB=2E User pagetable on x86/64 is placed in ctrlreg[1]=2E */
-    ULONG_PTR ctrlreg[8];               /* CR0-CR7 (control registers)  *=
/
-    ULONG_PTR debugreg[8];              /* DB0-DB7 (debug registers)    *=
/
-#ifdef __i386__
-    ULONG_PTR event_callback_cs;        /* CS:EIP of event callback     *=
/
-    ULONG_PTR event_callback_eip;
-    ULONG_PTR failsafe_callback_cs;     /* CS:EIP of failsafe callback  *=
/
-    ULONG_PTR failsafe_callback_eip;
-#else
-    ULONG_PTR event_callback_eip;
-    ULONG_PTR failsafe_callback_eip;
-#ifdef __XEN__
-    union {
-        ULONG_PTR syscall_callback_eip;
-        struct {
-            unsigned int event_callback_cs;    /* compat CS of event cb  =
   */
-            unsigned int failsafe_callback_cs; /* compat CS of failsafe c=
b  */
-        };
-    };
-#else
-    ULONG_PTR syscall_callback_eip;
-#endif
-#endif
-    ULONG_PTR vm_assist;                /* VMASST_TYPE_* bitmap */
-#ifdef __x86_64__
-    /* Segment base addresses=2E */
-    uint64_t      fs_base;
-    uint64_t      gs_base_kernel;
-    uint64_t      gs_base_user;
-#endif
-};
-typedef struct vcpu_guest_context vcpu_guest_context_t;
-DEFINE_XEN_GUEST_HANDLE(vcpu_guest_context_t);
-
-struct arch_shared_info {
-    /*
-     * Number of valid entries in the p2m table(s) anchored at
-     * pfn_to_mfn_frame_list_list and/or p2m_vaddr=2E
-     */
-    ULONG_PTR max_pfn;
-    /*
-     * Frame containing list of mfns containing list of mfns containing p=
2m=2E
-     * A value of 0 indicates it has not yet been set up, ~0 indicates it=
 has
-     * been set to invalid e=2Eg=2E due to the p2m being too large for th=
e 3-level
-     * p2m tree=2E In this case the linear mapper p2m list anchored at p2=
m_vaddr
-     * is to be used=2E
-     */
-    xen_pfn_t     pfn_to_mfn_frame_list_list;
-    ULONG_PTR nmi_reason;
-    /*
-     * Following three fields are valid if p2m_cr3 contains a value diffe=
rent
-     * from 0=2E
-     * p2m_cr3 is the root of the address space where p2m_vaddr is valid=
=2E
-     * p2m_cr3 is in the same format as a cr3 value in the vcpu register =
state
-     * and holds the folded machine frame number (via xen_pfn_to_cr3) of =
a
-     * L3 or L4 page table=2E
-     * p2m_vaddr holds the virtual address of the linear p2m list=2E All =
entries
-     * in the range [0=2E=2E=2Emax_pfn[ are accessible via this pointer=
=2E
-     * p2m_generation will be incremented by the guest before and after e=
ach
-     * change of the mappings of the p2m list=2E p2m_generation starts at=
 0 and
-     * a value with the least significant bit set indicates that a mappin=
g
-     * update is in progress=2E This allows guest external software (e=2E=
g=2E in Dom0)
-     * to verify that read mappings are consistent and whether they have =
changed
-     * since the last check=2E
-     * Modifying a p2m element in the linear p2m list is allowed via an a=
tomic
-     * write only=2E
-     */
-    ULONG_PTR p2m_cr3;         /* cr3 value of the p2m address space */
-    ULONG_PTR p2m_vaddr;       /* virtual address of the p2m list */
-    ULONG_PTR p2m_generation;  /* generation count of p2m mapping */
-#ifdef __i386__
-    /* There's no room for this field in the generic structure=2E */
-    uint32_t wc_sec_hi;
-#endif
-};
-typedef struct arch_shared_info arch_shared_info_t;
-
-#if defined(__XEN__) || defined(__XEN_TOOLS__)
-/*
- * struct xen_arch_domainconfig's ABI is covered by
- * XEN_DOMCTL_INTERFACE_VERSION=2E
- */
-struct xen_arch_domainconfig {
-#define _XEN_X86_EMU_LAPIC          0
-#define XEN_X86_EMU_LAPIC           (1U<<_XEN_X86_EMU_LAPIC)
-#define _XEN_X86_EMU_HPET           1
-#define XEN_X86_EMU_HPET            (1U<<_XEN_X86_EMU_HPET)
-#define _XEN_X86_EMU_PM             2
-#define XEN_X86_EMU_PM              (1U<<_XEN_X86_EMU_PM)
-#define _XEN_X86_EMU_RTC            3
-#define XEN_X86_EMU_RTC             (1U<<_XEN_X86_EMU_RTC)
-#define _XEN_X86_EMU_IOAPIC         4
-#define XEN_X86_EMU_IOAPIC          (1U<<_XEN_X86_EMU_IOAPIC)
-#define _XEN_X86_EMU_PIC            5
-#define XEN_X86_EMU_PIC             (1U<<_XEN_X86_EMU_PIC)
-#define _XEN_X86_EMU_VGA            6
-#define XEN_X86_EMU_VGA             (1U<<_XEN_X86_EMU_VGA)
-#define _XEN_X86_EMU_IOMMU          7
-#define XEN_X86_EMU_IOMMU           (1U<<_XEN_X86_EMU_IOMMU)
-#define _XEN_X86_EMU_PIT            8
-#define XEN_X86_EMU_PIT             (1U<<_XEN_X86_EMU_PIT)
-
-#define XEN_X86_EMU_ALL             (XEN_X86_EMU_LAPIC | XEN_X86_EMU_HPET=
 |  \
-                                     XEN_X86_EMU_PM | XEN_X86_EMU_RTC |  =
    \
-                                     XEN_X86_EMU_IOAPIC | XEN_X86_EMU_PIC=
 |  \
-                                     XEN_X86_EMU_VGA | XEN_X86_EMU_IOMMU =
|   \
-                                     XEN_X86_EMU_PIT)
-    uint32_t emulation_flags;
-};
-#endif
-
-#endif /* !__ASSEMBLY__ */
-
-/*
- * ` enum neg_errnoval
- * ` HYPERVISOR_fpu_taskswitch(int set);
- * `
- * Sets (if set!=3D0) or clears (if set=3D=3D0) CR0=2ETS=2E
- */
-
-/*
- * ` enum neg_errnoval
- * ` HYPERVISOR_set_debugreg(int regno, ULONG_PTR value);
- *
- * ` ULONG_PTR
- * ` HYPERVISOR_get_debugreg(int regno);
- * For 0<=3Dreg<=3D7, returns the debug register value=2E
- * For other values of reg, returns ((ULONG_PTR)-EINVAL)=2E
- * (Unfortunately, this interface is defective=2E)
- */
-
-/*
- * Prefix forces emulation of some non-trapping instructions=2E
- * Currently only CPUID=2E
- */
-#ifdef __ASSEMBLY__
-#define XEN_EMULATE_PREFIX =2Ebyte 0x0f,0x0b,0x78,0x65,0x6e ;
-#define XEN_CPUID          XEN_EMULATE_PREFIX cpuid
-#else
-#define XEN_EMULATE_PREFIX "=2Ebyte 0x0f,0x0b,0x78,0x65,0x6e ; "
-#define XEN_CPUID          XEN_EMULATE_PREFIX "cpuid"
-#endif
-
-#endif /* __XEN_PUBLIC_ARCH_X86_XEN_H__ */
-
-/*
- * Local variables:
- * mode: C
- * c-file-style: "BSD"
- * c-basic-offset: 4
- * tab-width: 4
- * indent-tabs-mode: nil
- * End:
- */
diff --git a/include/xen/public/hvm/hvm_info_table=2Eh b/include/xen/publi=
c/hvm/hvm_info_table=2Eh
deleted file mode 100644
index a92e8f7=2E=2E0000000
--- a/include/xen/public/hvm/hvm_info_table=2Eh
+++ /dev/null
@@ -1,74 +0,0 @@
-/************************************************************************=
******
- * hvm/hvm_info_table=2Eh
- *
- * HVM parameter and information table, written into guest memory map=2E
- *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
- * Copyright (c) 2006, Keir Fraser
- */
-
-#ifndef __XEN_PUBLIC_HVM_HVM_INFO_TABLE_H__
-#define __XEN_PUBLIC_HVM_HVM_INFO_TABLE_H__
-
-#define HVM_INFO_PFN         0x09F
-#define HVM_INFO_OFFSET      0x800
-#define HVM_INFO_PADDR       ((HVM_INFO_PFN << 12) + HVM_INFO_OFFSET)
-
-/* Maximum we can support with current vLAPIC ID mapping=2E */
-#define HVM_MAX_VCPUS        128
-
-struct hvm_info_table {
-    char        signature[8]; /* "HVM INFO" */
-    uint32_t    length;
-    uint8_t     checksum;
-
-    /* Should firmware build APIC descriptors (APIC MADT / MP BIOS)? */
-    uint8_t     apic_mode;
-
-    /* How many CPUs does this domain have? */
-    uint32_t    nr_vcpus;
-
-    /*
-     * MEMORY MAP provided by HVM domain builder=2E
-     * Notes:
-     *  1=2E page_to_phys(x) =3D x << 12
-     *  2=2E If a field is zero, the corresponding range does not exist=
=2E
-     */
-    /*
-     *  0x0 to page_to_phys(low_mem_pgend)-1:
-     *    RAM below 4GB (except for VGA hole 0xA0000-0xBFFFF)
-     */
-    uint32_t    low_mem_pgend;
-    /*
-     *  page_to_phys(reserved_mem_pgstart) to 0xFFFFFFFF:
-     *    Reserved for special memory mappings
-     */
-    uint32_t    reserved_mem_pgstart;
-    /*
-     *  0x100000000 to page_to_phys(high_mem_pgend)-1:
-     *    RAM above 4GB
-     */
-    uint32_t    high_mem_pgend;
-
-    /* Bitmap of which CPUs are online at boot time=2E */
-    uint8_t     vcpu_online[(HVM_MAX_VCPUS + 7)/8];
-};
-
-#endif /* __XEN_PUBLIC_HVM_HVM_INFO_TABLE_H__ */
diff --git a/include/xen/public/xen-compat=2Eh b/include/xen/public/xen-co=
mpat=2Eh
deleted file mode 100644
index 2eea0e2=2E=2E0000000
--- a/include/xen/public/xen-compat=2Eh
+++ /dev/null
@@ -1,44 +0,0 @@
-/************************************************************************=
******
- * xen-compat=2Eh
- *
- * Guest OS interface to Xen=2E  Compatibility layer=2E
- *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
- * Copyright (c) 2006, Christian Limpach
- */
-
-#ifndef __XEN_PUBLIC_XEN_COMPAT_H__
-#define __XEN_PUBLIC_XEN_COMPAT_H__
-
-#define __XEN_LATEST_INTERFACE_VERSION__ 0x00040700
-
-#if defined(__XEN__) || defined(__XEN_TOOLS__)
-/* Xen is built with matching headers and implements the latest interface=
=2E */
-#define __XEN_INTERFACE_VERSION__ __XEN_LATEST_INTERFACE_VERSION__
-#elif !defined(__XEN_INTERFACE_VERSION__)
-/* Guests which do not specify a version get the legacy interface=2E */
-#define __XEN_INTERFACE_VERSION__ 0x00000000
-#endif
-
-#if __XEN_INTERFACE_VERSION__ > __XEN_LATEST_INTERFACE_VERSION__
-#error "These header files do not support the requested interface version=
=2E"
-#endif
-
-#endif /* __XEN_PUBLIC_XEN_COMPAT_H__ */
diff --git a/include/xen/public/xen=2Eh b/include/xen/public/xen=2Eh
deleted file mode 100644
index 2057b52=2E=2E0000000
--- a/include/xen/public/xen=2Eh
+++ /dev/null
@@ -1,995 +0,0 @@
-/************************************************************************=
******
- * xen=2Eh
- *
- * Guest OS interface to Xen=2E
- *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
- * Copyright (c) 2004, K A Fraser
- */
-
-#ifndef __XEN_PUBLIC_XEN_H__
-#define __XEN_PUBLIC_XEN_H__
-
-#include "xen-compat=2Eh"
-
-#if defined(__i386__) || defined(__x86_64__)
-#include "arch-x86/xen=2Eh"
-#elif defined(__arm__) || defined (__aarch64__)
-#include "arch-arm=2Eh"
-#else
-#error "Unsupported architecture"
-#endif
-
-#ifndef __ASSEMBLY__
-/* Guest handles for primitive C types=2E */
-DEFINE_XEN_GUEST_HANDLE(char);
-__DEFINE_XEN_GUEST_HANDLE(uchar, unsigned char);
-DEFINE_XEN_GUEST_HANDLE(int);
-__DEFINE_XEN_GUEST_HANDLE(uint,  unsigned int);
-#if __XEN_INTERFACE_VERSION__ < 0x00040300
-DEFINE_XEN_GUEST_HANDLE(LONG_PTR);
-__DEFINE_XEN_GUEST_HANDLE(ulong, ULONG_PTR);
-#endif
-DEFINE_XEN_GUEST_HANDLE(void);
-
-DEFINE_XEN_GUEST_HANDLE(uint64_t);
-DEFINE_XEN_GUEST_HANDLE(xen_pfn_t);
-DEFINE_XEN_GUEST_HANDLE(xen_ulong_t);
-
-/* Turn a plain number into a C unsigned (LONG_PTR) constant=2E */
-#define __xen_mk_uint(x)  x ## U
-#define __xen_mk_ulong(x) x ## UL
-#define xen_mk_uint(x)    __xen_mk_uint(x)
-#define xen_mk_ulong(x)   __xen_mk_ulong(x)
-
-#else
-
-/* In assembly code we cannot use C numeric constant suffixes=2E */
-#define xen_mk_uint(x)  x
-#define xen_mk_ulong(x) x
-
-#endif
-
-/*
- * HYPERCALLS
- */
-
-/* `incontents 100 hcalls List of hypercalls
- * ` enum hypercall_num { // __HYPERVISOR_* =3D> HYPERVISOR_*()
- */
-
-#define __HYPERVISOR_set_trap_table        0
-#define __HYPERVISOR_mmu_update            1
-#define __HYPERVISOR_set_gdt               2
-#define __HYPERVISOR_stack_switch          3
-#define __HYPERVISOR_set_callbacks         4
-#define __HYPERVISOR_fpu_taskswitch        5
-#define __HYPERVISOR_sched_op_compat       6 /* compat since 0x00030101 *=
/
-#define __HYPERVISOR_platform_op           7
-#define __HYPERVISOR_set_debugreg          8
-#define __HYPERVISOR_get_debugreg          9
-#define __HYPERVISOR_update_descriptor    10
-#define __HYPERVISOR_memory_op            12
-#define __HYPERVISOR_multicall            13
-#define __HYPERVISOR_update_va_mapping    14
-#define __HYPERVISOR_set_timer_op         15
-#define __HYPERVISOR_event_channel_op_compat 16 /* compat since 0x0003020=
2 */
-#define __HYPERVISOR_xen_version          17
-#define __HYPERVISOR_console_io           18
-#define __HYPERVISOR_physdev_op_compat    19 /* compat since 0x00030202 *=
/
-#define __HYPERVISOR_grant_table_op       20
-#define __HYPERVISOR_vm_assist            21
-#define __HYPERVISOR_update_va_mapping_otherdomain 22
-#define __HYPERVISOR_iret                 23 /* x86 only */
-#define __HYPERVISOR_vcpu_op              24
-#define __HYPERVISOR_set_segment_base     25 /* x86/64 only */
-#define __HYPERVISOR_mmuext_op            26
-#define __HYPERVISOR_xsm_op               27
-#define __HYPERVISOR_nmi_op               28
-#define __HYPERVISOR_sched_op             29
-#define __HYPERVISOR_callback_op          30
-#define __HYPERVISOR_xenoprof_op          31
-#define __HYPERVISOR_event_channel_op     32
-#define __HYPERVISOR_physdev_op           33
-#define __HYPERVISOR_hvm_op               34
-#define __HYPERVISOR_sysctl               35
-#define __HYPERVISOR_domctl               36
-#define __HYPERVISOR_kexec_op             37
-#define __HYPERVISOR_tmem_op              38
-#define __HYPERVISOR_xc_reserved_op       39 /* reserved for XenClient */
-#define __HYPERVISOR_xenpmu_op            40
-
-/* Architecture-specific hypercall definitions=2E */
-#define __HYPERVISOR_arch_0               48
-#define __HYPERVISOR_arch_1               49
-#define __HYPERVISOR_arch_2               50
-#define __HYPERVISOR_arch_3               51
-#define __HYPERVISOR_arch_4               52
-#define __HYPERVISOR_arch_5               53
-#define __HYPERVISOR_arch_6               54
-#define __HYPERVISOR_arch_7               55
-
-/* ` } */
-
-/*
- * HYPERCALL COMPATIBILITY=2E
- */
-
-/* New sched_op hypercall introduced in 0x00030101=2E */
-#if __XEN_INTERFACE_VERSION__ < 0x00030101
-#undef __HYPERVISOR_sched_op
-#define __HYPERVISOR_sched_op __HYPERVISOR_sched_op_compat
-#endif
-
-/* New event-channel and physdev hypercalls introduced in 0x00030202=2E *=
/
-#if __XEN_INTERFACE_VERSION__ < 0x00030202
-#undef __HYPERVISOR_event_channel_op
-#define __HYPERVISOR_event_channel_op __HYPERVISOR_event_channel_op_compa=
t
-#undef __HYPERVISOR_physdev_op
-#define __HYPERVISOR_physdev_op __HYPERVISOR_physdev_op_compat
-#endif
-
-/* New platform_op hypercall introduced in 0x00030204=2E */
-#if __XEN_INTERFACE_VERSION__ < 0x00030204
-#define __HYPERVISOR_dom0_op __HYPERVISOR_platform_op
-#endif
-
-/*
- * VIRTUAL INTERRUPTS
- *
- * Virtual interrupts that a guest OS may receive from Xen=2E
- *
- * In the side comments, 'V=2E' denotes a per-VCPU VIRQ while 'G=2E' deno=
tes a
- * global VIRQ=2E The former can be bound once per VCPU and cannot be re-=
bound=2E
- * The latter can be allocated only once per guest: they must initially b=
e
- * allocated to VCPU0 but can subsequently be re-bound=2E
- */
-/* ` enum virq { */
-#define VIRQ_TIMER      0  /* V=2E Timebase update, and/or requested time=
out=2E  */
-#define VIRQ_DEBUG      1  /* V=2E Request guest to dump debug info=2E   =
        */
-#define VIRQ_CONSOLE    2  /* G=2E (DOM0) Bytes received on emergency con=
sole=2E */
-#define VIRQ_DOM_EXC    3  /* G=2E (DOM0) Exceptional event for some doma=
in=2E   */
-#define VIRQ_TBUF       4  /* G=2E (DOM0) Trace buffer has records availa=
ble=2E  */
-#define VIRQ_DEBUGGER   6  /* G=2E (DOM0) A domain has paused for debuggi=
ng=2E   */
-#define VIRQ_XENOPROF   7  /* V=2E XenOprofile interrupt: new sample avai=
lable */
-#define VIRQ_CON_RING   8  /* G=2E (DOM0) Bytes received on console      =
      */
-#define VIRQ_PCPU_STATE 9  /* G=2E (DOM0) PCPU state changed             =
      */
-#define VIRQ_MEM_EVENT  10 /* G=2E (DOM0) A memory event has occured     =
      */
-#define VIRQ_XC_RESERVED 11 /* G=2E Reserved for XenClient               =
      */
-#define VIRQ_ENOMEM     12 /* G=2E (DOM0) Low on heap memory       */
-#define VIRQ_XENPMU     13 /* V=2E  PMC interrupt                        =
      */
-
-/* Architecture-specific VIRQ definitions=2E */
-#define VIRQ_ARCH_0    16
-#define VIRQ_ARCH_1    17
-#define VIRQ_ARCH_2    18
-#define VIRQ_ARCH_3    19
-#define VIRQ_ARCH_4    20
-#define VIRQ_ARCH_5    21
-#define VIRQ_ARCH_6    22
-#define VIRQ_ARCH_7    23
-/* ` } */
-
-#define NR_VIRQS       24
-
-/*
- * ` enum neg_errnoval
- * ` HYPERVISOR_mmu_update(const struct mmu_update reqs[],
- * `                       unsigned count, unsigned *done_out,
- * `                       unsigned foreigndom)
- * `
- * @reqs is an array of mmu_update_t structures ((ptr, val) pairs)=2E
- * @count is the length of the above array=2E
- * @pdone is an output parameter indicating number of completed operation=
s
- * @foreigndom[15:0]: FD, the expected owner of data pages referenced in =
this
- *                    hypercall invocation=2E Can be DOMID_SELF=2E
- * @foreigndom[31:16]: PFD, the expected owner of pagetable pages referen=
ced
- *                     in this hypercall invocation=2E The value of this =
field
- *                     (x) encodes the PFD as follows:
- *                     x =3D=3D 0 =3D> PFD =3D=3D DOMID_SELF
- *                     x !=3D 0 =3D> PFD =3D=3D x - 1
- *
- * Sub-commands: ptr[1:0] specifies the appropriate MMU_* command=2E
- * -------------
- * ptr[1:0] =3D=3D MMU_NORMAL_PT_UPDATE:
- * Updates an entry in a page table belonging to PFD=2E If updating an L1=
 table,
- * and the new table entry is valid/present, the mapped frame must belong=
 to
- * FD=2E If attempting to map an I/O page then the caller assumes the pri=
vilege
- * of the FD=2E
- * FD =3D=3D DOMID_IO: Permit /only/ I/O mappings, at the priv level of t=
he caller=2E
- * FD =3D=3D DOMID_XEN: Map restricted areas of Xen's heap space=2E
- * ptr[:2]  -- Machine address of the page-table entry to modify=2E
- * val      -- Value to write=2E
- *
- * There also certain implicit requirements when using this hypercall=2E =
The
- * pages that make up a pagetable must be mapped read-only in the guest=
=2E
- * This prevents uncontrolled guest updates to the pagetable=2E Xen stric=
tly
- * enforces this, and will disallow any pagetable update which will end u=
p
- * mapping pagetable page RW, and will disallow using any writable page a=
s a
- * pagetable=2E In practice it means that when constructing a page table =
for a
- * process, thread, etc, we MUST be very dilligient in following these ru=
les:
- *  1)=2E Start with top-level page (PGD or in Xen language: L4)=2E Fill =
out
- *      the entries=2E
- *  2)=2E Keep on going, filling out the upper (PUD or L3), and middle (P=
MD
- *      or L2)=2E
- *  3)=2E Start filling out the PTE table (L1) with the PTE entries=2E On=
ce
- *  	done, make sure to set each of those entries to RO (so writeable bit
- *  	is unset)=2E Once that has been completed, set the PMD (L2) for this
- *  	PTE table as RO=2E
- *  4)=2E When completed with all of the PMD (L2) entries, and all of the=
m have
- *  	been set to RO, make sure to set RO the PUD (L3)=2E Do the same
- *  	operation on PGD (L4) pagetable entries that have a PUD (L3) entry=
=2E
- *  5)=2E Now before you can use those pages (so setting the cr3), you MU=
ST also
- *      pin them so that the hypervisor can verify the entries=2E This is=
 done
- *      via the HYPERVISOR_mmuext_op(MMUEXT_PIN_L4_TABLE, guest physical =
frame
- *      number of the PGD (L4))=2E And this point the HYPERVISOR_mmuext_o=
p(
- *      MMUEXT_NEW_BASEPTR, guest physical frame number of the PGD (L4)) =
can be
- *      issued=2E
- * For 32-bit guests, the L4 is not used (as there is less pagetables), s=
o
- * instead use L3=2E
- * At this point the pagetables can be modified using the MMU_NORMAL_PT_U=
PDATE
- * hypercall=2E Also if so desired the OS can also try to write to the PT=
E
- * and be trapped by the hypervisor (as the PTE entry is RO)=2E
- *
- * To deallocate the pages, the operations are the reverse of the steps
- * mentioned above=2E The argument is MMUEXT_UNPIN_TABLE for all levels a=
nd the
- * pagetable MUST not be in use (meaning that the cr3 is not set to it)=
=2E
- *
- * ptr[1:0] =3D=3D MMU_MACHPHYS_UPDATE:
- * Updates an entry in the machine->pseudo-physical mapping table=2E
- * ptr[:2]  -- Machine address within the frame whose mapping to modify=
=2E
- *             The frame must belong to the FD, if one is specified=2E
- * val      -- Value to write into the mapping entry=2E
- *
- * ptr[1:0] =3D=3D MMU_PT_UPDATE_PRESERVE_AD:
- * As MMU_NORMAL_PT_UPDATE above, but A/D bits currently in the PTE are O=
Red
- * with those in @val=2E
- *
- * @val is usually the machine frame number along with some attributes=2E
- * The attributes by default follow the architecture defined bits=2E Mean=
ing that
- * if this is a X86_64 machine and four page table layout is used, the la=
yout
- * of val is:
- *  - 63 if set means No execute (NX)
- *  - 46-13 the machine frame number
- *  - 12 available for guest
- *  - 11 available for guest
- *  - 10 available for guest
- *  - 9 available for guest
- *  - 8 global
- *  - 7 PAT (PSE is disabled, must use hypercall to make 4MB or 2MB pages=
)
- *  - 6 dirty
- *  - 5 accessed
- *  - 4 page cached disabled
- *  - 3 page write through
- *  - 2 userspace accessible
- *  - 1 writeable
- *  - 0 present
- *
- *  The one bits that does not fit with the default layout is the PAGE_PS=
E
- *  also called PAGE_PAT)=2E The MMUEXT_[UN]MARK_SUPER arguments to the
- *  HYPERVISOR_mmuext_op serve as mechanism to set a pagetable to be 4MB
- *  (or 2MB) instead of using the PAGE_PSE bit=2E
- *
- *  The reason that the PAGE_PSE (bit 7) is not being utilized is due to =
Xen
- *  using it as the Page Attribute Table (PAT) bit - for details on it pl=
ease
- *  refer to Intel SDM 10=2E12=2E The PAT allows to set the caching attri=
butes of
- *  pages instead of using MTRRs=2E
- *
- *  The PAT MSR is as follows (it is a 64-bit value, each entry is 8 bits=
):
- *                    PAT4                 PAT0
- *  +-----+-----+----+----+----+-----+----+----+
- *  | UC  | UC- | WC | WB | UC | UC- | WC | WB |  <=3D Linux
- *  +-----+-----+----+----+----+-----+----+----+
- *  | UC  | UC- | WT | WB | UC | UC- | WT | WB |  <=3D BIOS (default when=
 machine boots)
- *  +-----+-----+----+----+----+-----+----+----+
- *  | rsv | rsv | WP | WC | UC | UC- | WT | WB |  <=3D Xen
- *  +-----+-----+----+----+----+-----+----+----+
- *
- *  The lookup of this index table translates to looking up
- *  Bit 7, Bit 4, and Bit 3 of val entry:
- *
- *  PAT/PSE (bit 7) =2E=2E=2E PCD (bit 4) =2E=2E PWT (bit 3)=2E
- *
- *  If all bits are off, then we are using PAT0=2E If bit 3 turned on,
- *  then we are using PAT1, if bit 3 and bit 4, then PAT2=2E=2E
- *
- *  As you can see, the Linux PAT1 translates to PAT4 under Xen=2E Which =
means
- *  that if a guest that follows Linux's PAT setup and would like to set =
Write
- *  Combined on pages it MUST use PAT4 entry=2E Meaning that Bit 7 (PAGE_=
PAT) is
- *  set=2E For example, under Linux it only uses PAT0, PAT1, and PAT2 for=
 the
- *  caching as:
- *
- *   WB =3D none (so PAT0)
- *   WC =3D PWT (bit 3 on)
- *   UC =3D PWT | PCD (bit 3 and 4 are on)=2E
- *
- * To make it work with Xen, it needs to translate the WC bit as so:
- *
- *  PWT (so bit 3 on) --> PAT (so bit 7 is on) and clear bit 3
- *
- * And to translate back it would:
- *
- * PAT (bit 7 on) --> PWT (bit 3 on) and clear bit 7=2E
- */
-#define MMU_NORMAL_PT_UPDATE      0 /* checked '*ptr =3D val'=2E ptr is M=
A=2E      */
-#define MMU_MACHPHYS_UPDATE       1 /* ptr =3D MA of frame to modify entr=
y for */
-#define MMU_PT_UPDATE_PRESERVE_AD 2 /* atomically: *ptr =3D val | (*ptr&(=
A|D)) */
-
-/*
- * MMU EXTENDED OPERATIONS
- *
- * ` enum neg_errnoval
- * ` HYPERVISOR_mmuext_op(mmuext_op_t uops[],
- * `                      unsigned int count,
- * `                      unsigned int *pdone,
- * `                      unsigned int foreigndom)
- */
-/* HYPERVISOR_mmuext_op() accepts a list of mmuext_op structures=2E
- * A foreigndom (FD) can be specified (or DOMID_SELF for none)=2E
- * Where the FD has some effect, it is described below=2E
- *
- * cmd: MMUEXT_(UN)PIN_*_TABLE
- * mfn: Machine frame number to be (un)pinned as a p=2Et=2E page=2E
- *      The frame must belong to the FD, if one is specified=2E
- *
- * cmd: MMUEXT_NEW_BASEPTR
- * mfn: Machine frame number of new page-table base to install in MMU=2E
- *
- * cmd: MMUEXT_NEW_USER_BASEPTR [x86/64 only]
- * mfn: Machine frame number of new page-table base to install in MMU
- *      when in user space=2E
- *
- * cmd: MMUEXT_TLB_FLUSH_LOCAL
- * No additional arguments=2E Flushes local TLB=2E
- *
- * cmd: MMUEXT_INVLPG_LOCAL
- * linear_addr: Linear address to be flushed from the local TLB=2E
- *
- * cmd: MMUEXT_TLB_FLUSH_MULTI
- * vcpumask: Pointer to bitmap of VCPUs to be flushed=2E
- *
- * cmd: MMUEXT_INVLPG_MULTI
- * linear_addr: Linear address to be flushed=2E
- * vcpumask: Pointer to bitmap of VCPUs to be flushed=2E
- *
- * cmd: MMUEXT_TLB_FLUSH_ALL
- * No additional arguments=2E Flushes all VCPUs' TLBs=2E
- *
- * cmd: MMUEXT_INVLPG_ALL
- * linear_addr: Linear address to be flushed from all VCPUs' TLBs=2E
- *
- * cmd: MMUEXT_FLUSH_CACHE
- * No additional arguments=2E Writes back and flushes cache contents=2E
- *
- * cmd: MMUEXT_FLUSH_CACHE_GLOBAL
- * No additional arguments=2E Writes back and flushes cache contents
- * on all CPUs in the system=2E
- *
- * cmd: MMUEXT_SET_LDT
- * linear_addr: Linear address of LDT base (NB=2E must be page-aligned)=
=2E
- * nr_ents: Number of entries in LDT=2E
- *
- * cmd: MMUEXT_CLEAR_PAGE
- * mfn: Machine frame number to be cleared=2E
- *
- * cmd: MMUEXT_COPY_PAGE
- * mfn: Machine frame number of the destination page=2E
- * src_mfn: Machine frame number of the source page=2E
- *
- * cmd: MMUEXT_[UN]MARK_SUPER
- * mfn: Machine frame number of head of superpage to be [un]marked=2E
- */
-/* ` enum mmuext_cmd { */
-#define MMUEXT_PIN_L1_TABLE      0
-#define MMUEXT_PIN_L2_TABLE      1
-#define MMUEXT_PIN_L3_TABLE      2
-#define MMUEXT_PIN_L4_TABLE      3
-#define MMUEXT_UNPIN_TABLE       4
-#define MMUEXT_NEW_BASEPTR       5
-#define MMUEXT_TLB_FLUSH_LOCAL   6
-#define MMUEXT_INVLPG_LOCAL      7
-#define MMUEXT_TLB_FLUSH_MULTI   8
-#define MMUEXT_INVLPG_MULTI      9
-#define MMUEXT_TLB_FLUSH_ALL    10
-#define MMUEXT_INVLPG_ALL       11
-#define MMUEXT_FLUSH_CACHE      12
-#define MMUEXT_SET_LDT          13
-#define MMUEXT_NEW_USER_BASEPTR 15
-#define MMUEXT_CLEAR_PAGE       16
-#define MMUEXT_COPY_PAGE        17
-#define MMUEXT_FLUSH_CACHE_GLOBAL 18
-#define MMUEXT_MARK_SUPER       19
-#define MMUEXT_UNMARK_SUPER     20
-/* ` } */
-
-#ifndef __ASSEMBLY__
-struct mmuext_op {
-    unsigned int cmd; /* =3D> enum mmuext_cmd */
-    union {
-        /* [UN]PIN_TABLE, NEW_BASEPTR, NEW_USER_BASEPTR
-         * CLEAR_PAGE, COPY_PAGE, [UN]MARK_SUPER */
-        xen_pfn_t     mfn;
-        /* INVLPG_LOCAL, INVLPG_ALL, SET_LDT */
-        ULONG_PTR linear_addr;
-    } arg1;
-    union {
-        /* SET_LDT */
-        unsigned int nr_ents;
-        /* TLB_FLUSH_MULTI, INVLPG_MULTI */
-#if __XEN_INTERFACE_VERSION__ >=3D 0x00030205
-        XEN_GUEST_HANDLE(const_void) vcpumask;
-#else
-        const void *vcpumask;
-#endif
-        /* COPY_PAGE */
-        xen_pfn_t src_mfn;
-    } arg2;
-};
-typedef struct mmuext_op mmuext_op_t;
-DEFINE_XEN_GUEST_HANDLE(mmuext_op_t);
-#endif
-
-/*
- * ` enum neg_errnoval
- * ` HYPERVISOR_update_va_mapping(ULONG_PTR va, u64 val,
- * `                              enum uvm_flags flags)
- * `
- * ` enum neg_errnoval
- * ` HYPERVISOR_update_va_mapping_otherdomain(ULONG_PTR va, u64 val,
- * `                                          enum uvm_flags flags,
- * `                                          domid_t domid)
- * `
- * ` @va: The virtual address whose mapping we want to change
- * ` @val: The new page table entry, must contain a machine address
- * ` @flags: Control TLB flushes
- */
-/* These are passed as 'flags' to update_va_mapping=2E They can be ORed=
=2E */
-/* When specifying UVMF_MULTI, also OR in a pointer to a CPU bitmap=2E   =
*/
-/* UVMF_LOCAL is merely UVMF_MULTI with a NULL bitmap pointer=2E         =
*/
-/* ` enum uvm_flags { */
-#define UVMF_NONE           (xen_mk_ulong(0)<<0) /* No flushing at all=2E=
   */
-#define UVMF_TLB_FLUSH      (xen_mk_ulong(1)<<0) /* Flush entire TLB(s)=
=2E  */
-#define UVMF_INVLPG         (xen_mk_ulong(2)<<0) /* Flush only one entry=
=2E */
-#define UVMF_FLUSHTYPE_MASK (xen_mk_ulong(3)<<0)
-#define UVMF_MULTI          (xen_mk_ulong(0)<<2) /* Flush subset of TLBs=
=2E */
-#define UVMF_LOCAL          (xen_mk_ulong(0)<<2) /* Flush local TLB=2E   =
   */
-#define UVMF_ALL            (xen_mk_ulong(1)<<2) /* Flush all TLBs=2E    =
   */
-/* ` } */
-
-/*
- * Commands to HYPERVISOR_console_io()=2E
- */
-#define CONSOLEIO_write         0
-#define CONSOLEIO_read          1
-
-/*
- * Commands to HYPERVISOR_vm_assist()=2E
- */
-#define VMASST_CMD_enable                0
-#define VMASST_CMD_disable               1
-
-/* x86/32 guests: simulate full 4GB segment limits=2E */
-#define VMASST_TYPE_4gb_segments         0
-
-/* x86/32 guests: trap (vector 15) whenever above vmassist is used=2E */
-#define VMASST_TYPE_4gb_segments_notify  1
-
-/*
- * x86 guests: support writes to bottom-level PTEs=2E
- * NB1=2E Page-directory entries cannot be written=2E
- * NB2=2E Guest must continue to remove all writable mappings of PTEs=2E
- */
-#define VMASST_TYPE_writable_pagetables  2
-
-/* x86/PAE guests: support PDPTs above 4GB=2E */
-#define VMASST_TYPE_pae_extended_cr3     3
-
-/*
- * x86 guests: Sane behaviour for virtual iopl
- *  - virtual iopl updated from do_iret() hypercalls=2E
- *  - virtual iopl reported in bounce frames=2E
- *  - guest kernels assumed to be level 0 for the purpose of iopl checks=
=2E
- */
-#define VMASST_TYPE_architectural_iopl   4
-
-/*
- * x86/64 guests: strictly hide M2P from user mode=2E
- * This allows the guest to control respective hypervisor behavior:
- * - when not set, L4 tables get created with the respective slot blank,
- *   and whenever the L4 table gets used as a kernel one the missing
- *   mapping gets inserted,
- * - when set, L4 tables get created with the respective slot initialized
- *   as before, and whenever the L4 table gets used as a user one the
- *   mapping gets zapped=2E
- */
-#define VMASST_TYPE_m2p_strict           32
-
-#if __XEN_INTERFACE_VERSION__ < 0x00040600
-#define MAX_VMASST_TYPE                  3
-#endif
-
-/* Domain ids >=3D DOMID_FIRST_RESERVED cannot be used for ordinary domai=
ns=2E */
-#define DOMID_FIRST_RESERVED xen_mk_uint(0x7FF0)
-
-/* DOMID_SELF is used in certain contexts to refer to oneself=2E */
-#define DOMID_SELF           xen_mk_uint(0x7FF0)
-
-/*
- * DOMID_IO is used to restrict page-table updates to mapping I/O memory=
=2E
- * Although no Foreign Domain need be specified to map I/O pages, DOMID_I=
O
- * is useful to ensure that no mappings to the OS's own heap are accident=
ally
- * installed=2E (e=2Eg=2E, in Linux this could cause havoc as reference c=
ounts
- * aren't adjusted on the I/O-mapping code path)=2E
- * This only makes sense in MMUEXT_SET_FOREIGNDOM, but in that context ca=
n
- * be specified by any calling domain=2E
- */
-#define DOMID_IO             xen_mk_uint(0x7FF1)
-
-/*
- * DOMID_XEN is used to allow privileged domains to map restricted parts =
of
- * Xen's heap space (e=2Eg=2E, the machine_to_phys table)=2E
- * This only makes sense in MMUEXT_SET_FOREIGNDOM, and is only permitted =
if
- * the caller is privileged=2E
- */
-#define DOMID_XEN            xen_mk_uint(0x7FF2)
-
-/*
- * DOMID_COW is used as the owner of sharable pages */
-#define DOMID_COW            xen_mk_uint(0x7FF3)
-
-/* DOMID_INVALID is used to identify pages with unknown owner=2E */
-#define DOMID_INVALID        xen_mk_uint(0x7FF4)
-
-/* Idle domain=2E */
-#define DOMID_IDLE           xen_mk_uint(0x7FFF)
-
-#ifndef __ASSEMBLY__
-
-typedef uint16_t domid_t;
-
-/*
- * Send an array of these to HYPERVISOR_mmu_update()=2E
- * NB=2E The fields are natural pointer/address size for this architectur=
e=2E
- */
-struct mmu_update {
-    uint64_t ptr;       /* Machine address of PTE=2E */
-    uint64_t val;       /* New contents of PTE=2E    */
-};
-typedef struct mmu_update mmu_update_t;
-DEFINE_XEN_GUEST_HANDLE(mmu_update_t);
-
-/*
- * ` enum neg_errnoval
- * ` HYPERVISOR_multicall(multicall_entry_t call_list[],
- * `                      uint32_t nr_calls);
- *
- * NB=2E The fields are logically the natural register size for this
- * architecture=2E In cases where xen_ulong_t is larger than this then
- * any unused bits in the upper portion must be zero=2E
- */
-struct multicall_entry {
-    xen_ulong_t op, result;
-    xen_ulong_t args[6];
-};
-typedef struct multicall_entry multicall_entry_t;
-DEFINE_XEN_GUEST_HANDLE(multicall_entry_t);
-
-#if __XEN_INTERFACE_VERSION__ < 0x00040400
-/*
- * Event channel endpoints per domain (when using the 2-level ABI):
- *  1024 if a LONG_PTR is 32 bits; 4096 if a LONG_PTR is 64 bits=2E
- */
-#define NR_EVENT_CHANNELS EVTCHN_2L_NR_CHANNELS
-#endif
-
-struct vcpu_time_info {
-    /*
-     * Updates to the following values are preceded and followed by an
-     * increment of 'version'=2E The guest can therefore detect updates b=
y
-     * looking for changes to 'version'=2E If the least-significant bit o=
f
-     * the version number is set then an update is in progress and the gu=
est
-     * must wait to read a consistent set of values=2E
-     * The correct way to interact with the version number is similar to
-     * Linux's seqlock: see the implementations of read_seqbegin/read_seq=
retry=2E
-     */
-    uint32_t version;
-    uint32_t pad0;
-    uint64_t tsc_timestamp;   /* TSC at last update of time vals=2E  */
-    uint64_t system_time;     /* Time, in nanosecs, since boot=2E    */
-    /*
-     * Current system time:
-     *   system_time +
-     *   ((((tsc - tsc_timestamp) << tsc_shift) * tsc_to_system_mul) >> 3=
2)
-     * CPU frequency (Hz):
-     *   ((10^9 << 32) / tsc_to_system_mul) >> tsc_shift
-     */
-    uint32_t tsc_to_system_mul;
-    int8_t   tsc_shift;
-#if __XEN_INTERFACE_VERSION__ > 0x040600
-    uint8_t  flags;
-    uint8_t  pad1[2];
-#else
-    int8_t   pad1[3];
-#endif
-}; /* 32 bytes */
-typedef struct vcpu_time_info vcpu_time_info_t;
-
-#define XEN_PVCLOCK_TSC_STABLE_BIT     (1 << 0)
-#define XEN_PVCLOCK_GUEST_STOPPED      (1 << 1)
-
-struct vcpu_info {
-    /*
-     * 'evtchn_upcall_pending' is written non-zero by Xen to indicate
-     * a pending notification for a particular VCPU=2E It is then cleared
-     * by the guest OS /before/ checking for pending work, thus avoiding
-     * a set-and-check race=2E Note that the mask is only accessed by Xen
-     * on the CPU that is currently hosting the VCPU=2E This means that t=
he
-     * pending and mask flags can be updated by the guest without special
-     * synchronisation (i=2Ee=2E, no need for the x86 LOCK prefix)=2E
-     * This may seem suboptimal because if the pending flag is set by
-     * a different CPU then an IPI may be scheduled even when the mask
-     * is set=2E However, note:
-     *  1=2E The task of 'interrupt holdoff' is covered by the per-event-
-     *     channel mask bits=2E A 'noisy' event that is continually being
-     *     triggered can be masked at source at this very precise
-     *     granularity=2E
-     *  2=2E The main purpose of the per-VCPU mask is therefore to restri=
ct
-     *     reentrant execution: whether for concurrency control, or to
-     *     prevent unbounded stack usage=2E Whatever the purpose, we expe=
ct
-     *     that the mask will be asserted only for short periods at a tim=
e,
-     *     and so the likelihood of a 'spurious' IPI is suitably small=2E
-     * The mask is read before making an event upcall to the guest: a
-     * non-zero mask therefore guarantees that the VCPU will not receive
-     * an upcall activation=2E The mask is cleared when the VCPU requests
-     * to block: this avoids wakeup-waiting races=2E
-     */
-    uint8_t evtchn_upcall_pending;
-#ifdef XEN_HAVE_PV_UPCALL_MASK
-    uint8_t evtchn_upcall_mask;
-#else /* XEN_HAVE_PV_UPCALL_MASK */
-    uint8_t pad0;
-#endif /* XEN_HAVE_PV_UPCALL_MASK */
-    xen_ulong_t evtchn_pending_sel;
-    struct arch_vcpu_info arch;
-    struct vcpu_time_info time;
-}; /* 64 bytes (x86) */
-#ifndef __XEN__
-typedef struct vcpu_info vcpu_info_t;
-#endif
-
-/*
- * `incontents 200 startofday_shared Start-of-day shared data structure
- * Xen/kernel shared data -- pointer provided in start_info=2E
- *
- * This structure is defined to be both smaller than a page, and the
- * only data on the shared page, but may vary in actual size even within
- * compatible Xen versions; guests should not rely on the size
- * of this structure remaining constant=2E
- */
-struct shared_info {
-    struct vcpu_info vcpu_info[XEN_LEGACY_MAX_VCPUS];
-
-    /*
-     * A domain can create "event channels" on which it can send and rece=
ive
-     * asynchronous event notifications=2E There are three classes of eve=
nt that
-     * are delivered by this mechanism:
-     *  1=2E Bi-directional inter- and intra-domain connections=2E Domain=
s must
-     *     arrange out-of-band to set up a connection (usually by allocat=
ing
-     *     an unbound 'listener' port and avertising that via a storage s=
ervice
-     *     such as xenstore)=2E
-     *  2=2E Physical interrupts=2E A domain with suitable hardware-acces=
s
-     *     privileges can bind an event-channel port to a physical interr=
upt
-     *     source=2E
-     *  3=2E Virtual interrupts ('events')=2E A domain can bind an event-=
channel
-     *     port to a virtual interrupt source, such as the virtual-timer
-     *     device or the emergency console=2E
-     *
-     * Event channels are addressed by a "port index"=2E Each channel is
-     * associated with two bits of information:
-     *  1=2E PENDING -- notifies the domain that there is a pending notif=
ication
-     *     to be processed=2E This bit is cleared by the guest=2E
-     *  2=2E MASK -- if this bit is clear then a 0->1 transition of PENDI=
NG
-     *     will cause an asynchronous upcall to be scheduled=2E This bit =
is only
-     *     updated by the guest=2E It is read-only within Xen=2E If a cha=
nnel
-     *     becomes pending while the channel is masked then the 'edge' is=
 lost
-     *     (i=2Ee=2E, when the channel is unmasked, the guest must manual=
ly handle
-     *     pending notifications as no upcall will be scheduled by Xen)=
=2E
-     *
-     * To expedite scanning of pending notifications, any 0->1 pending
-     * transition on an unmasked channel causes a corresponding bit in a
-     * per-vcpu selector word to be set=2E Each bit in the selector cover=
s a
-     * 'C LONG_PTR' in the PENDING bitfield array=2E
-     */
-    xen_ulong_t evtchn_pending[sizeof(xen_ulong_t) * 8];
-    xen_ulong_t evtchn_mask[sizeof(xen_ulong_t) * 8];
-
-    /*
-     * Wallclock time: updated only by control software=2E Guests should =
base
-     * their gettimeofday() syscall on this wallclock-base value=2E
-     */
-    uint32_t wc_version;      /* Version counter: see vcpu_time_info_t=2E=
 */
-    uint32_t wc_sec;          /* Secs  00:00:00 UTC, Jan 1, 1970=2E  */
-    uint32_t wc_nsec;         /* Nsecs 00:00:00 UTC, Jan 1, 1970=2E  */
-#if !defined(__i386__)
-    uint32_t wc_sec_hi;
-# define xen_wc_sec_hi wc_sec_hi
-#elif !defined(__XEN__) && !defined(__XEN_TOOLS__)
-# define xen_wc_sec_hi arch=2Ewc_sec_hi
-#endif
-
-    struct arch_shared_info arch;
-
-};
-#ifndef __XEN__
-typedef struct shared_info shared_info_t;
-#endif
-
-/*
- * `incontents 200 startofday Start-of-day memory layout
- *
- *  1=2E The domain is started within contiguous virtual-memory region=2E
- *  2=2E The contiguous region ends on an aligned 4MB boundary=2E
- *  3=2E This the order of bootstrap elements in the initial virtual regi=
on:
- *      a=2E relocated kernel image
- *      b=2E initial ram disk              [mod_start, mod_len]
- *         (may be omitted)
- *      c=2E list of allocated page frames [mfn_list, nr_pages]
- *         (unless relocated due to XEN_ELFNOTE_INIT_P2M)
- *      d=2E start_info_t structure        [register ESI (x86)]
- *         in case of dom0 this page contains the console info, too
- *      e=2E unless dom0: xenstore ring page
- *      f=2E unless dom0: console ring page
- *      g=2E bootstrap page tables         [pt_base and CR3 (x86)]
- *      h=2E bootstrap stack               [register ESP (x86)]
- *  4=2E Bootstrap elements are packed together, but each is 4kB-aligned=
=2E
- *  5=2E The list of page frames forms a contiguous 'pseudo-physical' mem=
ory
- *     layout for the domain=2E In particular, the bootstrap virtual-memo=
ry
- *     region is a 1:1 mapping to the first section of the pseudo-physica=
l map=2E
- *  6=2E All bootstrap elements are mapped read-writable for the guest OS=
=2E The
- *     only exception is the bootstrap page table, which is mapped read-o=
nly=2E
- *  7=2E There is guaranteed to be at least 512kB padding after the final
- *     bootstrap element=2E If necessary, the bootstrap virtual region is
- *     extended by an extra 4MB to ensure this=2E
- *
- * Note: Prior to 25833:bb85bbccb1c9=2E ("x86/32-on-64 adjust Dom0 initia=
l page
- * table layout") a bug caused the pt_base (3=2Eg above) and cr3 to not p=
oint
- * to the start of the guest page tables (it was offset by two pages)=2E
- * This only manifested itself on 32-on-64 dom0 kernels and not 32-on-64 =
domU
- * or 64-bit kernels of any colour=2E The page tables for a 32-on-64 dom0=
 got
- * allocated in the order: 'first L1','first L2', 'first L3', so the offs=
et
- * to the page table base is by two pages back=2E The initial domain if i=
t is
- * 32-bit and runs under a 64-bit hypervisor should _NOT_ use two of the
- * pages preceding pt_base and mark them as reserved/unused=2E
- */
-#ifdef XEN_HAVE_PV_GUEST_ENTRY
-struct start_info {
-    /* THE FOLLOWING ARE FILLED IN BOTH ON INITIAL BOOT AND ON RESUME=2E =
   */
-    char magic[32];             /* "xen-<version>-<platform>"=2E         =
   */
-    ULONG_PTR nr_pages;     /* Total pages allocated to this domain=2E  *=
/
-    ULONG_PTR shared_info;  /* MACHINE address of shared info struct=2E *=
/
-    uint32_t flags;             /* SIF_xxx flags=2E                      =
   */
-    xen_pfn_t store_mfn;        /* MACHINE page number of shared page=2E =
   */
-    uint32_t store_evtchn;      /* Event channel for store communication=
=2E */
-    union {
-        struct {
-            xen_pfn_t mfn;      /* MACHINE page number of console page=2E=
   */
-            uint32_t  evtchn;   /* Event channel for console page=2E     =
   */
-        } domU;
-        struct {
-            uint32_t info_off;  /* Offset of console_info struct=2E      =
   */
-            uint32_t info_size; /* Size of console_info struct from start=
=2E*/
-        } dom0;
-    } console;
-    /* THE FOLLOWING ARE ONLY FILLED IN ON INITIAL BOOT (NOT RESUME)=2E  =
   */
-    ULONG_PTR pt_base;      /* VIRTUAL address of page directory=2E     *=
/
-    ULONG_PTR nr_pt_frames; /* Number of bootstrap p=2Et=2E frames=2E    =
   */
-    ULONG_PTR mfn_list;     /* VIRTUAL address of page-frame list=2E    *=
/
-    ULONG_PTR mod_start;    /* VIRTUAL address of pre-loaded module   */
-                                /* (PFN of pre-loaded module if          =
 */
-                                /*  SIF_MOD_START_PFN set in flags)=2E   =
   */
-    ULONG_PTR mod_len;      /* Size (bytes) of pre-loaded module=2E     *=
/
-#define MAX_GUEST_CMDLINE 1024
-    int8_t cmd_line[MAX_GUEST_CMDLINE];
-    /* The pfn range here covers both page table and p->m table frames=2E=
   */
-    ULONG_PTR first_p2m_pfn;/* 1st pfn forming initial P->M table=2E    *=
/
-    ULONG_PTR nr_p2m_frames;/* # of pfns forming initial P->M table=2E  *=
/
-};
-typedef struct start_info start_info_t;
-
-/*
- * Start of day structure passed to PVH guests in %ebx=2E
- *
- * NOTE: nothing will be loaded at physical address 0, so a 0 value in an=
y
- * of the address fields should be treated as not present=2E
- *
- *  0 +----------------+
- *    | magic          | Contains the magic value XEN_HVM_START_MAGIC_VAL=
UE
- *    |                | ("xEn3" with the 0x80 bit of the "E" set)=2E
- *  4 +----------------+
- *    | version        | Version of this structure=2E Current version is =
0=2E New
- *    |                | versions are guaranteed to be backwards-compatib=
le=2E
- *  8 +----------------+
- *    | flags          | SIF_xxx flags=2E
- * 12 +----------------+
- *    | nr_modules     | Number of modules passed to the kernel=2E
- * 16 +----------------+
- *    | modlist_paddr  | Physical address of an array of modules
- *    |                | (layout of the structure below)=2E
- * 24 +----------------+
- *    | cmdline_paddr  | Physical address of the command line,
- *    |                | a zero-terminated ASCII string=2E
- * 32 +----------------+
- *    | rsdp_paddr     | Physical address of the RSDP ACPI data structure=
=2E
- * 40 +----------------+
- *
- * The layout of each entry in the module structure is the following:
- *
- *  0 +----------------+
- *    | paddr          | Physical address of the module=2E
- *  8 +----------------+
- *    | size           | Size of the module in bytes=2E
- * 16 +----------------+
- *    | cmdline_paddr  | Physical address of the command line,
- *    |                | a zero-terminated ASCII string=2E
- * 24 +----------------+
- *    | reserved       |
- * 32 +----------------+
- *
- * The address and sizes are always a 64bit little endian unsigned intege=
r=2E
- *
- * NB: Xen on x86 will always try to place all the data below the 4GiB
- * boundary=2E
- */
-#define XEN_HVM_START_MAGIC_VALUE 0x336ec578
-
-/* New console union for dom0 introduced in 0x00030203=2E */
-#if __XEN_INTERFACE_VERSION__ < 0x00030203
-#define console_mfn    console=2EdomU=2Emfn
-#define console_evtchn console=2EdomU=2Eevtchn
-#endif
-#endif /* XEN_HAVE_PV_GUEST_ENTRY */
-
-/* These flags are passed in the 'flags' field of start_info_t=2E */
-#define SIF_PRIVILEGED    (1<<0)  /* Is the domain privileged? */
-#define SIF_INITDOMAIN    (1<<1)  /* Is this the initial control domain? =
*/
-#define SIF_MULTIBOOT_MOD (1<<2)  /* Is mod_start a multiboot module? */
-#define SIF_MOD_START_PFN (1<<3)  /* Is mod_start a PFN? */
-#define SIF_VIRT_P2M_4TOOLS (1<<4) /* Do Xen tools understand a virt=2E m=
apped */
-                                   /* P->M making the 3 level tree obsole=
te? */
-#define SIF_PM_MASK       (0xFF<<8) /* reserve 1 byte for xen-pm options =
*/
-
-/*
- * A multiboot module is a package containing modules very similar to a
- * multiboot module array=2E The only differences are:
- * - the array of module descriptors is by convention simply at the begin=
ning
- *   of the multiboot module,
- * - addresses in the module descriptors are based on the beginning of th=
e
- *   multiboot module,
- * - the number of modules is determined by a termination descriptor that=
 has
- *   mod_start =3D=3D 0=2E
- *
- * This permits to both build it statically and reference it in a configu=
ration
- * file, and let the PV guest easily rebase the addresses to virtual addr=
esses
- * and at the same time count the number of modules=2E
- */
-struct xen_multiboot_mod_list
-{
-    /* Address of first byte of the module */
-    uint32_t mod_start;
-    /* Address of last byte of the module (inclusive) */
-    uint32_t mod_end;
-    /* Address of zero-terminated command line */
-    uint32_t cmdline;
-    /* Unused, must be zero */
-    uint32_t pad;
-};
-/*
- * `incontents 200 startofday_dom0_console Dom0_console
- *
- * The console structure in start_info=2Econsole=2Edom0
- *
- * This structure includes a variety of information required to
- * have a working VGA/VESA console=2E
- */
-typedef struct dom0_vga_console_info {
-    uint8_t video_type; /* DOM0_VGA_CONSOLE_??? */
-#define XEN_VGATYPE_TEXT_MODE_3 0x03
-#define XEN_VGATYPE_VESA_LFB    0x23
-#define XEN_VGATYPE_EFI_LFB     0x70
-
-    union {
-        struct {
-            /* Font height, in pixels=2E */
-            uint16_t font_height;
-            /* Cursor location (column, row)=2E */
-            uint16_t cursor_x, cursor_y;
-            /* Number of rows and columns (dimensions in characters)=2E *=
/
-            uint16_t rows, columns;
-        } text_mode_3;
-
-        struct {
-            /* Width and height, in pixels=2E */
-            uint16_t width, height;
-            /* Bytes per scan line=2E */
-            uint16_t bytes_per_line;
-            /* Bits per pixel=2E */
-            uint16_t bits_per_pixel;
-            /* LFB physical address, and size (in units of 64kB)=2E */
-            uint32_t lfb_base;
-            uint32_t lfb_size;
-            /* RGB mask offsets and sizes, as defined by VBE 1=2E2+ */
-            uint8_t  red_pos, red_size;
-            uint8_t  green_pos, green_size;
-            uint8_t  blue_pos, blue_size;
-            uint8_t  rsvd_pos, rsvd_size;
-#if __XEN_INTERFACE_VERSION__ >=3D 0x00030206
-            /* VESA capabilities (offset 0xa, VESA command 0x4f00)=2E */
-            uint32_t gbl_caps;
-            /* Mode attributes (offset 0x0, VESA command 0x4f01)=2E */
-            uint16_t mode_attrs;
-#endif
-        } vesa_lfb;
-    } u;
-} dom0_vga_console_info_t;
-#define xen_vga_console_info dom0_vga_console_info
-#define xen_vga_console_info_t dom0_vga_console_info_t
-
-typedef uint8_t xen_domain_handle_t[16];
-
-__DEFINE_XEN_GUEST_HANDLE(uint8,  uint8_t);
-__DEFINE_XEN_GUEST_HANDLE(uint16, uint16_t);
-__DEFINE_XEN_GUEST_HANDLE(uint32, uint32_t);
-__DEFINE_XEN_GUEST_HANDLE(uint64, uint64_t);
-
-#endif /* !__ASSEMBLY__ */
-
-/* Default definitions for macros used by domctl/sysctl=2E */
-#if defined(__XEN__) || defined(__XEN_TOOLS__)
-
-#ifndef int64_aligned_t
-#define int64_aligned_t int64_t
-#endif
-#ifndef uint64_aligned_t
-#define uint64_aligned_t uint64_t
-#endif
-#ifndef XEN_GUEST_HANDLE_64
-#define XEN_GUEST_HANDLE_64(name) XEN_GUEST_HANDLE(name)
-#endif
-
-#ifndef __ASSEMBLY__
-struct xenctl_bitmap {
-    XEN_GUEST_HANDLE_64(uint8) bitmap;
-    uint32_t nr_bits;
-};
-#endif
-
-#endif /* defined(__XEN__) || defined(__XEN_TOOLS__) */
-
-#endif /* __XEN_PUBLIC_XEN_H__ */
-
-/*
- * Local variables:
- * mode: C
- * c-file-style: "BSD"
- * c-basic-offset: 4
- * tab-width: 4
- * indent-tabs-mode: nil
- * End:
- */
--=20
2=2E55=2E0=2Ewindows=2E3



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.1bd.82cfeb874111ddef.1a139f50914.8615136935272d19=---


From win-pv-devel-bounces@lists.xenproject.org Wed Oct 14 10:37:45 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 14 Oct 2026 10:37:45 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1448705.1664757 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGwMj-0003Oi-3d; Wed, 14 Oct 2026 10:37:45 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1448705.1664757; Wed, 14 Oct 2026 10:37:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xGwMj-0003Ob-0W; Wed, 14 Oct 2026 10:37:45 +0000
Received: by outflank-mailman (input) for mailman id 1448705;
 Wed, 14 Oct 2026 10:37:43 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a139fd419f0008425@swg.vates.tech>)
 id 1xGwMh-0003NQ-B0
 for win-pv-devel@lists.xenproject.org; Wed, 14 Oct 2026 10:37:43 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xGwMg-000x6F-Nx
 for win-pv-devel@lists.xenproject.org; Wed, 14 Oct 2026 12:37:42 +0200
Received: from [10.42.69.10] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a139fd419f0008425@swg.vates.tech>)
 id 6acf5b72-bab6-0a2a0a5309dd-0a2a450acaea-14
 for <win-pv-devel@lists.xenproject.org>; Wed, 14 Oct 2026 12:37:42 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-4011c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a139fd419f0008425@swg.vates.tech>)
 id 6acf5b76-f2d2-0a2a450a0019-b9ff1c23a4fb-3
 for <win-pv-devel@lists.xenproject.org>; Wed, 14 Oct 2026 12:37:42 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a139fd419f0008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Wed, 14 Oct 2026 10:37:41 +0000
Received: from [192.168.1.61] (142.220.66.37.rev.sfr.net [37.66.220.142])
 (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 6301C821EF
 for <win-pv-devel@lists.xenproject.org>; Wed, 14 Oct 2026 12:37:40 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=M89+MISXXmG0FfwnpRJ+JcSiV5J2yl2yrWldNT19NvE=;
 h=from:subject:date:message-id:to:mime-version:content-type:in-reply-to:references:feedback-id;
 b=CdFQbh2PCWU4MRMPqUr5dVqm9M77sqGtTEN2kplB45g94qpxx9yiSK5YinuNy5wVyMpF8Hwta
 81+oocGYSwgtYPdAPl0nP0hGGYCXarTuMD+4PPEAQxfM/uuJXGuUK6Cf5mq3Vh9dvLWKbOxKHbB
 Sew+6NRxWs2cI3VraAGOdY3TK4XhH9KKdymXmXk1Kf/Wu1N3wWattpdzAErXP8GLMDYw9l/2PQD
 BEz7q4O6s0daTLFAHYaWHPcqGQVHu5EFDPt4/Pv3bBW1TJdDRppfuoheUrp4Pg9oRnoG32J/AyI
 dlep/Yzhkz73OVOcTm0Y76joyofD/om2VTHq0tXPB6oQ==
X-Zone-Loop: 6311f408adcaa516df5651f4a780423c09b09f437250
x-campaign-type: default
x-transaction-id: b9e4af65-b4b5-4357-abac-ccb8b22eba68
x-swg-uid: 01-6f6c087f-37d0-4cb4-8dfa-269e21da9b38
X-Mailer: Sweego
Message-ID:
 <1791974261.8631fc262581453bbf619ec5b2062170.1a139fd419f0008425@vates.tech>
x-swg-bid: 1791974261.8631fc262581453bbf619ec5b2062170.1a139fd419f0008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
Date: Wed, 14 Oct 2026 12:37:40 +0200
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH 3/3] Remove Xen headers
Content-Language: en-US
To: win-pv-devel@lists.xenproject.org
References: <1791972715.8631fc262581453bbf619ec5b2062170.1a139e5ab9f0008425@vates.tech>
 <20261014102836.1114-1-ngoc-tu.dinh@vates.tech>
 <1791973723.8631fc262581453bbf619ec5b2062170.1a139f50b4c0008425@vates.tech>
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
In-Reply-To: <1791973723.8631fc262581453bbf619ec5b2062170.1a139f50b4c0008425@vates.tech>
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.1bf.cbd1e60f83a6a7e0.1a139fd3ef4.16510ecfdc90fa2a=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1791974260468
X-purgate-ID: tlsNG-4011c0/1791974262-4BCD3F5C-71D5BB7F/0/0
X-purgate-type: clean
X-purgate-size: 94483

---=Part.1bf.cbd1e60f83a6a7e0.1a139fd3ef4.16510ecfdc90fa2a=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

On 14/10/2026 12:29, Tu Dinh wrote:
> As a pure NDIS driver, XenNet doesn't need Xen headers at all=2E
>=20
> Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>

include\xen needs to be removed from the project files=2E I can send this=
=20
change in a future v2=2E

> ---
>   get_xen_headers=2Epy                       |  74 --
>   include/xen-types=2Eh                      |  59 --
>   include/xen-version=2Eh                    |  38 -
>   include/xen-warnings=2Eh                   |  43 -
>   include/xen=2Eh                            |  44 -
>   include/xen/public/arch-x86/xen-x86_32=2Eh | 169 ----
>   include/xen/public/arch-x86/xen-x86_64=2Eh | 202 -----
>   include/xen/public/arch-x86/xen=2Eh        | 338 --------
>   include/xen/public/hvm/hvm_info_table=2Eh  |  74 --
>   include/xen/public/xen-compat=2Eh          |  44 -
>   include/xen/public/xen=2Eh                 | 995 ---------------------=
--
>   11 files changed, 2080 deletions(-)
>   delete mode 100644 get_xen_headers=2Epy
>   delete mode 100644 include/xen-types=2Eh
>   delete mode 100644 include/xen-version=2Eh
>   delete mode 100644 include/xen-warnings=2Eh
>   delete mode 100644 include/xen=2Eh
>   delete mode 100644 include/xen/public/arch-x86/xen-x86_32=2Eh
>   delete mode 100644 include/xen/public/arch-x86/xen-x86_64=2Eh
>   delete mode 100644 include/xen/public/arch-x86/xen=2Eh
>   delete mode 100644 include/xen/public/hvm/hvm_info_table=2Eh
>   delete mode 100644 include/xen/public/xen-compat=2Eh
>   delete mode 100644 include/xen/public/xen=2Eh
>=20
> diff --git a/get_xen_headers=2Epy b/get_xen_headers=2Epy
> deleted file mode 100644
> index 2d4d0f6=2E=2E0000000
> --- a/get_xen_headers=2Epy
> +++ /dev/null
> @@ -1,74 +0,0 @@
> -#!python -u
> -
> -import os, sys
> -import shutil
> -import subprocess
> -import re
> -
> -def shell(command, dir =3D '=2E'):
> -    print("in '%s' execute '%s'" % (dir, ' '=2Ejoin(command)))
> -    sys=2Estdout=2Eflush()
> -
> -    sub =3D subprocess=2EPopen(' '=2Ejoin(command), cwd=3Ddir,
> -                           stdout=3Dsubprocess=2EPIPE,
> -                           stderr=3Dsubprocess=2ESTDOUT)
> -
> -    for line in sub=2Estdout:
> -        print(line=2Edecode(sys=2Egetdefaultencoding())=2Erstrip())
> -
> -    sub=2Ewait()
> -
> -    return sub=2Ereturncode
> -
> -def get_repo(url, working):
> -    shell(['git', 'clone', '--no-checkout', url, working])
> -
> -def get_branch(tag, working):
> -    shell(['git', 'checkout', '-b', 'tmp', tag], working)
> -
> -def put_branch(working):
> -    shell(['git', 'checkout', 'master'], working)
> -    shell(['git', 'branch', '-d', 'tmp'], working)
> -
> -def copy_file(working, dir, name):
> -    try:
> -        os=2Emakedirs('include\\xen\\%s' % dir)
> -    except OSError:
> -        None
> -
> -    src =3D open('%s\\xen\\include\\%s\\%s' % (working, dir, name), 'r'=
)
> -    dst =3D open('include\\xen\\%s\\%s' % (dir, name), 'w', newline=3D'=
\n')
> -
> -    print(name)
> -
> -    for line in src:
> -        line =3D re=2Esub(' unsigned long', ' ULONG_PTR', line)
> -        line =3D re=2Esub('\(unsigned long', '(ULONG_PTR', line)
> -        line =3D re=2Esub(' long', ' LONG_PTR', line)
> -        line =3D re=2Esub('\(long', '(LONG_PTR', line)
> -        dst=2Ewrite(line)
> -
> -    dst=2Eclose()
> -    src=2Eclose()
> -
> -if __name__ =3D=3D '__main__':
> -    tag =3D sys=2Eargv[1]
> -    working =3D sys=2Eargv[2]
> -
> -    get_repo('git://xenbits=2Exen=2Eorg/xen=2Egit', working)
> -    get_branch(tag, working)
> -
> -    shell(['git', 'rm', '-r', '-f', 'xen'], 'include')
> -
> -    copy_file(working, 'public', 'xen=2Eh')
> -    copy_file(working, 'public', 'xen-compat=2Eh')
> -
> -    copy_file(working, 'public\\arch-x86', 'xen=2Eh')
> -    copy_file(working, 'public\\arch-x86', 'xen-x86_32=2Eh')
> -    copy_file(working, 'public\\arch-x86', 'xen-x86_64=2Eh')
> -
> -    copy_file(working, 'public\\hvm', 'hvm_info_table=2Eh')
> -
> -    put_branch(working)
> -
> -    shell(['git', 'add', 'xen'], 'include')
> diff --git a/include/xen-types=2Eh b/include/xen-types=2Eh
> deleted file mode 100644
> index b618af2=2E=2E0000000
> --- a/include/xen-types=2Eh
> +++ /dev/null
> @@ -1,59 +0,0 @@
> -/* Copyright (c) Xen Project=2E
> - * Copyright (c) Cloud Software Group, Inc=2E
> - * All rights reserved=2E
> - *
> - * Redistribution and use in source and binary forms,
> - * with or without modification, are permitted provided
> - * that the following conditions are met:
> - *
> - * *   Redistributions of source code must retain the above
> - *     copyright notice, this list of conditions and the
> - *     following disclaimer=2E
> - * *   Redistributions in binary form must reproduce the above
> - *     copyright notice, this list of conditions and the
> - *     following disclaimer in the documentation and/or other
> - *     materials provided with the distribution=2E
> - *
> - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
> - * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
> - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
> - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
> - * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
> - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
> - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
> - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
> - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
> - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
> - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
> - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
> - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
> - * SUCH DAMAGE=2E
> - */
> -
> -#ifndef _XEN_TYPES_H
> -#define _XEN_TYPES_H
> -
> -#include <ntddk=2Eh>
> -
> -// Define types necessary to include xen headers
> -
> -typedef CHAR    int8_t;
> -typedef SHORT   int16_t;
> -typedef LONG    int32_t;
> -typedef LONG64  int64_t;
> -
> -typedef UCHAR   uint8_t;
> -typedef USHORT  uint16_t;
> -typedef ULONG   uint32_t;
> -typedef ULONG64 uint64_t;
> -
> -#define xen_mb()    KeMemoryBarrier()
> -#if defined(_M_IX86) || defined(_M_X64)
> -#define xen_wmb()   KeMemoryBarrierWithoutFence()
> -#define xen_rmb()   KeMemoryBarrierWithoutFence()
> -#else
> -#define xen_wmb()   KeMemoryBarrier()
> -#define xen_rmb()   KeMemoryBarrier()
> -#endif
> -
> -#endif  // _XEN_TYPES_H
> diff --git a/include/xen-version=2Eh b/include/xen-version=2Eh
> deleted file mode 100644
> index 224ca88=2E=2E0000000
> --- a/include/xen-version=2Eh
> +++ /dev/null
> @@ -1,38 +0,0 @@
> -/* Copyright (c) Xen Project=2E
> - * Copyright (c) Cloud Software Group, Inc=2E
> - * All rights reserved=2E
> - *
> - * Redistribution and use in source and binary forms,
> - * with or without modification, are permitted provided
> - * that the following conditions are met:
> - *
> - * *   Redistributions of source code must retain the above
> - *     copyright notice, this list of conditions and the
> - *     following disclaimer=2E
> - * *   Redistributions in binary form must reproduce the above
> - *     copyright notice, this list of conditions and the
> - *     following disclaimer in the documentation and/or other
> - *     materials provided with the distribution=2E
> - *
> - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
> - * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
> - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
> - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
> - * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
> - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
> - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
> - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
> - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
> - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
> - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
> - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
> - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
> - * SUCH DAMAGE=2E
> - */
> -
> -#ifndef _XEN_VERSION_H
> -#define _XEN_VERSION_H
> -
> -#define __XEN_INTERFACE_VERSION__ __XEN_LATEST_INTERFACE_VERSION__
> -
> -#endif  // _XEN_VERSION_H
> diff --git a/include/xen-warnings=2Eh b/include/xen-warnings=2Eh
> deleted file mode 100644
> index 30c0f7d=2E=2E0000000
> --- a/include/xen-warnings=2Eh
> +++ /dev/null
> @@ -1,43 +0,0 @@
> -/* Copyright (c) Xen Project=2E
> - * Copyright (c) Cloud Software Group, Inc=2E
> - * All rights reserved=2E
> - *
> - * Redistribution and use in source and binary forms,
> - * with or without modification, are permitted provided
> - * that the following conditions are met:
> - *
> - * *   Redistributions of source code must retain the above
> - *     copyright notice, this list of conditions and the
> - *     following disclaimer=2E
> - * *   Redistributions in binary form must reproduce the above
> - *     copyright notice, this list of conditions and the
> - *     following disclaimer in the documentation and/or other
> - *     materials provided with the distribution=2E
> - *
> - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
> - * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
> - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
> - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
> - * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
> - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
> - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
> - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
> - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
> - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
> - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
> - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
> - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
> - * SUCH DAMAGE=2E
> - */
> -
> -#ifndef _XEN_WARNINGS_H
> -#define _XEN_WARNINGS_H
> -
> -#include <ntddk=2Eh>
> -
> -// Disable warnings necessary to include xen headers
> -
> -# pragma warning(disable:4214) // nonstandard extension used : bit fiel=
d types other than int
> -# pragma warning(disable:4200) // nonstandard extension used : zero-siz=
ed array in struct/union
> -
> -#endif  // _XEN_WARNINGS_H
> diff --git a/include/xen=2Eh b/include/xen=2Eh
> deleted file mode 100644
> index 2cee266=2E=2E0000000
> --- a/include/xen=2Eh
> +++ /dev/null
> @@ -1,44 +0,0 @@
> -/* Copyright (c) Xen Project=2E
> - * Copyright (c) Cloud Software Group, Inc=2E
> - * All rights reserved=2E
> - *
> - * Redistribution and use in source and binary forms,
> - * with or without modification, are permitted provided
> - * that the following conditions are met:
> - *
> - * *   Redistributions of source code must retain the above
> - *     copyright notice, this list of conditions and the
> - *     following disclaimer=2E
> - * *   Redistributions in binary form must reproduce the above
> - *     copyright notice, this list of conditions and the
> - *     following disclaimer in the documentation and/or other
> - *     materials provided with the distribution=2E
> - *
> - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
> - * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
> - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
> - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
> - * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
> - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
> - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
> - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
> - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
> - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
> - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
> - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
> - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
> - * SUCH DAMAGE=2E
> - */
> -
> -#ifndef _XEN_H
> -#define _XEN_H
> -
> -#include <ntddk=2Eh>
> -
> -#include <xen-version=2Eh>
> -#include <xen-types=2Eh>
> -#include <xen-warnings=2Eh>
> -
> -#include <public/hvm/hvm_info_table=2Eh>
> -
> -#endif  // _XEN_H
> diff --git a/include/xen/public/arch-x86/xen-x86_32=2Eh b/include/xen/pu=
blic/arch-x86/xen-x86_32=2Eh
> deleted file mode 100644
> index d23340b=2E=2E0000000
> --- a/include/xen/public/arch-x86/xen-x86_32=2Eh
> +++ /dev/null
> @@ -1,169 +0,0 @@
> -/**********************************************************************=
********
> - * xen-x86_32=2Eh
> - *
> - * Guest OS interface to x86 32-bit Xen=2E
> - *
> - * Permission is hereby granted, free of charge, to any person obtainin=
g a copy
> - * of this software and associated documentation files (the "Software")=
, to
> - * deal in the Software without restriction, including without limitati=
on the
> - * rights to use, copy, modify, merge, publish, distribute, sublicense,=
 and/or
> - * sell copies of the Software, and to permit persons to whom the Softw=
are is
> - * furnished to do so, subject to the following conditions:
> - *
> - * The above copyright notice and this permission notice shall be inclu=
ded in
> - * all copies or substantial portions of the Software=2E
> - *
> - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPR=
ESS OR
> - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL=
ITY,
> - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT =
SHALL THE
> - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTH=
ER
> - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARIS=
ING
> - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
> - * DEALINGS IN THE SOFTWARE=2E
> - *
> - * Copyright (c) 2004-2007, K A Fraser
> - */
> -
> -#ifndef __XEN_PUBLIC_ARCH_X86_XEN_X86_32_H__
> -#define __XEN_PUBLIC_ARCH_X86_XEN_X86_32_H__
> -
> -/*
> - * Hypercall interface:
> - *  Input:  %ebx, %ecx, %edx, %esi, %edi, %ebp (arguments 1-6)
> - *  Output: %eax
> - * Access is via hypercall page (set up by guest loader or via a Xen MS=
R):
> - *  call hypercall_page + hypercall-number * 32
> - * Clobbered: Argument registers (e=2Eg=2E, 2-arg hypercall clobbers %e=
bx,%ecx)
> - */
> -
> -/*
> - * These flat segments are in the Xen-private section of every GDT=2E S=
ince these
> - * are also present in the initial GDT, many OSes will be able to avoid
> - * installing their own GDT=2E
> - */
> -#define FLAT_RING1_CS 0xe019    /* GDT index 259 */
> -#define FLAT_RING1_DS 0xe021    /* GDT index 260 */
> -#define FLAT_RING1_SS 0xe021    /* GDT index 260 */
> -#define FLAT_RING3_CS 0xe02b    /* GDT index 261 */
> -#define FLAT_RING3_DS 0xe033    /* GDT index 262 */
> -#define FLAT_RING3_SS 0xe033    /* GDT index 262 */
> -
> -#define FLAT_KERNEL_CS FLAT_RING1_CS
> -#define FLAT_KERNEL_DS FLAT_RING1_DS
> -#define FLAT_KERNEL_SS FLAT_RING1_SS
> -#define FLAT_USER_CS    FLAT_RING3_CS
> -#define FLAT_USER_DS    FLAT_RING3_DS
> -#define FLAT_USER_SS    FLAT_RING3_SS
> -
> -#define __HYPERVISOR_VIRT_START_PAE    0xF5800000
> -#define __MACH2PHYS_VIRT_START_PAE     0xF5800000
> -#define __MACH2PHYS_VIRT_END_PAE       0xF6800000
> -#define HYPERVISOR_VIRT_START_PAE      xen_mk_ulong(__HYPERVISOR_VIRT_S=
TART_PAE)
> -#define MACH2PHYS_VIRT_START_PAE       xen_mk_ulong(__MACH2PHYS_VIRT_ST=
ART_PAE)
> -#define MACH2PHYS_VIRT_END_PAE         xen_mk_ulong(__MACH2PHYS_VIRT_EN=
D_PAE)
> -
> -/* Non-PAE bounds are obsolete=2E */
> -#define __HYPERVISOR_VIRT_START_NONPAE 0xFC000000
> -#define __MACH2PHYS_VIRT_START_NONPAE  0xFC000000
> -#define __MACH2PHYS_VIRT_END_NONPAE    0xFC400000
> -#define HYPERVISOR_VIRT_START_NONPAE   \
> -    xen_mk_ulong(__HYPERVISOR_VIRT_START_NONPAE)
> -#define MACH2PHYS_VIRT_START_NONPAE    \
> -    xen_mk_ulong(__MACH2PHYS_VIRT_START_NONPAE)
> -#define MACH2PHYS_VIRT_END_NONPAE      \
> -    xen_mk_ulong(__MACH2PHYS_VIRT_END_NONPAE)
> -
> -#define __HYPERVISOR_VIRT_START __HYPERVISOR_VIRT_START_PAE
> -#define __MACH2PHYS_VIRT_START  __MACH2PHYS_VIRT_START_PAE
> -#define __MACH2PHYS_VIRT_END    __MACH2PHYS_VIRT_END_PAE
> -
> -#ifndef HYPERVISOR_VIRT_START
> -#define HYPERVISOR_VIRT_START xen_mk_ulong(__HYPERVISOR_VIRT_START)
> -#endif
> -
> -#define MACH2PHYS_VIRT_START  xen_mk_ulong(__MACH2PHYS_VIRT_START)
> -#define MACH2PHYS_VIRT_END    xen_mk_ulong(__MACH2PHYS_VIRT_END)
> -#define MACH2PHYS_NR_ENTRIES  ((MACH2PHYS_VIRT_END-MACH2PHYS_VIRT_START=
)>>2)
> -#ifndef machine_to_phys_mapping
> -#define machine_to_phys_mapping ((ULONG_PTR *)MACH2PHYS_VIRT_START)
> -#endif
> -
> -/* 32-/64-bit invariability for control interfaces (domctl/sysctl)=2E *=
/
> -#if defined(__XEN__) || defined(__XEN_TOOLS__)
> -#undef ___DEFINE_XEN_GUEST_HANDLE
> -#define ___DEFINE_XEN_GUEST_HANDLE(name, type)                  \
> -    typedef struct { type *p; }                                 \
> -        __guest_handle_ ## name;                                \
> -    typedef struct { union { type *p; uint64_aligned_t q; }; }  \
> -        __guest_handle_64_ ## name
> -#undef set_xen_guest_handle_raw
> -#define set_xen_guest_handle_raw(hnd, val)                  \
> -    do { if ( sizeof(hnd) =3D=3D 8 ) *(uint64_t *)&(hnd) =3D 0;   \
> -         (hnd)=2Ep =3D val;                                     \
> -    } while ( 0 )
> -#define  int64_aligned_t  int64_t __attribute__((aligned(8)))
> -#define uint64_aligned_t uint64_t __attribute__((aligned(8)))
> -#define __XEN_GUEST_HANDLE_64(name) __guest_handle_64_ ## name
> -#define XEN_GUEST_HANDLE_64(name) __XEN_GUEST_HANDLE_64(name)
> -#endif
> -
> -#ifndef __ASSEMBLY__
> -
> -struct cpu_user_regs {
> -    uint32_t ebx;
> -    uint32_t ecx;
> -    uint32_t edx;
> -    uint32_t esi;
> -    uint32_t edi;
> -    uint32_t ebp;
> -    uint32_t eax;
> -    uint16_t error_code;    /* private */
> -    uint16_t entry_vector;  /* private */
> -    uint32_t eip;
> -    uint16_t cs;
> -    uint8_t  saved_upcall_mask;
> -    uint8_t  _pad0;
> -    uint32_t eflags;        /* eflags=2EIF =3D=3D !saved_upcall_mask */
> -    uint32_t esp;
> -    uint16_t ss, _pad1;
> -    uint16_t es, _pad2;
> -    uint16_t ds, _pad3;
> -    uint16_t fs, _pad4;
> -    uint16_t gs, _pad5;
> -};
> -typedef struct cpu_user_regs cpu_user_regs_t;
> -DEFINE_XEN_GUEST_HANDLE(cpu_user_regs_t);
> -
> -/*
> - * Page-directory addresses above 4GB do not fit into architectural %cr=
3=2E
> - * When accessing %cr3, or equivalent field in vcpu_guest_context, gues=
ts
> - * must use the following accessor macros to pack/unpack valid MFNs=2E
> - */
> -#define xen_pfn_to_cr3(pfn) (((unsigned)(pfn) << 12) | ((unsigned)(pfn)=
 >> 20))
> -#define xen_cr3_to_pfn(cr3) (((unsigned)(cr3) >> 12) | ((unsigned)(cr3)=
 << 20))
> -
> -struct arch_vcpu_info {
> -    ULONG_PTR cr2;
> -    ULONG_PTR pad[5]; /* sizeof(vcpu_info_t) =3D=3D 64 */
> -};
> -typedef struct arch_vcpu_info arch_vcpu_info_t;
> -
> -struct xen_callback {
> -    ULONG_PTR cs;
> -    ULONG_PTR eip;
> -};
> -typedef struct xen_callback xen_callback_t;
> -
> -#endif /* !__ASSEMBLY__ */
> -
> -#endif /* __XEN_PUBLIC_ARCH_X86_XEN_X86_32_H__ */
> -
> -/*
> - * Local variables:
> - * mode: C
> - * c-file-style: "BSD"
> - * c-basic-offset: 4
> - * tab-width: 4
> - * indent-tabs-mode: nil
> - * End:
> - */
> diff --git a/include/xen/public/arch-x86/xen-x86_64=2Eh b/include/xen/pu=
blic/arch-x86/xen-x86_64=2Eh
> deleted file mode 100644
> index 2f53f69=2E=2E0000000
> --- a/include/xen/public/arch-x86/xen-x86_64=2Eh
> +++ /dev/null
> @@ -1,202 +0,0 @@
> -/**********************************************************************=
********
> - * xen-x86_64=2Eh
> - *
> - * Guest OS interface to x86 64-bit Xen=2E
> - *
> - * Permission is hereby granted, free of charge, to any person obtainin=
g a copy
> - * of this software and associated documentation files (the "Software")=
, to
> - * deal in the Software without restriction, including without limitati=
on the
> - * rights to use, copy, modify, merge, publish, distribute, sublicense,=
 and/or
> - * sell copies of the Software, and to permit persons to whom the Softw=
are is
> - * furnished to do so, subject to the following conditions:
> - *
> - * The above copyright notice and this permission notice shall be inclu=
ded in
> - * all copies or substantial portions of the Software=2E
> - *
> - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPR=
ESS OR
> - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL=
ITY,
> - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT =
SHALL THE
> - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTH=
ER
> - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARIS=
ING
> - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
> - * DEALINGS IN THE SOFTWARE=2E
> - *
> - * Copyright (c) 2004-2006, K A Fraser
> - */
> -
> -#ifndef __XEN_PUBLIC_ARCH_X86_XEN_X86_64_H__
> -#define __XEN_PUBLIC_ARCH_X86_XEN_X86_64_H__
> -
> -/*
> - * Hypercall interface:
> - *  Input:  %rdi, %rsi, %rdx, %r10, %r8, %r9 (arguments 1-6)
> - *  Output: %rax
> - * Access is via hypercall page (set up by guest loader or via a Xen MS=
R):
> - *  call hypercall_page + hypercall-number * 32
> - * Clobbered: argument registers (e=2Eg=2E, 2-arg hypercall clobbers %r=
di,%rsi)
> - */
> -
> -/*
> - * 64-bit segment selectors
> - * These flat segments are in the Xen-private section of every GDT=2E S=
ince these
> - * are also present in the initial GDT, many OSes will be able to avoid
> - * installing their own GDT=2E
> - */
> -
> -#define FLAT_RING3_CS32 0xe023  /* GDT index 260 */
> -#define FLAT_RING3_CS64 0xe033  /* GDT index 261 */
> -#define FLAT_RING3_DS32 0xe02b  /* GDT index 262 */
> -#define FLAT_RING3_DS64 0x0000  /* NULL selector */
> -#define FLAT_RING3_SS32 0xe02b  /* GDT index 262 */
> -#define FLAT_RING3_SS64 0xe02b  /* GDT index 262 */
> -
> -#define FLAT_KERNEL_DS64 FLAT_RING3_DS64
> -#define FLAT_KERNEL_DS32 FLAT_RING3_DS32
> -#define FLAT_KERNEL_DS   FLAT_KERNEL_DS64
> -#define FLAT_KERNEL_CS64 FLAT_RING3_CS64
> -#define FLAT_KERNEL_CS32 FLAT_RING3_CS32
> -#define FLAT_KERNEL_CS   FLAT_KERNEL_CS64
> -#define FLAT_KERNEL_SS64 FLAT_RING3_SS64
> -#define FLAT_KERNEL_SS32 FLAT_RING3_SS32
> -#define FLAT_KERNEL_SS   FLAT_KERNEL_SS64
> -
> -#define FLAT_USER_DS64 FLAT_RING3_DS64
> -#define FLAT_USER_DS32 FLAT_RING3_DS32
> -#define FLAT_USER_DS   FLAT_USER_DS64
> -#define FLAT_USER_CS64 FLAT_RING3_CS64
> -#define FLAT_USER_CS32 FLAT_RING3_CS32
> -#define FLAT_USER_CS   FLAT_USER_CS64
> -#define FLAT_USER_SS64 FLAT_RING3_SS64
> -#define FLAT_USER_SS32 FLAT_RING3_SS32
> -#define FLAT_USER_SS   FLAT_USER_SS64
> -
> -#define __HYPERVISOR_VIRT_START 0xFFFF800000000000
> -#define __HYPERVISOR_VIRT_END   0xFFFF880000000000
> -#define __MACH2PHYS_VIRT_START  0xFFFF800000000000
> -#define __MACH2PHYS_VIRT_END    0xFFFF804000000000
> -
> -#ifndef HYPERVISOR_VIRT_START
> -#define HYPERVISOR_VIRT_START xen_mk_ulong(__HYPERVISOR_VIRT_START)
> -#define HYPERVISOR_VIRT_END   xen_mk_ulong(__HYPERVISOR_VIRT_END)
> -#endif
> -
> -#define MACH2PHYS_VIRT_START  xen_mk_ulong(__MACH2PHYS_VIRT_START)
> -#define MACH2PHYS_VIRT_END    xen_mk_ulong(__MACH2PHYS_VIRT_END)
> -#define MACH2PHYS_NR_ENTRIES  ((MACH2PHYS_VIRT_END-MACH2PHYS_VIRT_START=
)>>3)
> -#ifndef machine_to_phys_mapping
> -#define machine_to_phys_mapping ((ULONG_PTR *)HYPERVISOR_VIRT_START)
> -#endif
> -
> -/*
> - * int HYPERVISOR_set_segment_base(unsigned int which, ULONG_PTR base)
> - *  @which =3D=3D SEGBASE_*  ;  @base =3D=3D 64-bit base address
> - * Returns 0 on success=2E
> - */
> -#define SEGBASE_FS          0
> -#define SEGBASE_GS_USER     1
> -#define SEGBASE_GS_KERNEL   2
> -#define SEGBASE_GS_USER_SEL 3 /* Set user %gs specified in base[15:0] *=
/
> -
> -/*
> - * int HYPERVISOR_iret(void)
> - * All arguments are on the kernel stack, in the following format=2E
> - * Never returns if successful=2E Current kernel context is lost=2E
> - * The saved CS is mapped as follows:
> - *   RING0 -> RING3 kernel mode=2E
> - *   RING1 -> RING3 kernel mode=2E
> - *   RING2 -> RING3 kernel mode=2E
> - *   RING3 -> RING3 user mode=2E
> - * However RING0 indicates that the guest kernel should return to itese=
lf
> - * directly with
> - *      orb   $3,1*8(%rsp)
> - *      iretq
> - * If flags contains VGCF_in_syscall:
> - *   Restore RAX, RIP, RFLAGS, RSP=2E
> - *   Discard R11, RCX, CS, SS=2E
> - * Otherwise:
> - *   Restore RAX, R11, RCX, CS:RIP, RFLAGS, SS:RSP=2E
> - * All other registers are saved on hypercall entry and restored to use=
r=2E
> - */
> -/* Guest exited in SYSCALL context? Return to guest with SYSRET? */
> -#define _VGCF_in_syscall 8
> -#define VGCF_in_syscall  (1<<_VGCF_in_syscall)
> -#define VGCF_IN_SYSCALL  VGCF_in_syscall
> -
> -#ifndef __ASSEMBLY__
> -
> -struct iret_context {
> -    /* Top of stack (%rsp at point of hypercall)=2E */
> -    uint64_t rax, r11, rcx, flags, rip, cs, rflags, rsp, ss;
> -    /* Bottom of iret stack frame=2E */
> -};
> -
> -#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
> -/* Anonymous union includes both 32- and 64-bit names (e=2Eg=2E, eax/ra=
x)=2E */
> -#define __DECL_REG(name) union { \
> -    uint64_t r ## name, e ## name; \
> -    uint32_t _e ## name; \
> -}
> -#else
> -/* Non-gcc sources must always use the proper 64-bit name (e=2Eg=2E, ra=
x)=2E */
> -#define __DECL_REG(name) uint64_t r ## name
> -#endif
> -
> -struct cpu_user_regs {
> -    uint64_t r15;
> -    uint64_t r14;
> -    uint64_t r13;
> -    uint64_t r12;
> -    __DECL_REG(bp);
> -    __DECL_REG(bx);
> -    uint64_t r11;
> -    uint64_t r10;
> -    uint64_t r9;
> -    uint64_t r8;
> -    __DECL_REG(ax);
> -    __DECL_REG(cx);
> -    __DECL_REG(dx);
> -    __DECL_REG(si);
> -    __DECL_REG(di);
> -    uint32_t error_code;    /* private */
> -    uint32_t entry_vector;  /* private */
> -    __DECL_REG(ip);
> -    uint16_t cs, _pad0[1];
> -    uint8_t  saved_upcall_mask;
> -    uint8_t  _pad1[3];
> -    __DECL_REG(flags);      /* rflags=2EIF =3D=3D !saved_upcall_mask */
> -    __DECL_REG(sp);
> -    uint16_t ss, _pad2[3];
> -    uint16_t es, _pad3[3];
> -    uint16_t ds, _pad4[3];
> -    uint16_t fs, _pad5[3]; /* Non-zero =3D> takes precedence over fs_ba=
se=2E     */
> -    uint16_t gs, _pad6[3]; /* Non-zero =3D> takes precedence over gs_ba=
se_usr=2E */
> -};
> -typedef struct cpu_user_regs cpu_user_regs_t;
> -DEFINE_XEN_GUEST_HANDLE(cpu_user_regs_t);
> -
> -#undef __DECL_REG
> -
> -#define xen_pfn_to_cr3(pfn) ((ULONG_PTR)(pfn) << 12)
> -#define xen_cr3_to_pfn(cr3) ((ULONG_PTR)(cr3) >> 12)
> -
> -struct arch_vcpu_info {
> -    ULONG_PTR cr2;
> -    ULONG_PTR pad; /* sizeof(vcpu_info_t) =3D=3D 64 */
> -};
> -typedef struct arch_vcpu_info arch_vcpu_info_t;
> -
> -typedef ULONG_PTR xen_callback_t;
> -
> -#endif /* !__ASSEMBLY__ */
> -
> -#endif /* __XEN_PUBLIC_ARCH_X86_XEN_X86_64_H__ */
> -
> -/*
> - * Local variables:
> - * mode: C
> - * c-file-style: "BSD"
> - * c-basic-offset: 4
> - * tab-width: 4
> - * indent-tabs-mode: nil
> - * End:
> - */
> diff --git a/include/xen/public/arch-x86/xen=2Eh b/include/xen/public/ar=
ch-x86/xen=2Eh
> deleted file mode 100644
> index 05db77f=2E=2E0000000
> --- a/include/xen/public/arch-x86/xen=2Eh
> +++ /dev/null
> @@ -1,338 +0,0 @@
> -/**********************************************************************=
********
> - * arch-x86/xen=2Eh
> - *
> - * Guest OS interface to x86 Xen=2E
> - *
> - * Permission is hereby granted, free of charge, to any person obtainin=
g a copy
> - * of this software and associated documentation files (the "Software")=
, to
> - * deal in the Software without restriction, including without limitati=
on the
> - * rights to use, copy, modify, merge, publish, distribute, sublicense,=
 and/or
> - * sell copies of the Software, and to permit persons to whom the Softw=
are is
> - * furnished to do so, subject to the following conditions:
> - *
> - * The above copyright notice and this permission notice shall be inclu=
ded in
> - * all copies or substantial portions of the Software=2E
> - *
> - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPR=
ESS OR
> - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL=
ITY,
> - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT =
SHALL THE
> - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTH=
ER
> - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARIS=
ING
> - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
> - * DEALINGS IN THE SOFTWARE=2E
> - *
> - * Copyright (c) 2004-2006, K A Fraser
> - */
> -
> -#include "=2E=2E/xen=2Eh"
> -
> -#ifndef __XEN_PUBLIC_ARCH_X86_XEN_H__
> -#define __XEN_PUBLIC_ARCH_X86_XEN_H__
> -
> -/* Structural guest handles introduced in 0x00030201=2E */
> -#if __XEN_INTERFACE_VERSION__ >=3D 0x00030201
> -#define ___DEFINE_XEN_GUEST_HANDLE(name, type) \
> -    typedef struct { type *p; } __guest_handle_ ## name
> -#else
> -#define ___DEFINE_XEN_GUEST_HANDLE(name, type) \
> -    typedef type * __guest_handle_ ## name
> -#endif
> -
> -/*
> - * XEN_GUEST_HANDLE represents a guest pointer, when passed as a field
> - * in a struct in memory=2E
> - * XEN_GUEST_HANDLE_PARAM represent a guest pointer, when passed as an
> - * hypercall argument=2E
> - * XEN_GUEST_HANDLE_PARAM and XEN_GUEST_HANDLE are the same on X86 but
> - * they might not be on other architectures=2E
> - */
> -#define __DEFINE_XEN_GUEST_HANDLE(name, type) \
> -    ___DEFINE_XEN_GUEST_HANDLE(name, type);   \
> -    ___DEFINE_XEN_GUEST_HANDLE(const_##name, const type)
> -#define DEFINE_XEN_GUEST_HANDLE(name)   __DEFINE_XEN_GUEST_HANDLE(name,=
 name)
> -#define __XEN_GUEST_HANDLE(name)        __guest_handle_ ## name
> -#define XEN_GUEST_HANDLE(name)          __XEN_GUEST_HANDLE(name)
> -#define XEN_GUEST_HANDLE_PARAM(name)    XEN_GUEST_HANDLE(name)
> -#define set_xen_guest_handle_raw(hnd, val)  do { (hnd)=2Ep =3D val; } w=
hile (0)
> -#define set_xen_guest_handle(hnd, val) set_xen_guest_handle_raw(hnd, va=
l)
> -
> -#if defined(__i386__)
> -#include "xen-x86_32=2Eh"
> -#elif defined(__x86_64__)
> -#include "xen-x86_64=2Eh"
> -#endif
> -
> -#ifndef __ASSEMBLY__
> -typedef ULONG_PTR xen_pfn_t;
> -#define PRI_xen_pfn "lx"
> -#endif
> -
> -#define XEN_HAVE_PV_GUEST_ENTRY 1
> -
> -#define XEN_HAVE_PV_UPCALL_MASK 1
> -
> -/*
> - * `incontents 200 segdesc Segment Descriptor Tables
> - */
> -/*
> - * ` enum neg_errnoval
> - * ` HYPERVISOR_set_gdt(const xen_pfn_t frames[], unsigned int entries)=
;
> - * `
> - */
> -/*
> - * A number of GDT entries are reserved by Xen=2E These are not situate=
d at the
> - * start of the GDT because some stupid OSes export hard-coded selector=
 values
> - * in their ABI=2E These hard-coded values are always near the start of=
 the GDT,
> - * so Xen places itself out of the way, at the far end of the GDT=2E
> - *
> - * NB The LDT is set using the MMUEXT_SET_LDT op of HYPERVISOR_mmuext_o=
p
> - */
> -#define FIRST_RESERVED_GDT_PAGE  14
> -#define FIRST_RESERVED_GDT_BYTE  (FIRST_RESERVED_GDT_PAGE * 4096)
> -#define FIRST_RESERVED_GDT_ENTRY (FIRST_RESERVED_GDT_BYTE / 8)
> -
> -
> -/*
> - * ` enum neg_errnoval
> - * ` HYPERVISOR_update_descriptor(u64 pa, u64 desc);
> - * `
> - * ` @pa   The machine physical address of the descriptor to
> - * `       update=2E Must be either a descriptor page or writable=2E
> - * ` @desc The descriptor value to update, in the same format as a
> - * `       native descriptor table entry=2E
> - */
> -
> -/* Maximum number of virtual CPUs in legacy multi-processor guests=2E *=
/
> -#define XEN_LEGACY_MAX_VCPUS 32
> -
> -#ifndef __ASSEMBLY__
> -
> -typedef ULONG_PTR xen_ulong_t;
> -#define PRI_xen_ulong "lx"
> -
> -/*
> - * ` enum neg_errnoval
> - * ` HYPERVISOR_stack_switch(ULONG_PTR ss, ULONG_PTR esp);
> - * `
> - * Sets the stack segment and pointer for the current vcpu=2E
> - */
> -
> -/*
> - * ` enum neg_errnoval
> - * ` HYPERVISOR_set_trap_table(const struct trap_info traps[]);
> - * `
> - */
> -/*
> - * Send an array of these to HYPERVISOR_set_trap_table()=2E
> - * Terminate the array with a sentinel entry, with traps[]=2Eaddress=3D=
=3D0=2E
> - * The privilege level specifies which modes may enter a trap via a sof=
tware
> - * interrupt=2E On x86/64, since rings 1 and 2 are unavailable, we allo=
cate
> - * privilege levels as follows:
> - *  Level =3D=3D 0: Noone may enter
> - *  Level =3D=3D 1: Kernel may enter
> - *  Level =3D=3D 2: Kernel may enter
> - *  Level =3D=3D 3: Everyone may enter
> - */
> -#define TI_GET_DPL(_ti)      ((_ti)->flags & 3)
> -#define TI_GET_IF(_ti)       ((_ti)->flags & 4)
> -#define TI_SET_DPL(_ti,_dpl) ((_ti)->flags |=3D (_dpl))
> -#define TI_SET_IF(_ti,_if)   ((_ti)->flags |=3D ((!!(_if))<<2))
> -struct trap_info {
> -    uint8_t       vector;  /* exception vector                         =
     */
> -    uint8_t       flags;   /* 0-3: privilege level; 4: clear event enab=
le?  */
> -    uint16_t      cs;      /* code selector                            =
     */
> -    ULONG_PTR address; /* code offset                                  =
 */
> -};
> -typedef struct trap_info trap_info_t;
> -DEFINE_XEN_GUEST_HANDLE(trap_info_t);
> -
> -typedef uint64_t tsc_timestamp_t; /* RDTSC timestamp */
> -
> -/*
> - * The following is all CPU context=2E Note that the fpu_ctxt block is =
filled
> - * in by FXSAVE if the CPU has feature FXSR; otherwise FSAVE is used=2E
> - *
> - * Also note that when calling DOMCTL_setvcpucontext and VCPU_initialis=
e
> - * for HVM and PVH guests, not all information in this structure is upd=
ated:
> - *
> - * - For HVM guests, the structures read include: fpu_ctxt (if
> - * VGCT_I387_VALID is set), flags, user_regs, debugreg[*]
> - *
> - * - PVH guests are the same as HVM guests, but additionally use ctrlre=
g[3] to
> - * set cr3=2E All other fields not used should be set to 0=2E
> - */
> -struct vcpu_guest_context {
> -    /* FPU registers come first so they can be aligned for FXSAVE/FXRST=
OR=2E */
> -    struct { char x[512]; } fpu_ctxt;       /* User-level FPU registers=
     */
> -#define VGCF_I387_VALID                (1<<0)
> -#define VGCF_IN_KERNEL                 (1<<2)
> -#define _VGCF_i387_valid               0
> -#define VGCF_i387_valid                (1<<_VGCF_i387_valid)
> -#define _VGCF_in_kernel                2
> -#define VGCF_in_kernel                 (1<<_VGCF_in_kernel)
> -#define _VGCF_failsafe_disables_events 3
> -#define VGCF_failsafe_disables_events  (1<<_VGCF_failsafe_disables_even=
ts)
> -#define _VGCF_syscall_disables_events  4
> -#define VGCF_syscall_disables_events   (1<<_VGCF_syscall_disables_event=
s)
> -#define _VGCF_online                   5
> -#define VGCF_online                    (1<<_VGCF_online)
> -    ULONG_PTR flags;                    /* VGCF_* flags                =
 */
> -    struct cpu_user_regs user_regs;         /* User-level CPU registers=
     */
> -    struct trap_info trap_ctxt[256];        /* Virtual IDT             =
     */
> -    ULONG_PTR ldt_base, ldt_ents;       /* LDT (linear address, # ents)=
 */
> -    ULONG_PTR gdt_frames[16], gdt_ents; /* GDT (machine frames, # ents)=
 */
> -    ULONG_PTR kernel_ss, kernel_sp;     /* Virtual TSS (only SS1/SP1)  =
 */
> -    /* NB=2E User pagetable on x86/64 is placed in ctrlreg[1]=2E */
> -    ULONG_PTR ctrlreg[8];               /* CR0-CR7 (control registers) =
 */
> -    ULONG_PTR debugreg[8];              /* DB0-DB7 (debug registers)   =
 */
> -#ifdef __i386__
> -    ULONG_PTR event_callback_cs;        /* CS:EIP of event callback    =
 */
> -    ULONG_PTR event_callback_eip;
> -    ULONG_PTR failsafe_callback_cs;     /* CS:EIP of failsafe callback =
 */
> -    ULONG_PTR failsafe_callback_eip;
> -#else
> -    ULONG_PTR event_callback_eip;
> -    ULONG_PTR failsafe_callback_eip;
> -#ifdef __XEN__
> -    union {
> -        ULONG_PTR syscall_callback_eip;
> -        struct {
> -            unsigned int event_callback_cs;    /* compat CS of event cb=
     */
> -            unsigned int failsafe_callback_cs; /* compat CS of failsafe=
 cb  */
> -        };
> -    };
> -#else
> -    ULONG_PTR syscall_callback_eip;
> -#endif
> -#endif
> -    ULONG_PTR vm_assist;                /* VMASST_TYPE_* bitmap */
> -#ifdef __x86_64__
> -    /* Segment base addresses=2E */
> -    uint64_t      fs_base;
> -    uint64_t      gs_base_kernel;
> -    uint64_t      gs_base_user;
> -#endif
> -};
> -typedef struct vcpu_guest_context vcpu_guest_context_t;
> -DEFINE_XEN_GUEST_HANDLE(vcpu_guest_context_t);
> -
> -struct arch_shared_info {
> -    /*
> -     * Number of valid entries in the p2m table(s) anchored at
> -     * pfn_to_mfn_frame_list_list and/or p2m_vaddr=2E
> -     */
> -    ULONG_PTR max_pfn;
> -    /*
> -     * Frame containing list of mfns containing list of mfns containing=
 p2m=2E
> -     * A value of 0 indicates it has not yet been set up, ~0 indicates =
it has
> -     * been set to invalid e=2Eg=2E due to the p2m being too large for =
the 3-level
> -     * p2m tree=2E In this case the linear mapper p2m list anchored at =
p2m_vaddr
> -     * is to be used=2E
> -     */
> -    xen_pfn_t     pfn_to_mfn_frame_list_list;
> -    ULONG_PTR nmi_reason;
> -    /*
> -     * Following three fields are valid if p2m_cr3 contains a value dif=
ferent
> -     * from 0=2E
> -     * p2m_cr3 is the root of the address space where p2m_vaddr is vali=
d=2E
> -     * p2m_cr3 is in the same format as a cr3 value in the vcpu registe=
r state
> -     * and holds the folded machine frame number (via xen_pfn_to_cr3) o=
f a
> -     * L3 or L4 page table=2E
> -     * p2m_vaddr holds the virtual address of the linear p2m list=2E Al=
l entries
> -     * in the range [0=2E=2E=2Emax_pfn[ are accessible via this pointer=
=2E
> -     * p2m_generation will be incremented by the guest before and after=
 each
> -     * change of the mappings of the p2m list=2E p2m_generation starts =
at 0 and
> -     * a value with the least significant bit set indicates that a mapp=
ing
> -     * update is in progress=2E This allows guest external software (e=
=2Eg=2E in Dom0)
> -     * to verify that read mappings are consistent and whether they hav=
e changed
> -     * since the last check=2E
> -     * Modifying a p2m element in the linear p2m list is allowed via an=
 atomic
> -     * write only=2E
> -     */
> -    ULONG_PTR p2m_cr3;         /* cr3 value of the p2m address space */
> -    ULONG_PTR p2m_vaddr;       /* virtual address of the p2m list */
> -    ULONG_PTR p2m_generation;  /* generation count of p2m mapping */
> -#ifdef __i386__
> -    /* There's no room for this field in the generic structure=2E */
> -    uint32_t wc_sec_hi;
> -#endif
> -};
> -typedef struct arch_shared_info arch_shared_info_t;
> -
> -#if defined(__XEN__) || defined(__XEN_TOOLS__)
> -/*
> - * struct xen_arch_domainconfig's ABI is covered by
> - * XEN_DOMCTL_INTERFACE_VERSION=2E
> - */
> -struct xen_arch_domainconfig {
> -#define _XEN_X86_EMU_LAPIC          0
> -#define XEN_X86_EMU_LAPIC           (1U<<_XEN_X86_EMU_LAPIC)
> -#define _XEN_X86_EMU_HPET           1
> -#define XEN_X86_EMU_HPET            (1U<<_XEN_X86_EMU_HPET)
> -#define _XEN_X86_EMU_PM             2
> -#define XEN_X86_EMU_PM              (1U<<_XEN_X86_EMU_PM)
> -#define _XEN_X86_EMU_RTC            3
> -#define XEN_X86_EMU_RTC             (1U<<_XEN_X86_EMU_RTC)
> -#define _XEN_X86_EMU_IOAPIC         4
> -#define XEN_X86_EMU_IOAPIC          (1U<<_XEN_X86_EMU_IOAPIC)
> -#define _XEN_X86_EMU_PIC            5
> -#define XEN_X86_EMU_PIC             (1U<<_XEN_X86_EMU_PIC)
> -#define _XEN_X86_EMU_VGA            6
> -#define XEN_X86_EMU_VGA             (1U<<_XEN_X86_EMU_VGA)
> -#define _XEN_X86_EMU_IOMMU          7
> -#define XEN_X86_EMU_IOMMU           (1U<<_XEN_X86_EMU_IOMMU)
> -#define _XEN_X86_EMU_PIT            8
> -#define XEN_X86_EMU_PIT             (1U<<_XEN_X86_EMU_PIT)
> -
> -#define XEN_X86_EMU_ALL             (XEN_X86_EMU_LAPIC | XEN_X86_EMU_HP=
ET |  \
> -                                     XEN_X86_EMU_PM | XEN_X86_EMU_RTC |=
      \
> -                                     XEN_X86_EMU_IOAPIC | XEN_X86_EMU_P=
IC |  \
> -                                     XEN_X86_EMU_VGA | XEN_X86_EMU_IOMM=
U |   \
> -                                     XEN_X86_EMU_PIT)
> -    uint32_t emulation_flags;
> -};
> -#endif
> -
> -#endif /* !__ASSEMBLY__ */
> -
> -/*
> - * ` enum neg_errnoval
> - * ` HYPERVISOR_fpu_taskswitch(int set);
> - * `
> - * Sets (if set!=3D0) or clears (if set=3D=3D0) CR0=2ETS=2E
> - */
> -
> -/*
> - * ` enum neg_errnoval
> - * ` HYPERVISOR_set_debugreg(int regno, ULONG_PTR value);
> - *
> - * ` ULONG_PTR
> - * ` HYPERVISOR_get_debugreg(int regno);
> - * For 0<=3Dreg<=3D7, returns the debug register value=2E
> - * For other values of reg, returns ((ULONG_PTR)-EINVAL)=2E
> - * (Unfortunately, this interface is defective=2E)
> - */
> -
> -/*
> - * Prefix forces emulation of some non-trapping instructions=2E
> - * Currently only CPUID=2E
> - */
> -#ifdef __ASSEMBLY__
> -#define XEN_EMULATE_PREFIX =2Ebyte 0x0f,0x0b,0x78,0x65,0x6e ;
> -#define XEN_CPUID          XEN_EMULATE_PREFIX cpuid
> -#else
> -#define XEN_EMULATE_PREFIX "=2Ebyte 0x0f,0x0b,0x78,0x65,0x6e ; "
> -#define XEN_CPUID          XEN_EMULATE_PREFIX "cpuid"
> -#endif
> -
> -#endif /* __XEN_PUBLIC_ARCH_X86_XEN_H__ */
> -
> -/*
> - * Local variables:
> - * mode: C
> - * c-file-style: "BSD"
> - * c-basic-offset: 4
> - * tab-width: 4
> - * indent-tabs-mode: nil
> - * End:
> - */
> diff --git a/include/xen/public/hvm/hvm_info_table=2Eh b/include/xen/pub=
lic/hvm/hvm_info_table=2Eh
> deleted file mode 100644
> index a92e8f7=2E=2E0000000
> --- a/include/xen/public/hvm/hvm_info_table=2Eh
> +++ /dev/null
> @@ -1,74 +0,0 @@
> -/**********************************************************************=
********
> - * hvm/hvm_info_table=2Eh
> - *
> - * HVM parameter and information table, written into guest memory map=
=2E
> - *
> - * Permission is hereby granted, free of charge, to any person obtainin=
g a copy
> - * of this software and associated documentation files (the "Software")=
, to
> - * deal in the Software without restriction, including without limitati=
on the
> - * rights to use, copy, modify, merge, publish, distribute, sublicense,=
 and/or
> - * sell copies of the Software, and to permit persons to whom the Softw=
are is
> - * furnished to do so, subject to the following conditions:
> - *
> - * The above copyright notice and this permission notice shall be inclu=
ded in
> - * all copies or substantial portions of the Software=2E
> - *
> - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPR=
ESS OR
> - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL=
ITY,
> - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT =
SHALL THE
> - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTH=
ER
> - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARIS=
ING
> - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
> - * DEALINGS IN THE SOFTWARE=2E
> - *
> - * Copyright (c) 2006, Keir Fraser
> - */
> -
> -#ifndef __XEN_PUBLIC_HVM_HVM_INFO_TABLE_H__
> -#define __XEN_PUBLIC_HVM_HVM_INFO_TABLE_H__
> -
> -#define HVM_INFO_PFN         0x09F
> -#define HVM_INFO_OFFSET      0x800
> -#define HVM_INFO_PADDR       ((HVM_INFO_PFN << 12) + HVM_INFO_OFFSET)
> -
> -/* Maximum we can support with current vLAPIC ID mapping=2E */
> -#define HVM_MAX_VCPUS        128
> -
> -struct hvm_info_table {
> -    char        signature[8]; /* "HVM INFO" */
> -    uint32_t    length;
> -    uint8_t     checksum;
> -
> -    /* Should firmware build APIC descriptors (APIC MADT / MP BIOS)? */
> -    uint8_t     apic_mode;
> -
> -    /* How many CPUs does this domain have? */
> -    uint32_t    nr_vcpus;
> -
> -    /*
> -     * MEMORY MAP provided by HVM domain builder=2E
> -     * Notes:
> -     *  1=2E page_to_phys(x) =3D x << 12
> -     *  2=2E If a field is zero, the corresponding range does not exist=
=2E
> -     */
> -    /*
> -     *  0x0 to page_to_phys(low_mem_pgend)-1:
> -     *    RAM below 4GB (except for VGA hole 0xA0000-0xBFFFF)
> -     */
> -    uint32_t    low_mem_pgend;
> -    /*
> -     *  page_to_phys(reserved_mem_pgstart) to 0xFFFFFFFF:
> -     *    Reserved for special memory mappings
> -     */
> -    uint32_t    reserved_mem_pgstart;
> -    /*
> -     *  0x100000000 to page_to_phys(high_mem_pgend)-1:
> -     *    RAM above 4GB
> -     */
> -    uint32_t    high_mem_pgend;
> -
> -    /* Bitmap of which CPUs are online at boot time=2E */
> -    uint8_t     vcpu_online[(HVM_MAX_VCPUS + 7)/8];
> -};
> -
> -#endif /* __XEN_PUBLIC_HVM_HVM_INFO_TABLE_H__ */
> diff --git a/include/xen/public/xen-compat=2Eh b/include/xen/public/xen-=
compat=2Eh
> deleted file mode 100644
> index 2eea0e2=2E=2E0000000
> --- a/include/xen/public/xen-compat=2Eh
> +++ /dev/null
> @@ -1,44 +0,0 @@
> -/**********************************************************************=
********
> - * xen-compat=2Eh
> - *
> - * Guest OS interface to Xen=2E  Compatibility layer=2E
> - *
> - * Permission is hereby granted, free of charge, to any person obtainin=
g a copy
> - * of this software and associated documentation files (the "Software")=
, to
> - * deal in the Software without restriction, including without limitati=
on the
> - * rights to use, copy, modify, merge, publish, distribute, sublicense,=
 and/or
> - * sell copies of the Software, and to permit persons to whom the Softw=
are is
> - * furnished to do so, subject to the following conditions:
> - *
> - * The above copyright notice and this permission notice shall be inclu=
ded in
> - * all copies or substantial portions of the Software=2E
> - *
> - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPR=
ESS OR
> - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL=
ITY,
> - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT =
SHALL THE
> - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTH=
ER
> - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARIS=
ING
> - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
> - * DEALINGS IN THE SOFTWARE=2E
> - *
> - * Copyright (c) 2006, Christian Limpach
> - */
> -
> -#ifndef __XEN_PUBLIC_XEN_COMPAT_H__
> -#define __XEN_PUBLIC_XEN_COMPAT_H__
> -
> -#define __XEN_LATEST_INTERFACE_VERSION__ 0x00040700
> -
> -#if defined(__XEN__) || defined(__XEN_TOOLS__)
> -/* Xen is built with matching headers and implements the latest interfa=
ce=2E */
> -#define __XEN_INTERFACE_VERSION__ __XEN_LATEST_INTERFACE_VERSION__
> -#elif !defined(__XEN_INTERFACE_VERSION__)
> -/* Guests which do not specify a version get the legacy interface=2E */
> -#define __XEN_INTERFACE_VERSION__ 0x00000000
> -#endif
> -
> -#if __XEN_INTERFACE_VERSION__ > __XEN_LATEST_INTERFACE_VERSION__
> -#error "These header files do not support the requested interface versi=
on=2E"
> -#endif
> -
> -#endif /* __XEN_PUBLIC_XEN_COMPAT_H__ */
> diff --git a/include/xen/public/xen=2Eh b/include/xen/public/xen=2Eh
> deleted file mode 100644
> index 2057b52=2E=2E0000000
> --- a/include/xen/public/xen=2Eh
> +++ /dev/null
> @@ -1,995 +0,0 @@
> -/**********************************************************************=
********
> - * xen=2Eh
> - *
> - * Guest OS interface to Xen=2E
> - *
> - * Permission is hereby granted, free of charge, to any person obtainin=
g a copy
> - * of this software and associated documentation files (the "Software")=
, to
> - * deal in the Software without restriction, including without limitati=
on the
> - * rights to use, copy, modify, merge, publish, distribute, sublicense,=
 and/or
> - * sell copies of the Software, and to permit persons to whom the Softw=
are is
> - * furnished to do so, subject to the following conditions:
> - *
> - * The above copyright notice and this permission notice shall be inclu=
ded in
> - * all copies or substantial portions of the Software=2E
> - *
> - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPR=
ESS OR
> - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL=
ITY,
> - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT =
SHALL THE
> - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTH=
ER
> - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARIS=
ING
> - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
> - * DEALINGS IN THE SOFTWARE=2E
> - *
> - * Copyright (c) 2004, K A Fraser
> - */
> -
> -#ifndef __XEN_PUBLIC_XEN_H__
> -#define __XEN_PUBLIC_XEN_H__
> -
> -#include "xen-compat=2Eh"
> -
> -#if defined(__i386__) || defined(__x86_64__)
> -#include "arch-x86/xen=2Eh"
> -#elif defined(__arm__) || defined (__aarch64__)
> -#include "arch-arm=2Eh"
> -#else
> -#error "Unsupported architecture"
> -#endif
> -
> -#ifndef __ASSEMBLY__
> -/* Guest handles for primitive C types=2E */
> -DEFINE_XEN_GUEST_HANDLE(char);
> -__DEFINE_XEN_GUEST_HANDLE(uchar, unsigned char);
> -DEFINE_XEN_GUEST_HANDLE(int);
> -__DEFINE_XEN_GUEST_HANDLE(uint,  unsigned int);
> -#if __XEN_INTERFACE_VERSION__ < 0x00040300
> -DEFINE_XEN_GUEST_HANDLE(LONG_PTR);
> -__DEFINE_XEN_GUEST_HANDLE(ulong, ULONG_PTR);
> -#endif
> -DEFINE_XEN_GUEST_HANDLE(void);
> -
> -DEFINE_XEN_GUEST_HANDLE(uint64_t);
> -DEFINE_XEN_GUEST_HANDLE(xen_pfn_t);
> -DEFINE_XEN_GUEST_HANDLE(xen_ulong_t);
> -
> -/* Turn a plain number into a C unsigned (LONG_PTR) constant=2E */
> -#define __xen_mk_uint(x)  x ## U
> -#define __xen_mk_ulong(x) x ## UL
> -#define xen_mk_uint(x)    __xen_mk_uint(x)
> -#define xen_mk_ulong(x)   __xen_mk_ulong(x)
> -
> -#else
> -
> -/* In assembly code we cannot use C numeric constant suffixes=2E */
> -#define xen_mk_uint(x)  x
> -#define xen_mk_ulong(x) x
> -
> -#endif
> -
> -/*
> - * HYPERCALLS
> - */
> -
> -/* `incontents 100 hcalls List of hypercalls
> - * ` enum hypercall_num { // __HYPERVISOR_* =3D> HYPERVISOR_*()
> - */
> -
> -#define __HYPERVISOR_set_trap_table        0
> -#define __HYPERVISOR_mmu_update            1
> -#define __HYPERVISOR_set_gdt               2
> -#define __HYPERVISOR_stack_switch          3
> -#define __HYPERVISOR_set_callbacks         4
> -#define __HYPERVISOR_fpu_taskswitch        5
> -#define __HYPERVISOR_sched_op_compat       6 /* compat since 0x00030101=
 */
> -#define __HYPERVISOR_platform_op           7
> -#define __HYPERVISOR_set_debugreg          8
> -#define __HYPERVISOR_get_debugreg          9
> -#define __HYPERVISOR_update_descriptor    10
> -#define __HYPERVISOR_memory_op            12
> -#define __HYPERVISOR_multicall            13
> -#define __HYPERVISOR_update_va_mapping    14
> -#define __HYPERVISOR_set_timer_op         15
> -#define __HYPERVISOR_event_channel_op_compat 16 /* compat since 0x00030=
202 */
> -#define __HYPERVISOR_xen_version          17
> -#define __HYPERVISOR_console_io           18
> -#define __HYPERVISOR_physdev_op_compat    19 /* compat since 0x00030202=
 */
> -#define __HYPERVISOR_grant_table_op       20
> -#define __HYPERVISOR_vm_assist            21
> -#define __HYPERVISOR_update_va_mapping_otherdomain 22
> -#define __HYPERVISOR_iret                 23 /* x86 only */
> -#define __HYPERVISOR_vcpu_op              24
> -#define __HYPERVISOR_set_segment_base     25 /* x86/64 only */
> -#define __HYPERVISOR_mmuext_op            26
> -#define __HYPERVISOR_xsm_op               27
> -#define __HYPERVISOR_nmi_op               28
> -#define __HYPERVISOR_sched_op             29
> -#define __HYPERVISOR_callback_op          30
> -#define __HYPERVISOR_xenoprof_op          31
> -#define __HYPERVISOR_event_channel_op     32
> -#define __HYPERVISOR_physdev_op           33
> -#define __HYPERVISOR_hvm_op               34
> -#define __HYPERVISOR_sysctl               35
> -#define __HYPERVISOR_domctl               36
> -#define __HYPERVISOR_kexec_op             37
> -#define __HYPERVISOR_tmem_op              38
> -#define __HYPERVISOR_xc_reserved_op       39 /* reserved for XenClient =
*/
> -#define __HYPERVISOR_xenpmu_op            40
> -
> -/* Architecture-specific hypercall definitions=2E */
> -#define __HYPERVISOR_arch_0               48
> -#define __HYPERVISOR_arch_1               49
> -#define __HYPERVISOR_arch_2               50
> -#define __HYPERVISOR_arch_3               51
> -#define __HYPERVISOR_arch_4               52
> -#define __HYPERVISOR_arch_5               53
> -#define __HYPERVISOR_arch_6               54
> -#define __HYPERVISOR_arch_7               55
> -
> -/* ` } */
> -
> -/*
> - * HYPERCALL COMPATIBILITY=2E
> - */
> -
> -/* New sched_op hypercall introduced in 0x00030101=2E */
> -#if __XEN_INTERFACE_VERSION__ < 0x00030101
> -#undef __HYPERVISOR_sched_op
> -#define __HYPERVISOR_sched_op __HYPERVISOR_sched_op_compat
> -#endif
> -
> -/* New event-channel and physdev hypercalls introduced in 0x00030202=2E=
 */
> -#if __XEN_INTERFACE_VERSION__ < 0x00030202
> -#undef __HYPERVISOR_event_channel_op
> -#define __HYPERVISOR_event_channel_op __HYPERVISOR_event_channel_op_com=
pat
> -#undef __HYPERVISOR_physdev_op
> -#define __HYPERVISOR_physdev_op __HYPERVISOR_physdev_op_compat
> -#endif
> -
> -/* New platform_op hypercall introduced in 0x00030204=2E */
> -#if __XEN_INTERFACE_VERSION__ < 0x00030204
> -#define __HYPERVISOR_dom0_op __HYPERVISOR_platform_op
> -#endif
> -
> -/*
> - * VIRTUAL INTERRUPTS
> - *
> - * Virtual interrupts that a guest OS may receive from Xen=2E
> - *
> - * In the side comments, 'V=2E' denotes a per-VCPU VIRQ while 'G=2E' de=
notes a
> - * global VIRQ=2E The former can be bound once per VCPU and cannot be r=
e-bound=2E
> - * The latter can be allocated only once per guest: they must initially=
 be
> - * allocated to VCPU0 but can subsequently be re-bound=2E
> - */
> -/* ` enum virq { */
> -#define VIRQ_TIMER      0  /* V=2E Timebase update, and/or requested ti=
meout=2E  */
> -#define VIRQ_DEBUG      1  /* V=2E Request guest to dump debug info=2E =
          */
> -#define VIRQ_CONSOLE    2  /* G=2E (DOM0) Bytes received on emergency c=
onsole=2E */
> -#define VIRQ_DOM_EXC    3  /* G=2E (DOM0) Exceptional event for some do=
main=2E   */
> -#define VIRQ_TBUF       4  /* G=2E (DOM0) Trace buffer has records avai=
lable=2E  */
> -#define VIRQ_DEBUGGER   6  /* G=2E (DOM0) A domain has paused for debug=
ging=2E   */
> -#define VIRQ_XENOPROF   7  /* V=2E XenOprofile interrupt: new sample av=
ailable */
> -#define VIRQ_CON_RING   8  /* G=2E (DOM0) Bytes received on console    =
        */
> -#define VIRQ_PCPU_STATE 9  /* G=2E (DOM0) PCPU state changed           =
        */
> -#define VIRQ_MEM_EVENT  10 /* G=2E (DOM0) A memory event has occured   =
        */
> -#define VIRQ_XC_RESERVED 11 /* G=2E Reserved for XenClient             =
        */
> -#define VIRQ_ENOMEM     12 /* G=2E (DOM0) Low on heap memory       */
> -#define VIRQ_XENPMU     13 /* V=2E  PMC interrupt                      =
        */
> -
> -/* Architecture-specific VIRQ definitions=2E */
> -#define VIRQ_ARCH_0    16
> -#define VIRQ_ARCH_1    17
> -#define VIRQ_ARCH_2    18
> -#define VIRQ_ARCH_3    19
> -#define VIRQ_ARCH_4    20
> -#define VIRQ_ARCH_5    21
> -#define VIRQ_ARCH_6    22
> -#define VIRQ_ARCH_7    23
> -/* ` } */
> -
> -#define NR_VIRQS       24
> -
> -/*
> - * ` enum neg_errnoval
> - * ` HYPERVISOR_mmu_update(const struct mmu_update reqs[],
> - * `                       unsigned count, unsigned *done_out,
> - * `                       unsigned foreigndom)
> - * `
> - * @reqs is an array of mmu_update_t structures ((ptr, val) pairs)=2E
> - * @count is the length of the above array=2E
> - * @pdone is an output parameter indicating number of completed operati=
ons
> - * @foreigndom[15:0]: FD, the expected owner of data pages referenced i=
n this
> - *                    hypercall invocation=2E Can be DOMID_SELF=2E
> - * @foreigndom[31:16]: PFD, the expected owner of pagetable pages refer=
enced
> - *                     in this hypercall invocation=2E The value of thi=
s field
> - *                     (x) encodes the PFD as follows:
> - *                     x =3D=3D 0 =3D> PFD =3D=3D DOMID_SELF
> - *                     x !=3D 0 =3D> PFD =3D=3D x - 1
> - *
> - * Sub-commands: ptr[1:0] specifies the appropriate MMU_* command=2E
> - * -------------
> - * ptr[1:0] =3D=3D MMU_NORMAL_PT_UPDATE:
> - * Updates an entry in a page table belonging to PFD=2E If updating an =
L1 table,
> - * and the new table entry is valid/present, the mapped frame must belo=
ng to
> - * FD=2E If attempting to map an I/O page then the caller assumes the p=
rivilege
> - * of the FD=2E
> - * FD =3D=3D DOMID_IO: Permit /only/ I/O mappings, at the priv level of=
 the caller=2E
> - * FD =3D=3D DOMID_XEN: Map restricted areas of Xen's heap space=2E
> - * ptr[:2]  -- Machine address of the page-table entry to modify=2E
> - * val      -- Value to write=2E
> - *
> - * There also certain implicit requirements when using this hypercall=
=2E The
> - * pages that make up a pagetable must be mapped read-only in the guest=
=2E
> - * This prevents uncontrolled guest updates to the pagetable=2E Xen str=
ictly
> - * enforces this, and will disallow any pagetable update which will end=
 up
> - * mapping pagetable page RW, and will disallow using any writable page=
 as a
> - * pagetable=2E In practice it means that when constructing a page tabl=
e for a
> - * process, thread, etc, we MUST be very dilligient in following these =
rules:
> - *  1)=2E Start with top-level page (PGD or in Xen language: L4)=2E Fil=
l out
> - *      the entries=2E
> - *  2)=2E Keep on going, filling out the upper (PUD or L3), and middle =
(PMD
> - *      or L2)=2E
> - *  3)=2E Start filling out the PTE table (L1) with the PTE entries=2E =
Once
> - *  	done, make sure to set each of those entries to RO (so writeable b=
it
> - *  	is unset)=2E Once that has been completed, set the PMD (L2) for th=
is
> - *  	PTE table as RO=2E
> - *  4)=2E When completed with all of the PMD (L2) entries, and all of t=
hem have
> - *  	been set to RO, make sure to set RO the PUD (L3)=2E Do the same
> - *  	operation on PGD (L4) pagetable entries that have a PUD (L3) entry=
=2E
> - *  5)=2E Now before you can use those pages (so setting the cr3), you =
MUST also
> - *      pin them so that the hypervisor can verify the entries=2E This =
is done
> - *      via the HYPERVISOR_mmuext_op(MMUEXT_PIN_L4_TABLE, guest physica=
l frame
> - *      number of the PGD (L4))=2E And this point the HYPERVISOR_mmuext=
_op(
> - *      MMUEXT_NEW_BASEPTR, guest physical frame number of the PGD (L4)=
) can be
> - *      issued=2E
> - * For 32-bit guests, the L4 is not used (as there is less pagetables),=
 so
> - * instead use L3=2E
> - * At this point the pagetables can be modified using the MMU_NORMAL_PT=
_UPDATE
> - * hypercall=2E Also if so desired the OS can also try to write to the =
PTE
> - * and be trapped by the hypervisor (as the PTE entry is RO)=2E
> - *
> - * To deallocate the pages, the operations are the reverse of the steps
> - * mentioned above=2E The argument is MMUEXT_UNPIN_TABLE for all levels=
 and the
> - * pagetable MUST not be in use (meaning that the cr3 is not set to it)=
=2E
> - *
> - * ptr[1:0] =3D=3D MMU_MACHPHYS_UPDATE:
> - * Updates an entry in the machine->pseudo-physical mapping table=2E
> - * ptr[:2]  -- Machine address within the frame whose mapping to modify=
=2E
> - *             The frame must belong to the FD, if one is specified=2E
> - * val      -- Value to write into the mapping entry=2E
> - *
> - * ptr[1:0] =3D=3D MMU_PT_UPDATE_PRESERVE_AD:
> - * As MMU_NORMAL_PT_UPDATE above, but A/D bits currently in the PTE are=
 ORed
> - * with those in @val=2E
> - *
> - * @val is usually the machine frame number along with some attributes=
=2E
> - * The attributes by default follow the architecture defined bits=2E Me=
aning that
> - * if this is a X86_64 machine and four page table layout is used, the =
layout
> - * of val is:
> - *  - 63 if set means No execute (NX)
> - *  - 46-13 the machine frame number
> - *  - 12 available for guest
> - *  - 11 available for guest
> - *  - 10 available for guest
> - *  - 9 available for guest
> - *  - 8 global
> - *  - 7 PAT (PSE is disabled, must use hypercall to make 4MB or 2MB pag=
es)
> - *  - 6 dirty
> - *  - 5 accessed
> - *  - 4 page cached disabled
> - *  - 3 page write through
> - *  - 2 userspace accessible
> - *  - 1 writeable
> - *  - 0 present
> - *
> - *  The one bits that does not fit with the default layout is the PAGE_=
PSE
> - *  also called PAGE_PAT)=2E The MMUEXT_[UN]MARK_SUPER arguments to the
> - *  HYPERVISOR_mmuext_op serve as mechanism to set a pagetable to be 4M=
B
> - *  (or 2MB) instead of using the PAGE_PSE bit=2E
> - *
> - *  The reason that the PAGE_PSE (bit 7) is not being utilized is due t=
o Xen
> - *  using it as the Page Attribute Table (PAT) bit - for details on it =
please
> - *  refer to Intel SDM 10=2E12=2E The PAT allows to set the caching att=
ributes of
> - *  pages instead of using MTRRs=2E
> - *
> - *  The PAT MSR is as follows (it is a 64-bit value, each entry is 8 bi=
ts):
> - *                    PAT4                 PAT0
> - *  +-----+-----+----+----+----+-----+----+----+
> - *  | UC  | UC- | WC | WB | UC | UC- | WC | WB |  <=3D Linux
> - *  +-----+-----+----+----+----+-----+----+----+
> - *  | UC  | UC- | WT | WB | UC | UC- | WT | WB |  <=3D BIOS (default wh=
en machine boots)
> - *  +-----+-----+----+----+----+-----+----+----+
> - *  | rsv | rsv | WP | WC | UC | UC- | WT | WB |  <=3D Xen
> - *  +-----+-----+----+----+----+-----+----+----+
> - *
> - *  The lookup of this index table translates to looking up
> - *  Bit 7, Bit 4, and Bit 3 of val entry:
> - *
> - *  PAT/PSE (bit 7) =2E=2E=2E PCD (bit 4) =2E=2E PWT (bit 3)=2E
> - *
> - *  If all bits are off, then we are using PAT0=2E If bit 3 turned on,
> - *  then we are using PAT1, if bit 3 and bit 4, then PAT2=2E=2E
> - *
> - *  As you can see, the Linux PAT1 translates to PAT4 under Xen=2E Whic=
h means
> - *  that if a guest that follows Linux's PAT setup and would like to se=
t Write
> - *  Combined on pages it MUST use PAT4 entry=2E Meaning that Bit 7 (PAG=
E_PAT) is
> - *  set=2E For example, under Linux it only uses PAT0, PAT1, and PAT2 f=
or the
> - *  caching as:
> - *
> - *   WB =3D none (so PAT0)
> - *   WC =3D PWT (bit 3 on)
> - *   UC =3D PWT | PCD (bit 3 and 4 are on)=2E
> - *
> - * To make it work with Xen, it needs to translate the WC bit as so:
> - *
> - *  PWT (so bit 3 on) --> PAT (so bit 7 is on) and clear bit 3
> - *
> - * And to translate back it would:
> - *
> - * PAT (bit 7 on) --> PWT (bit 3 on) and clear bit 7=2E
> - */
> -#define MMU_NORMAL_PT_UPDATE      0 /* checked '*ptr =3D val'=2E ptr is=
 MA=2E      */
> -#define MMU_MACHPHYS_UPDATE       1 /* ptr =3D MA of frame to modify en=
try for */
> -#define MMU_PT_UPDATE_PRESERVE_AD 2 /* atomically: *ptr =3D val | (*ptr=
&(A|D)) */
> -
> -/*
> - * MMU EXTENDED OPERATIONS
> - *
> - * ` enum neg_errnoval
> - * ` HYPERVISOR_mmuext_op(mmuext_op_t uops[],
> - * `                      unsigned int count,
> - * `                      unsigned int *pdone,
> - * `                      unsigned int foreigndom)
> - */
> -/* HYPERVISOR_mmuext_op() accepts a list of mmuext_op structures=2E
> - * A foreigndom (FD) can be specified (or DOMID_SELF for none)=2E
> - * Where the FD has some effect, it is described below=2E
> - *
> - * cmd: MMUEXT_(UN)PIN_*_TABLE
> - * mfn: Machine frame number to be (un)pinned as a p=2Et=2E page=2E
> - *      The frame must belong to the FD, if one is specified=2E
> - *
> - * cmd: MMUEXT_NEW_BASEPTR
> - * mfn: Machine frame number of new page-table base to install in MMU=
=2E
> - *
> - * cmd: MMUEXT_NEW_USER_BASEPTR [x86/64 only]
> - * mfn: Machine frame number of new page-table base to install in MMU
> - *      when in user space=2E
> - *
> - * cmd: MMUEXT_TLB_FLUSH_LOCAL
> - * No additional arguments=2E Flushes local TLB=2E
> - *
> - * cmd: MMUEXT_INVLPG_LOCAL
> - * linear_addr: Linear address to be flushed from the local TLB=2E
> - *
> - * cmd: MMUEXT_TLB_FLUSH_MULTI
> - * vcpumask: Pointer to bitmap of VCPUs to be flushed=2E
> - *
> - * cmd: MMUEXT_INVLPG_MULTI
> - * linear_addr: Linear address to be flushed=2E
> - * vcpumask: Pointer to bitmap of VCPUs to be flushed=2E
> - *
> - * cmd: MMUEXT_TLB_FLUSH_ALL
> - * No additional arguments=2E Flushes all VCPUs' TLBs=2E
> - *
> - * cmd: MMUEXT_INVLPG_ALL
> - * linear_addr: Linear address to be flushed from all VCPUs' TLBs=2E
> - *
> - * cmd: MMUEXT_FLUSH_CACHE
> - * No additional arguments=2E Writes back and flushes cache contents=2E
> - *
> - * cmd: MMUEXT_FLUSH_CACHE_GLOBAL
> - * No additional arguments=2E Writes back and flushes cache contents
> - * on all CPUs in the system=2E
> - *
> - * cmd: MMUEXT_SET_LDT
> - * linear_addr: Linear address of LDT base (NB=2E must be page-aligned)=
=2E
> - * nr_ents: Number of entries in LDT=2E
> - *
> - * cmd: MMUEXT_CLEAR_PAGE
> - * mfn: Machine frame number to be cleared=2E
> - *
> - * cmd: MMUEXT_COPY_PAGE
> - * mfn: Machine frame number of the destination page=2E
> - * src_mfn: Machine frame number of the source page=2E
> - *
> - * cmd: MMUEXT_[UN]MARK_SUPER
> - * mfn: Machine frame number of head of superpage to be [un]marked=2E
> - */
> -/* ` enum mmuext_cmd { */
> -#define MMUEXT_PIN_L1_TABLE      0
> -#define MMUEXT_PIN_L2_TABLE      1
> -#define MMUEXT_PIN_L3_TABLE      2
> -#define MMUEXT_PIN_L4_TABLE      3
> -#define MMUEXT_UNPIN_TABLE       4
> -#define MMUEXT_NEW_BASEPTR       5
> -#define MMUEXT_TLB_FLUSH_LOCAL   6
> -#define MMUEXT_INVLPG_LOCAL      7
> -#define MMUEXT_TLB_FLUSH_MULTI   8
> -#define MMUEXT_INVLPG_MULTI      9
> -#define MMUEXT_TLB_FLUSH_ALL    10
> -#define MMUEXT_INVLPG_ALL       11
> -#define MMUEXT_FLUSH_CACHE      12
> -#define MMUEXT_SET_LDT          13
> -#define MMUEXT_NEW_USER_BASEPTR 15
> -#define MMUEXT_CLEAR_PAGE       16
> -#define MMUEXT_COPY_PAGE        17
> -#define MMUEXT_FLUSH_CACHE_GLOBAL 18
> -#define MMUEXT_MARK_SUPER       19
> -#define MMUEXT_UNMARK_SUPER     20
> -/* ` } */
> -
> -#ifndef __ASSEMBLY__
> -struct mmuext_op {
> -    unsigned int cmd; /* =3D> enum mmuext_cmd */
> -    union {
> -        /* [UN]PIN_TABLE, NEW_BASEPTR, NEW_USER_BASEPTR
> -         * CLEAR_PAGE, COPY_PAGE, [UN]MARK_SUPER */
> -        xen_pfn_t     mfn;
> -        /* INVLPG_LOCAL, INVLPG_ALL, SET_LDT */
> -        ULONG_PTR linear_addr;
> -    } arg1;
> -    union {
> -        /* SET_LDT */
> -        unsigned int nr_ents;
> -        /* TLB_FLUSH_MULTI, INVLPG_MULTI */
> -#if __XEN_INTERFACE_VERSION__ >=3D 0x00030205
> -        XEN_GUEST_HANDLE(const_void) vcpumask;
> -#else
> -        const void *vcpumask;
> -#endif
> -        /* COPY_PAGE */
> -        xen_pfn_t src_mfn;
> -    } arg2;
> -};
> -typedef struct mmuext_op mmuext_op_t;
> -DEFINE_XEN_GUEST_HANDLE(mmuext_op_t);
> -#endif
> -
> -/*
> - * ` enum neg_errnoval
> - * ` HYPERVISOR_update_va_mapping(ULONG_PTR va, u64 val,
> - * `                              enum uvm_flags flags)
> - * `
> - * ` enum neg_errnoval
> - * ` HYPERVISOR_update_va_mapping_otherdomain(ULONG_PTR va, u64 val,
> - * `                                          enum uvm_flags flags,
> - * `                                          domid_t domid)
> - * `
> - * ` @va: The virtual address whose mapping we want to change
> - * ` @val: The new page table entry, must contain a machine address
> - * ` @flags: Control TLB flushes
> - */
> -/* These are passed as 'flags' to update_va_mapping=2E They can be ORed=
=2E */
> -/* When specifying UVMF_MULTI, also OR in a pointer to a CPU bitmap=2E =
  */
> -/* UVMF_LOCAL is merely UVMF_MULTI with a NULL bitmap pointer=2E       =
  */
> -/* ` enum uvm_flags { */
> -#define UVMF_NONE           (xen_mk_ulong(0)<<0) /* No flushing at all=
=2E   */
> -#define UVMF_TLB_FLUSH      (xen_mk_ulong(1)<<0) /* Flush entire TLB(s)=
=2E  */
> -#define UVMF_INVLPG         (xen_mk_ulong(2)<<0) /* Flush only one entr=
y=2E */
> -#define UVMF_FLUSHTYPE_MASK (xen_mk_ulong(3)<<0)
> -#define UVMF_MULTI          (xen_mk_ulong(0)<<2) /* Flush subset of TLB=
s=2E */
> -#define UVMF_LOCAL          (xen_mk_ulong(0)<<2) /* Flush local TLB=2E =
     */
> -#define UVMF_ALL            (xen_mk_ulong(1)<<2) /* Flush all TLBs=2E  =
     */
> -/* ` } */
> -
> -/*
> - * Commands to HYPERVISOR_console_io()=2E
> - */
> -#define CONSOLEIO_write         0
> -#define CONSOLEIO_read          1
> -
> -/*
> - * Commands to HYPERVISOR_vm_assist()=2E
> - */
> -#define VMASST_CMD_enable                0
> -#define VMASST_CMD_disable               1
> -
> -/* x86/32 guests: simulate full 4GB segment limits=2E */
> -#define VMASST_TYPE_4gb_segments         0
> -
> -/* x86/32 guests: trap (vector 15) whenever above vmassist is used=2E *=
/
> -#define VMASST_TYPE_4gb_segments_notify  1
> -
> -/*
> - * x86 guests: support writes to bottom-level PTEs=2E
> - * NB1=2E Page-directory entries cannot be written=2E
> - * NB2=2E Guest must continue to remove all writable mappings of PTEs=
=2E
> - */
> -#define VMASST_TYPE_writable_pagetables  2
> -
> -/* x86/PAE guests: support PDPTs above 4GB=2E */
> -#define VMASST_TYPE_pae_extended_cr3     3
> -
> -/*
> - * x86 guests: Sane behaviour for virtual iopl
> - *  - virtual iopl updated from do_iret() hypercalls=2E
> - *  - virtual iopl reported in bounce frames=2E
> - *  - guest kernels assumed to be level 0 for the purpose of iopl check=
s=2E
> - */
> -#define VMASST_TYPE_architectural_iopl   4
> -
> -/*
> - * x86/64 guests: strictly hide M2P from user mode=2E
> - * This allows the guest to control respective hypervisor behavior:
> - * - when not set, L4 tables get created with the respective slot blank=
,
> - *   and whenever the L4 table gets used as a kernel one the missing
> - *   mapping gets inserted,
> - * - when set, L4 tables get created with the respective slot initializ=
ed
> - *   as before, and whenever the L4 table gets used as a user one the
> - *   mapping gets zapped=2E
> - */
> -#define VMASST_TYPE_m2p_strict           32
> -
> -#if __XEN_INTERFACE_VERSION__ < 0x00040600
> -#define MAX_VMASST_TYPE                  3
> -#endif
> -
> -/* Domain ids >=3D DOMID_FIRST_RESERVED cannot be used for ordinary dom=
ains=2E */
> -#define DOMID_FIRST_RESERVED xen_mk_uint(0x7FF0)
> -
> -/* DOMID_SELF is used in certain contexts to refer to oneself=2E */
> -#define DOMID_SELF           xen_mk_uint(0x7FF0)
> -
> -/*
> - * DOMID_IO is used to restrict page-table updates to mapping I/O memor=
y=2E
> - * Although no Foreign Domain need be specified to map I/O pages, DOMID=
_IO
> - * is useful to ensure that no mappings to the OS's own heap are accide=
ntally
> - * installed=2E (e=2Eg=2E, in Linux this could cause havoc as reference=
 counts
> - * aren't adjusted on the I/O-mapping code path)=2E
> - * This only makes sense in MMUEXT_SET_FOREIGNDOM, but in that context =
can
> - * be specified by any calling domain=2E
> - */
> -#define DOMID_IO             xen_mk_uint(0x7FF1)
> -
> -/*
> - * DOMID_XEN is used to allow privileged domains to map restricted part=
s of
> - * Xen's heap space (e=2Eg=2E, the machine_to_phys table)=2E
> - * This only makes sense in MMUEXT_SET_FOREIGNDOM, and is only permitte=
d if
> - * the caller is privileged=2E
> - */
> -#define DOMID_XEN            xen_mk_uint(0x7FF2)
> -
> -/*
> - * DOMID_COW is used as the owner of sharable pages */
> -#define DOMID_COW            xen_mk_uint(0x7FF3)
> -
> -/* DOMID_INVALID is used to identify pages with unknown owner=2E */
> -#define DOMID_INVALID        xen_mk_uint(0x7FF4)
> -
> -/* Idle domain=2E */
> -#define DOMID_IDLE           xen_mk_uint(0x7FFF)
> -
> -#ifndef __ASSEMBLY__
> -
> -typedef uint16_t domid_t;
> -
> -/*
> - * Send an array of these to HYPERVISOR_mmu_update()=2E
> - * NB=2E The fields are natural pointer/address size for this architect=
ure=2E
> - */
> -struct mmu_update {
> -    uint64_t ptr;       /* Machine address of PTE=2E */
> -    uint64_t val;       /* New contents of PTE=2E    */
> -};
> -typedef struct mmu_update mmu_update_t;
> -DEFINE_XEN_GUEST_HANDLE(mmu_update_t);
> -
> -/*
> - * ` enum neg_errnoval
> - * ` HYPERVISOR_multicall(multicall_entry_t call_list[],
> - * `                      uint32_t nr_calls);
> - *
> - * NB=2E The fields are logically the natural register size for this
> - * architecture=2E In cases where xen_ulong_t is larger than this then
> - * any unused bits in the upper portion must be zero=2E
> - */
> -struct multicall_entry {
> -    xen_ulong_t op, result;
> -    xen_ulong_t args[6];
> -};
> -typedef struct multicall_entry multicall_entry_t;
> -DEFINE_XEN_GUEST_HANDLE(multicall_entry_t);
> -
> -#if __XEN_INTERFACE_VERSION__ < 0x00040400
> -/*
> - * Event channel endpoints per domain (when using the 2-level ABI):
> - *  1024 if a LONG_PTR is 32 bits; 4096 if a LONG_PTR is 64 bits=2E
> - */
> -#define NR_EVENT_CHANNELS EVTCHN_2L_NR_CHANNELS
> -#endif
> -
> -struct vcpu_time_info {
> -    /*
> -     * Updates to the following values are preceded and followed by an
> -     * increment of 'version'=2E The guest can therefore detect updates=
 by
> -     * looking for changes to 'version'=2E If the least-significant bit=
 of
> -     * the version number is set then an update is in progress and the =
guest
> -     * must wait to read a consistent set of values=2E
> -     * The correct way to interact with the version number is similar t=
o
> -     * Linux's seqlock: see the implementations of read_seqbegin/read_s=
eqretry=2E
> -     */
> -    uint32_t version;
> -    uint32_t pad0;
> -    uint64_t tsc_timestamp;   /* TSC at last update of time vals=2E  */
> -    uint64_t system_time;     /* Time, in nanosecs, since boot=2E    */
> -    /*
> -     * Current system time:
> -     *   system_time +
> -     *   ((((tsc - tsc_timestamp) << tsc_shift) * tsc_to_system_mul) >>=
 32)
> -     * CPU frequency (Hz):
> -     *   ((10^9 << 32) / tsc_to_system_mul) >> tsc_shift
> -     */
> -    uint32_t tsc_to_system_mul;
> -    int8_t   tsc_shift;
> -#if __XEN_INTERFACE_VERSION__ > 0x040600
> -    uint8_t  flags;
> -    uint8_t  pad1[2];
> -#else
> -    int8_t   pad1[3];
> -#endif
> -}; /* 32 bytes */
> -typedef struct vcpu_time_info vcpu_time_info_t;
> -
> -#define XEN_PVCLOCK_TSC_STABLE_BIT     (1 << 0)
> -#define XEN_PVCLOCK_GUEST_STOPPED      (1 << 1)
> -
> -struct vcpu_info {
> -    /*
> -     * 'evtchn_upcall_pending' is written non-zero by Xen to indicate
> -     * a pending notification for a particular VCPU=2E It is then clear=
ed
> -     * by the guest OS /before/ checking for pending work, thus avoidin=
g
> -     * a set-and-check race=2E Note that the mask is only accessed by X=
en
> -     * on the CPU that is currently hosting the VCPU=2E This means that=
 the
> -     * pending and mask flags can be updated by the guest without speci=
al
> -     * synchronisation (i=2Ee=2E, no need for the x86 LOCK prefix)=2E
> -     * This may seem suboptimal because if the pending flag is set by
> -     * a different CPU then an IPI may be scheduled even when the mask
> -     * is set=2E However, note:
> -     *  1=2E The task of 'interrupt holdoff' is covered by the per-even=
t-
> -     *     channel mask bits=2E A 'noisy' event that is continually bei=
ng
> -     *     triggered can be masked at source at this very precise
> -     *     granularity=2E
> -     *  2=2E The main purpose of the per-VCPU mask is therefore to rest=
rict
> -     *     reentrant execution: whether for concurrency control, or to
> -     *     prevent unbounded stack usage=2E Whatever the purpose, we ex=
pect
> -     *     that the mask will be asserted only for short periods at a t=
ime,
> -     *     and so the likelihood of a 'spurious' IPI is suitably small=
=2E
> -     * The mask is read before making an event upcall to the guest: a
> -     * non-zero mask therefore guarantees that the VCPU will not receiv=
e
> -     * an upcall activation=2E The mask is cleared when the VCPU reques=
ts
> -     * to block: this avoids wakeup-waiting races=2E
> -     */
> -    uint8_t evtchn_upcall_pending;
> -#ifdef XEN_HAVE_PV_UPCALL_MASK
> -    uint8_t evtchn_upcall_mask;
> -#else /* XEN_HAVE_PV_UPCALL_MASK */
> -    uint8_t pad0;
> -#endif /* XEN_HAVE_PV_UPCALL_MASK */
> -    xen_ulong_t evtchn_pending_sel;
> -    struct arch_vcpu_info arch;
> -    struct vcpu_time_info time;
> -}; /* 64 bytes (x86) */
> -#ifndef __XEN__
> -typedef struct vcpu_info vcpu_info_t;
> -#endif
> -
> -/*
> - * `incontents 200 startofday_shared Start-of-day shared data structure
> - * Xen/kernel shared data -- pointer provided in start_info=2E
> - *
> - * This structure is defined to be both smaller than a page, and the
> - * only data on the shared page, but may vary in actual size even withi=
n
> - * compatible Xen versions; guests should not rely on the size
> - * of this structure remaining constant=2E
> - */
> -struct shared_info {
> -    struct vcpu_info vcpu_info[XEN_LEGACY_MAX_VCPUS];
> -
> -    /*
> -     * A domain can create "event channels" on which it can send and re=
ceive
> -     * asynchronous event notifications=2E There are three classes of e=
vent that
> -     * are delivered by this mechanism:
> -     *  1=2E Bi-directional inter- and intra-domain connections=2E Doma=
ins must
> -     *     arrange out-of-band to set up a connection (usually by alloc=
ating
> -     *     an unbound 'listener' port and avertising that via a storage=
 service
> -     *     such as xenstore)=2E
> -     *  2=2E Physical interrupts=2E A domain with suitable hardware-acc=
ess
> -     *     privileges can bind an event-channel port to a physical inte=
rrupt
> -     *     source=2E
> -     *  3=2E Virtual interrupts ('events')=2E A domain can bind an even=
t-channel
> -     *     port to a virtual interrupt source, such as the virtual-time=
r
> -     *     device or the emergency console=2E
> -     *
> -     * Event channels are addressed by a "port index"=2E Each channel i=
s
> -     * associated with two bits of information:
> -     *  1=2E PENDING -- notifies the domain that there is a pending not=
ification
> -     *     to be processed=2E This bit is cleared by the guest=2E
> -     *  2=2E MASK -- if this bit is clear then a 0->1 transition of PEN=
DING
> -     *     will cause an asynchronous upcall to be scheduled=2E This bi=
t is only
> -     *     updated by the guest=2E It is read-only within Xen=2E If a c=
hannel
> -     *     becomes pending while the channel is masked then the 'edge' =
is lost
> -     *     (i=2Ee=2E, when the channel is unmasked, the guest must manu=
ally handle
> -     *     pending notifications as no upcall will be scheduled by Xen)=
=2E
> -     *
> -     * To expedite scanning of pending notifications, any 0->1 pending
> -     * transition on an unmasked channel causes a corresponding bit in =
a
> -     * per-vcpu selector word to be set=2E Each bit in the selector cov=
ers a
> -     * 'C LONG_PTR' in the PENDING bitfield array=2E
> -     */
> -    xen_ulong_t evtchn_pending[sizeof(xen_ulong_t) * 8];
> -    xen_ulong_t evtchn_mask[sizeof(xen_ulong_t) * 8];
> -
> -    /*
> -     * Wallclock time: updated only by control software=2E Guests shoul=
d base
> -     * their gettimeofday() syscall on this wallclock-base value=2E
> -     */
> -    uint32_t wc_version;      /* Version counter: see vcpu_time_info_t=
=2E */
> -    uint32_t wc_sec;          /* Secs  00:00:00 UTC, Jan 1, 1970=2E  */
> -    uint32_t wc_nsec;         /* Nsecs 00:00:00 UTC, Jan 1, 1970=2E  */
> -#if !defined(__i386__)
> -    uint32_t wc_sec_hi;
> -# define xen_wc_sec_hi wc_sec_hi
> -#elif !defined(__XEN__) && !defined(__XEN_TOOLS__)
> -# define xen_wc_sec_hi arch=2Ewc_sec_hi
> -#endif
> -
> -    struct arch_shared_info arch;
> -
> -};
> -#ifndef __XEN__
> -typedef struct shared_info shared_info_t;
> -#endif
> -
> -/*
> - * `incontents 200 startofday Start-of-day memory layout
> - *
> - *  1=2E The domain is started within contiguous virtual-memory region=
=2E
> - *  2=2E The contiguous region ends on an aligned 4MB boundary=2E
> - *  3=2E This the order of bootstrap elements in the initial virtual re=
gion:
> - *      a=2E relocated kernel image
> - *      b=2E initial ram disk              [mod_start, mod_len]
> - *         (may be omitted)
> - *      c=2E list of allocated page frames [mfn_list, nr_pages]
> - *         (unless relocated due to XEN_ELFNOTE_INIT_P2M)
> - *      d=2E start_info_t structure        [register ESI (x86)]
> - *         in case of dom0 this page contains the console info, too
> - *      e=2E unless dom0: xenstore ring page
> - *      f=2E unless dom0: console ring page
> - *      g=2E bootstrap page tables         [pt_base and CR3 (x86)]
> - *      h=2E bootstrap stack               [register ESP (x86)]
> - *  4=2E Bootstrap elements are packed together, but each is 4kB-aligne=
d=2E
> - *  5=2E The list of page frames forms a contiguous 'pseudo-physical' m=
emory
> - *     layout for the domain=2E In particular, the bootstrap virtual-me=
mory
> - *     region is a 1:1 mapping to the first section of the pseudo-physi=
cal map=2E
> - *  6=2E All bootstrap elements are mapped read-writable for the guest =
OS=2E The
> - *     only exception is the bootstrap page table, which is mapped read=
-only=2E
> - *  7=2E There is guaranteed to be at least 512kB padding after the fin=
al
> - *     bootstrap element=2E If necessary, the bootstrap virtual region =
is
> - *     extended by an extra 4MB to ensure this=2E
> - *
> - * Note: Prior to 25833:bb85bbccb1c9=2E ("x86/32-on-64 adjust Dom0 init=
ial page
> - * table layout") a bug caused the pt_base (3=2Eg above) and cr3 to not=
 point
> - * to the start of the guest page tables (it was offset by two pages)=
=2E
> - * This only manifested itself on 32-on-64 dom0 kernels and not 32-on-6=
4 domU
> - * or 64-bit kernels of any colour=2E The page tables for a 32-on-64 do=
m0 got
> - * allocated in the order: 'first L1','first L2', 'first L3', so the of=
fset
> - * to the page table base is by two pages back=2E The initial domain if=
 it is
> - * 32-bit and runs under a 64-bit hypervisor should _NOT_ use two of th=
e
> - * pages preceding pt_base and mark them as reserved/unused=2E
> - */
> -#ifdef XEN_HAVE_PV_GUEST_ENTRY
> -struct start_info {
> -    /* THE FOLLOWING ARE FILLED IN BOTH ON INITIAL BOOT AND ON RESUME=
=2E    */
> -    char magic[32];             /* "xen-<version>-<platform>"=2E       =
     */
> -    ULONG_PTR nr_pages;     /* Total pages allocated to this domain=2E =
 */
> -    ULONG_PTR shared_info;  /* MACHINE address of shared info struct=2E=
 */
> -    uint32_t flags;             /* SIF_xxx flags=2E                    =
     */
> -    xen_pfn_t store_mfn;        /* MACHINE page number of shared page=
=2E    */
> -    uint32_t store_evtchn;      /* Event channel for store communicatio=
n=2E */
> -    union {
> -        struct {
> -            xen_pfn_t mfn;      /* MACHINE page number of console page=
=2E   */
> -            uint32_t  evtchn;   /* Event channel for console page=2E   =
     */
> -        } domU;
> -        struct {
> -            uint32_t info_off;  /* Offset of console_info struct=2E    =
     */
> -            uint32_t info_size; /* Size of console_info struct from sta=
rt=2E*/
> -        } dom0;
> -    } console;
> -    /* THE FOLLOWING ARE ONLY FILLED IN ON INITIAL BOOT (NOT RESUME)=2E=
     */
> -    ULONG_PTR pt_base;      /* VIRTUAL address of page directory=2E    =
 */
> -    ULONG_PTR nr_pt_frames; /* Number of bootstrap p=2Et=2E frames=2E  =
     */
> -    ULONG_PTR mfn_list;     /* VIRTUAL address of page-frame list=2E   =
 */
> -    ULONG_PTR mod_start;    /* VIRTUAL address of pre-loaded module   *=
/
> -                                /* (PFN of pre-loaded module if        =
   */
> -                                /*  SIF_MOD_START_PFN set in flags)=2E =
     */
> -    ULONG_PTR mod_len;      /* Size (bytes) of pre-loaded module=2E    =
 */
> -#define MAX_GUEST_CMDLINE 1024
> -    int8_t cmd_line[MAX_GUEST_CMDLINE];
> -    /* The pfn range here covers both page table and p->m table frames=
=2E   */
> -    ULONG_PTR first_p2m_pfn;/* 1st pfn forming initial P->M table=2E   =
 */
> -    ULONG_PTR nr_p2m_frames;/* # of pfns forming initial P->M table=2E =
 */
> -};
> -typedef struct start_info start_info_t;
> -
> -/*
> - * Start of day structure passed to PVH guests in %ebx=2E
> - *
> - * NOTE: nothing will be loaded at physical address 0, so a 0 value in =
any
> - * of the address fields should be treated as not present=2E
> - *
> - *  0 +----------------+
> - *    | magic          | Contains the magic value XEN_HVM_START_MAGIC_V=
ALUE
> - *    |                | ("xEn3" with the 0x80 bit of the "E" set)=2E
> - *  4 +----------------+
> - *    | version        | Version of this structure=2E Current version i=
s 0=2E New
> - *    |                | versions are guaranteed to be backwards-compat=
ible=2E
> - *  8 +----------------+
> - *    | flags          | SIF_xxx flags=2E
> - * 12 +----------------+
> - *    | nr_modules     | Number of modules passed to the kernel=2E
> - * 16 +----------------+
> - *    | modlist_paddr  | Physical address of an array of modules
> - *    |                | (layout of the structure below)=2E
> - * 24 +----------------+
> - *    | cmdline_paddr  | Physical address of the command line,
> - *    |                | a zero-terminated ASCII string=2E
> - * 32 +----------------+
> - *    | rsdp_paddr     | Physical address of the RSDP ACPI data structu=
re=2E
> - * 40 +----------------+
> - *
> - * The layout of each entry in the module structure is the following:
> - *
> - *  0 +----------------+
> - *    | paddr          | Physical address of the module=2E
> - *  8 +----------------+
> - *    | size           | Size of the module in bytes=2E
> - * 16 +----------------+
> - *    | cmdline_paddr  | Physical address of the command line,
> - *    |                | a zero-terminated ASCII string=2E
> - * 24 +----------------+
> - *    | reserved       |
> - * 32 +----------------+
> - *
> - * The address and sizes are always a 64bit little endian unsigned inte=
ger=2E
> - *
> - * NB: Xen on x86 will always try to place all the data below the 4GiB
> - * boundary=2E
> - */
> -#define XEN_HVM_START_MAGIC_VALUE 0x336ec578
> -
> -/* New console union for dom0 introduced in 0x00030203=2E */
> -#if __XEN_INTERFACE_VERSION__ < 0x00030203
> -#define console_mfn    console=2EdomU=2Emfn
> -#define console_evtchn console=2EdomU=2Eevtchn
> -#endif
> -#endif /* XEN_HAVE_PV_GUEST_ENTRY */
> -
> -/* These flags are passed in the 'flags' field of start_info_t=2E */
> -#define SIF_PRIVILEGED    (1<<0)  /* Is the domain privileged? */
> -#define SIF_INITDOMAIN    (1<<1)  /* Is this the initial control domain=
? */
> -#define SIF_MULTIBOOT_MOD (1<<2)  /* Is mod_start a multiboot module? *=
/
> -#define SIF_MOD_START_PFN (1<<3)  /* Is mod_start a PFN? */
> -#define SIF_VIRT_P2M_4TOOLS (1<<4) /* Do Xen tools understand a virt=2E=
 mapped */
> -                                   /* P->M making the 3 level tree obso=
lete? */
> -#define SIF_PM_MASK       (0xFF<<8) /* reserve 1 byte for xen-pm option=
s */
> -
> -/*
> - * A multiboot module is a package containing modules very similar to a
> - * multiboot module array=2E The only differences are:
> - * - the array of module descriptors is by convention simply at the beg=
inning
> - *   of the multiboot module,
> - * - addresses in the module descriptors are based on the beginning of =
the
> - *   multiboot module,
> - * - the number of modules is determined by a termination descriptor th=
at has
> - *   mod_start =3D=3D 0=2E
> - *
> - * This permits to both build it statically and reference it in a confi=
guration
> - * file, and let the PV guest easily rebase the addresses to virtual ad=
dresses
> - * and at the same time count the number of modules=2E
> - */
> -struct xen_multiboot_mod_list
> -{
> -    /* Address of first byte of the module */
> -    uint32_t mod_start;
> -    /* Address of last byte of the module (inclusive) */
> -    uint32_t mod_end;
> -    /* Address of zero-terminated command line */
> -    uint32_t cmdline;
> -    /* Unused, must be zero */
> -    uint32_t pad;
> -};
> -/*
> - * `incontents 200 startofday_dom0_console Dom0_console
> - *
> - * The console structure in start_info=2Econsole=2Edom0
> - *
> - * This structure includes a variety of information required to
> - * have a working VGA/VESA console=2E
> - */
> -typedef struct dom0_vga_console_info {
> -    uint8_t video_type; /* DOM0_VGA_CONSOLE_??? */
> -#define XEN_VGATYPE_TEXT_MODE_3 0x03
> -#define XEN_VGATYPE_VESA_LFB    0x23
> -#define XEN_VGATYPE_EFI_LFB     0x70
> -
> -    union {
> -        struct {
> -            /* Font height, in pixels=2E */
> -            uint16_t font_height;
> -            /* Cursor location (column, row)=2E */
> -            uint16_t cursor_x, cursor_y;
> -            /* Number of rows and columns (dimensions in characters)=2E=
 */
> -            uint16_t rows, columns;
> -        } text_mode_3;
> -
> -        struct {
> -            /* Width and height, in pixels=2E */
> -            uint16_t width, height;
> -            /* Bytes per scan line=2E */
> -            uint16_t bytes_per_line;
> -            /* Bits per pixel=2E */
> -            uint16_t bits_per_pixel;
> -            /* LFB physical address, and size (in units of 64kB)=2E */
> -            uint32_t lfb_base;
> -            uint32_t lfb_size;
> -            /* RGB mask offsets and sizes, as defined by VBE 1=2E2+ */
> -            uint8_t  red_pos, red_size;
> -            uint8_t  green_pos, green_size;
> -            uint8_t  blue_pos, blue_size;
> -            uint8_t  rsvd_pos, rsvd_size;
> -#if __XEN_INTERFACE_VERSION__ >=3D 0x00030206
> -            /* VESA capabilities (offset 0xa, VESA command 0x4f00)=2E *=
/
> -            uint32_t gbl_caps;
> -            /* Mode attributes (offset 0x0, VESA command 0x4f01)=2E */
> -            uint16_t mode_attrs;
> -#endif
> -        } vesa_lfb;
> -    } u;
> -} dom0_vga_console_info_t;
> -#define xen_vga_console_info dom0_vga_console_info
> -#define xen_vga_console_info_t dom0_vga_console_info_t
> -
> -typedef uint8_t xen_domain_handle_t[16];
> -
> -__DEFINE_XEN_GUEST_HANDLE(uint8,  uint8_t);
> -__DEFINE_XEN_GUEST_HANDLE(uint16, uint16_t);
> -__DEFINE_XEN_GUEST_HANDLE(uint32, uint32_t);
> -__DEFINE_XEN_GUEST_HANDLE(uint64, uint64_t);
> -
> -#endif /* !__ASSEMBLY__ */
> -
> -/* Default definitions for macros used by domctl/sysctl=2E */
> -#if defined(__XEN__) || defined(__XEN_TOOLS__)
> -
> -#ifndef int64_aligned_t
> -#define int64_aligned_t int64_t
> -#endif
> -#ifndef uint64_aligned_t
> -#define uint64_aligned_t uint64_t
> -#endif
> -#ifndef XEN_GUEST_HANDLE_64
> -#define XEN_GUEST_HANDLE_64(name) XEN_GUEST_HANDLE(name)
> -#endif
> -
> -#ifndef __ASSEMBLY__
> -struct xenctl_bitmap {
> -    XEN_GUEST_HANDLE_64(uint8) bitmap;
> -    uint32_t nr_bits;
> -};
> -#endif
> -
> -#endif /* defined(__XEN__) || defined(__XEN_TOOLS__) */
> -
> -#endif /* __XEN_PUBLIC_XEN_H__ */
> -
> -/*
> - * Local variables:
> - * mode: C
> - * c-file-style: "BSD"
> - * c-basic-offset: 4
> - * tab-width: 4
> - * indent-tabs-mode: nil
> - * End:
> - */



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.1bf.cbd1e60f83a6a7e0.1a139fd3ef4.16510ecfdc90fa2a=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 15 08:25:37 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 15 Oct 2026 08:25:37 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1450016.1665508 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHGmN-00018w-FI; Thu, 15 Oct 2026 08:25:35 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1450016.1665508; Thu, 15 Oct 2026 08:25:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHGmN-00018o-Bi; Thu, 15 Oct 2026 08:25:35 +0000
Received: by outflank-mailman (input) for mailman id 1450016;
 Thu, 15 Oct 2026 08:25:34 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <owen.smith@citrix.com>) id 1xHGmL-00018i-UG
 for win-pv-devel@lists.xenproject.org; Thu, 15 Oct 2026 08:25:34 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xHGmL-0047Gl-2i
 for win-pv-devel@lists.xenproject.org; Thu, 15 Oct 2026 10:25:33 +0200
Received: from [10.42.69.10] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ad08df2-e002-0a2a0a5209dd-0a2a450a9eae-20
 for <win-pv-devel@lists.xenproject.org>; Thu, 15 Oct 2026 10:25:32 +0200
Received: from [52.101.57.58]
 (helo=BN8PR05CU002.outbound.protection.outlook.com)
 by tlsNG-4011c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ad08dfb-f2d2-0a2a450a0019-3465393a2e70-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 15 Oct 2026 10:25:32 +0200
Received: from SA6PR03MB7760.namprd03.prod.outlook.com (2603:10b6:806:43c::5)
 by DS7PR03MB5591.namprd03.prod.outlook.com (2603:10b6:5:2ca::13) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.522.13; Thu, 15 Oct
 2026 08:25:30 +0000
Received: from SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38]) by SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38%5]) with mapi id 15.21.0522.012; Thu, 15 Oct 2026
 08:25:29 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:x-ms-exchange-senderadcheck"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
 b=uKvxuWBloJrI7i3bXpdLU5nHgn25BCDr9mhHjKj0/R0ucggmPrwi182XKVhX8KtkqR+4rE170CqAUVIaEjOPhcrFLtnjk+wZubbgfBA/hZPkbCXDS/90AYuSw2vgGaCzkW5UEHmpok/KrnliZh+ydMs1yN8T8N/5LWZmh6+Ftzc6P+oNjQ6keLVzJqWAKZHCQAYZCU6uSbUaScKtYmS3enEbYTyVdRbczKa3DEvUeopaXmUAJEEu0h3eRV663+9d9eHrqXV28mP0NVCsoFZrctQ1CLPP+eJvnqQ2OYF1D5astVhVv6j4tXFy3PE+iAjZ3M9BRgfs2VyQZDAJZj1o4Q==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector10001;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=kYZHnLzgkNwCirTF3UY54KJTDC/HUCgfm8WL7XOFosg=;
 b=L12o9yWpL0nknXb/j5ZhZtHUgF8iMzA/wwn6Cfe3GP5GSqANE8oZhy6TpzHHTcrBcITStcon077q0Q5K4xPKJC2PPyHa9Zn11PBAlH4z6UX0TENG+JmUKkisnopK6ELzjatZu1HKoL8uOm7E0sOiLnitYoGjC5XoQSDRFNfG/nsulBD0sukkqoGx/PlfIfxxLLw31nnvEpYllyCwswJlUxZ0fmDWlLaqTmH8G1MOMhEi4SJJuNaEO6vlOTwfi3yjsb43SdRA1uW9KyVplVVrrisGjf+zl6NW0uVyHsITHCpC2XaK/bZ3HBsGRm2VqcAyULwVX9LOb+pzBJBrN5laIA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=kYZHnLzgkNwCirTF3UY54KJTDC/HUCgfm8WL7XOFosg=;
 b=x8sBqcC21PbfRJWD3PSXns+D5QmL9JZPWrN3ojoGaZ7sCH+wow6MzuvzWkXJiuVsSn1hmvbINz0DvCaVUP7V2lEnvq70xp/iBosNZmG3LGcbFM7Bg5PV7YHlb9DuMQu2r9rtt3/78Rpcl5oqWXp3qgZdWy8SvvrLMmjhIvfsmbU=
From: Owen Smith <owen.smith@citrix.com>
To: Tu Dinh <ngoc-tu.dinh@vates.tech>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Subject: Re: [PATCH] Add VIF interface V11
Thread-Topic: [PATCH] Add VIF interface V11
Thread-Index: AQHdW8SCxYPnrdFDPE6PBp48ejo2u7b+RQwX
Date: Thu, 15 Oct 2026 08:25:29 +0000
Message-ID:
 <SA6PR03MB77603CDB361825DEEEC9E922FE9C2@SA6PR03MB7760.namprd03.prod.outlook.com>
References:
 <1791972715.8631fc262581453bbf619ec5b2062170.1a139e5ab9f0008425@vates.tech>
In-Reply-To:
 <1791972715.8631fc262581453bbf619ec5b2062170.1a139e5ab9f0008425@vates.tech>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
msip_labels:
authentication-results: mx.microsoft.com 1; dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=citrix.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: SA6PR03MB7760:EE_|DS7PR03MB5591:EE_
x-ms-office365-filtering-correlation-id: f9c6ae9b-ca3f-44b6-5ec9-08df2a95df68
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam:
 BCL:0;ARA:13230040|366016|376014|1800799024|23010399003|38070700021|56012099006|11063799006|261009223027099003|10067099003|18002099003|22082099003;
x-microsoft-antispam-message-info:
 lmx9I9Nyk93beWL9eMgTnKJU615rg1dq2eNvfAkjHss4/Hx1zo6nuIJtWdJF9ATDqeA7xXrDmnzpw0fDzHYR3vov/+HMDTqxx5sPPxTRlSIxHeHH0ycCKcLetKn8VcaaoWH+FW+Kg6SWt0Q74uNdIHLmmWtv79sMRVoA7hVtiKStezAET0jSUU0mZNsUSlr0vE/ZtYsIwN5LlDls3ljA0lWOLqI07IGLlVy6fvCRI8fLyIJ13AHYkTWrIp3SJX9fzK+EFsmhqaKyq+jG6NLoPUiAH65ycTdC9xwWvncZwwN/qgsF2kegiK0E7HD4LkHiXOYe/5P2fQlUl1wTGTOnONbkD3FBRC6FW9Ud8l/p/4vHVUuoMnqBYBEg/It68aQQcZ9XO3r2onjaAFsl90yyV0pAD1CvkLpMkRC19hyb857NF+to+EWXBq+ZmRbU/thZbdArJRnSc0fwccGlD9plnfgT1xY6Gc0CCiCg8+wY7SLZZFPfuwUsR5Lr9oQSM5qfuW/DUIW/lanHsWuauY7RX6OZgfoUsJBo+OqZqwBktpyAMKnFbaKw1y0BVAH6l92m44qzhT6gnxzEEKHYqQzF1AoALNYRWryDQl+XNIxB/8KIYpb5SQH2XvyvQtwL/4nWl05v7QR7ZAhrCHNcMG0Y9Ueg2HVBkLPY0b8hqP2dzFRlnU3cw3a7EmITZfAV0wDjF3oY/wZ8a8/sgFLxH7GGkfyj80xPtFkqNfHOr0gUs74=
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SA6PR03MB7760.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(1800799024)(23010399003)(38070700021)(56012099006)(11063799006)(261009223027099003)(10067099003)(18002099003)(22082099003);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?iso-8859-1?Q?AFg/E1SwAFIQ+ZRvKhnkucTqKNL0prOctMTwZeEoLFr3HxkTVLdlLxOyad?=
 =?iso-8859-1?Q?5hEevEg7pXbc32abNWVGC1SKR24sMPCJSBGZ8jqWcWwfdqM59zPYcGTr7B?=
 =?iso-8859-1?Q?lEassxgWiSkQOMsVeDyVhlaaXPg2xAk5EZVHa9zRBqXUkCxbQvKyp4h72L?=
 =?iso-8859-1?Q?FGYHdpN+1QMkY18gbrwB/h0s7BWw3WPh/CS33ygKECp4GB1KNScqBvw5mU?=
 =?iso-8859-1?Q?0JkwvaIUwglRbdWe9Fz9JAt6/SlLm7ldI1eJbrml2ztcDGYOVzglpLZr/Q?=
 =?iso-8859-1?Q?UY8tyW9e8b0iryycUX3xf3Xg3wvHbcq3pjHzxw2RSCn99rX5nUGlcTTmp6?=
 =?iso-8859-1?Q?ZRA08yT0mYwPHPpYFpc56H7EZBBIzSud0FPRQQnKBKIDCzZC7mdo6hEGh2?=
 =?iso-8859-1?Q?TXvaEOXIYFswhM7RVaOuhsVN7vLTZRnu5raZYAk52gnJ1nubv7S32ZZQ8p?=
 =?iso-8859-1?Q?ysQIL5+CqrzGQpEZgDW63o8fN1hxPF0dDPhT/q1QbwPMmZlvn43gVQ6W3U?=
 =?iso-8859-1?Q?jyQrcpGgt+NTuuLbxy8GXFfP1po8BTO5zA4C5WPriHW8haRdH1ga6cgLmI?=
 =?iso-8859-1?Q?QH4Rg18VMBpNGLmwqS/wN3kIIrdJidWrRZWRzzp2zx7WYATN5QRNZIGi4K?=
 =?iso-8859-1?Q?g+u2fzqfJ2V4l6g47aMcsedFuywj87V//P4miPmJ8IYt9PCCYkaJVGaIiJ?=
 =?iso-8859-1?Q?sdUWtR/b16X8kPiEcz51sNyhOR864kd4yDl7VUuxR6lAghe1IBgdcwCpCL?=
 =?iso-8859-1?Q?oXAMF9qdMz0OrnuMai0CfQ/I8dxLiX4mULgkDkwq5Cr/5nz8Z53A0ECCW9?=
 =?iso-8859-1?Q?rdLCR2OoacysSJTUmSb+UYP+p9Bbvdkeys/ELDa/QEmHHJdEu+D1qjIHpo?=
 =?iso-8859-1?Q?rLWjMUrIyD0qJB2EIc7dfRuc9QmrWQR3Mlxu2Q8uaubM0oEUDix9ajIV5p?=
 =?iso-8859-1?Q?4VT0FwtshYRulsOR4DCMn0OSmrqIvZmlLbffSZ0+GJU2HstRdvpoGTPAU4?=
 =?iso-8859-1?Q?7KGtqeDnkw0dRqS7PbuItEt+JvW+/EmnXrEQQ4Voo2TcXqeUFgB8Izmt2E?=
 =?iso-8859-1?Q?ycpoUjB75egcUORjWa0nmIGcL4d5NSg0Oe9PaMyJyeKQhvQXo8HJGZfXoM?=
 =?iso-8859-1?Q?+fYOlcv/L6M9rKMD/zDjKkYW78VpkjOEP4X05m0r4goW7s1gE0m/TqR81k?=
 =?iso-8859-1?Q?BRa06GKcw7UPJICBuR/YBSrLGDKfcDRsg3sFpfKlaMw2XugcgQ3ddody9D?=
 =?iso-8859-1?Q?L0GyJEa5d0enxXt3adgN2k0rvU2glrXPaIPaL9VsI2k8vnZOb4hApqE9oD?=
 =?iso-8859-1?Q?A9UrNF+mTzYwVXgNI/vmmRWKqsddzDAwzoDDE+sjrA56e7JR3kHlTkm2b6?=
 =?iso-8859-1?Q?zmFgIajvuJuyPkbmxTuhBROijeXOzxlUsiYOB5l5aAc27zJvpVSPZ2hBbm?=
 =?iso-8859-1?Q?vJx/jDBcUb+KtERKu7vfOqE26XX2HhXwTA+M3q7kH2KthJjHrvBnjcpvLM?=
 =?iso-8859-1?Q?NSBqOrgVE4OlzKNZ1FXZ6ADgPAZtzN3ppM0sybPpnj/sohKoIWvxJDEj1Z?=
 =?iso-8859-1?Q?SVgtWcCDRCd+C93PfQcwyfDkNnBmnSQVGiv0cvbRJV0GNXaKxCAncYGyGH?=
 =?iso-8859-1?Q?z/LwuPu96pMwAdGh223/O2BXy+rgaToNUO8TjD/lBhgBxcqD77wgXvWWWW?=
 =?iso-8859-1?Q?Twy2ZGF8NhGiK920UUhBZGDPLhrga2/CyZYz2la/IGhBMpfa6wo7QGsVnO?=
 =?iso-8859-1?Q?4WOvXD3sOfIHPOURdPrEvjivuhsbEIXn3c4fA1W7Vao7xKv5GtqV+iOT6E?=
 =?iso-8859-1?Q?4fU0i3wXTg=3D=3D?=
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-OriginatorOrg: citrix.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: SA6PR03MB7760.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: f9c6ae9b-ca3f-44b6-5ec9-08df2a95df68
X-MS-Exchange-CrossTenant-originalarrivaltime: 15 Oct 2026 08:25:29.6011
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: Zq6VNMTt7n4L+KEuC4hNlnpKLzPGXRqguxOwcBwtsFgdCJteRl7oNm+T0zjCbSBiA70GnUUPta4lMFh4PK7Q3Q==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR03MB5591
X-purgate-ID: tlsNG-4011c0/1792052732-5A3DCCFC-9AFD1ECB/0/0
X-purgate-type: clean
X-purgate-size: 1513

> =0A=
> diff --git a/include/vif_interface.h b/include/vif_interface.h=0A=
> index cc2f626..66053a1 100644=0A=
> --- a/include/vif_interface.h=0A=
> +++ b/include/vif_interface.h=0A=
> @@ -567,17 +567,32 @@ typedef NTSTATUS=0A=
>      _Out_ PULONGLONG            Value=0A=
>      );=0A=
> =0A=
> +/*! \typedef XENVIF_VIF_QUERY_RING_COUNT_V8=0A=
> +    \brief Query the number of shared rings between frontend=0A=
> +    and backend=0A=
> +=0A=
> +    \param Interface The interface header=0A=
> +    \param Count Buffer to receive the count=0A=
> +*/=0A=
> +typedef VOID=0A=
> +(*XENVIF_VIF_QUERY_RING_COUNT_V8)(=0A=
> +    _In_ PINTERFACE Interface,=0A=
> +    _Out_ PULONG    Count=0A=
> +    );=0A=
> +=0A=
>  /*! \typedef XENVIF_VIF_QUERY_RING_COUNT=0A=
>      \brief Query the number of shared rings between frontend=0A=
>      and backend=0A=
> =0A=
>      \param Interface The interface header=0A=
>      \param Count Buffer to receive the count=0A=
> +    \param MaxCount Buffer to receive the maximum possible ring count=0A=
>  */=0A=
>  typedef VOID=0A=
>  (*XENVIF_VIF_QUERY_RING_COUNT)(=0A=
>      _In_ PINTERFACE Interface,=0A=
> -    _Out_ PULONG    Count=0A=
> +    _Out_ PULONG    Count,=0A=
> +    _Out_ PULONG    MaxCount=0A=
=0A=
If both Count and MaxCount were _Out_opt_, then the 1st patch in your xenne=
t changes=0A=
wouldnt need the MaxRingCount value, and the 2nd patch wouldnt need the Dum=
my value.=0A=
=0A=
=0A=
>      );=0A=
=0A=
Owen=


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 15 08:30:45 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 15 Oct 2026 08:30:45 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1450028.1665529 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHGrN-0003SH-C1; Thu, 15 Oct 2026 08:30:45 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1450028.1665529; Thu, 15 Oct 2026 08:30:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHGrN-0003S9-9X; Thu, 15 Oct 2026 08:30:45 +0000
Received: by outflank-mailman (input) for mailman id 1450028;
 Thu, 15 Oct 2026 08:30:44 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <owen.smith@citrix.com>) id 1xHGrM-0003S1-5q
 for win-pv-devel@lists.xenproject.org; Thu, 15 Oct 2026 08:30:44 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xHGrL-00G1K2-IV
 for win-pv-devel@lists.xenproject.org; Thu, 15 Oct 2026 10:30:43 +0200
Received: from [10.42.69.10] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ad08f32-e002-0a2a0a5209dd-0a2a450aea4a-4
 for <win-pv-devel@lists.xenproject.org>; Thu, 15 Oct 2026 10:30:43 +0200
Received: from [52.101.53.32]
 (helo=BL0PR03CU003.outbound.protection.outlook.com)
 by tlsNG-4011c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ad08f32-f2d2-0a2a450a0019-346535206825-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 15 Oct 2026 10:30:43 +0200
Received: from SA6PR03MB7760.namprd03.prod.outlook.com (2603:10b6:806:43c::5)
 by DS7PR03MB5591.namprd03.prod.outlook.com (2603:10b6:5:2ca::13) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.522.13; Thu, 15 Oct
 2026 08:30:40 +0000
Received: from SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38]) by SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38%5]) with mapi id 15.21.0522.012; Thu, 15 Oct 2026
 08:30:40 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:x-ms-exchange-senderadcheck"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
 b=s/2scaHESlIuCqliS6AriakZ+1+dOEqKijjyud6Ie6NlXdd2aMlr/ELdbJ4TdQJLbD/bJlq2LBceVg84jwRWHefSLWr7lHYASWx/6oiy3HV1hTe5WdTtSudujnO6MCdfYEar7jAFu6G9skB+GXKhXbDuOzCN4NcXBnDo1oInnZ2Upp0ehxHjx7KsJFuMNotQMw6nZMQ728oYfPqkH4tZ/hCB+axYmF/gE9uYK4uupqzC/eAjuln+WROuFjxRGuocdqA8itI0HrrYuwUe6BbpRgPE6rFpQbedkiWux4jo/YF4mn8v1MFp+xe9ij5c/kRnvd75oB6AO3rbllGF4zhg6Q==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector10001;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=GXmoVi1f/OHIhu1OwyuruH1ZfLM7gXRDdMEBJwDB1Mg=;
 b=kd3otM6sitAYHWTGVcNo8KdOnGjcMI+sebBE9IgWNCDcN9+Nd+6iBuOj6JCm4GrYEztVLG5w6cVpzpUmMhwgCJo6Y1wuWvQVdRfPbndwwv5s2uOu49VUswuXx/AXMjR4hv7/zsCklFobdwHUDy88BQZqzshkp62WNRKCswtGBx+C7t9WD7ipbx9mHEtLkgcscCh9VCrdw0JIosZYgyzn4m3KmnEn/WnV6We3B6QtUWE+UMV/Zf6Rq7KPeqjp05k5Vl33D48O9/g4xDogD6rUH3k1j4UfmXi3646S/GXCWN4607jSmNp+dbIS4ZEWq1TqwBDxdOqiwZIac2F6oAgVlw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=GXmoVi1f/OHIhu1OwyuruH1ZfLM7gXRDdMEBJwDB1Mg=;
 b=u12OI4ekPEaRAiH2Ny+js5GwYxb/SBDCJSQERO3TEsTw+AATloJEtLJ8veIu0I7vdbiRQte6kwe8YZSPw+REk8GPb5+4m3+tKCXrV6pijdnhlvAkyL+OriHSaiX0Nh+Jcs3h3vdYodM+KCYm192GmBOOUfVr7T/pnRneomZEUZ0=
From: Owen Smith <owen.smith@citrix.com>
To: Tu Dinh <ngoc-tu.dinh@vates.tech>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Subject: Re: [PATCH 2/3] receiver: Remove dependencies on HVM_MAX_VCPUS
Thread-Topic: [PATCH 2/3] receiver: Remove dependencies on HVM_MAX_VCPUS
Thread-Index: AQHdW8bU7OD+xsxYnE+lEq+iJP4rnLb+RsGX
Date: Thu, 15 Oct 2026 08:30:40 +0000
Message-ID:
 <SA6PR03MB77601A747135CBFB01FD7C55FE9C2@SA6PR03MB7760.namprd03.prod.outlook.com>
References:
 <1791972715.8631fc262581453bbf619ec5b2062170.1a139e5ab9f0008425@vates.tech>
 <20261014102836.1114-1-ngoc-tu.dinh@vates.tech>
 <1791973722.8631fc262581453bbf619ec5b2062170.1a139f509b70008425@vates.tech>
In-Reply-To:
 <1791973722.8631fc262581453bbf619ec5b2062170.1a139f509b70008425@vates.tech>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
msip_labels:
authentication-results: mx.microsoft.com 1; dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=citrix.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: SA6PR03MB7760:EE_|DS7PR03MB5591:EE_
x-ms-office365-filtering-correlation-id: d3d1889f-4df9-4c08-d6ad-08df2a9698cc
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam:
 BCL:0;ARA:13230040|366016|376014|1800799024|23010399003|38070700021|56012099006|11063799006|4143699003|261009223027099003|10067099003|18002099003|22082099003|3023799007;
x-microsoft-antispam-message-info:
 usxDTRVcnehKWyE6ISiI/kdaySARzRWRzcxctCdP2o6OM5h/z34LBrJAeLdglMjXQJ43KOczajvIe2kj5sUNqjsv1w9ho2QQ0A0AbBgCFAJCmo9Qr10ilDEUGqCG56rjpLWYuTS9y6JsrCDvR4PjhHWetkp7Z+lPfkq0VhJPQgKHY3rMcKgn1tS9h0zQZ6c77ssNQZp0hWOZDMLKRa08MUJ3hO12Na10ahNGhoNiNWVMbt8ka9ln/vfHOzwZYi9xSn3p+TovLlD9bspycjDUIlA6+yCre7F2GPzC8VwItvFTkouiakIs7WU79XXJBjZVDbgHZrUPkR/q9oQXJqx+KbY31zNIvWLmeJfdmdt+FH+u9BYfNpQv6pexkauCKiuvtfFtMZiKyl1kj3MscD5g+yf6uNxzLwU17Y4Wr3DvVHQsK7vem0OpzND/bM50y/Rls96FiLwXV1h1veoiu/me+v5/GkzF0K7Ucnbhsb5yPxGPYPDzFJn0ivtBNAGrJJ4aKxwZrqOAOa2gpmgobHxuulhTbcPTii5+rGGf8qscLYzBImB+Pyg0jxS8pHtIP0Jxn/w8g2klK860nGBhZbtnngFbWoFSr3le3ljueyCEFe2wFqxRCpr1SoWlg6OYtzghB+wxa8HFM2ruhsZZ/3/oNoKLH4rt93iFYHxQyNleAOhVdJd7SyeeobVPN+rA6I3cLuEzA7RohcG0FbodZF+ae1qjOuCFosJQ8lDFTQsGbx4=
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SA6PR03MB7760.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(1800799024)(23010399003)(38070700021)(56012099006)(11063799006)(4143699003)(261009223027099003)(10067099003)(18002099003)(22082099003)(3023799007);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?iso-8859-1?Q?K4wSh9GUdcomV01QrBa7joPrKxj8X73sH0XYPCuuM7CU2HErNHXjQyzVFG?=
 =?iso-8859-1?Q?GtYaHh730fayVQltUzhALa1kR/Ev+MvsEv2+Rdic8iB2Q1DsONhAhWvO0M?=
 =?iso-8859-1?Q?IXkE9XqEuYpbJlLkbNLIEVnNVNFkPF72Fj5LEuQ/0Kw2EwjMu93hAlKOjL?=
 =?iso-8859-1?Q?wg1TNho9rj1mTi4aolTRdSmGC216kD+l1ObJ4LYmzPGn0QinO60g5p+qKH?=
 =?iso-8859-1?Q?YVTzVb/k/ea/6i7ZzGA5drIAh3l+wbRvhnNSvkutnDaYEYjB6KlA0KbvoV?=
 =?iso-8859-1?Q?bf82T0rQEm1Hd1bCNiV3eBQh8xBZuX3Aljxzn5Fszwfsy66CwNacZil//F?=
 =?iso-8859-1?Q?FRUlf+dEDluPWo+brhvl0otBK9JKx013Z5wvBYxqssH6luZy9LKN1WdSxp?=
 =?iso-8859-1?Q?nm+qdIOCdYf8Yfxig0XlS3v85FUeTFsIkRlBfyuLy+WahBSygFGg8gXwNN?=
 =?iso-8859-1?Q?aoi07RDv/MBeoQTb7PRhzIBay9iy1r2l28z5QJQFlh72Mw18iEoT0G/1Ls?=
 =?iso-8859-1?Q?mrJ9+6MKoHNxokYkQAaGSICd4fPf4TymGjYJQ4WmZ4qToE0I2tJvxNm+mA?=
 =?iso-8859-1?Q?pxvucZmRv57zU2OnutM+MJ/nPVuplG4ddZw6eL/DFvSNXD6J6T1RE07mJQ?=
 =?iso-8859-1?Q?bnqI8lp8VeZWQiCrxmc8VDeNaZ6fKJay4yn1RNCTEe9J4ZyMoADDkCAjuZ?=
 =?iso-8859-1?Q?ULqh1/+6Ya0v2M1H6RuKz8NOfw3X0jlDJqtHrro4tjZpVgpl1G2gc29N2W?=
 =?iso-8859-1?Q?BPoPOwC+5xbSAK85KRdt9XeHQvqKWcbaKJ79pihdiqAJFmxRE2HfAsR97n?=
 =?iso-8859-1?Q?93iPXXPNWTYDRSzL7NPvc2SzYTpXS6Kq4BC3XkAl6iihKVfepCU40QVurB?=
 =?iso-8859-1?Q?kr1VPxlD8bk4GnXyMEvBPy1rHu8CPquQJ55s922QFeUp+Hysp156/UL/9U?=
 =?iso-8859-1?Q?nc4DVq9RMHuY4j+cIcNa0F/tlRHZIZh2diqqbu5bFtjiMmlWYz2LDgbC+Z?=
 =?iso-8859-1?Q?lT+yginBQ64RqMuHfXcfOpN0M9yJaH0wHqXR0kYb53QW6BVZrRlBE7w53H?=
 =?iso-8859-1?Q?g0oxbQKUE4PI8HLkdzCeTcqPwxyvje5ghnpBWAFTnSETT5vdc7qsWA4KNr?=
 =?iso-8859-1?Q?vddpBcBsIEo3JoxQgRS7G6zOucezn16PVN3YQSWbRqPw7KEnQj1s5Ii4a7?=
 =?iso-8859-1?Q?HyHm1N0ezDJWgOSgNWdiPYaCKbvczea0xxjZb7+G+j6br4vZwWJdHiRNcw?=
 =?iso-8859-1?Q?0tauG5iEF020xECqxScnE3PrwiOJBHTijq1KmGz5HslazayY8BxMTGgIJ8?=
 =?iso-8859-1?Q?UDASpu0ZyTr5W2J5KWAQIsRBE9sw1W7gaeHtlowDMuicAswUOWTiitHFnh?=
 =?iso-8859-1?Q?7NXak+UTh51SqraaVweCg5QTAXqAMXomALadp6f//cxS8gldBVO8U1aeHo?=
 =?iso-8859-1?Q?a1Ukd5xTtjdTDKJMFZzKH2RQMj4tUvqkiK/nzatDktcfJz9BXuDWWfaET8?=
 =?iso-8859-1?Q?xTzAA6oMlTaiuURj4NZDNCej1ckDlowx+LaqOxi3Twmh1LuI2F2lWeL61R?=
 =?iso-8859-1?Q?W+s2kHQ5pSqx87+EUO8ULBAEr6jN3KDh1CnriqrlejqxfQjqRtiTVvDAnK?=
 =?iso-8859-1?Q?JTjJNc48YgPv5XCKnP9TaGR4hE8dxO0AVTFLDVI3nZryO0CzbNaxnf2mxp?=
 =?iso-8859-1?Q?gzA9rFMMC4alCRoYSc97AfOwwg3DKMc7dGbvoLzOlYRW0bvycPTPB55JFk?=
 =?iso-8859-1?Q?6/qav7S7p0oYv5AD0XqajHIiW9Hh273thvZOZnZMYoyLGf?=
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-OriginatorOrg: citrix.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: SA6PR03MB7760.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: d3d1889f-4df9-4c08-d6ad-08df2a9698cc
X-MS-Exchange-CrossTenant-originalarrivaltime: 15 Oct 2026 08:30:40.6426
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: XlOzg7sl/507OaA7W9CAYJCtZqrkwRembgag2sEMWxBKmMQQlQdRHHCw32f7JXIagHAnBVDf8fXxkMLFCR56hA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR03MB5591
X-purgate-ID: tlsNG-4011c0/1792053043-58DC7CFC-47607891/0/0
X-purgate-type: clean
X-purgate-size: 3831

> @@ -500,6 +502,24 @@ ReceiverInitialize(=0A=
>      RtlZeroMemory(*Receiver, sizeof(XENNET_RECEIVER));=0A=
>      (*Receiver)->Adapter =3D Adapter;=0A=
> =0A=
> +    (*Receiver)->ProcessorCount =3D KeQueryMaximumProcessorCountEx(ALL_P=
ROCESSOR_GROUPS);=0A=
> +    XENVIF_VIF(QueryRingCount,=0A=
> +               AdapterGetVifInterface(Adapter),=0A=
> +               &Dummy,=0A=
> +               &(*Receiver)->RingCount);=0A=
> +=0A=
> +    (*Receiver)->GetList =3D __AllocatePoolWithTag(NonPagedPool,=0A=
> +                                                 (*Receiver)->ProcessorC=
ount * sizeof(PNET_BUFFER_LIST),=0A=
> +                                                 RECEIVER_POOL_TAG);=0A=
> +    if ((*Receiver)->GetList =3D=3D NULL)=0A=
> +        goto fail2;=0A=
> +=0A=
> +    (*Receiver)->Queue =3D __AllocatePoolWithTag(NonPagedPool,=0A=
> +                                               (*Receiver)->RingCount * =
sizeof(XENNET_RECEIVER_QUEUE),=0A=
> +                                               RECEIVER_POOL_TAG);=0A=
> +    if ((*Receiver)->Queue =3D=3D NULL)=0A=
> +        goto fail3;=0A=
> +=0A=
>      RtlZeroMemory(&Params, sizeof(NET_BUFFER_LIST_POOL_PARAMETERS));=0A=
>      Params.Header.Type =3D NDIS_OBJECT_TYPE_DEFAULT;=0A=
>      Params.Header.Revision =3D NET_BUFFER_LIST_POOL_PARAMETERS_REVISION_=
1;=0A=
> @@ -514,9 +534,9 @@ ReceiverInitialize(=0A=
> =0A=
>      status =3D NDIS_STATUS_RESOURCES;=0A=
>      if ((*Receiver)->NetBufferListPool =3D=3D NULL)=0A=
> -        goto fail2;=0A=
> +        goto fail4;=0A=
> =0A=
> -    for (Index =3D 0; Index < HVM_MAX_VCPUS; Index++) {=0A=
> +    for (Index =3D 0; Index < (*Receiver)->RingCount; Index++) {=0A=
>          PXENNET_RECEIVER_QUEUE  Queue =3D &(*Receiver)->Queue[Index];=0A=
> =0A=
>          KeInitializeSpinLock(&Queue->Lock);=0A=
> @@ -524,8 +544,29 @@ ReceiverInitialize(=0A=
> =0A=
>      return NDIS_STATUS_SUCCESS;=0A=
> =0A=
> +fail4:=0A=
> +    Error("fail4\n");=0A=
> +=0A=
> +    __FreePoolWithTag((*Receiver)->Queue, RECEIVER_POOL_TAG);=0A=
> +    (*Receiver)->Queue =3D NULL;=0A=
> +=0A=
> +fail3:=0A=
> +    Error("fail3\n");=0A=
> +=0A=
> +    (*Receiver)->RingCount =3D 0;=0A=
> +    __FreePoolWithTag((*Receiver)->GetList, RECEIVER_POOL_TAG);=0A=
> +    (*Receiver)->GetList =3D NULL;=0A=
> +=0A=
>  fail2:=0A=
> +    Error("fail2\n");=0A=
> +=0A=
=0A=
(*Receiver)->RingCount should to be zeroed here, as its assigned before=0A=
the goto fail2;=0A=
=0A=
=0A=
> +    (*Receiver)->ProcessorCount =3D 0;=0A=
> +    __FreePoolWithTag(*Receiver, RECEIVER_POOL_TAG);=0A=
> +    *Receiver =3D NULL;=0A=
> +=0A=
>  fail1:=0A=
> +    Error("fail1 (%08x)\n", status);=0A=
> +=0A=
>      return status;=0A=
>  }=0A=
> =0A=
> @@ -541,7 +582,7 @@ ReceiverTeardown(=0A=
> =0A=
>      ASSERT3U(Receiver->Returned, =3D=3D, Receiver->Indicated);=0A=
> =0A=
> -    for (Index =3D 0; Index < HVM_MAX_VCPUS; Index++) {=0A=
> +    for (Index =3D 0; Index < Receiver->ProcessorCount; Index++) {=0A=
>          NetBufferList =3D Receiver->GetList[Index];=0A=
> =0A=
>          while (NetBufferList !=3D NULL) {=0A=
> @@ -571,6 +612,12 @@ ReceiverTeardown(=0A=
>      NdisFreeNetBufferListPool(Receiver->NetBufferListPool);=0A=
>      Receiver->NetBufferListPool =3D NULL;=0A=
> =0A=
> +    __FreePoolWithTag(Receiver->Queue, RECEIVER_POOL_TAG);=0A=
> +    Receiver->Queue =3D NULL;=0A=
> +=0A=
> +    __FreePoolWithTag(Receiver->GetList, RECEIVER_POOL_TAG);=0A=
> +    Receiver->GetList =3D NULL;=0A=
> +=0A=
>      Receiver->Adapter =3D NULL;=0A=
> =0A=
=0A=
Receiver->ProcessorCount and Receiver->RingCount should be zeroed for=0A=
consistency=0A=
=0A=
>      __FreePoolWithTag(Receiver, RECEIVER_POOL_TAG);=0A=
> --=0A=
=0A=
Owen=


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 15 13:16:05 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 15 Oct 2026 13:16:05 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1450523.1665968 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHLJU-0007vm-Jz; Thu, 15 Oct 2026 13:16:04 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1450523.1665968; Thu, 15 Oct 2026 13:16:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHLJU-0007ve-Gd; Thu, 15 Oct 2026 13:16:04 +0000
Received: by outflank-mailman (input) for mailman id 1450523;
 Thu, 15 Oct 2026 13:16:03 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13fb47d080008425@swg.vates.tech>)
 id 1xHLJR-0007vX-TJ
 for win-pv-devel@lists.xenproject.org; Thu, 15 Oct 2026 13:16:02 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xHLJQ-002adh-W1
 for win-pv-devel@lists.xenproject.org; Thu, 15 Oct 2026 15:16:01 +0200
Received: from [10.42.69.11] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13fb47d080008425@swg.vates.tech>)
 id 6ad0d20b-8faa-0a2a0a5109dd-0a2a450b9412-18
 for <win-pv-devel@lists.xenproject.org>; Thu, 15 Oct 2026 15:16:00 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-42698a.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13fb47d080008425@swg.vates.tech>)
 id 6ad0d20f-b7e8-0a2a450b0019-b9ff1c238b8f-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 15 Oct 2026 15:16:00 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a13fb47d080008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 15 Oct 2026 13:15:55 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id D058681C1D;
 Thu, 15 Oct 2026 15:15:54 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=uIiySDFljSQ3uyFx30Ea7VWY5/kXsTeMAG3WN2aGSq8=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:feedback-id;
 b=Nw0PiFlK/9aZK5ZTlZ2vpFlAzsa+NE8a1T0i8paHq18u/4Bm90oIJ/bqkVgE0Ef8MTcpkPcuP
 v+xl2wOHp5Hj/Kh4gnndWt0jgIs+UcCd3Pax16++dDZaY/LIQbn7K9eqqknBAMpeynFJ5LFOPu8
 KkMwCEWRGpf6ZK7Zu8bPSeRdHOqleYafWW0+5C9R4jZRe6FyJpT5qVYxSWFQ8ivJAHErtDQiLWY
 OsVOfF0S7AAeb5mw0Mw1y/nWwpFv3XXACgXDW9EHOukgi+xX1K03+rcVg6HgcWFOXFX44FvSgBq
 cwAaRBIbIZdB1fwnmhQaFfaf/OvXoNLuvS/AQfwwYx2A==
X-Zone-Loop: 81d62087f57fc9e5377b51c8bd276ddd1324c04827db
x-campaign-type: default
x-transaction-id: 57290d75-ae3a-4481-a661-ca0f403fcd8b
x-swg-uid: 01-595a0b09-32b2-43e9-80bf-535050ab69b4
X-Mailer: Sweego
Message-ID:
 <1792070155.8631fc262581453bbf619ec5b2062170.1a13fb47d080008425@vates.tech>
x-swg-bid: 1792070155.8631fc262581453bbf619ec5b2062170.1a13fb47d080008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [PATCH v2] Add VIF interface V11
Date: Thu, 15 Oct 2026 15:15:51 +0200
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.23d.b34e11ce1875b063.1a13fb47a9f.778b55650e67c4ce=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792070154911
X-purgate-ID: tlsNG-42698a/1792070160-2C59A9EA-640C7211/0/0
X-purgate-type: clean
X-purgate-size: 10760

---=Part.23d.b34e11ce1875b063.1a13fb47a9f.778b55650e67c4ce=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

This version makes Count optional, and adds a MaxCount output to
QueryRingCount that represents the maximum number of rings supported by
the current XenVif=2E

Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
v2: Make QueryRingCount take both parameters as _Out_opt_=2E
---
 include/revision=2Eh      |  3 +-
 include/vif_interface=2Eh | 61 ++++++++++++++++++++++++++++++++----
 src/xenvif/vif=2Ec        | 68 ++++++++++++++++++++++++++++++++++++++---
 3 files changed, 121 insertions(+), 11 deletions(-)

diff --git a/include/revision=2Eh b/include/revision=2Eh
index d23639f=2E=2E4e6a454 100644
--- a/include/revision=2Eh
+++ b/include/revision=2Eh
@@ -46,6 +46,7 @@
     DEFINE_REVISION(0x09000002,  2,  9,   2,  1,   1),  \
     DEFINE_REVISION(0x09000003,  2,  10,  2,  1,   1),  \
     DEFINE_REVISION(0x09000004,  2,  10,  2,  1,   2),  \
-    DEFINE_REVISION(0x09000005,  2,  10,  2,  1,   3)
+    DEFINE_REVISION(0x09000005,  2,  10,  2,  1,   3),  \
+    DEFINE_REVISION(0x09000006,  2,  11,  2,  1,   3)

 #endif  // _REVISION_H
diff --git a/include/vif_interface=2Eh b/include/vif_interface=2Eh
index cc2f626=2E=2E3139b13 100644
--- a/include/vif_interface=2Eh
+++ b/include/vif_interface=2Eh
@@ -567,7 +567,7 @@ typedef NTSTATUS
     _Out_ PULONGLONG            Value
     );

-/*! \typedef XENVIF_VIF_QUERY_RING_COUNT
+/*! \typedef XENVIF_VIF_QUERY_RING_COUNT_V8
     \brief Query the number of shared rings between frontend
     and backend

@@ -575,11 +575,26 @@ typedef NTSTATUS
     \param Count Buffer to receive the count
 */
 typedef VOID
-(*XENVIF_VIF_QUERY_RING_COUNT)(
+(*XENVIF_VIF_QUERY_RING_COUNT_V8)(
     _In_ PINTERFACE Interface,
     _Out_ PULONG    Count
     );

+/*! \typedef XENVIF_VIF_QUERY_RING_COUNT
+    \brief Query the number of shared rings between frontend
+    and backend
+
+    \param Interface The interface header
+    \param Count Buffer to receive the count
+    \param MaxCount Buffer to receive the maximum possible ring count
+*/
+typedef VOID
+(*XENVIF_VIF_QUERY_RING_COUNT)(
+    _In_ PINTERFACE     Interface,
+    _Out_opt_ PULONG    Count,
+    _Out_opt_ PULONG    MaxCount
+    );
+
 /*! \typedef XENVIF_VIF_UPDATE_HASH_MAPPING
     \brief Update the mapping of hash to transmitter/receiver ring

@@ -900,7 +915,7 @@ struct _XENVIF_VIF_INTERFACE_V8 {
     XENVIF_VIF_ENABLE_V8                            EnableVersion8;
     XENVIF_VIF_DISABLE                              Disable;
     XENVIF_VIF_QUERY_STATISTIC                      QueryStatistic;
-    XENVIF_VIF_QUERY_RING_COUNT                     QueryRingCount;
+    XENVIF_VIF_QUERY_RING_COUNT_V8                  QueryRingCountVersion=
8;
     XENVIF_VIF_UPDATE_HASH_MAPPING                  UpdateHashMapping;
     XENVIF_VIF_RECEIVER_RETURN_PACKET               ReceiverReturnPacket;
     XENVIF_VIF_RECEIVER_SET_OFFLOAD_OPTIONS         ReceiverSetOffloadOpt=
ions;
@@ -934,7 +949,7 @@ struct _XENVIF_VIF_INTERFACE_V9 {
     XENVIF_VIF_ENABLE_V9                            EnableVersion9;
     XENVIF_VIF_DISABLE                              Disable;
     XENVIF_VIF_QUERY_STATISTIC                      QueryStatistic;
-    XENVIF_VIF_QUERY_RING_COUNT                     QueryRingCount;
+    XENVIF_VIF_QUERY_RING_COUNT_V8                  QueryRingCountVersion=
8;
     XENVIF_VIF_UPDATE_HASH_MAPPING                  UpdateHashMapping;
     XENVIF_VIF_RECEIVER_RETURN_PACKET               ReceiverReturnPacket;
     XENVIF_VIF_RECEIVER_SET_OFFLOAD_OPTIONS         ReceiverSetOffloadOpt=
ions;
@@ -962,6 +977,40 @@ struct _XENVIF_VIF_INTERFACE_V9 {
     \ingroup interfaces
 */
 struct _XENVIF_VIF_INTERFACE_V10 {
+    INTERFACE                                       Interface;
+    XENVIF_VIF_ACQUIRE                              Acquire;
+    XENVIF_VIF_RELEASE                              Release;
+    XENVIF_VIF_ENABLE                               Enable;
+    XENVIF_VIF_DISABLE                              Disable;
+    XENVIF_VIF_QUERY_STATISTIC                      QueryStatistic;
+    XENVIF_VIF_QUERY_RING_COUNT_V8                  QueryRingCountVersion=
8;
+    XENVIF_VIF_UPDATE_HASH_MAPPING                  UpdateHashMapping;
+    XENVIF_VIF_RECEIVER_RETURN_PACKET               ReceiverReturnPacket;
+    XENVIF_VIF_RECEIVER_SET_OFFLOAD_OPTIONS         ReceiverSetOffloadOpt=
ions;
+    XENVIF_VIF_RECEIVER_SET_BACKFILL_SIZE           ReceiverSetBackfillSi=
ze;
+    XENVIF_VIF_RECEIVER_QUERY_RING_SIZE             ReceiverQueryRingSize=
;
+    XENVIF_VIF_RECEIVER_SET_HASH_ALGORITHM          ReceiverSetHashAlgori=
thm;
+    XENVIF_VIF_RECEIVER_QUERY_HASH_CAPABILITIES     ReceiverQueryHashCapa=
bilities;
+    XENVIF_VIF_RECEIVER_UPDATE_HASH_PARAMETERS      ReceiverUpdateHashPar=
ameters;
+    XENVIF_VIF_TRANSMITTER_QUEUE_PACKET             TransmitterQueuePacke=
t;
+    XENVIF_VIF_TRANSMITTER_QUERY_OFFLOAD_OPTIONS    TransmitterQueryOfflo=
adOptions;
+    XENVIF_VIF_TRANSMITTER_QUERY_LARGE_PACKET_SIZE  TransmitterQueryLarge=
PacketSize;
+    XENVIF_VIF_TRANSMITTER_QUERY_RING_SIZE          TransmitterQueryRingS=
ize;
+    XENVIF_VIF_MAC_QUERY_STATE                      MacQueryState;
+    XENVIF_VIF_MAC_QUERY_MAXIMUM_FRAME_SIZE         MacQueryMaximumFrameS=
ize;
+    XENVIF_VIF_MAC_QUERY_PERMANENT_ADDRESS          MacQueryPermanentAddr=
ess;
+    XENVIF_VIF_MAC_QUERY_CURRENT_ADDRESS            MacQueryCurrentAddres=
s;
+    XENVIF_VIF_MAC_QUERY_MULTICAST_ADDRESSES        MacQueryMulticastAddr=
esses;
+    XENVIF_VIF_MAC_SET_MULTICAST_ADDRESSES          MacSetMulticastAddres=
ses;
+    XENVIF_VIF_MAC_SET_FILTER_LEVEL                 MacSetFilterLevel;
+    XENVIF_VIF_MAC_QUERY_FILTER_LEVEL               MacQueryFilterLevel;
+};
+
+/*! \struct _XENVIF_VIF_INTERFACE_V11
+    \brief VIF interface version 11
+    \ingroup interfaces
+*/
+struct _XENVIF_VIF_INTERFACE_V11 {
     INTERFACE                                       Interface;
     XENVIF_VIF_ACQUIRE                              Acquire;
     XENVIF_VIF_RELEASE                              Release;
@@ -991,7 +1040,7 @@ struct _XENVIF_VIF_INTERFACE_V10 {
     XENVIF_VIF_MAC_QUERY_FILTER_LEVEL               MacQueryFilterLevel;
 };

-typedef struct _XENVIF_VIF_INTERFACE_V10 XENVIF_VIF_INTERFACE, *PXENVIF_V=
IF_INTERFACE;
+typedef struct _XENVIF_VIF_INTERFACE_V11 XENVIF_VIF_INTERFACE, *PXENVIF_V=
IF_INTERFACE;

 /*! \def XENVIF_VIF
     \brief Macro at assist in method invocation
@@ -1002,6 +1051,6 @@ typedef struct _XENVIF_VIF_INTERFACE_V10 XENVIF_VIF_=
INTERFACE, *PXENVIF_VIF_INTE
 #endif  // _WINDLL

 #define XENVIF_VIF_INTERFACE_VERSION_MIN    8
-#define XENVIF_VIF_INTERFACE_VERSION_MAX    10
+#define XENVIF_VIF_INTERFACE_VERSION_MAX    11

 #endif  // _XENVIF_INTERFACE_H
diff --git a/src/xenvif/vif=2Ec b/src/xenvif/vif=2Ec
index 4937bb6=2E=2Edb44e37 100644
--- a/src/xenvif/vif=2Ec
+++ b/src/xenvif/vif=2Ec
@@ -538,18 +538,31 @@ done:
 static VOID
 VifQueryRingCount(
     _In_ PINTERFACE     Interface,
-    _Out_ PULONG        Count
+    _Out_opt_ PULONG    Count,
+    _Out_opt_ PULONG    MaxCount
     )
 {
     PXENVIF_VIF_CONTEXT Context =3D Interface->Context;

     AcquireMrswLockShared(&Context->Lock);

-    *Count =3D FrontendGetNumQueues(Context->Frontend);
+    if (Count)
+        *Count =3D FrontendGetNumQueues(Context->Frontend);
+    if (MaxCount)
+        *MaxCount =3D FrontendGetMaxQueues(Context->Frontend);

     ReleaseMrswLockShared(&Context->Lock);
 }

+static VOID
+VifQueryRingCountVersion8(
+    _In_ PINTERFACE Interface,
+    _Out_ PULONG    Count
+    )
+{
+    VifQueryRingCount(Interface, Count, NULL);
+}
+
 static NTSTATUS
 VifUpdateHashMapping(
     _In_ PINTERFACE         Interface,
@@ -1008,7 +1021,7 @@ static struct _XENVIF_VIF_INTERFACE_V8 VifInterfaceV=
ersion8 =3D {
     VifEnableVersion8,
     VifDisable,
     VifQueryStatistic,
-    VifQueryRingCount,
+    VifQueryRingCountVersion8,
     VifUpdateHashMapping,
     VifReceiverReturnPacket,
     VifReceiverSetOffloadOptions,
@@ -1038,7 +1051,7 @@ static struct _XENVIF_VIF_INTERFACE_V9 VifInterfaceV=
ersion9 =3D {
     VifEnableVersion9,
     VifDisable,
     VifQueryStatistic,
-    VifQueryRingCount,
+    VifQueryRingCountVersion8,
     VifUpdateHashMapping,
     VifReceiverReturnPacket,
     VifReceiverSetOffloadOptions,
@@ -1068,6 +1081,36 @@ static struct _XENVIF_VIF_INTERFACE_V10 VifInterfac=
eVersion10 =3D {
     VifEnable,
     VifDisable,
     VifQueryStatistic,
+    VifQueryRingCountVersion8,
+    VifUpdateHashMapping,
+    VifReceiverReturnPacket,
+    VifReceiverSetOffloadOptions,
+    VifReceiverSetBackfillSize,
+    VifReceiverQueryRingSize,
+    VifReceiverSetHashAlgorithm,
+    VifReceiverQueryHashCapabilities,
+    VifReceiverUpdateHashParameters,
+    VifTransmitterQueuePacket,
+    VifTransmitterQueryOffloadOptions,
+    VifTransmitterQueryLargePacketSize,
+    VifTransmitterQueryRingSize,
+    VifMacQueryState,
+    VifMacQueryMaximumFrameSize,
+    VifMacQueryPermanentAddress,
+    VifMacQueryCurrentAddress,
+    VifMacQueryMulticastAddresses,
+    VifMacSetMulticastAddresses,
+    VifMacSetFilterLevel,
+    VifMacQueryFilterLevel
+};
+
+static struct _XENVIF_VIF_INTERFACE_V11 VifInterfaceVersion11 =3D {
+    { sizeof (struct _XENVIF_VIF_INTERFACE_V11), 11, NULL, NULL, NULL },
+    VifAcquire,
+    VifRelease,
+    VifEnable,
+    VifDisable,
+    VifQueryStatistic,
     VifQueryRingCount,
     VifUpdateHashMapping,
     VifReceiverReturnPacket,
@@ -1211,6 +1254,23 @@ VifGetInterface(
         status =3D STATUS_SUCCESS;
         break;
     }
+    case 11: {
+        struct _XENVIF_VIF_INTERFACE_V11 *VifInterface;
+
+        VifInterface =3D (struct _XENVIF_VIF_INTERFACE_V11 *)Interface;
+
+        status =3D STATUS_BUFFER_OVERFLOW;
+        if (Size < sizeof (struct _XENVIF_VIF_INTERFACE_V11))
+            break;
+
+        *VifInterface =3D VifInterfaceVersion11;
+
+        ASSERT3U(Interface->Version, =3D=3D, Version);
+        Interface->Context =3D Context;
+
+        status =3D STATUS_SUCCESS;
+        break;
+    }
     default:
         status =3D STATUS_NOT_SUPPORTED;
         break;
--
2=2E55=2E0=2Ewindows=2E3


-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.23d.b34e11ce1875b063.1a13fb47a9f.778b55650e67c4ce=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 15 13:17:13 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 15 Oct 2026 13:17:13 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1450524.1665973 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHLKa-00080H-Ns; Thu, 15 Oct 2026 13:17:12 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1450524.1665973; Thu, 15 Oct 2026 13:17:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHLKa-00080A-KV; Thu, 15 Oct 2026 13:17:12 +0000
Received: by outflank-mailman (input) for mailman id 1450524;
 Thu, 15 Oct 2026 13:17:11 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13fb58e410008425@swg.vates.tech>)
 id 1xHLKZ-0007zs-DX
 for win-pv-devel@lists.xenproject.org; Thu, 15 Oct 2026 13:17:11 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xHLKY-00H0QB-Fd
 for win-pv-devel@lists.xenproject.org; Thu, 15 Oct 2026 15:17:10 +0200
Received: from [10.42.69.10] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13fb58e410008425@swg.vates.tech>)
 id 6ad0d255-2eae-0a2a0a5409dd-0a2a450ae5f0-2
 for <win-pv-devel@lists.xenproject.org>; Thu, 15 Oct 2026 15:17:10 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-4011c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13fb58e410008425@swg.vates.tech>)
 id 6ad0d256-f2d2-0a2a450a0019-b9ff1c12b2d1-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 15 Oct 2026 15:17:10 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a13fb58e410008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 15 Oct 2026 13:17:05 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id E926C81F38;
 Thu, 15 Oct 2026 15:17:04 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=tfgjGWVdVsavjm5r0ZzJ/J+p8JSjoxPAQEJA+jcmXug=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=hoojab8puS7TOdpuZ0Optv08zLtra+ll5qN8IyUCO2eGqlz72XRHobBx5YmIxGUWfQ5dgoyEL
 QFAWU2NeaN4+u+WD7y9CEznYFKEyBDR+iA+ZhsTJs2iFJPUII9F/c3vDAeZbM9Uz6Jg+3s2s00H
 LFQ8ASXuR3CyPVXpQm/rGIbtvr5P0wGrAwM2uGElgVC6sqUtFDbf+jwmKoDwc6LKtNFHDzSh+P2
 lx6Uc6vnOzU4rUWMZas5v8VRc0MMjAYrWrw5X34jrzp9lniCZSDs0tyKIW4SUAyGSGYr7RCNOYN
 pqIw4aqABqi0moy0YPTVDfJGe/ZkL4RqKyXsenNybSPA==
X-Zone-Loop: 4c8acc57247b5aa8c18019fa4faa79d148352a193341
x-campaign-type: default
x-transaction-id: 41a3017d-f705-41d5-9b43-af571a477a41
x-swg-uid: 01-b8d55c0a-b22a-4d66-ae53-cc35965858ad
X-Mailer: Sweego
Message-ID:
 <1792070225.8631fc262581453bbf619ec5b2062170.1a13fb58e410008425@vates.tech>
x-swg-bid: 1792070225.8631fc262581453bbf619ec5b2062170.1a13fb58e410008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [PATCH v2 2/3] receiver: Remove dependencies on HVM_MAX_VCPUS
Date: Thu, 15 Oct 2026 15:16:58 +0200
In-Reply-To: <20261015131702.1935-1-ngoc-tu.dinh@vates.tech>
References: <1792070155.8631fc262581453bbf619ec5b2062170.1a13fb47d080008425@vates.tech>
 <20261015131702.1935-1-ngoc-tu.dinh@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.23f.dea3f7b8b166123c.1a13fb58c6e.c8dca82ff969f2a2=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792070225006
X-purgate-ID: tlsNG-4011c0/1792070230-528DDCFC-19F611BD/0/0
X-purgate-type: clean
X-purgate-size: 5051

---=Part.23f.dea3f7b8b166123c.1a13fb58c6e.c8dca82ff969f2a2=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

For Receiver->GetList, XenNet can use KeQueryMaximumProcessorCountEx(
ALL_PROCESSOR_GROUPS) instead=2E

PutList is only used to replace the per-CPU GetList, so keep it as is=2E

Queue is indexed not by CPU index but by queue index, so allocate it
using the max count returned by QueryRingCount V11 instead=2E

Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
v2: Set ProcessorCount and RingCount to 0 on cleanup=2E
---
 src/xennet/receiver=2Ec | 61 ++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 55 insertions(+), 6 deletions(-)

diff --git a/src/xennet/receiver=2Ec b/src/xennet/receiver=2Ec
index 565d31b=2E=2E7fb3ed2 100644
--- a/src/xennet/receiver=2Ec
+++ b/src/xennet/receiver=2Ec
@@ -33,7 +33,6 @@
 #include <ndis=2Eh>
 #include <procgrp=2Eh>
 #include <tcpip=2Eh>
-#include <xen=2Eh>
 #include <ethernet=2Eh>

 #include "util=2Eh"
@@ -52,9 +51,11 @@ typedef struct _XENNET_RECEIVER_QUEUE {
 struct _XENNET_RECEIVER {
     PXENNET_ADAPTER             Adapter;
     NDIS_HANDLE                 NetBufferListPool;
+    ULONG                       ProcessorCount;
+    ULONG                       RingCount;
     PNET_BUFFER_LIST            PutList;
-    PNET_BUFFER_LIST            GetList[HVM_MAX_VCPUS];
-    XENNET_RECEIVER_QUEUE       Queue[HVM_MAX_VCPUS];
+    PNET_BUFFER_LIST            *GetList;
+    XENNET_RECEIVER_QUEUE       *Queue;
     LONG                        Indicated;
     LONG                        Returned;
     XENVIF_VIF_OFFLOAD_OPTIONS  OffloadOptions;
@@ -500,6 +501,24 @@ ReceiverInitialize(
     RtlZeroMemory(*Receiver, sizeof(XENNET_RECEIVER));
     (*Receiver)->Adapter =3D Adapter;

+    (*Receiver)->ProcessorCount =3D KeQueryMaximumProcessorCountEx(ALL_PR=
OCESSOR_GROUPS);
+    XENVIF_VIF(QueryRingCount,
+               AdapterGetVifInterface(Adapter),
+               NULL,
+               &(*Receiver)->RingCount);
+
+    (*Receiver)->GetList =3D __AllocatePoolWithTag(NonPagedPool,
+                                                 (*Receiver)->ProcessorCo=
unt * sizeof(PNET_BUFFER_LIST),
+                                                 RECEIVER_POOL_TAG);
+    if ((*Receiver)->GetList =3D=3D NULL)
+        goto fail2;
+
+    (*Receiver)->Queue =3D __AllocatePoolWithTag(NonPagedPool,
+                                               (*Receiver)->RingCount * s=
izeof(XENNET_RECEIVER_QUEUE),
+                                               RECEIVER_POOL_TAG);
+    if ((*Receiver)->Queue =3D=3D NULL)
+        goto fail3;
+
     RtlZeroMemory(&Params, sizeof(NET_BUFFER_LIST_POOL_PARAMETERS));
     Params=2EHeader=2EType =3D NDIS_OBJECT_TYPE_DEFAULT;
     Params=2EHeader=2ERevision =3D NET_BUFFER_LIST_POOL_PARAMETERS_REVISI=
ON_1;
@@ -514,9 +533,9 @@ ReceiverInitialize(

     status =3D NDIS_STATUS_RESOURCES;
     if ((*Receiver)->NetBufferListPool =3D=3D NULL)
-        goto fail2;
+        goto fail4;

-    for (Index =3D 0; Index < HVM_MAX_VCPUS; Index++) {
+    for (Index =3D 0; Index < (*Receiver)->RingCount; Index++) {
         PXENNET_RECEIVER_QUEUE  Queue =3D &(*Receiver)->Queue[Index];

         KeInitializeSpinLock(&Queue->Lock);
@@ -524,8 +543,29 @@ ReceiverInitialize(

     return NDIS_STATUS_SUCCESS;

+fail4:
+    Error("fail4\n");
+
+    __FreePoolWithTag((*Receiver)->Queue, RECEIVER_POOL_TAG);
+    (*Receiver)->Queue =3D NULL;
+
+fail3:
+    Error("fail3\n");
+
+    __FreePoolWithTag((*Receiver)->GetList, RECEIVER_POOL_TAG);
+    (*Receiver)->GetList =3D NULL;
+
 fail2:
+    Error("fail2\n");
+
+    (*Receiver)->ProcessorCount =3D 0;
+    (*Receiver)->RingCount =3D 0;
+    __FreePoolWithTag(*Receiver, RECEIVER_POOL_TAG);
+    *Receiver =3D NULL;
+
 fail1:
+    Error("fail1 (%08x)\n", status);
+
     return status;
 }

@@ -541,7 +581,7 @@ ReceiverTeardown(

     ASSERT3U(Receiver->Returned, =3D=3D, Receiver->Indicated);

-    for (Index =3D 0; Index < HVM_MAX_VCPUS; Index++) {
+    for (Index =3D 0; Index < Receiver->ProcessorCount; Index++) {
         NetBufferList =3D Receiver->GetList[Index];

         while (NetBufferList !=3D NULL) {
@@ -571,6 +611,15 @@ ReceiverTeardown(
     NdisFreeNetBufferListPool(Receiver->NetBufferListPool);
     Receiver->NetBufferListPool =3D NULL;

+    __FreePoolWithTag(Receiver->Queue, RECEIVER_POOL_TAG);
+    Receiver->Queue =3D NULL;
+
+    __FreePoolWithTag(Receiver->GetList, RECEIVER_POOL_TAG);
+    Receiver->GetList =3D NULL;
+
+    Receiver->RingCount =3D 0;
+    Receiver->ProcessorCount =3D 0;
+
     Receiver->Adapter =3D NULL;

     __FreePoolWithTag(Receiver, RECEIVER_POOL_TAG);
--
2=2E55=2E0=2Ewindows=2E3


-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.23f.dea3f7b8b166123c.1a13fb58c6e.c8dca82ff969f2a2=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 15 13:17:13 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 15 Oct 2026 13:17:13 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1450525.1665976 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHLKb-00081h-Pk; Thu, 15 Oct 2026 13:17:13 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1450525.1665976; Thu, 15 Oct 2026 13:17:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHLKb-00081a-Lp; Thu, 15 Oct 2026 13:17:13 +0000
Received: by outflank-mailman (input) for mailman id 1450525;
 Thu, 15 Oct 2026 13:17:11 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13fb58d5c0008425@swg.vates.tech>)
 id 1xHLKZ-0007zt-Ex
 for win-pv-devel@lists.xenproject.org; Thu, 15 Oct 2026 13:17:11 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xHLKY-00H0Uw-Ra
 for win-pv-devel@lists.xenproject.org; Thu, 15 Oct 2026 15:17:10 +0200
Received: from [10.42.69.12] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13fb58d5c0008425@swg.vates.tech>)
 id 6ad0d24f-bab6-0a2a0a5309dd-0a2a450c9c62-38
 for <win-pv-devel@lists.xenproject.org>; Thu, 15 Oct 2026 15:17:10 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-d25034.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13fb58d5c0008425@swg.vates.tech>)
 id 6ad0d256-f479-0a2a450c0019-b9ff1c12a66f-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 15 Oct 2026 15:17:10 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a13fb58d5c0008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 15 Oct 2026 13:17:05 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 70A5180BB5;
 Thu, 15 Oct 2026 15:17:04 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=B8he/rnlbcw1moDS3YxGhtKjKwFqTKU9eW0reN0Okio=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=QyLaLOijoFxowo0heLcsTGvfLid/kGNBS7p22u9wgSyElUR6zdaktGI6U+D0CDjQnyo4ryzSG
 EUlJ+ywmzipVVWouu/QZLShS0e72PmtaC9nTLjDDQe5o1TtPk2+YIYSVKHkVqXckIiYf1WU8bsP
 WUziqWdjRVYwhnJ7llG94kM9TC/AlNLSK5xAuXtClru6mWfEBoHzQIXdqv6PrKNTBhsLMLSCazs
 livJxpBxRMzYTj67ZGuGJpXXcQ0VUPFow6BbQ4GKPL2h2HiAz56ui4pYNcE6c2fLzzVdetMp93+
 hkzLtbmvJ9nst6r5qO/ToLevc2xUGqLXevH9y5uyHxQQ==
X-Zone-Loop: 471ca28c7074817b946940f9965c200d34ef96513741
x-campaign-type: default
x-transaction-id: 0108e891-d52b-43af-8d9f-c09c93c7e037
x-swg-uid: 01-b274b007-6b82-4e64-9158-75bc8342f045
X-Mailer: Sweego
Message-ID:
 <1792070225.8631fc262581453bbf619ec5b2062170.1a13fb58d5c0008425@vates.tech>
x-swg-bid: 1792070225.8631fc262581453bbf619ec5b2062170.1a13fb58d5c0008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [PATCH v2 1/3] Add definitions and usage of VIF interface V11
Date: Thu, 15 Oct 2026 15:16:57 +0200
In-Reply-To: <1792070155.8631fc262581453bbf619ec5b2062170.1a13fb47d080008425@vates.tech>
References: <1792070155.8631fc262581453bbf619ec5b2062170.1a13fb47d080008425@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.23e.2f8a2546531197cd.1a13fb58a84.6f1ac68caee8f0c=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792070224516
X-purgate-ID: tlsNG-d25034/1792070230-002F0A5B-28883A48/0/0
X-purgate-type: clean
X-purgate-size: 9456

---=Part.23e.2f8a2546531197cd.1a13fb58a84.6f1ac68caee8f0c=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Requires a non-functional change in AdapterSetGeneralAttributes to
account for the new MaxCount parameter=2E

Testing shows that an old driver with FeatureScore=3D0xFE will still
outrank a new driver with FeatureScore=3D0xFF even if its device ID no
longer matches=2E So delete the TODO line in the INF=2E

Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
v2: Pass NULL to MaxRingCount according to V11 changes=2E
---
 include/vif_interface=2Eh | 67 +++++++++++++++++++++++++++++++++++------
 src/xennet=2Einf          | 14 ++++-----
 src/xennet/adapter=2Ec    |  3 +-
 3 files changed, 66 insertions(+), 18 deletions(-)

diff --git a/include/vif_interface=2Eh b/include/vif_interface=2Eh
index 05d472e=2E=2E3139b13 100644
--- a/include/vif_interface=2Eh
+++ b/include/vif_interface=2Eh
@@ -499,9 +499,9 @@ typedef union _XENVIF_VIF_CALLBACK_PARAMETERS_V10 XENV=
IF_VIF_CALLBACK_PARAMETERS
 */
 typedef VOID
 (*XENVIF_VIF_CALLBACK)(
-    _In_opt_ PVOID                          Argument,
-    _In_ XENVIF_VIF_CALLBACK_TYPE           Type,
-    _In_ PXENVIF_VIF_CALLBACK_PARAMETERS    Parameters
+    _In_opt_ PVOID                              Argument,
+    _In_ XENVIF_VIF_CALLBACK_TYPE               Type,
+    _In_opt_ PXENVIF_VIF_CALLBACK_PARAMETERS    Parameters
     );

 typedef NTSTATUS
@@ -567,7 +567,7 @@ typedef NTSTATUS
     _Out_ PULONGLONG            Value
     );

-/*! \typedef XENVIF_VIF_QUERY_RING_COUNT
+/*! \typedef XENVIF_VIF_QUERY_RING_COUNT_V8
     \brief Query the number of shared rings between frontend
     and backend

@@ -575,11 +575,26 @@ typedef NTSTATUS
     \param Count Buffer to receive the count
 */
 typedef VOID
-(*XENVIF_VIF_QUERY_RING_COUNT)(
+(*XENVIF_VIF_QUERY_RING_COUNT_V8)(
     _In_ PINTERFACE Interface,
     _Out_ PULONG    Count
     );

+/*! \typedef XENVIF_VIF_QUERY_RING_COUNT
+    \brief Query the number of shared rings between frontend
+    and backend
+
+    \param Interface The interface header
+    \param Count Buffer to receive the count
+    \param MaxCount Buffer to receive the maximum possible ring count
+*/
+typedef VOID
+(*XENVIF_VIF_QUERY_RING_COUNT)(
+    _In_ PINTERFACE     Interface,
+    _Out_opt_ PULONG    Count,
+    _Out_opt_ PULONG    MaxCount
+    );
+
 /*! \typedef XENVIF_VIF_UPDATE_HASH_MAPPING
     \brief Update the mapping of hash to transmitter/receiver ring

@@ -900,7 +915,7 @@ struct _XENVIF_VIF_INTERFACE_V8 {
     XENVIF_VIF_ENABLE_V8                            EnableVersion8;
     XENVIF_VIF_DISABLE                              Disable;
     XENVIF_VIF_QUERY_STATISTIC                      QueryStatistic;
-    XENVIF_VIF_QUERY_RING_COUNT                     QueryRingCount;
+    XENVIF_VIF_QUERY_RING_COUNT_V8                  QueryRingCountVersion=
8;
     XENVIF_VIF_UPDATE_HASH_MAPPING                  UpdateHashMapping;
     XENVIF_VIF_RECEIVER_RETURN_PACKET               ReceiverReturnPacket;
     XENVIF_VIF_RECEIVER_SET_OFFLOAD_OPTIONS         ReceiverSetOffloadOpt=
ions;
@@ -934,7 +949,7 @@ struct _XENVIF_VIF_INTERFACE_V9 {
     XENVIF_VIF_ENABLE_V9                            EnableVersion9;
     XENVIF_VIF_DISABLE                              Disable;
     XENVIF_VIF_QUERY_STATISTIC                      QueryStatistic;
-    XENVIF_VIF_QUERY_RING_COUNT                     QueryRingCount;
+    XENVIF_VIF_QUERY_RING_COUNT_V8                  QueryRingCountVersion=
8;
     XENVIF_VIF_UPDATE_HASH_MAPPING                  UpdateHashMapping;
     XENVIF_VIF_RECEIVER_RETURN_PACKET               ReceiverReturnPacket;
     XENVIF_VIF_RECEIVER_SET_OFFLOAD_OPTIONS         ReceiverSetOffloadOpt=
ions;
@@ -962,6 +977,40 @@ struct _XENVIF_VIF_INTERFACE_V9 {
     \ingroup interfaces
 */
 struct _XENVIF_VIF_INTERFACE_V10 {
+    INTERFACE                                       Interface;
+    XENVIF_VIF_ACQUIRE                              Acquire;
+    XENVIF_VIF_RELEASE                              Release;
+    XENVIF_VIF_ENABLE                               Enable;
+    XENVIF_VIF_DISABLE                              Disable;
+    XENVIF_VIF_QUERY_STATISTIC                      QueryStatistic;
+    XENVIF_VIF_QUERY_RING_COUNT_V8                  QueryRingCountVersion=
8;
+    XENVIF_VIF_UPDATE_HASH_MAPPING                  UpdateHashMapping;
+    XENVIF_VIF_RECEIVER_RETURN_PACKET               ReceiverReturnPacket;
+    XENVIF_VIF_RECEIVER_SET_OFFLOAD_OPTIONS         ReceiverSetOffloadOpt=
ions;
+    XENVIF_VIF_RECEIVER_SET_BACKFILL_SIZE           ReceiverSetBackfillSi=
ze;
+    XENVIF_VIF_RECEIVER_QUERY_RING_SIZE             ReceiverQueryRingSize=
;
+    XENVIF_VIF_RECEIVER_SET_HASH_ALGORITHM          ReceiverSetHashAlgori=
thm;
+    XENVIF_VIF_RECEIVER_QUERY_HASH_CAPABILITIES     ReceiverQueryHashCapa=
bilities;
+    XENVIF_VIF_RECEIVER_UPDATE_HASH_PARAMETERS      ReceiverUpdateHashPar=
ameters;
+    XENVIF_VIF_TRANSMITTER_QUEUE_PACKET             TransmitterQueuePacke=
t;
+    XENVIF_VIF_TRANSMITTER_QUERY_OFFLOAD_OPTIONS    TransmitterQueryOfflo=
adOptions;
+    XENVIF_VIF_TRANSMITTER_QUERY_LARGE_PACKET_SIZE  TransmitterQueryLarge=
PacketSize;
+    XENVIF_VIF_TRANSMITTER_QUERY_RING_SIZE          TransmitterQueryRingS=
ize;
+    XENVIF_VIF_MAC_QUERY_STATE                      MacQueryState;
+    XENVIF_VIF_MAC_QUERY_MAXIMUM_FRAME_SIZE         MacQueryMaximumFrameS=
ize;
+    XENVIF_VIF_MAC_QUERY_PERMANENT_ADDRESS          MacQueryPermanentAddr=
ess;
+    XENVIF_VIF_MAC_QUERY_CURRENT_ADDRESS            MacQueryCurrentAddres=
s;
+    XENVIF_VIF_MAC_QUERY_MULTICAST_ADDRESSES        MacQueryMulticastAddr=
esses;
+    XENVIF_VIF_MAC_SET_MULTICAST_ADDRESSES          MacSetMulticastAddres=
ses;
+    XENVIF_VIF_MAC_SET_FILTER_LEVEL                 MacSetFilterLevel;
+    XENVIF_VIF_MAC_QUERY_FILTER_LEVEL               MacQueryFilterLevel;
+};
+
+/*! \struct _XENVIF_VIF_INTERFACE_V11
+    \brief VIF interface version 11
+    \ingroup interfaces
+*/
+struct _XENVIF_VIF_INTERFACE_V11 {
     INTERFACE                                       Interface;
     XENVIF_VIF_ACQUIRE                              Acquire;
     XENVIF_VIF_RELEASE                              Release;
@@ -991,7 +1040,7 @@ struct _XENVIF_VIF_INTERFACE_V10 {
     XENVIF_VIF_MAC_QUERY_FILTER_LEVEL               MacQueryFilterLevel;
 };

-typedef struct _XENVIF_VIF_INTERFACE_V10 XENVIF_VIF_INTERFACE, *PXENVIF_V=
IF_INTERFACE;
+typedef struct _XENVIF_VIF_INTERFACE_V11 XENVIF_VIF_INTERFACE, *PXENVIF_V=
IF_INTERFACE;

 /*! \def XENVIF_VIF
     \brief Macro at assist in method invocation
@@ -1002,6 +1051,6 @@ typedef struct _XENVIF_VIF_INTERFACE_V10 XENVIF_VIF_=
INTERFACE, *PXENVIF_VIF_INTE
 #endif  // _WINDLL

 #define XENVIF_VIF_INTERFACE_VERSION_MIN    8
-#define XENVIF_VIF_INTERFACE_VERSION_MAX    10
+#define XENVIF_VIF_INTERFACE_VERSION_MAX    11

 #endif  // _XENVIF_INTERFACE_H
diff --git a/src/xennet=2Einf b/src/xennet=2Einf
index 79730e8=2E=2E49a1733 100644
--- a/src/xennet=2Einf
+++ b/src/xennet=2Einf
@@ -56,15 +56,15 @@ xennet=2Esys

 [Inst=2ENT@INF_ARCH@]
 %XenNetName%=3DXenNet_Inst,\
-XENVIF\VEN_@VENDOR_PREFIX@@VENDOR_DEVICE_ID@&DEV_NET&REV_09000005,\
-XENVIF\VEN_@VENDOR_PREFIX@0001&DEV_NET&REV_09000005,\
-XENVIF\VEN_@VENDOR_PREFIX@0002&DEV_NET&REV_09000005
+XENVIF\VEN_@VENDOR_PREFIX@@VENDOR_DEVICE_ID@&DEV_NET&REV_09000006,\
+XENVIF\VEN_@VENDOR_PREFIX@0001&DEV_NET&REV_09000006,\
+XENVIF\VEN_@VENDOR_PREFIX@0002&DEV_NET&REV_09000006

 [Inst=2ENT@INF_ARCH@=2E10=2E0=2E=2E=2E25398]
 %XenNetName%=3DXenNet_Inst_25H2,\
-XENVIF\VEN_@VENDOR_PREFIX@@VENDOR_DEVICE_ID@&DEV_NET&REV_09000005,\
-XENVIF\VEN_@VENDOR_PREFIX@0001&DEV_NET&REV_09000005,\
-XENVIF\VEN_@VENDOR_PREFIX@0002&DEV_NET&REV_09000005
+XENVIF\VEN_@VENDOR_PREFIX@@VENDOR_DEVICE_ID@&DEV_NET&REV_09000006,\
+XENVIF\VEN_@VENDOR_PREFIX@0001&DEV_NET&REV_09000006,\
+XENVIF\VEN_@VENDOR_PREFIX@0002&DEV_NET&REV_09000006

 [XenNet_Inst]
 Characteristics=3D0x84
@@ -74,7 +74,6 @@ BusType=3D1
 *PhysicalMediaType=3D14	; NdisPhysicalMedium802_3
 CopyFiles=3DXenNet_Copyfiles
 AddReg=3DXennet_Inst_AddReg
-; TODO: Remove during next PDO version bump
 FeatureScore=3D0xFE

 [XenNet_Inst_25H2]
@@ -85,7 +84,6 @@ BusType=3D1
 *PhysicalMediaType=3D14	; NdisPhysicalMedium802_3
 CopyFiles=3DXenNet_Copyfiles
 AddReg=3DXennet_Inst_AddReg
-; TODO: Remove during next PDO version bump
 FeatureScore=3D0xFE

 [XenNet_Inst_AddReg]
diff --git a/src/xennet/adapter=2Ec b/src/xennet/adapter=2Ec
index 965315d=2E=2E7cb910c 100644
--- a/src/xennet/adapter=2Ec
+++ b/src/xennet/adapter=2Ec
@@ -3110,7 +3110,8 @@ AdapterSetGeneralAttributes(

     XENVIF_VIF(QueryRingCount,
                &Adapter->VifInterface,
-               &Rss=2ENumberOfReceiveQueues);
+               &Rss=2ENumberOfReceiveQueues,
+               NULL);
     Rss=2ENumberOfInterruptMessages =3D Rss=2ENumberOfReceiveQueues;

     if ((ULONG)Adapter->Properties=2Enumrssqueues < Rss=2ENumberOfReceive=
Queues)
--
2=2E55=2E0=2Ewindows=2E3


-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.23e.2f8a2546531197cd.1a13fb58a84.6f1ac68caee8f0c=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 15 13:17:13 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 15 Oct 2026 13:17:13 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1450526.1665980 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHLKb-000825-TX; Thu, 15 Oct 2026 13:17:13 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1450526.1665980; Thu, 15 Oct 2026 13:17:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHLKb-00081m-NE; Thu, 15 Oct 2026 13:17:13 +0000
Received: by outflank-mailman (input) for mailman id 1450526;
 Thu, 15 Oct 2026 13:17:11 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13fb58ffa0008425@swg.vates.tech>)
 id 1xHLKZ-0007zu-Fu
 for win-pv-devel@lists.xenproject.org; Thu, 15 Oct 2026 13:17:11 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xHLKY-00H0Uw-So
 for win-pv-devel@lists.xenproject.org; Thu, 15 Oct 2026 15:17:10 +0200
Received: from [10.42.69.7] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13fb58ffa0008425@swg.vates.tech>)
 id 6ad0d24d-bab6-0a2a0a5309dd-0a2a45078fbc-36
 for <win-pv-devel@lists.xenproject.org>; Thu, 15 Oct 2026 15:17:10 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-ef75cf.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13fb58ffa0008425@swg.vates.tech>)
 id 6ad0d256-b4ea-0a2a45070019-b9ff1c23b025-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 15 Oct 2026 15:17:10 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a13fb58ffa0008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 15 Oct 2026 13:17:05 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 245698217C;
 Thu, 15 Oct 2026 15:17:05 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=Q0tlLkD7msqoNZc/SJLZg/eGNANFanLxK8aMqOv3bm8=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=Enu27OIcrqqQ440yQDVqAt6Irmb1DgDPP/vOlRFvFwxlj+bQBBnppnz2Uk1JDE1sWYGd8jno1
 ze5nLTPy6BrbPLZeSoiugGaT6UvfWAxxbE0r4SsvAX7CzuB07jMf26Xz4BVaqwUl1a0R4udWF4V
 SX4yWCf95RU1Fb//+01C43rZfa0oowcQzbwK5Inr/SCajf/Jm4yVWmC8Jizyv1xIIFM8xBA3NSj
 XLPumFNd4ZLW/PInMUtsU/skSwEM+QvA8qf94yI4gE4fdqS0hly+OzsMER5I1y8zxuW7eGIxJSQ
 rTs1KokoEcMpAy1DNTaTbQT1JS0oozJILbeH6TbUxalA==
X-Zone-Loop: a4f5c4abe800f98953c74a3fdabb125baa1af7ece563
x-campaign-type: default
x-transaction-id: 108e6aa4-7f4e-4475-a3a5-7809a4b25e8b
x-swg-uid: 01-d14dc169-3397-41cd-bc18-a7d53c39f406
X-Mailer: Sweego
Message-ID:
 <1792070225.8631fc262581453bbf619ec5b2062170.1a13fb58ffa0008425@vates.tech>
x-swg-bid: 1792070225.8631fc262581453bbf619ec5b2062170.1a13fb58ffa0008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [PATCH v2 3/3] Remove Xen headers
Date: Thu, 15 Oct 2026 15:16:59 +0200
In-Reply-To: <20261015131702.1935-1-ngoc-tu.dinh@vates.tech>
References: <1792070155.8631fc262581453bbf619ec5b2062170.1a13fb47d080008425@vates.tech>
 <20261015131702.1935-1-ngoc-tu.dinh@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.240.1e892e6ec256aae4.1a13fb58d89.1f794ca3d7a7883c=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792070225290
X-purgate-ID: tlsNG-ef75cf/1792070230-A60C5944-276AC268/0/0
X-purgate-type: clean
X-purgate-size: 92372

---=Part.240.1e892e6ec256aae4.1a13fb58d89.1f794ca3d7a7883c=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

As a pure NDIS driver, XenNet doesn't need Xen headers at all=2E

Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
v2: Removed include\xen from project files=2E
---
 get_xen_headers=2Epy                       |  74 --
 include/xen-types=2Eh                      |  59 --
 include/xen-version=2Eh                    |  38 -
 include/xen-warnings=2Eh                   |  43 -
 include/xen=2Eh                            |  44 -
 include/xen/public/arch-x86/xen-x86_32=2Eh | 169 ----
 include/xen/public/arch-x86/xen-x86_64=2Eh | 202 -----
 include/xen/public/arch-x86/xen=2Eh        | 338 --------
 include/xen/public/hvm/hvm_info_table=2Eh  |  74 --
 include/xen/public/xen-compat=2Eh          |  44 -
 include/xen/public/xen=2Eh                 | 995 -----------------------
 vs2019/xennet/xennet=2Evcxproj             |   2 +-
 vs2022/xennet/xennet=2Evcxproj             |   2 +-
 13 files changed, 2 insertions(+), 2082 deletions(-)
 delete mode 100644 get_xen_headers=2Epy
 delete mode 100644 include/xen-types=2Eh
 delete mode 100644 include/xen-version=2Eh
 delete mode 100644 include/xen-warnings=2Eh
 delete mode 100644 include/xen=2Eh
 delete mode 100644 include/xen/public/arch-x86/xen-x86_32=2Eh
 delete mode 100644 include/xen/public/arch-x86/xen-x86_64=2Eh
 delete mode 100644 include/xen/public/arch-x86/xen=2Eh
 delete mode 100644 include/xen/public/hvm/hvm_info_table=2Eh
 delete mode 100644 include/xen/public/xen-compat=2Eh
 delete mode 100644 include/xen/public/xen=2Eh

diff --git a/get_xen_headers=2Epy b/get_xen_headers=2Epy
deleted file mode 100644
index 2d4d0f6=2E=2E0000000
--- a/get_xen_headers=2Epy
+++ /dev/null
@@ -1,74 +0,0 @@
-#!python -u
-
-import os, sys
-import shutil
-import subprocess
-import re
-
-def shell(command, dir =3D '=2E'):
-    print("in '%s' execute '%s'" % (dir, ' '=2Ejoin(command)))
-    sys=2Estdout=2Eflush()
-
-    sub =3D subprocess=2EPopen(' '=2Ejoin(command), cwd=3Ddir,
-                           stdout=3Dsubprocess=2EPIPE,
-                           stderr=3Dsubprocess=2ESTDOUT)
-
-    for line in sub=2Estdout:
-        print(line=2Edecode(sys=2Egetdefaultencoding())=2Erstrip())
-
-    sub=2Ewait()
-
-    return sub=2Ereturncode
-
-def get_repo(url, working):
-    shell(['git', 'clone', '--no-checkout', url, working])
-
-def get_branch(tag, working):
-    shell(['git', 'checkout', '-b', 'tmp', tag], working)
-
-def put_branch(working):
-    shell(['git', 'checkout', 'master'], working)
-    shell(['git', 'branch', '-d', 'tmp'], working)
-
-def copy_file(working, dir, name):
-    try:
-        os=2Emakedirs('include\\xen\\%s' % dir)
-    except OSError:
-        None
-
-    src =3D open('%s\\xen\\include\\%s\\%s' % (working, dir, name), 'r')
-    dst =3D open('include\\xen\\%s\\%s' % (dir, name), 'w', newline=3D'\n=
')
-
-    print(name)
-
-    for line in src:
-        line =3D re=2Esub(' unsigned long', ' ULONG_PTR', line)
-        line =3D re=2Esub('\(unsigned long', '(ULONG_PTR', line)
-        line =3D re=2Esub(' long', ' LONG_PTR', line)
-        line =3D re=2Esub('\(long', '(LONG_PTR', line)
-        dst=2Ewrite(line)
-
-    dst=2Eclose()
-    src=2Eclose()
-
-if __name__ =3D=3D '__main__':
-    tag =3D sys=2Eargv[1]
-    working =3D sys=2Eargv[2]
-
-    get_repo('git://xenbits=2Exen=2Eorg/xen=2Egit', working)
-    get_branch(tag, working)
-
-    shell(['git', 'rm', '-r', '-f', 'xen'], 'include')
-
-    copy_file(working, 'public', 'xen=2Eh')
-    copy_file(working, 'public', 'xen-compat=2Eh')
-
-    copy_file(working, 'public\\arch-x86', 'xen=2Eh')
-    copy_file(working, 'public\\arch-x86', 'xen-x86_32=2Eh')
-    copy_file(working, 'public\\arch-x86', 'xen-x86_64=2Eh')
-
-    copy_file(working, 'public\\hvm', 'hvm_info_table=2Eh')
-
-    put_branch(working)
-
-    shell(['git', 'add', 'xen'], 'include')
diff --git a/include/xen-types=2Eh b/include/xen-types=2Eh
deleted file mode 100644
index b618af2=2E=2E0000000
--- a/include/xen-types=2Eh
+++ /dev/null
@@ -1,59 +0,0 @@
-/* Copyright (c) Xen Project=2E
- * Copyright (c) Cloud Software Group, Inc=2E
- * All rights reserved=2E
- *
- * Redistribution and use in source and binary forms,
- * with or without modification, are permitted provided
- * that the following conditions are met:
- *
- * *   Redistributions of source code must retain the above
- *     copyright notice, this list of conditions and the
- *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above
- *     copyright notice, this list of conditions and the
- *     following disclaimer in the documentation and/or other
- *     materials provided with the distribution=2E
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE=2E
- */
-
-#ifndef _XEN_TYPES_H
-#define _XEN_TYPES_H
-
-#include <ntddk=2Eh>
-
-// Define types necessary to include xen headers
-
-typedef CHAR    int8_t;
-typedef SHORT   int16_t;
-typedef LONG    int32_t;
-typedef LONG64  int64_t;
-
-typedef UCHAR   uint8_t;
-typedef USHORT  uint16_t;
-typedef ULONG   uint32_t;
-typedef ULONG64 uint64_t;
-
-#define xen_mb()    KeMemoryBarrier()
-#if defined(_M_IX86) || defined(_M_X64)
-#define xen_wmb()   KeMemoryBarrierWithoutFence()
-#define xen_rmb()   KeMemoryBarrierWithoutFence()
-#else
-#define xen_wmb()   KeMemoryBarrier()
-#define xen_rmb()   KeMemoryBarrier()
-#endif
-
-#endif  // _XEN_TYPES_H
diff --git a/include/xen-version=2Eh b/include/xen-version=2Eh
deleted file mode 100644
index 224ca88=2E=2E0000000
--- a/include/xen-version=2Eh
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Copyright (c) Xen Project=2E
- * Copyright (c) Cloud Software Group, Inc=2E
- * All rights reserved=2E
- *
- * Redistribution and use in source and binary forms,
- * with or without modification, are permitted provided
- * that the following conditions are met:
- *
- * *   Redistributions of source code must retain the above
- *     copyright notice, this list of conditions and the
- *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above
- *     copyright notice, this list of conditions and the
- *     following disclaimer in the documentation and/or other
- *     materials provided with the distribution=2E
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE=2E
- */
-
-#ifndef _XEN_VERSION_H
-#define _XEN_VERSION_H
-
-#define __XEN_INTERFACE_VERSION__ __XEN_LATEST_INTERFACE_VERSION__
-
-#endif  // _XEN_VERSION_H
diff --git a/include/xen-warnings=2Eh b/include/xen-warnings=2Eh
deleted file mode 100644
index 30c0f7d=2E=2E0000000
--- a/include/xen-warnings=2Eh
+++ /dev/null
@@ -1,43 +0,0 @@
-/* Copyright (c) Xen Project=2E
- * Copyright (c) Cloud Software Group, Inc=2E
- * All rights reserved=2E
- *
- * Redistribution and use in source and binary forms,
- * with or without modification, are permitted provided
- * that the following conditions are met:
- *
- * *   Redistributions of source code must retain the above
- *     copyright notice, this list of conditions and the
- *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above
- *     copyright notice, this list of conditions and the
- *     following disclaimer in the documentation and/or other
- *     materials provided with the distribution=2E
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE=2E
- */
-
-#ifndef _XEN_WARNINGS_H
-#define _XEN_WARNINGS_H
-
-#include <ntddk=2Eh>
-
-// Disable warnings necessary to include xen headers
-
-# pragma warning(disable:4214) // nonstandard extension used : bit field =
types other than int
-# pragma warning(disable:4200) // nonstandard extension used : zero-sized=
 array in struct/union
-
-#endif  // _XEN_WARNINGS_H
diff --git a/include/xen=2Eh b/include/xen=2Eh
deleted file mode 100644
index 2cee266=2E=2E0000000
--- a/include/xen=2Eh
+++ /dev/null
@@ -1,44 +0,0 @@
-/* Copyright (c) Xen Project=2E
- * Copyright (c) Cloud Software Group, Inc=2E
- * All rights reserved=2E
- *
- * Redistribution and use in source and binary forms,
- * with or without modification, are permitted provided
- * that the following conditions are met:
- *
- * *   Redistributions of source code must retain the above
- *     copyright notice, this list of conditions and the
- *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above
- *     copyright notice, this list of conditions and the
- *     following disclaimer in the documentation and/or other
- *     materials provided with the distribution=2E
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE=2E
- */
-
-#ifndef _XEN_H
-#define _XEN_H
-
-#include <ntddk=2Eh>
-
-#include <xen-version=2Eh>
-#include <xen-types=2Eh>
-#include <xen-warnings=2Eh>
-
-#include <public/hvm/hvm_info_table=2Eh>
-
-#endif  // _XEN_H
diff --git a/include/xen/public/arch-x86/xen-x86_32=2Eh b/include/xen/publ=
ic/arch-x86/xen-x86_32=2Eh
deleted file mode 100644
index d23340b=2E=2E0000000
--- a/include/xen/public/arch-x86/xen-x86_32=2Eh
+++ /dev/null
@@ -1,169 +0,0 @@
-/************************************************************************=
******
- * xen-x86_32=2Eh
- *
- * Guest OS interface to x86 32-bit Xen=2E
- *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
- * Copyright (c) 2004-2007, K A Fraser
- */
-
-#ifndef __XEN_PUBLIC_ARCH_X86_XEN_X86_32_H__
-#define __XEN_PUBLIC_ARCH_X86_XEN_X86_32_H__
-
-/*
- * Hypercall interface:
- *  Input:  %ebx, %ecx, %edx, %esi, %edi, %ebp (arguments 1-6)
- *  Output: %eax
- * Access is via hypercall page (set up by guest loader or via a Xen MSR)=
:
- *  call hypercall_page + hypercall-number * 32
- * Clobbered: Argument registers (e=2Eg=2E, 2-arg hypercall clobbers %ebx=
,%ecx)
- */
-
-/*
- * These flat segments are in the Xen-private section of every GDT=2E Sin=
ce these
- * are also present in the initial GDT, many OSes will be able to avoid
- * installing their own GDT=2E
- */
-#define FLAT_RING1_CS 0xe019    /* GDT index 259 */
-#define FLAT_RING1_DS 0xe021    /* GDT index 260 */
-#define FLAT_RING1_SS 0xe021    /* GDT index 260 */
-#define FLAT_RING3_CS 0xe02b    /* GDT index 261 */
-#define FLAT_RING3_DS 0xe033    /* GDT index 262 */
-#define FLAT_RING3_SS 0xe033    /* GDT index 262 */
-
-#define FLAT_KERNEL_CS FLAT_RING1_CS
-#define FLAT_KERNEL_DS FLAT_RING1_DS
-#define FLAT_KERNEL_SS FLAT_RING1_SS
-#define FLAT_USER_CS    FLAT_RING3_CS
-#define FLAT_USER_DS    FLAT_RING3_DS
-#define FLAT_USER_SS    FLAT_RING3_SS
-
-#define __HYPERVISOR_VIRT_START_PAE    0xF5800000
-#define __MACH2PHYS_VIRT_START_PAE     0xF5800000
-#define __MACH2PHYS_VIRT_END_PAE       0xF6800000
-#define HYPERVISOR_VIRT_START_PAE      xen_mk_ulong(__HYPERVISOR_VIRT_STA=
RT_PAE)
-#define MACH2PHYS_VIRT_START_PAE       xen_mk_ulong(__MACH2PHYS_VIRT_STAR=
T_PAE)
-#define MACH2PHYS_VIRT_END_PAE         xen_mk_ulong(__MACH2PHYS_VIRT_END_=
PAE)
-
-/* Non-PAE bounds are obsolete=2E */
-#define __HYPERVISOR_VIRT_START_NONPAE 0xFC000000
-#define __MACH2PHYS_VIRT_START_NONPAE  0xFC000000
-#define __MACH2PHYS_VIRT_END_NONPAE    0xFC400000
-#define HYPERVISOR_VIRT_START_NONPAE   \
-    xen_mk_ulong(__HYPERVISOR_VIRT_START_NONPAE)
-#define MACH2PHYS_VIRT_START_NONPAE    \
-    xen_mk_ulong(__MACH2PHYS_VIRT_START_NONPAE)
-#define MACH2PHYS_VIRT_END_NONPAE      \
-    xen_mk_ulong(__MACH2PHYS_VIRT_END_NONPAE)
-
-#define __HYPERVISOR_VIRT_START __HYPERVISOR_VIRT_START_PAE
-#define __MACH2PHYS_VIRT_START  __MACH2PHYS_VIRT_START_PAE
-#define __MACH2PHYS_VIRT_END    __MACH2PHYS_VIRT_END_PAE
-
-#ifndef HYPERVISOR_VIRT_START
-#define HYPERVISOR_VIRT_START xen_mk_ulong(__HYPERVISOR_VIRT_START)
-#endif
-
-#define MACH2PHYS_VIRT_START  xen_mk_ulong(__MACH2PHYS_VIRT_START)
-#define MACH2PHYS_VIRT_END    xen_mk_ulong(__MACH2PHYS_VIRT_END)
-#define MACH2PHYS_NR_ENTRIES  ((MACH2PHYS_VIRT_END-MACH2PHYS_VIRT_START)>=
>2)
-#ifndef machine_to_phys_mapping
-#define machine_to_phys_mapping ((ULONG_PTR *)MACH2PHYS_VIRT_START)
-#endif
-
-/* 32-/64-bit invariability for control interfaces (domctl/sysctl)=2E */
-#if defined(__XEN__) || defined(__XEN_TOOLS__)
-#undef ___DEFINE_XEN_GUEST_HANDLE
-#define ___DEFINE_XEN_GUEST_HANDLE(name, type)                  \
-    typedef struct { type *p; }                                 \
-        __guest_handle_ ## name;                                \
-    typedef struct { union { type *p; uint64_aligned_t q; }; }  \
-        __guest_handle_64_ ## name
-#undef set_xen_guest_handle_raw
-#define set_xen_guest_handle_raw(hnd, val)                  \
-    do { if ( sizeof(hnd) =3D=3D 8 ) *(uint64_t *)&(hnd) =3D 0;   \
-         (hnd)=2Ep =3D val;                                     \
-    } while ( 0 )
-#define  int64_aligned_t  int64_t __attribute__((aligned(8)))
-#define uint64_aligned_t uint64_t __attribute__((aligned(8)))
-#define __XEN_GUEST_HANDLE_64(name) __guest_handle_64_ ## name
-#define XEN_GUEST_HANDLE_64(name) __XEN_GUEST_HANDLE_64(name)
-#endif
-
-#ifndef __ASSEMBLY__
-
-struct cpu_user_regs {
-    uint32_t ebx;
-    uint32_t ecx;
-    uint32_t edx;
-    uint32_t esi;
-    uint32_t edi;
-    uint32_t ebp;
-    uint32_t eax;
-    uint16_t error_code;    /* private */
-    uint16_t entry_vector;  /* private */
-    uint32_t eip;
-    uint16_t cs;
-    uint8_t  saved_upcall_mask;
-    uint8_t  _pad0;
-    uint32_t eflags;        /* eflags=2EIF =3D=3D !saved_upcall_mask */
-    uint32_t esp;
-    uint16_t ss, _pad1;
-    uint16_t es, _pad2;
-    uint16_t ds, _pad3;
-    uint16_t fs, _pad4;
-    uint16_t gs, _pad5;
-};
-typedef struct cpu_user_regs cpu_user_regs_t;
-DEFINE_XEN_GUEST_HANDLE(cpu_user_regs_t);
-
-/*
- * Page-directory addresses above 4GB do not fit into architectural %cr3=
=2E
- * When accessing %cr3, or equivalent field in vcpu_guest_context, guests
- * must use the following accessor macros to pack/unpack valid MFNs=2E
- */
-#define xen_pfn_to_cr3(pfn) (((unsigned)(pfn) << 12) | ((unsigned)(pfn) >=
> 20))
-#define xen_cr3_to_pfn(cr3) (((unsigned)(cr3) >> 12) | ((unsigned)(cr3) <=
< 20))
-
-struct arch_vcpu_info {
-    ULONG_PTR cr2;
-    ULONG_PTR pad[5]; /* sizeof(vcpu_info_t) =3D=3D 64 */
-};
-typedef struct arch_vcpu_info arch_vcpu_info_t;
-
-struct xen_callback {
-    ULONG_PTR cs;
-    ULONG_PTR eip;
-};
-typedef struct xen_callback xen_callback_t;
-
-#endif /* !__ASSEMBLY__ */
-
-#endif /* __XEN_PUBLIC_ARCH_X86_XEN_X86_32_H__ */
-
-/*
- * Local variables:
- * mode: C
- * c-file-style: "BSD"
- * c-basic-offset: 4
- * tab-width: 4
- * indent-tabs-mode: nil
- * End:
- */
diff --git a/include/xen/public/arch-x86/xen-x86_64=2Eh b/include/xen/publ=
ic/arch-x86/xen-x86_64=2Eh
deleted file mode 100644
index 2f53f69=2E=2E0000000
--- a/include/xen/public/arch-x86/xen-x86_64=2Eh
+++ /dev/null
@@ -1,202 +0,0 @@
-/************************************************************************=
******
- * xen-x86_64=2Eh
- *
- * Guest OS interface to x86 64-bit Xen=2E
- *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
- * Copyright (c) 2004-2006, K A Fraser
- */
-
-#ifndef __XEN_PUBLIC_ARCH_X86_XEN_X86_64_H__
-#define __XEN_PUBLIC_ARCH_X86_XEN_X86_64_H__
-
-/*
- * Hypercall interface:
- *  Input:  %rdi, %rsi, %rdx, %r10, %r8, %r9 (arguments 1-6)
- *  Output: %rax
- * Access is via hypercall page (set up by guest loader or via a Xen MSR)=
:
- *  call hypercall_page + hypercall-number * 32
- * Clobbered: argument registers (e=2Eg=2E, 2-arg hypercall clobbers %rdi=
,%rsi)
- */
-
-/*
- * 64-bit segment selectors
- * These flat segments are in the Xen-private section of every GDT=2E Sin=
ce these
- * are also present in the initial GDT, many OSes will be able to avoid
- * installing their own GDT=2E
- */
-
-#define FLAT_RING3_CS32 0xe023  /* GDT index 260 */
-#define FLAT_RING3_CS64 0xe033  /* GDT index 261 */
-#define FLAT_RING3_DS32 0xe02b  /* GDT index 262 */
-#define FLAT_RING3_DS64 0x0000  /* NULL selector */
-#define FLAT_RING3_SS32 0xe02b  /* GDT index 262 */
-#define FLAT_RING3_SS64 0xe02b  /* GDT index 262 */
-
-#define FLAT_KERNEL_DS64 FLAT_RING3_DS64
-#define FLAT_KERNEL_DS32 FLAT_RING3_DS32
-#define FLAT_KERNEL_DS   FLAT_KERNEL_DS64
-#define FLAT_KERNEL_CS64 FLAT_RING3_CS64
-#define FLAT_KERNEL_CS32 FLAT_RING3_CS32
-#define FLAT_KERNEL_CS   FLAT_KERNEL_CS64
-#define FLAT_KERNEL_SS64 FLAT_RING3_SS64
-#define FLAT_KERNEL_SS32 FLAT_RING3_SS32
-#define FLAT_KERNEL_SS   FLAT_KERNEL_SS64
-
-#define FLAT_USER_DS64 FLAT_RING3_DS64
-#define FLAT_USER_DS32 FLAT_RING3_DS32
-#define FLAT_USER_DS   FLAT_USER_DS64
-#define FLAT_USER_CS64 FLAT_RING3_CS64
-#define FLAT_USER_CS32 FLAT_RING3_CS32
-#define FLAT_USER_CS   FLAT_USER_CS64
-#define FLAT_USER_SS64 FLAT_RING3_SS64
-#define FLAT_USER_SS32 FLAT_RING3_SS32
-#define FLAT_USER_SS   FLAT_USER_SS64
-
-#define __HYPERVISOR_VIRT_START 0xFFFF800000000000
-#define __HYPERVISOR_VIRT_END   0xFFFF880000000000
-#define __MACH2PHYS_VIRT_START  0xFFFF800000000000
-#define __MACH2PHYS_VIRT_END    0xFFFF804000000000
-
-#ifndef HYPERVISOR_VIRT_START
-#define HYPERVISOR_VIRT_START xen_mk_ulong(__HYPERVISOR_VIRT_START)
-#define HYPERVISOR_VIRT_END   xen_mk_ulong(__HYPERVISOR_VIRT_END)
-#endif
-
-#define MACH2PHYS_VIRT_START  xen_mk_ulong(__MACH2PHYS_VIRT_START)
-#define MACH2PHYS_VIRT_END    xen_mk_ulong(__MACH2PHYS_VIRT_END)
-#define MACH2PHYS_NR_ENTRIES  ((MACH2PHYS_VIRT_END-MACH2PHYS_VIRT_START)>=
>3)
-#ifndef machine_to_phys_mapping
-#define machine_to_phys_mapping ((ULONG_PTR *)HYPERVISOR_VIRT_START)
-#endif
-
-/*
- * int HYPERVISOR_set_segment_base(unsigned int which, ULONG_PTR base)
- *  @which =3D=3D SEGBASE_*  ;  @base =3D=3D 64-bit base address
- * Returns 0 on success=2E
- */
-#define SEGBASE_FS          0
-#define SEGBASE_GS_USER     1
-#define SEGBASE_GS_KERNEL   2
-#define SEGBASE_GS_USER_SEL 3 /* Set user %gs specified in base[15:0] */
-
-/*
- * int HYPERVISOR_iret(void)
- * All arguments are on the kernel stack, in the following format=2E
- * Never returns if successful=2E Current kernel context is lost=2E
- * The saved CS is mapped as follows:
- *   RING0 -> RING3 kernel mode=2E
- *   RING1 -> RING3 kernel mode=2E
- *   RING2 -> RING3 kernel mode=2E
- *   RING3 -> RING3 user mode=2E
- * However RING0 indicates that the guest kernel should return to iteself
- * directly with
- *      orb   $3,1*8(%rsp)
- *      iretq
- * If flags contains VGCF_in_syscall:
- *   Restore RAX, RIP, RFLAGS, RSP=2E
- *   Discard R11, RCX, CS, SS=2E
- * Otherwise:
- *   Restore RAX, R11, RCX, CS:RIP, RFLAGS, SS:RSP=2E
- * All other registers are saved on hypercall entry and restored to user=
=2E
- */
-/* Guest exited in SYSCALL context? Return to guest with SYSRET? */
-#define _VGCF_in_syscall 8
-#define VGCF_in_syscall  (1<<_VGCF_in_syscall)
-#define VGCF_IN_SYSCALL  VGCF_in_syscall
-
-#ifndef __ASSEMBLY__
-
-struct iret_context {
-    /* Top of stack (%rsp at point of hypercall)=2E */
-    uint64_t rax, r11, rcx, flags, rip, cs, rflags, rsp, ss;
-    /* Bottom of iret stack frame=2E */
-};
-
-#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
-/* Anonymous union includes both 32- and 64-bit names (e=2Eg=2E, eax/rax)=
=2E */
-#define __DECL_REG(name) union { \
-    uint64_t r ## name, e ## name; \
-    uint32_t _e ## name; \
-}
-#else
-/* Non-gcc sources must always use the proper 64-bit name (e=2Eg=2E, rax)=
=2E */
-#define __DECL_REG(name) uint64_t r ## name
-#endif
-
-struct cpu_user_regs {
-    uint64_t r15;
-    uint64_t r14;
-    uint64_t r13;
-    uint64_t r12;
-    __DECL_REG(bp);
-    __DECL_REG(bx);
-    uint64_t r11;
-    uint64_t r10;
-    uint64_t r9;
-    uint64_t r8;
-    __DECL_REG(ax);
-    __DECL_REG(cx);
-    __DECL_REG(dx);
-    __DECL_REG(si);
-    __DECL_REG(di);
-    uint32_t error_code;    /* private */
-    uint32_t entry_vector;  /* private */
-    __DECL_REG(ip);
-    uint16_t cs, _pad0[1];
-    uint8_t  saved_upcall_mask;
-    uint8_t  _pad1[3];
-    __DECL_REG(flags);      /* rflags=2EIF =3D=3D !saved_upcall_mask */
-    __DECL_REG(sp);
-    uint16_t ss, _pad2[3];
-    uint16_t es, _pad3[3];
-    uint16_t ds, _pad4[3];
-    uint16_t fs, _pad5[3]; /* Non-zero =3D> takes precedence over fs_base=
=2E     */
-    uint16_t gs, _pad6[3]; /* Non-zero =3D> takes precedence over gs_base=
_usr=2E */
-};
-typedef struct cpu_user_regs cpu_user_regs_t;
-DEFINE_XEN_GUEST_HANDLE(cpu_user_regs_t);
-
-#undef __DECL_REG
-
-#define xen_pfn_to_cr3(pfn) ((ULONG_PTR)(pfn) << 12)
-#define xen_cr3_to_pfn(cr3) ((ULONG_PTR)(cr3) >> 12)
-
-struct arch_vcpu_info {
-    ULONG_PTR cr2;
-    ULONG_PTR pad; /* sizeof(vcpu_info_t) =3D=3D 64 */
-};
-typedef struct arch_vcpu_info arch_vcpu_info_t;
-
-typedef ULONG_PTR xen_callback_t;
-
-#endif /* !__ASSEMBLY__ */
-
-#endif /* __XEN_PUBLIC_ARCH_X86_XEN_X86_64_H__ */
-
-/*
- * Local variables:
- * mode: C
- * c-file-style: "BSD"
- * c-basic-offset: 4
- * tab-width: 4
- * indent-tabs-mode: nil
- * End:
- */
diff --git a/include/xen/public/arch-x86/xen=2Eh b/include/xen/public/arch=
-x86/xen=2Eh
deleted file mode 100644
index 05db77f=2E=2E0000000
--- a/include/xen/public/arch-x86/xen=2Eh
+++ /dev/null
@@ -1,338 +0,0 @@
-/************************************************************************=
******
- * arch-x86/xen=2Eh
- *
- * Guest OS interface to x86 Xen=2E
- *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
- * Copyright (c) 2004-2006, K A Fraser
- */
-
-#include "=2E=2E/xen=2Eh"
-
-#ifndef __XEN_PUBLIC_ARCH_X86_XEN_H__
-#define __XEN_PUBLIC_ARCH_X86_XEN_H__
-
-/* Structural guest handles introduced in 0x00030201=2E */
-#if __XEN_INTERFACE_VERSION__ >=3D 0x00030201
-#define ___DEFINE_XEN_GUEST_HANDLE(name, type) \
-    typedef struct { type *p; } __guest_handle_ ## name
-#else
-#define ___DEFINE_XEN_GUEST_HANDLE(name, type) \
-    typedef type * __guest_handle_ ## name
-#endif
-
-/*
- * XEN_GUEST_HANDLE represents a guest pointer, when passed as a field
- * in a struct in memory=2E
- * XEN_GUEST_HANDLE_PARAM represent a guest pointer, when passed as an
- * hypercall argument=2E
- * XEN_GUEST_HANDLE_PARAM and XEN_GUEST_HANDLE are the same on X86 but
- * they might not be on other architectures=2E
- */
-#define __DEFINE_XEN_GUEST_HANDLE(name, type) \
-    ___DEFINE_XEN_GUEST_HANDLE(name, type);   \
-    ___DEFINE_XEN_GUEST_HANDLE(const_##name, const type)
-#define DEFINE_XEN_GUEST_HANDLE(name)   __DEFINE_XEN_GUEST_HANDLE(name, n=
ame)
-#define __XEN_GUEST_HANDLE(name)        __guest_handle_ ## name
-#define XEN_GUEST_HANDLE(name)          __XEN_GUEST_HANDLE(name)
-#define XEN_GUEST_HANDLE_PARAM(name)    XEN_GUEST_HANDLE(name)
-#define set_xen_guest_handle_raw(hnd, val)  do { (hnd)=2Ep =3D val; } whi=
le (0)
-#define set_xen_guest_handle(hnd, val) set_xen_guest_handle_raw(hnd, val)
-
-#if defined(__i386__)
-#include "xen-x86_32=2Eh"
-#elif defined(__x86_64__)
-#include "xen-x86_64=2Eh"
-#endif
-
-#ifndef __ASSEMBLY__
-typedef ULONG_PTR xen_pfn_t;
-#define PRI_xen_pfn "lx"
-#endif
-
-#define XEN_HAVE_PV_GUEST_ENTRY 1
-
-#define XEN_HAVE_PV_UPCALL_MASK 1
-
-/*
- * `incontents 200 segdesc Segment Descriptor Tables
- */
-/*
- * ` enum neg_errnoval
- * ` HYPERVISOR_set_gdt(const xen_pfn_t frames[], unsigned int entries);
- * `
- */
-/*
- * A number of GDT entries are reserved by Xen=2E These are not situated =
at the
- * start of the GDT because some stupid OSes export hard-coded selector v=
alues
- * in their ABI=2E These hard-coded values are always near the start of t=
he GDT,
- * so Xen places itself out of the way, at the far end of the GDT=2E
- *
- * NB The LDT is set using the MMUEXT_SET_LDT op of HYPERVISOR_mmuext_op
- */
-#define FIRST_RESERVED_GDT_PAGE  14
-#define FIRST_RESERVED_GDT_BYTE  (FIRST_RESERVED_GDT_PAGE * 4096)
-#define FIRST_RESERVED_GDT_ENTRY (FIRST_RESERVED_GDT_BYTE / 8)
-
-
-/*
- * ` enum neg_errnoval
- * ` HYPERVISOR_update_descriptor(u64 pa, u64 desc);
- * `
- * ` @pa   The machine physical address of the descriptor to
- * `       update=2E Must be either a descriptor page or writable=2E
- * ` @desc The descriptor value to update, in the same format as a
- * `       native descriptor table entry=2E
- */
-
-/* Maximum number of virtual CPUs in legacy multi-processor guests=2E */
-#define XEN_LEGACY_MAX_VCPUS 32
-
-#ifndef __ASSEMBLY__
-
-typedef ULONG_PTR xen_ulong_t;
-#define PRI_xen_ulong "lx"
-
-/*
- * ` enum neg_errnoval
- * ` HYPERVISOR_stack_switch(ULONG_PTR ss, ULONG_PTR esp);
- * `
- * Sets the stack segment and pointer for the current vcpu=2E
- */
-
-/*
- * ` enum neg_errnoval
- * ` HYPERVISOR_set_trap_table(const struct trap_info traps[]);
- * `
- */
-/*
- * Send an array of these to HYPERVISOR_set_trap_table()=2E
- * Terminate the array with a sentinel entry, with traps[]=2Eaddress=3D=
=3D0=2E
- * The privilege level specifies which modes may enter a trap via a softw=
are
- * interrupt=2E On x86/64, since rings 1 and 2 are unavailable, we alloca=
te
- * privilege levels as follows:
- *  Level =3D=3D 0: Noone may enter
- *  Level =3D=3D 1: Kernel may enter
- *  Level =3D=3D 2: Kernel may enter
- *  Level =3D=3D 3: Everyone may enter
- */
-#define TI_GET_DPL(_ti)      ((_ti)->flags & 3)
-#define TI_GET_IF(_ti)       ((_ti)->flags & 4)
-#define TI_SET_DPL(_ti,_dpl) ((_ti)->flags |=3D (_dpl))
-#define TI_SET_IF(_ti,_if)   ((_ti)->flags |=3D ((!!(_if))<<2))
-struct trap_info {
-    uint8_t       vector;  /* exception vector                           =
   */
-    uint8_t       flags;   /* 0-3: privilege level; 4: clear event enable=
?  */
-    uint16_t      cs;      /* code selector                              =
   */
-    ULONG_PTR address; /* code offset                                   *=
/
-};
-typedef struct trap_info trap_info_t;
-DEFINE_XEN_GUEST_HANDLE(trap_info_t);
-
-typedef uint64_t tsc_timestamp_t; /* RDTSC timestamp */
-
-/*
- * The following is all CPU context=2E Note that the fpu_ctxt block is fi=
lled
- * in by FXSAVE if the CPU has feature FXSR; otherwise FSAVE is used=2E
- *
- * Also note that when calling DOMCTL_setvcpucontext and VCPU_initialise
- * for HVM and PVH guests, not all information in this structure is updat=
ed:
- *
- * - For HVM guests, the structures read include: fpu_ctxt (if
- * VGCT_I387_VALID is set), flags, user_regs, debugreg[*]
- *
- * - PVH guests are the same as HVM guests, but additionally use ctrlreg[=
3] to
- * set cr3=2E All other fields not used should be set to 0=2E
- */
-struct vcpu_guest_context {
-    /* FPU registers come first so they can be aligned for FXSAVE/FXRSTOR=
=2E */
-    struct { char x[512]; } fpu_ctxt;       /* User-level FPU registers  =
   */
-#define VGCF_I387_VALID                (1<<0)
-#define VGCF_IN_KERNEL                 (1<<2)
-#define _VGCF_i387_valid               0
-#define VGCF_i387_valid                (1<<_VGCF_i387_valid)
-#define _VGCF_in_kernel                2
-#define VGCF_in_kernel                 (1<<_VGCF_in_kernel)
-#define _VGCF_failsafe_disables_events 3
-#define VGCF_failsafe_disables_events  (1<<_VGCF_failsafe_disables_events=
)
-#define _VGCF_syscall_disables_events  4
-#define VGCF_syscall_disables_events   (1<<_VGCF_syscall_disables_events)
-#define _VGCF_online                   5
-#define VGCF_online                    (1<<_VGCF_online)
-    ULONG_PTR flags;                    /* VGCF_* flags                 *=
/
-    struct cpu_user_regs user_regs;         /* User-level CPU registers  =
   */
-    struct trap_info trap_ctxt[256];        /* Virtual IDT               =
   */
-    ULONG_PTR ldt_base, ldt_ents;       /* LDT (linear address, # ents) *=
/
-    ULONG_PTR gdt_frames[16], gdt_ents; /* GDT (machine frames, # ents) *=
/
-    ULONG_PTR kernel_ss, kernel_sp;     /* Virtual TSS (only SS1/SP1)   *=
/
-    /* NB=2E User pagetable on x86/64 is placed in ctrlreg[1]=2E */
-    ULONG_PTR ctrlreg[8];               /* CR0-CR7 (control registers)  *=
/
-    ULONG_PTR debugreg[8];              /* DB0-DB7 (debug registers)    *=
/
-#ifdef __i386__
-    ULONG_PTR event_callback_cs;        /* CS:EIP of event callback     *=
/
-    ULONG_PTR event_callback_eip;
-    ULONG_PTR failsafe_callback_cs;     /* CS:EIP of failsafe callback  *=
/
-    ULONG_PTR failsafe_callback_eip;
-#else
-    ULONG_PTR event_callback_eip;
-    ULONG_PTR failsafe_callback_eip;
-#ifdef __XEN__
-    union {
-        ULONG_PTR syscall_callback_eip;
-        struct {
-            unsigned int event_callback_cs;    /* compat CS of event cb  =
   */
-            unsigned int failsafe_callback_cs; /* compat CS of failsafe c=
b  */
-        };
-    };
-#else
-    ULONG_PTR syscall_callback_eip;
-#endif
-#endif
-    ULONG_PTR vm_assist;                /* VMASST_TYPE_* bitmap */
-#ifdef __x86_64__
-    /* Segment base addresses=2E */
-    uint64_t      fs_base;
-    uint64_t      gs_base_kernel;
-    uint64_t      gs_base_user;
-#endif
-};
-typedef struct vcpu_guest_context vcpu_guest_context_t;
-DEFINE_XEN_GUEST_HANDLE(vcpu_guest_context_t);
-
-struct arch_shared_info {
-    /*
-     * Number of valid entries in the p2m table(s) anchored at
-     * pfn_to_mfn_frame_list_list and/or p2m_vaddr=2E
-     */
-    ULONG_PTR max_pfn;
-    /*
-     * Frame containing list of mfns containing list of mfns containing p=
2m=2E
-     * A value of 0 indicates it has not yet been set up, ~0 indicates it=
 has
-     * been set to invalid e=2Eg=2E due to the p2m being too large for th=
e 3-level
-     * p2m tree=2E In this case the linear mapper p2m list anchored at p2=
m_vaddr
-     * is to be used=2E
-     */
-    xen_pfn_t     pfn_to_mfn_frame_list_list;
-    ULONG_PTR nmi_reason;
-    /*
-     * Following three fields are valid if p2m_cr3 contains a value diffe=
rent
-     * from 0=2E
-     * p2m_cr3 is the root of the address space where p2m_vaddr is valid=
=2E
-     * p2m_cr3 is in the same format as a cr3 value in the vcpu register =
state
-     * and holds the folded machine frame number (via xen_pfn_to_cr3) of =
a
-     * L3 or L4 page table=2E
-     * p2m_vaddr holds the virtual address of the linear p2m list=2E All =
entries
-     * in the range [0=2E=2E=2Emax_pfn[ are accessible via this pointer=
=2E
-     * p2m_generation will be incremented by the guest before and after e=
ach
-     * change of the mappings of the p2m list=2E p2m_generation starts at=
 0 and
-     * a value with the least significant bit set indicates that a mappin=
g
-     * update is in progress=2E This allows guest external software (e=2E=
g=2E in Dom0)
-     * to verify that read mappings are consistent and whether they have =
changed
-     * since the last check=2E
-     * Modifying a p2m element in the linear p2m list is allowed via an a=
tomic
-     * write only=2E
-     */
-    ULONG_PTR p2m_cr3;         /* cr3 value of the p2m address space */
-    ULONG_PTR p2m_vaddr;       /* virtual address of the p2m list */
-    ULONG_PTR p2m_generation;  /* generation count of p2m mapping */
-#ifdef __i386__
-    /* There's no room for this field in the generic structure=2E */
-    uint32_t wc_sec_hi;
-#endif
-};
-typedef struct arch_shared_info arch_shared_info_t;
-
-#if defined(__XEN__) || defined(__XEN_TOOLS__)
-/*
- * struct xen_arch_domainconfig's ABI is covered by
- * XEN_DOMCTL_INTERFACE_VERSION=2E
- */
-struct xen_arch_domainconfig {
-#define _XEN_X86_EMU_LAPIC          0
-#define XEN_X86_EMU_LAPIC           (1U<<_XEN_X86_EMU_LAPIC)
-#define _XEN_X86_EMU_HPET           1
-#define XEN_X86_EMU_HPET            (1U<<_XEN_X86_EMU_HPET)
-#define _XEN_X86_EMU_PM             2
-#define XEN_X86_EMU_PM              (1U<<_XEN_X86_EMU_PM)
-#define _XEN_X86_EMU_RTC            3
-#define XEN_X86_EMU_RTC             (1U<<_XEN_X86_EMU_RTC)
-#define _XEN_X86_EMU_IOAPIC         4
-#define XEN_X86_EMU_IOAPIC          (1U<<_XEN_X86_EMU_IOAPIC)
-#define _XEN_X86_EMU_PIC            5
-#define XEN_X86_EMU_PIC             (1U<<_XEN_X86_EMU_PIC)
-#define _XEN_X86_EMU_VGA            6
-#define XEN_X86_EMU_VGA             (1U<<_XEN_X86_EMU_VGA)
-#define _XEN_X86_EMU_IOMMU          7
-#define XEN_X86_EMU_IOMMU           (1U<<_XEN_X86_EMU_IOMMU)
-#define _XEN_X86_EMU_PIT            8
-#define XEN_X86_EMU_PIT             (1U<<_XEN_X86_EMU_PIT)
-
-#define XEN_X86_EMU_ALL             (XEN_X86_EMU_LAPIC | XEN_X86_EMU_HPET=
 |  \
-                                     XEN_X86_EMU_PM | XEN_X86_EMU_RTC |  =
    \
-                                     XEN_X86_EMU_IOAPIC | XEN_X86_EMU_PIC=
 |  \
-                                     XEN_X86_EMU_VGA | XEN_X86_EMU_IOMMU =
|   \
-                                     XEN_X86_EMU_PIT)
-    uint32_t emulation_flags;
-};
-#endif
-
-#endif /* !__ASSEMBLY__ */
-
-/*
- * ` enum neg_errnoval
- * ` HYPERVISOR_fpu_taskswitch(int set);
- * `
- * Sets (if set!=3D0) or clears (if set=3D=3D0) CR0=2ETS=2E
- */
-
-/*
- * ` enum neg_errnoval
- * ` HYPERVISOR_set_debugreg(int regno, ULONG_PTR value);
- *
- * ` ULONG_PTR
- * ` HYPERVISOR_get_debugreg(int regno);
- * For 0<=3Dreg<=3D7, returns the debug register value=2E
- * For other values of reg, returns ((ULONG_PTR)-EINVAL)=2E
- * (Unfortunately, this interface is defective=2E)
- */
-
-/*
- * Prefix forces emulation of some non-trapping instructions=2E
- * Currently only CPUID=2E
- */
-#ifdef __ASSEMBLY__
-#define XEN_EMULATE_PREFIX =2Ebyte 0x0f,0x0b,0x78,0x65,0x6e ;
-#define XEN_CPUID          XEN_EMULATE_PREFIX cpuid
-#else
-#define XEN_EMULATE_PREFIX "=2Ebyte 0x0f,0x0b,0x78,0x65,0x6e ; "
-#define XEN_CPUID          XEN_EMULATE_PREFIX "cpuid"
-#endif
-
-#endif /* __XEN_PUBLIC_ARCH_X86_XEN_H__ */
-
-/*
- * Local variables:
- * mode: C
- * c-file-style: "BSD"
- * c-basic-offset: 4
- * tab-width: 4
- * indent-tabs-mode: nil
- * End:
- */
diff --git a/include/xen/public/hvm/hvm_info_table=2Eh b/include/xen/publi=
c/hvm/hvm_info_table=2Eh
deleted file mode 100644
index a92e8f7=2E=2E0000000
--- a/include/xen/public/hvm/hvm_info_table=2Eh
+++ /dev/null
@@ -1,74 +0,0 @@
-/************************************************************************=
******
- * hvm/hvm_info_table=2Eh
- *
- * HVM parameter and information table, written into guest memory map=2E
- *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
- * Copyright (c) 2006, Keir Fraser
- */
-
-#ifndef __XEN_PUBLIC_HVM_HVM_INFO_TABLE_H__
-#define __XEN_PUBLIC_HVM_HVM_INFO_TABLE_H__
-
-#define HVM_INFO_PFN         0x09F
-#define HVM_INFO_OFFSET      0x800
-#define HVM_INFO_PADDR       ((HVM_INFO_PFN << 12) + HVM_INFO_OFFSET)
-
-/* Maximum we can support with current vLAPIC ID mapping=2E */
-#define HVM_MAX_VCPUS        128
-
-struct hvm_info_table {
-    char        signature[8]; /* "HVM INFO" */
-    uint32_t    length;
-    uint8_t     checksum;
-
-    /* Should firmware build APIC descriptors (APIC MADT / MP BIOS)? */
-    uint8_t     apic_mode;
-
-    /* How many CPUs does this domain have? */
-    uint32_t    nr_vcpus;
-
-    /*
-     * MEMORY MAP provided by HVM domain builder=2E
-     * Notes:
-     *  1=2E page_to_phys(x) =3D x << 12
-     *  2=2E If a field is zero, the corresponding range does not exist=
=2E
-     */
-    /*
-     *  0x0 to page_to_phys(low_mem_pgend)-1:
-     *    RAM below 4GB (except for VGA hole 0xA0000-0xBFFFF)
-     */
-    uint32_t    low_mem_pgend;
-    /*
-     *  page_to_phys(reserved_mem_pgstart) to 0xFFFFFFFF:
-     *    Reserved for special memory mappings
-     */
-    uint32_t    reserved_mem_pgstart;
-    /*
-     *  0x100000000 to page_to_phys(high_mem_pgend)-1:
-     *    RAM above 4GB
-     */
-    uint32_t    high_mem_pgend;
-
-    /* Bitmap of which CPUs are online at boot time=2E */
-    uint8_t     vcpu_online[(HVM_MAX_VCPUS + 7)/8];
-};
-
-#endif /* __XEN_PUBLIC_HVM_HVM_INFO_TABLE_H__ */
diff --git a/include/xen/public/xen-compat=2Eh b/include/xen/public/xen-co=
mpat=2Eh
deleted file mode 100644
index 2eea0e2=2E=2E0000000
--- a/include/xen/public/xen-compat=2Eh
+++ /dev/null
@@ -1,44 +0,0 @@
-/************************************************************************=
******
- * xen-compat=2Eh
- *
- * Guest OS interface to Xen=2E  Compatibility layer=2E
- *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
- * Copyright (c) 2006, Christian Limpach
- */
-
-#ifndef __XEN_PUBLIC_XEN_COMPAT_H__
-#define __XEN_PUBLIC_XEN_COMPAT_H__
-
-#define __XEN_LATEST_INTERFACE_VERSION__ 0x00040700
-
-#if defined(__XEN__) || defined(__XEN_TOOLS__)
-/* Xen is built with matching headers and implements the latest interface=
=2E */
-#define __XEN_INTERFACE_VERSION__ __XEN_LATEST_INTERFACE_VERSION__
-#elif !defined(__XEN_INTERFACE_VERSION__)
-/* Guests which do not specify a version get the legacy interface=2E */
-#define __XEN_INTERFACE_VERSION__ 0x00000000
-#endif
-
-#if __XEN_INTERFACE_VERSION__ > __XEN_LATEST_INTERFACE_VERSION__
-#error "These header files do not support the requested interface version=
=2E"
-#endif
-
-#endif /* __XEN_PUBLIC_XEN_COMPAT_H__ */
diff --git a/include/xen/public/xen=2Eh b/include/xen/public/xen=2Eh
deleted file mode 100644
index 2057b52=2E=2E0000000
--- a/include/xen/public/xen=2Eh
+++ /dev/null
@@ -1,995 +0,0 @@
-/************************************************************************=
******
- * xen=2Eh
- *
- * Guest OS interface to Xen=2E
- *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
- * Copyright (c) 2004, K A Fraser
- */
-
-#ifndef __XEN_PUBLIC_XEN_H__
-#define __XEN_PUBLIC_XEN_H__
-
-#include "xen-compat=2Eh"
-
-#if defined(__i386__) || defined(__x86_64__)
-#include "arch-x86/xen=2Eh"
-#elif defined(__arm__) || defined (__aarch64__)
-#include "arch-arm=2Eh"
-#else
-#error "Unsupported architecture"
-#endif
-
-#ifndef __ASSEMBLY__
-/* Guest handles for primitive C types=2E */
-DEFINE_XEN_GUEST_HANDLE(char);
-__DEFINE_XEN_GUEST_HANDLE(uchar, unsigned char);
-DEFINE_XEN_GUEST_HANDLE(int);
-__DEFINE_XEN_GUEST_HANDLE(uint,  unsigned int);
-#if __XEN_INTERFACE_VERSION__ < 0x00040300
-DEFINE_XEN_GUEST_HANDLE(LONG_PTR);
-__DEFINE_XEN_GUEST_HANDLE(ulong, ULONG_PTR);
-#endif
-DEFINE_XEN_GUEST_HANDLE(void);
-
-DEFINE_XEN_GUEST_HANDLE(uint64_t);
-DEFINE_XEN_GUEST_HANDLE(xen_pfn_t);
-DEFINE_XEN_GUEST_HANDLE(xen_ulong_t);
-
-/* Turn a plain number into a C unsigned (LONG_PTR) constant=2E */
-#define __xen_mk_uint(x)  x ## U
-#define __xen_mk_ulong(x) x ## UL
-#define xen_mk_uint(x)    __xen_mk_uint(x)
-#define xen_mk_ulong(x)   __xen_mk_ulong(x)
-
-#else
-
-/* In assembly code we cannot use C numeric constant suffixes=2E */
-#define xen_mk_uint(x)  x
-#define xen_mk_ulong(x) x
-
-#endif
-
-/*
- * HYPERCALLS
- */
-
-/* `incontents 100 hcalls List of hypercalls
- * ` enum hypercall_num { // __HYPERVISOR_* =3D> HYPERVISOR_*()
- */
-
-#define __HYPERVISOR_set_trap_table        0
-#define __HYPERVISOR_mmu_update            1
-#define __HYPERVISOR_set_gdt               2
-#define __HYPERVISOR_stack_switch          3
-#define __HYPERVISOR_set_callbacks         4
-#define __HYPERVISOR_fpu_taskswitch        5
-#define __HYPERVISOR_sched_op_compat       6 /* compat since 0x00030101 *=
/
-#define __HYPERVISOR_platform_op           7
-#define __HYPERVISOR_set_debugreg          8
-#define __HYPERVISOR_get_debugreg          9
-#define __HYPERVISOR_update_descriptor    10
-#define __HYPERVISOR_memory_op            12
-#define __HYPERVISOR_multicall            13
-#define __HYPERVISOR_update_va_mapping    14
-#define __HYPERVISOR_set_timer_op         15
-#define __HYPERVISOR_event_channel_op_compat 16 /* compat since 0x0003020=
2 */
-#define __HYPERVISOR_xen_version          17
-#define __HYPERVISOR_console_io           18
-#define __HYPERVISOR_physdev_op_compat    19 /* compat since 0x00030202 *=
/
-#define __HYPERVISOR_grant_table_op       20
-#define __HYPERVISOR_vm_assist            21
-#define __HYPERVISOR_update_va_mapping_otherdomain 22
-#define __HYPERVISOR_iret                 23 /* x86 only */
-#define __HYPERVISOR_vcpu_op              24
-#define __HYPERVISOR_set_segment_base     25 /* x86/64 only */
-#define __HYPERVISOR_mmuext_op            26
-#define __HYPERVISOR_xsm_op               27
-#define __HYPERVISOR_nmi_op               28
-#define __HYPERVISOR_sched_op             29
-#define __HYPERVISOR_callback_op          30
-#define __HYPERVISOR_xenoprof_op          31
-#define __HYPERVISOR_event_channel_op     32
-#define __HYPERVISOR_physdev_op           33
-#define __HYPERVISOR_hvm_op               34
-#define __HYPERVISOR_sysctl               35
-#define __HYPERVISOR_domctl               36
-#define __HYPERVISOR_kexec_op             37
-#define __HYPERVISOR_tmem_op              38
-#define __HYPERVISOR_xc_reserved_op       39 /* reserved for XenClient */
-#define __HYPERVISOR_xenpmu_op            40
-
-/* Architecture-specific hypercall definitions=2E */
-#define __HYPERVISOR_arch_0               48
-#define __HYPERVISOR_arch_1               49
-#define __HYPERVISOR_arch_2               50
-#define __HYPERVISOR_arch_3               51
-#define __HYPERVISOR_arch_4               52
-#define __HYPERVISOR_arch_5               53
-#define __HYPERVISOR_arch_6               54
-#define __HYPERVISOR_arch_7               55
-
-/* ` } */
-
-/*
- * HYPERCALL COMPATIBILITY=2E
- */
-
-/* New sched_op hypercall introduced in 0x00030101=2E */
-#if __XEN_INTERFACE_VERSION__ < 0x00030101
-#undef __HYPERVISOR_sched_op
-#define __HYPERVISOR_sched_op __HYPERVISOR_sched_op_compat
-#endif
-
-/* New event-channel and physdev hypercalls introduced in 0x00030202=2E *=
/
-#if __XEN_INTERFACE_VERSION__ < 0x00030202
-#undef __HYPERVISOR_event_channel_op
-#define __HYPERVISOR_event_channel_op __HYPERVISOR_event_channel_op_compa=
t
-#undef __HYPERVISOR_physdev_op
-#define __HYPERVISOR_physdev_op __HYPERVISOR_physdev_op_compat
-#endif
-
-/* New platform_op hypercall introduced in 0x00030204=2E */
-#if __XEN_INTERFACE_VERSION__ < 0x00030204
-#define __HYPERVISOR_dom0_op __HYPERVISOR_platform_op
-#endif
-
-/*
- * VIRTUAL INTERRUPTS
- *
- * Virtual interrupts that a guest OS may receive from Xen=2E
- *
- * In the side comments, 'V=2E' denotes a per-VCPU VIRQ while 'G=2E' deno=
tes a
- * global VIRQ=2E The former can be bound once per VCPU and cannot be re-=
bound=2E
- * The latter can be allocated only once per guest: they must initially b=
e
- * allocated to VCPU0 but can subsequently be re-bound=2E
- */
-/* ` enum virq { */
-#define VIRQ_TIMER      0  /* V=2E Timebase update, and/or requested time=
out=2E  */
-#define VIRQ_DEBUG      1  /* V=2E Request guest to dump debug info=2E   =
        */
-#define VIRQ_CONSOLE    2  /* G=2E (DOM0) Bytes received on emergency con=
sole=2E */
-#define VIRQ_DOM_EXC    3  /* G=2E (DOM0) Exceptional event for some doma=
in=2E   */
-#define VIRQ_TBUF       4  /* G=2E (DOM0) Trace buffer has records availa=
ble=2E  */
-#define VIRQ_DEBUGGER   6  /* G=2E (DOM0) A domain has paused for debuggi=
ng=2E   */
-#define VIRQ_XENOPROF   7  /* V=2E XenOprofile interrupt: new sample avai=
lable */
-#define VIRQ_CON_RING   8  /* G=2E (DOM0) Bytes received on console      =
      */
-#define VIRQ_PCPU_STATE 9  /* G=2E (DOM0) PCPU state changed             =
      */
-#define VIRQ_MEM_EVENT  10 /* G=2E (DOM0) A memory event has occured     =
      */
-#define VIRQ_XC_RESERVED 11 /* G=2E Reserved for XenClient               =
      */
-#define VIRQ_ENOMEM     12 /* G=2E (DOM0) Low on heap memory       */
-#define VIRQ_XENPMU     13 /* V=2E  PMC interrupt                        =
      */
-
-/* Architecture-specific VIRQ definitions=2E */
-#define VIRQ_ARCH_0    16
-#define VIRQ_ARCH_1    17
-#define VIRQ_ARCH_2    18
-#define VIRQ_ARCH_3    19
-#define VIRQ_ARCH_4    20
-#define VIRQ_ARCH_5    21
-#define VIRQ_ARCH_6    22
-#define VIRQ_ARCH_7    23
-/* ` } */
-
-#define NR_VIRQS       24
-
-/*
- * ` enum neg_errnoval
- * ` HYPERVISOR_mmu_update(const struct mmu_update reqs[],
- * `                       unsigned count, unsigned *done_out,
- * `                       unsigned foreigndom)
- * `
- * @reqs is an array of mmu_update_t structures ((ptr, val) pairs)=2E
- * @count is the length of the above array=2E
- * @pdone is an output parameter indicating number of completed operation=
s
- * @foreigndom[15:0]: FD, the expected owner of data pages referenced in =
this
- *                    hypercall invocation=2E Can be DOMID_SELF=2E
- * @foreigndom[31:16]: PFD, the expected owner of pagetable pages referen=
ced
- *                     in this hypercall invocation=2E The value of this =
field
- *                     (x) encodes the PFD as follows:
- *                     x =3D=3D 0 =3D> PFD =3D=3D DOMID_SELF
- *                     x !=3D 0 =3D> PFD =3D=3D x - 1
- *
- * Sub-commands: ptr[1:0] specifies the appropriate MMU_* command=2E
- * -------------
- * ptr[1:0] =3D=3D MMU_NORMAL_PT_UPDATE:
- * Updates an entry in a page table belonging to PFD=2E If updating an L1=
 table,
- * and the new table entry is valid/present, the mapped frame must belong=
 to
- * FD=2E If attempting to map an I/O page then the caller assumes the pri=
vilege
- * of the FD=2E
- * FD =3D=3D DOMID_IO: Permit /only/ I/O mappings, at the priv level of t=
he caller=2E
- * FD =3D=3D DOMID_XEN: Map restricted areas of Xen's heap space=2E
- * ptr[:2]  -- Machine address of the page-table entry to modify=2E
- * val      -- Value to write=2E
- *
- * There also certain implicit requirements when using this hypercall=2E =
The
- * pages that make up a pagetable must be mapped read-only in the guest=
=2E
- * This prevents uncontrolled guest updates to the pagetable=2E Xen stric=
tly
- * enforces this, and will disallow any pagetable update which will end u=
p
- * mapping pagetable page RW, and will disallow using any writable page a=
s a
- * pagetable=2E In practice it means that when constructing a page table =
for a
- * process, thread, etc, we MUST be very dilligient in following these ru=
les:
- *  1)=2E Start with top-level page (PGD or in Xen language: L4)=2E Fill =
out
- *      the entries=2E
- *  2)=2E Keep on going, filling out the upper (PUD or L3), and middle (P=
MD
- *      or L2)=2E
- *  3)=2E Start filling out the PTE table (L1) with the PTE entries=2E On=
ce
- *  	done, make sure to set each of those entries to RO (so writeable bit
- *  	is unset)=2E Once that has been completed, set the PMD (L2) for this
- *  	PTE table as RO=2E
- *  4)=2E When completed with all of the PMD (L2) entries, and all of the=
m have
- *  	been set to RO, make sure to set RO the PUD (L3)=2E Do the same
- *  	operation on PGD (L4) pagetable entries that have a PUD (L3) entry=
=2E
- *  5)=2E Now before you can use those pages (so setting the cr3), you MU=
ST also
- *      pin them so that the hypervisor can verify the entries=2E This is=
 done
- *      via the HYPERVISOR_mmuext_op(MMUEXT_PIN_L4_TABLE, guest physical =
frame
- *      number of the PGD (L4))=2E And this point the HYPERVISOR_mmuext_o=
p(
- *      MMUEXT_NEW_BASEPTR, guest physical frame number of the PGD (L4)) =
can be
- *      issued=2E
- * For 32-bit guests, the L4 is not used (as there is less pagetables), s=
o
- * instead use L3=2E
- * At this point the pagetables can be modified using the MMU_NORMAL_PT_U=
PDATE
- * hypercall=2E Also if so desired the OS can also try to write to the PT=
E
- * and be trapped by the hypervisor (as the PTE entry is RO)=2E
- *
- * To deallocate the pages, the operations are the reverse of the steps
- * mentioned above=2E The argument is MMUEXT_UNPIN_TABLE for all levels a=
nd the
- * pagetable MUST not be in use (meaning that the cr3 is not set to it)=
=2E
- *
- * ptr[1:0] =3D=3D MMU_MACHPHYS_UPDATE:
- * Updates an entry in the machine->pseudo-physical mapping table=2E
- * ptr[:2]  -- Machine address within the frame whose mapping to modify=
=2E
- *             The frame must belong to the FD, if one is specified=2E
- * val      -- Value to write into the mapping entry=2E
- *
- * ptr[1:0] =3D=3D MMU_PT_UPDATE_PRESERVE_AD:
- * As MMU_NORMAL_PT_UPDATE above, but A/D bits currently in the PTE are O=
Red
- * with those in @val=2E
- *
- * @val is usually the machine frame number along with some attributes=2E
- * The attributes by default follow the architecture defined bits=2E Mean=
ing that
- * if this is a X86_64 machine and four page table layout is used, the la=
yout
- * of val is:
- *  - 63 if set means No execute (NX)
- *  - 46-13 the machine frame number
- *  - 12 available for guest
- *  - 11 available for guest
- *  - 10 available for guest
- *  - 9 available for guest
- *  - 8 global
- *  - 7 PAT (PSE is disabled, must use hypercall to make 4MB or 2MB pages=
)
- *  - 6 dirty
- *  - 5 accessed
- *  - 4 page cached disabled
- *  - 3 page write through
- *  - 2 userspace accessible
- *  - 1 writeable
- *  - 0 present
- *
- *  The one bits that does not fit with the default layout is the PAGE_PS=
E
- *  also called PAGE_PAT)=2E The MMUEXT_[UN]MARK_SUPER arguments to the
- *  HYPERVISOR_mmuext_op serve as mechanism to set a pagetable to be 4MB
- *  (or 2MB) instead of using the PAGE_PSE bit=2E
- *
- *  The reason that the PAGE_PSE (bit 7) is not being utilized is due to =
Xen
- *  using it as the Page Attribute Table (PAT) bit - for details on it pl=
ease
- *  refer to Intel SDM 10=2E12=2E The PAT allows to set the caching attri=
butes of
- *  pages instead of using MTRRs=2E
- *
- *  The PAT MSR is as follows (it is a 64-bit value, each entry is 8 bits=
):
- *                    PAT4                 PAT0
- *  +-----+-----+----+----+----+-----+----+----+
- *  | UC  | UC- | WC | WB | UC | UC- | WC | WB |  <=3D Linux
- *  +-----+-----+----+----+----+-----+----+----+
- *  | UC  | UC- | WT | WB | UC | UC- | WT | WB |  <=3D BIOS (default when=
 machine boots)
- *  +-----+-----+----+----+----+-----+----+----+
- *  | rsv | rsv | WP | WC | UC | UC- | WT | WB |  <=3D Xen
- *  +-----+-----+----+----+----+-----+----+----+
- *
- *  The lookup of this index table translates to looking up
- *  Bit 7, Bit 4, and Bit 3 of val entry:
- *
- *  PAT/PSE (bit 7) =2E=2E=2E PCD (bit 4) =2E=2E PWT (bit 3)=2E
- *
- *  If all bits are off, then we are using PAT0=2E If bit 3 turned on,
- *  then we are using PAT1, if bit 3 and bit 4, then PAT2=2E=2E
- *
- *  As you can see, the Linux PAT1 translates to PAT4 under Xen=2E Which =
means
- *  that if a guest that follows Linux's PAT setup and would like to set =
Write
- *  Combined on pages it MUST use PAT4 entry=2E Meaning that Bit 7 (PAGE_=
PAT) is
- *  set=2E For example, under Linux it only uses PAT0, PAT1, and PAT2 for=
 the
- *  caching as:
- *
- *   WB =3D none (so PAT0)
- *   WC =3D PWT (bit 3 on)
- *   UC =3D PWT | PCD (bit 3 and 4 are on)=2E
- *
- * To make it work with Xen, it needs to translate the WC bit as so:
- *
- *  PWT (so bit 3 on) --> PAT (so bit 7 is on) and clear bit 3
- *
- * And to translate back it would:
- *
- * PAT (bit 7 on) --> PWT (bit 3 on) and clear bit 7=2E
- */
-#define MMU_NORMAL_PT_UPDATE      0 /* checked '*ptr =3D val'=2E ptr is M=
A=2E      */
-#define MMU_MACHPHYS_UPDATE       1 /* ptr =3D MA of frame to modify entr=
y for */
-#define MMU_PT_UPDATE_PRESERVE_AD 2 /* atomically: *ptr =3D val | (*ptr&(=
A|D)) */
-
-/*
- * MMU EXTENDED OPERATIONS
- *
- * ` enum neg_errnoval
- * ` HYPERVISOR_mmuext_op(mmuext_op_t uops[],
- * `                      unsigned int count,
- * `                      unsigned int *pdone,
- * `                      unsigned int foreigndom)
- */
-/* HYPERVISOR_mmuext_op() accepts a list of mmuext_op structures=2E
- * A foreigndom (FD) can be specified (or DOMID_SELF for none)=2E
- * Where the FD has some effect, it is described below=2E
- *
- * cmd: MMUEXT_(UN)PIN_*_TABLE
- * mfn: Machine frame number to be (un)pinned as a p=2Et=2E page=2E
- *      The frame must belong to the FD, if one is specified=2E
- *
- * cmd: MMUEXT_NEW_BASEPTR
- * mfn: Machine frame number of new page-table base to install in MMU=2E
- *
- * cmd: MMUEXT_NEW_USER_BASEPTR [x86/64 only]
- * mfn: Machine frame number of new page-table base to install in MMU
- *      when in user space=2E
- *
- * cmd: MMUEXT_TLB_FLUSH_LOCAL
- * No additional arguments=2E Flushes local TLB=2E
- *
- * cmd: MMUEXT_INVLPG_LOCAL
- * linear_addr: Linear address to be flushed from the local TLB=2E
- *
- * cmd: MMUEXT_TLB_FLUSH_MULTI
- * vcpumask: Pointer to bitmap of VCPUs to be flushed=2E
- *
- * cmd: MMUEXT_INVLPG_MULTI
- * linear_addr: Linear address to be flushed=2E
- * vcpumask: Pointer to bitmap of VCPUs to be flushed=2E
- *
- * cmd: MMUEXT_TLB_FLUSH_ALL
- * No additional arguments=2E Flushes all VCPUs' TLBs=2E
- *
- * cmd: MMUEXT_INVLPG_ALL
- * linear_addr: Linear address to be flushed from all VCPUs' TLBs=2E
- *
- * cmd: MMUEXT_FLUSH_CACHE
- * No additional arguments=2E Writes back and flushes cache contents=2E
- *
- * cmd: MMUEXT_FLUSH_CACHE_GLOBAL
- * No additional arguments=2E Writes back and flushes cache contents
- * on all CPUs in the system=2E
- *
- * cmd: MMUEXT_SET_LDT
- * linear_addr: Linear address of LDT base (NB=2E must be page-aligned)=
=2E
- * nr_ents: Number of entries in LDT=2E
- *
- * cmd: MMUEXT_CLEAR_PAGE
- * mfn: Machine frame number to be cleared=2E
- *
- * cmd: MMUEXT_COPY_PAGE
- * mfn: Machine frame number of the destination page=2E
- * src_mfn: Machine frame number of the source page=2E
- *
- * cmd: MMUEXT_[UN]MARK_SUPER
- * mfn: Machine frame number of head of superpage to be [un]marked=2E
- */
-/* ` enum mmuext_cmd { */
-#define MMUEXT_PIN_L1_TABLE      0
-#define MMUEXT_PIN_L2_TABLE      1
-#define MMUEXT_PIN_L3_TABLE      2
-#define MMUEXT_PIN_L4_TABLE      3
-#define MMUEXT_UNPIN_TABLE       4
-#define MMUEXT_NEW_BASEPTR       5
-#define MMUEXT_TLB_FLUSH_LOCAL   6
-#define MMUEXT_INVLPG_LOCAL      7
-#define MMUEXT_TLB_FLUSH_MULTI   8
-#define MMUEXT_INVLPG_MULTI      9
-#define MMUEXT_TLB_FLUSH_ALL    10
-#define MMUEXT_INVLPG_ALL       11
-#define MMUEXT_FLUSH_CACHE      12
-#define MMUEXT_SET_LDT          13
-#define MMUEXT_NEW_USER_BASEPTR 15
-#define MMUEXT_CLEAR_PAGE       16
-#define MMUEXT_COPY_PAGE        17
-#define MMUEXT_FLUSH_CACHE_GLOBAL 18
-#define MMUEXT_MARK_SUPER       19
-#define MMUEXT_UNMARK_SUPER     20
-/* ` } */
-
-#ifndef __ASSEMBLY__
-struct mmuext_op {
-    unsigned int cmd; /* =3D> enum mmuext_cmd */
-    union {
-        /* [UN]PIN_TABLE, NEW_BASEPTR, NEW_USER_BASEPTR
-         * CLEAR_PAGE, COPY_PAGE, [UN]MARK_SUPER */
-        xen_pfn_t     mfn;
-        /* INVLPG_LOCAL, INVLPG_ALL, SET_LDT */
-        ULONG_PTR linear_addr;
-    } arg1;
-    union {
-        /* SET_LDT */
-        unsigned int nr_ents;
-        /* TLB_FLUSH_MULTI, INVLPG_MULTI */
-#if __XEN_INTERFACE_VERSION__ >=3D 0x00030205
-        XEN_GUEST_HANDLE(const_void) vcpumask;
-#else
-        const void *vcpumask;
-#endif
-        /* COPY_PAGE */
-        xen_pfn_t src_mfn;
-    } arg2;
-};
-typedef struct mmuext_op mmuext_op_t;
-DEFINE_XEN_GUEST_HANDLE(mmuext_op_t);
-#endif
-
-/*
- * ` enum neg_errnoval
- * ` HYPERVISOR_update_va_mapping(ULONG_PTR va, u64 val,
- * `                              enum uvm_flags flags)
- * `
- * ` enum neg_errnoval
- * ` HYPERVISOR_update_va_mapping_otherdomain(ULONG_PTR va, u64 val,
- * `                                          enum uvm_flags flags,
- * `                                          domid_t domid)
- * `
- * ` @va: The virtual address whose mapping we want to change
- * ` @val: The new page table entry, must contain a machine address
- * ` @flags: Control TLB flushes
- */
-/* These are passed as 'flags' to update_va_mapping=2E They can be ORed=
=2E */
-/* When specifying UVMF_MULTI, also OR in a pointer to a CPU bitmap=2E   =
*/
-/* UVMF_LOCAL is merely UVMF_MULTI with a NULL bitmap pointer=2E         =
*/
-/* ` enum uvm_flags { */
-#define UVMF_NONE           (xen_mk_ulong(0)<<0) /* No flushing at all=2E=
   */
-#define UVMF_TLB_FLUSH      (xen_mk_ulong(1)<<0) /* Flush entire TLB(s)=
=2E  */
-#define UVMF_INVLPG         (xen_mk_ulong(2)<<0) /* Flush only one entry=
=2E */
-#define UVMF_FLUSHTYPE_MASK (xen_mk_ulong(3)<<0)
-#define UVMF_MULTI          (xen_mk_ulong(0)<<2) /* Flush subset of TLBs=
=2E */
-#define UVMF_LOCAL          (xen_mk_ulong(0)<<2) /* Flush local TLB=2E   =
   */
-#define UVMF_ALL            (xen_mk_ulong(1)<<2) /* Flush all TLBs=2E    =
   */
-/* ` } */
-
-/*
- * Commands to HYPERVISOR_console_io()=2E
- */
-#define CONSOLEIO_write         0
-#define CONSOLEIO_read          1
-
-/*
- * Commands to HYPERVISOR_vm_assist()=2E
- */
-#define VMASST_CMD_enable                0
-#define VMASST_CMD_disable               1
-
-/* x86/32 guests: simulate full 4GB segment limits=2E */
-#define VMASST_TYPE_4gb_segments         0
-
-/* x86/32 guests: trap (vector 15) whenever above vmassist is used=2E */
-#define VMASST_TYPE_4gb_segments_notify  1
-
-/*
- * x86 guests: support writes to bottom-level PTEs=2E
- * NB1=2E Page-directory entries cannot be written=2E
- * NB2=2E Guest must continue to remove all writable mappings of PTEs=2E
- */
-#define VMASST_TYPE_writable_pagetables  2
-
-/* x86/PAE guests: support PDPTs above 4GB=2E */
-#define VMASST_TYPE_pae_extended_cr3     3
-
-/*
- * x86 guests: Sane behaviour for virtual iopl
- *  - virtual iopl updated from do_iret() hypercalls=2E
- *  - virtual iopl reported in bounce frames=2E
- *  - guest kernels assumed to be level 0 for the purpose of iopl checks=
=2E
- */
-#define VMASST_TYPE_architectural_iopl   4
-
-/*
- * x86/64 guests: strictly hide M2P from user mode=2E
- * This allows the guest to control respective hypervisor behavior:
- * - when not set, L4 tables get created with the respective slot blank,
- *   and whenever the L4 table gets used as a kernel one the missing
- *   mapping gets inserted,
- * - when set, L4 tables get created with the respective slot initialized
- *   as before, and whenever the L4 table gets used as a user one the
- *   mapping gets zapped=2E
- */
-#define VMASST_TYPE_m2p_strict           32
-
-#if __XEN_INTERFACE_VERSION__ < 0x00040600
-#define MAX_VMASST_TYPE                  3
-#endif
-
-/* Domain ids >=3D DOMID_FIRST_RESERVED cannot be used for ordinary domai=
ns=2E */
-#define DOMID_FIRST_RESERVED xen_mk_uint(0x7FF0)
-
-/* DOMID_SELF is used in certain contexts to refer to oneself=2E */
-#define DOMID_SELF           xen_mk_uint(0x7FF0)
-
-/*
- * DOMID_IO is used to restrict page-table updates to mapping I/O memory=
=2E
- * Although no Foreign Domain need be specified to map I/O pages, DOMID_I=
O
- * is useful to ensure that no mappings to the OS's own heap are accident=
ally
- * installed=2E (e=2Eg=2E, in Linux this could cause havoc as reference c=
ounts
- * aren't adjusted on the I/O-mapping code path)=2E
- * This only makes sense in MMUEXT_SET_FOREIGNDOM, but in that context ca=
n
- * be specified by any calling domain=2E
- */
-#define DOMID_IO             xen_mk_uint(0x7FF1)
-
-/*
- * DOMID_XEN is used to allow privileged domains to map restricted parts =
of
- * Xen's heap space (e=2Eg=2E, the machine_to_phys table)=2E
- * This only makes sense in MMUEXT_SET_FOREIGNDOM, and is only permitted =
if
- * the caller is privileged=2E
- */
-#define DOMID_XEN            xen_mk_uint(0x7FF2)
-
-/*
- * DOMID_COW is used as the owner of sharable pages */
-#define DOMID_COW            xen_mk_uint(0x7FF3)
-
-/* DOMID_INVALID is used to identify pages with unknown owner=2E */
-#define DOMID_INVALID        xen_mk_uint(0x7FF4)
-
-/* Idle domain=2E */
-#define DOMID_IDLE           xen_mk_uint(0x7FFF)
-
-#ifndef __ASSEMBLY__
-
-typedef uint16_t domid_t;
-
-/*
- * Send an array of these to HYPERVISOR_mmu_update()=2E
- * NB=2E The fields are natural pointer/address size for this architectur=
e=2E
- */
-struct mmu_update {
-    uint64_t ptr;       /* Machine address of PTE=2E */
-    uint64_t val;       /* New contents of PTE=2E    */
-};
-typedef struct mmu_update mmu_update_t;
-DEFINE_XEN_GUEST_HANDLE(mmu_update_t);
-
-/*
- * ` enum neg_errnoval
- * ` HYPERVISOR_multicall(multicall_entry_t call_list[],
- * `                      uint32_t nr_calls);
- *
- * NB=2E The fields are logically the natural register size for this
- * architecture=2E In cases where xen_ulong_t is larger than this then
- * any unused bits in the upper portion must be zero=2E
- */
-struct multicall_entry {
-    xen_ulong_t op, result;
-    xen_ulong_t args[6];
-};
-typedef struct multicall_entry multicall_entry_t;
-DEFINE_XEN_GUEST_HANDLE(multicall_entry_t);
-
-#if __XEN_INTERFACE_VERSION__ < 0x00040400
-/*
- * Event channel endpoints per domain (when using the 2-level ABI):
- *  1024 if a LONG_PTR is 32 bits; 4096 if a LONG_PTR is 64 bits=2E
- */
-#define NR_EVENT_CHANNELS EVTCHN_2L_NR_CHANNELS
-#endif
-
-struct vcpu_time_info {
-    /*
-     * Updates to the following values are preceded and followed by an
-     * increment of 'version'=2E The guest can therefore detect updates b=
y
-     * looking for changes to 'version'=2E If the least-significant bit o=
f
-     * the version number is set then an update is in progress and the gu=
est
-     * must wait to read a consistent set of values=2E
-     * The correct way to interact with the version number is similar to
-     * Linux's seqlock: see the implementations of read_seqbegin/read_seq=
retry=2E
-     */
-    uint32_t version;
-    uint32_t pad0;
-    uint64_t tsc_timestamp;   /* TSC at last update of time vals=2E  */
-    uint64_t system_time;     /* Time, in nanosecs, since boot=2E    */
-    /*
-     * Current system time:
-     *   system_time +
-     *   ((((tsc - tsc_timestamp) << tsc_shift) * tsc_to_system_mul) >> 3=
2)
-     * CPU frequency (Hz):
-     *   ((10^9 << 32) / tsc_to_system_mul) >> tsc_shift
-     */
-    uint32_t tsc_to_system_mul;
-    int8_t   tsc_shift;
-#if __XEN_INTERFACE_VERSION__ > 0x040600
-    uint8_t  flags;
-    uint8_t  pad1[2];
-#else
-    int8_t   pad1[3];
-#endif
-}; /* 32 bytes */
-typedef struct vcpu_time_info vcpu_time_info_t;
-
-#define XEN_PVCLOCK_TSC_STABLE_BIT     (1 << 0)
-#define XEN_PVCLOCK_GUEST_STOPPED      (1 << 1)
-
-struct vcpu_info {
-    /*
-     * 'evtchn_upcall_pending' is written non-zero by Xen to indicate
-     * a pending notification for a particular VCPU=2E It is then cleared
-     * by the guest OS /before/ checking for pending work, thus avoiding
-     * a set-and-check race=2E Note that the mask is only accessed by Xen
-     * on the CPU that is currently hosting the VCPU=2E This means that t=
he
-     * pending and mask flags can be updated by the guest without special
-     * synchronisation (i=2Ee=2E, no need for the x86 LOCK prefix)=2E
-     * This may seem suboptimal because if the pending flag is set by
-     * a different CPU then an IPI may be scheduled even when the mask
-     * is set=2E However, note:
-     *  1=2E The task of 'interrupt holdoff' is covered by the per-event-
-     *     channel mask bits=2E A 'noisy' event that is continually being
-     *     triggered can be masked at source at this very precise
-     *     granularity=2E
-     *  2=2E The main purpose of the per-VCPU mask is therefore to restri=
ct
-     *     reentrant execution: whether for concurrency control, or to
-     *     prevent unbounded stack usage=2E Whatever the purpose, we expe=
ct
-     *     that the mask will be asserted only for short periods at a tim=
e,
-     *     and so the likelihood of a 'spurious' IPI is suitably small=2E
-     * The mask is read before making an event upcall to the guest: a
-     * non-zero mask therefore guarantees that the VCPU will not receive
-     * an upcall activation=2E The mask is cleared when the VCPU requests
-     * to block: this avoids wakeup-waiting races=2E
-     */
-    uint8_t evtchn_upcall_pending;
-#ifdef XEN_HAVE_PV_UPCALL_MASK
-    uint8_t evtchn_upcall_mask;
-#else /* XEN_HAVE_PV_UPCALL_MASK */
-    uint8_t pad0;
-#endif /* XEN_HAVE_PV_UPCALL_MASK */
-    xen_ulong_t evtchn_pending_sel;
-    struct arch_vcpu_info arch;
-    struct vcpu_time_info time;
-}; /* 64 bytes (x86) */
-#ifndef __XEN__
-typedef struct vcpu_info vcpu_info_t;
-#endif
-
-/*
- * `incontents 200 startofday_shared Start-of-day shared data structure
- * Xen/kernel shared data -- pointer provided in start_info=2E
- *
- * This structure is defined to be both smaller than a page, and the
- * only data on the shared page, but may vary in actual size even within
- * compatible Xen versions; guests should not rely on the size
- * of this structure remaining constant=2E
- */
-struct shared_info {
-    struct vcpu_info vcpu_info[XEN_LEGACY_MAX_VCPUS];
-
-    /*
-     * A domain can create "event channels" on which it can send and rece=
ive
-     * asynchronous event notifications=2E There are three classes of eve=
nt that
-     * are delivered by this mechanism:
-     *  1=2E Bi-directional inter- and intra-domain connections=2E Domain=
s must
-     *     arrange out-of-band to set up a connection (usually by allocat=
ing
-     *     an unbound 'listener' port and avertising that via a storage s=
ervice
-     *     such as xenstore)=2E
-     *  2=2E Physical interrupts=2E A domain with suitable hardware-acces=
s
-     *     privileges can bind an event-channel port to a physical interr=
upt
-     *     source=2E
-     *  3=2E Virtual interrupts ('events')=2E A domain can bind an event-=
channel
-     *     port to a virtual interrupt source, such as the virtual-timer
-     *     device or the emergency console=2E
-     *
-     * Event channels are addressed by a "port index"=2E Each channel is
-     * associated with two bits of information:
-     *  1=2E PENDING -- notifies the domain that there is a pending notif=
ication
-     *     to be processed=2E This bit is cleared by the guest=2E
-     *  2=2E MASK -- if this bit is clear then a 0->1 transition of PENDI=
NG
-     *     will cause an asynchronous upcall to be scheduled=2E This bit =
is only
-     *     updated by the guest=2E It is read-only within Xen=2E If a cha=
nnel
-     *     becomes pending while the channel is masked then the 'edge' is=
 lost
-     *     (i=2Ee=2E, when the channel is unmasked, the guest must manual=
ly handle
-     *     pending notifications as no upcall will be scheduled by Xen)=
=2E
-     *
-     * To expedite scanning of pending notifications, any 0->1 pending
-     * transition on an unmasked channel causes a corresponding bit in a
-     * per-vcpu selector word to be set=2E Each bit in the selector cover=
s a
-     * 'C LONG_PTR' in the PENDING bitfield array=2E
-     */
-    xen_ulong_t evtchn_pending[sizeof(xen_ulong_t) * 8];
-    xen_ulong_t evtchn_mask[sizeof(xen_ulong_t) * 8];
-
-    /*
-     * Wallclock time: updated only by control software=2E Guests should =
base
-     * their gettimeofday() syscall on this wallclock-base value=2E
-     */
-    uint32_t wc_version;      /* Version counter: see vcpu_time_info_t=2E=
 */
-    uint32_t wc_sec;          /* Secs  00:00:00 UTC, Jan 1, 1970=2E  */
-    uint32_t wc_nsec;         /* Nsecs 00:00:00 UTC, Jan 1, 1970=2E  */
-#if !defined(__i386__)
-    uint32_t wc_sec_hi;
-# define xen_wc_sec_hi wc_sec_hi
-#elif !defined(__XEN__) && !defined(__XEN_TOOLS__)
-# define xen_wc_sec_hi arch=2Ewc_sec_hi
-#endif
-
-    struct arch_shared_info arch;
-
-};
-#ifndef __XEN__
-typedef struct shared_info shared_info_t;
-#endif
-
-/*
- * `incontents 200 startofday Start-of-day memory layout
- *
- *  1=2E The domain is started within contiguous virtual-memory region=2E
- *  2=2E The contiguous region ends on an aligned 4MB boundary=2E
- *  3=2E This the order of bootstrap elements in the initial virtual regi=
on:
- *      a=2E relocated kernel image
- *      b=2E initial ram disk              [mod_start, mod_len]
- *         (may be omitted)
- *      c=2E list of allocated page frames [mfn_list, nr_pages]
- *         (unless relocated due to XEN_ELFNOTE_INIT_P2M)
- *      d=2E start_info_t structure        [register ESI (x86)]
- *         in case of dom0 this page contains the console info, too
- *      e=2E unless dom0: xenstore ring page
- *      f=2E unless dom0: console ring page
- *      g=2E bootstrap page tables         [pt_base and CR3 (x86)]
- *      h=2E bootstrap stack               [register ESP (x86)]
- *  4=2E Bootstrap elements are packed together, but each is 4kB-aligned=
=2E
- *  5=2E The list of page frames forms a contiguous 'pseudo-physical' mem=
ory
- *     layout for the domain=2E In particular, the bootstrap virtual-memo=
ry
- *     region is a 1:1 mapping to the first section of the pseudo-physica=
l map=2E
- *  6=2E All bootstrap elements are mapped read-writable for the guest OS=
=2E The
- *     only exception is the bootstrap page table, which is mapped read-o=
nly=2E
- *  7=2E There is guaranteed to be at least 512kB padding after the final
- *     bootstrap element=2E If necessary, the bootstrap virtual region is
- *     extended by an extra 4MB to ensure this=2E
- *
- * Note: Prior to 25833:bb85bbccb1c9=2E ("x86/32-on-64 adjust Dom0 initia=
l page
- * table layout") a bug caused the pt_base (3=2Eg above) and cr3 to not p=
oint
- * to the start of the guest page tables (it was offset by two pages)=2E
- * This only manifested itself on 32-on-64 dom0 kernels and not 32-on-64 =
domU
- * or 64-bit kernels of any colour=2E The page tables for a 32-on-64 dom0=
 got
- * allocated in the order: 'first L1','first L2', 'first L3', so the offs=
et
- * to the page table base is by two pages back=2E The initial domain if i=
t is
- * 32-bit and runs under a 64-bit hypervisor should _NOT_ use two of the
- * pages preceding pt_base and mark them as reserved/unused=2E
- */
-#ifdef XEN_HAVE_PV_GUEST_ENTRY
-struct start_info {
-    /* THE FOLLOWING ARE FILLED IN BOTH ON INITIAL BOOT AND ON RESUME=2E =
   */
-    char magic[32];             /* "xen-<version>-<platform>"=2E         =
   */
-    ULONG_PTR nr_pages;     /* Total pages allocated to this domain=2E  *=
/
-    ULONG_PTR shared_info;  /* MACHINE address of shared info struct=2E *=
/
-    uint32_t flags;             /* SIF_xxx flags=2E                      =
   */
-    xen_pfn_t store_mfn;        /* MACHINE page number of shared page=2E =
   */
-    uint32_t store_evtchn;      /* Event channel for store communication=
=2E */
-    union {
-        struct {
-            xen_pfn_t mfn;      /* MACHINE page number of console page=2E=
   */
-            uint32_t  evtchn;   /* Event channel for console page=2E     =
   */
-        } domU;
-        struct {
-            uint32_t info_off;  /* Offset of console_info struct=2E      =
   */
-            uint32_t info_size; /* Size of console_info struct from start=
=2E*/
-        } dom0;
-    } console;
-    /* THE FOLLOWING ARE ONLY FILLED IN ON INITIAL BOOT (NOT RESUME)=2E  =
   */
-    ULONG_PTR pt_base;      /* VIRTUAL address of page directory=2E     *=
/
-    ULONG_PTR nr_pt_frames; /* Number of bootstrap p=2Et=2E frames=2E    =
   */
-    ULONG_PTR mfn_list;     /* VIRTUAL address of page-frame list=2E    *=
/
-    ULONG_PTR mod_start;    /* VIRTUAL address of pre-loaded module   */
-                                /* (PFN of pre-loaded module if          =
 */
-                                /*  SIF_MOD_START_PFN set in flags)=2E   =
   */
-    ULONG_PTR mod_len;      /* Size (bytes) of pre-loaded module=2E     *=
/
-#define MAX_GUEST_CMDLINE 1024
-    int8_t cmd_line[MAX_GUEST_CMDLINE];
-    /* The pfn range here covers both page table and p->m table frames=2E=
   */
-    ULONG_PTR first_p2m_pfn;/* 1st pfn forming initial P->M table=2E    *=
/
-    ULONG_PTR nr_p2m_frames;/* # of pfns forming initial P->M table=2E  *=
/
-};
-typedef struct start_info start_info_t;
-
-/*
- * Start of day structure passed to PVH guests in %ebx=2E
- *
- * NOTE: nothing will be loaded at physical address 0, so a 0 value in an=
y
- * of the address fields should be treated as not present=2E
- *
- *  0 +----------------+
- *    | magic          | Contains the magic value XEN_HVM_START_MAGIC_VAL=
UE
- *    |                | ("xEn3" with the 0x80 bit of the "E" set)=2E
- *  4 +----------------+
- *    | version        | Version of this structure=2E Current version is =
0=2E New
- *    |                | versions are guaranteed to be backwards-compatib=
le=2E
- *  8 +----------------+
- *    | flags          | SIF_xxx flags=2E
- * 12 +----------------+
- *    | nr_modules     | Number of modules passed to the kernel=2E
- * 16 +----------------+
- *    | modlist_paddr  | Physical address of an array of modules
- *    |                | (layout of the structure below)=2E
- * 24 +----------------+
- *    | cmdline_paddr  | Physical address of the command line,
- *    |                | a zero-terminated ASCII string=2E
- * 32 +----------------+
- *    | rsdp_paddr     | Physical address of the RSDP ACPI data structure=
=2E
- * 40 +----------------+
- *
- * The layout of each entry in the module structure is the following:
- *
- *  0 +----------------+
- *    | paddr          | Physical address of the module=2E
- *  8 +----------------+
- *    | size           | Size of the module in bytes=2E
- * 16 +----------------+
- *    | cmdline_paddr  | Physical address of the command line,
- *    |                | a zero-terminated ASCII string=2E
- * 24 +----------------+
- *    | reserved       |
- * 32 +----------------+
- *
- * The address and sizes are always a 64bit little endian unsigned intege=
r=2E
- *
- * NB: Xen on x86 will always try to place all the data below the 4GiB
- * boundary=2E
- */
-#define XEN_HVM_START_MAGIC_VALUE 0x336ec578
-
-/* New console union for dom0 introduced in 0x00030203=2E */
-#if __XEN_INTERFACE_VERSION__ < 0x00030203
-#define console_mfn    console=2EdomU=2Emfn
-#define console_evtchn console=2EdomU=2Eevtchn
-#endif
-#endif /* XEN_HAVE_PV_GUEST_ENTRY */
-
-/* These flags are passed in the 'flags' field of start_info_t=2E */
-#define SIF_PRIVILEGED    (1<<0)  /* Is the domain privileged? */
-#define SIF_INITDOMAIN    (1<<1)  /* Is this the initial control domain? =
*/
-#define SIF_MULTIBOOT_MOD (1<<2)  /* Is mod_start a multiboot module? */
-#define SIF_MOD_START_PFN (1<<3)  /* Is mod_start a PFN? */
-#define SIF_VIRT_P2M_4TOOLS (1<<4) /* Do Xen tools understand a virt=2E m=
apped */
-                                   /* P->M making the 3 level tree obsole=
te? */
-#define SIF_PM_MASK       (0xFF<<8) /* reserve 1 byte for xen-pm options =
*/
-
-/*
- * A multiboot module is a package containing modules very similar to a
- * multiboot module array=2E The only differences are:
- * - the array of module descriptors is by convention simply at the begin=
ning
- *   of the multiboot module,
- * - addresses in the module descriptors are based on the beginning of th=
e
- *   multiboot module,
- * - the number of modules is determined by a termination descriptor that=
 has
- *   mod_start =3D=3D 0=2E
- *
- * This permits to both build it statically and reference it in a configu=
ration
- * file, and let the PV guest easily rebase the addresses to virtual addr=
esses
- * and at the same time count the number of modules=2E
- */
-struct xen_multiboot_mod_list
-{
-    /* Address of first byte of the module */
-    uint32_t mod_start;
-    /* Address of last byte of the module (inclusive) */
-    uint32_t mod_end;
-    /* Address of zero-terminated command line */
-    uint32_t cmdline;
-    /* Unused, must be zero */
-    uint32_t pad;
-};
-/*
- * `incontents 200 startofday_dom0_console Dom0_console
- *
- * The console structure in start_info=2Econsole=2Edom0
- *
- * This structure includes a variety of information required to
- * have a working VGA/VESA console=2E
- */
-typedef struct dom0_vga_console_info {
-    uint8_t video_type; /* DOM0_VGA_CONSOLE_??? */
-#define XEN_VGATYPE_TEXT_MODE_3 0x03
-#define XEN_VGATYPE_VESA_LFB    0x23
-#define XEN_VGATYPE_EFI_LFB     0x70
-
-    union {
-        struct {
-            /* Font height, in pixels=2E */
-            uint16_t font_height;
-            /* Cursor location (column, row)=2E */
-            uint16_t cursor_x, cursor_y;
-            /* Number of rows and columns (dimensions in characters)=2E *=
/
-            uint16_t rows, columns;
-        } text_mode_3;
-
-        struct {
-            /* Width and height, in pixels=2E */
-            uint16_t width, height;
-            /* Bytes per scan line=2E */
-            uint16_t bytes_per_line;
-            /* Bits per pixel=2E */
-            uint16_t bits_per_pixel;
-            /* LFB physical address, and size (in units of 64kB)=2E */
-            uint32_t lfb_base;
-            uint32_t lfb_size;
-            /* RGB mask offsets and sizes, as defined by VBE 1=2E2+ */
-            uint8_t  red_pos, red_size;
-            uint8_t  green_pos, green_size;
-            uint8_t  blue_pos, blue_size;
-            uint8_t  rsvd_pos, rsvd_size;
-#if __XEN_INTERFACE_VERSION__ >=3D 0x00030206
-            /* VESA capabilities (offset 0xa, VESA command 0x4f00)=2E */
-            uint32_t gbl_caps;
-            /* Mode attributes (offset 0x0, VESA command 0x4f01)=2E */
-            uint16_t mode_attrs;
-#endif
-        } vesa_lfb;
-    } u;
-} dom0_vga_console_info_t;
-#define xen_vga_console_info dom0_vga_console_info
-#define xen_vga_console_info_t dom0_vga_console_info_t
-
-typedef uint8_t xen_domain_handle_t[16];
-
-__DEFINE_XEN_GUEST_HANDLE(uint8,  uint8_t);
-__DEFINE_XEN_GUEST_HANDLE(uint16, uint16_t);
-__DEFINE_XEN_GUEST_HANDLE(uint32, uint32_t);
-__DEFINE_XEN_GUEST_HANDLE(uint64, uint64_t);
-
-#endif /* !__ASSEMBLY__ */
-
-/* Default definitions for macros used by domctl/sysctl=2E */
-#if defined(__XEN__) || defined(__XEN_TOOLS__)
-
-#ifndef int64_aligned_t
-#define int64_aligned_t int64_t
-#endif
-#ifndef uint64_aligned_t
-#define uint64_aligned_t uint64_t
-#endif
-#ifndef XEN_GUEST_HANDLE_64
-#define XEN_GUEST_HANDLE_64(name) XEN_GUEST_HANDLE(name)
-#endif
-
-#ifndef __ASSEMBLY__
-struct xenctl_bitmap {
-    XEN_GUEST_HANDLE_64(uint8) bitmap;
-    uint32_t nr_bits;
-};
-#endif
-
-#endif /* defined(__XEN__) || defined(__XEN_TOOLS__) */
-
-#endif /* __XEN_PUBLIC_XEN_H__ */
-
-/*
- * Local variables:
- * mode: C
- * c-file-style: "BSD"
- * c-basic-offset: 4
- * tab-width: 4
- * indent-tabs-mode: nil
- * End:
- */
diff --git a/vs2019/xennet/xennet=2Evcxproj b/vs2019/xennet/xennet=2Evcxpr=
oj
index cfc70b0=2E=2E6823e12 100644
--- a/vs2019/xennet/xennet=2Evcxproj
+++ b/vs2019/xennet/xennet=2Evcxproj
@@ -24,7 +24,7 @@
       <AdditionalOptions>/ZH:SHA_256 %(AdditionalOptions)</AdditionalOpti=
ons>
       <PreprocessorDefinitions>PROJECT=3D$(ProjectName);NDIS_MINIPORT_DRI=
VER;NDIS_WDM=3D1;NDIS630_MINIPORT=3D1;NDIS660_MINIPORT=3D1;NDIS685_MINIPORT=
=3D1;POOL_NX_OPTIN=3D1;NT_PROCESSOR_GROUPS;%(PreprocessorDefinitions)</Prep=
rocessorDefinitions>
       <IntrinsicFunctions>true</IntrinsicFunctions>
-      <AdditionalIncludeDirectories>$(WindowsSdkDir)\include\km;=2E=2E\=
=2E=2E\include;=2E=2E\=2E=2E\include\xen;</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>$(WindowsSdkDir)\include\km;=2E=2E\=
=2E=2E\include;</AdditionalIncludeDirectories>
       <WarningLevel>EnableAllWarnings</WarningLevel>
       <DisableSpecificWarnings>4061;4062;4464;4711;4770;4548;4820;4668;42=
55;5045;6001;6054;26451;28160;28196;30030;30029;%(DisableSpecificWarnings)<=
/DisableSpecificWarnings>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
diff --git a/vs2022/xennet/xennet=2Evcxproj b/vs2022/xennet/xennet=2Evcxpr=
oj
index c97a158=2E=2E5785cea 100644
--- a/vs2022/xennet/xennet=2Evcxproj
+++ b/vs2022/xennet/xennet=2Evcxproj
@@ -24,7 +24,7 @@
       <AdditionalOptions>/ZH:SHA_256 %(AdditionalOptions)</AdditionalOpti=
ons>
       <PreprocessorDefinitions>PROJECT=3D$(ProjectName);NDIS_MINIPORT_DRI=
VER;NDIS_WDM=3D1;NDIS630_MINIPORT=3D1;NDIS660_MINIPORT=3D1;NDIS685_MINIPORT=
=3D1;POOL_NX_OPTIN=3D1;NT_PROCESSOR_GROUPS;%(PreprocessorDefinitions)</Prep=
rocessorDefinitions>
       <IntrinsicFunctions>true</IntrinsicFunctions>
-      <AdditionalIncludeDirectories>$(WindowsSdkDir)\include\km;=2E=2E\=
=2E=2E\include;=2E=2E\=2E=2E\include\xen;</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>$(WindowsSdkDir)\include\km;=2E=2E\=
=2E=2E\include;</AdditionalIncludeDirectories>
       <WarningLevel>EnableAllWarnings</WarningLevel>
       <DisableSpecificWarnings>4061;4062;4464;4711;4770;4548;4820;4668;42=
55;5045;6001;6054;26451;28160;28196;30030;30029;%(DisableSpecificWarnings)<=
/DisableSpecificWarnings>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
--
2=2E55=2E0=2Ewindows=2E3


-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.240.1e892e6ec256aae4.1a13fb58d89.1f794ca3d7a7883c=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 15 14:18:39 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 15 Oct 2026 14:18:39 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1450676.1666103 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHMI2-00049s-MT; Thu, 15 Oct 2026 14:18:38 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1450676.1666103; Thu, 15 Oct 2026 14:18:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHMI2-00049k-Jl; Thu, 15 Oct 2026 14:18:38 +0000
Received: by outflank-mailman (input) for mailman id 1450676;
 Thu, 15 Oct 2026 14:18:38 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13fedd1870008425@swg.vates.tech>)
 id 1xHMI1-00049d-Vg
 for win-pv-devel@lists.xenproject.org; Thu, 15 Oct 2026 14:18:37 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xHMI1-00FKbU-Bo
 for win-pv-devel@lists.xenproject.org; Thu, 15 Oct 2026 16:18:37 +0200
Received: from [10.42.69.3] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13fedd1870008425@swg.vates.tech>)
 id 6ad0e0b0-e002-0a2a0a5209dd-0a2a4503b55c-40
 for <win-pv-devel@lists.xenproject.org>; Thu, 15 Oct 2026 16:18:37 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-33051d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13fedd1870008425@swg.vates.tech>)
 id 6ad0e0bc-fae8-0a2a45030019-b9ff1c229fff-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 15 Oct 2026 16:18:37 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a13fedd1870008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 15 Oct 2026 14:18:32 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 0DF3E81CBF;
 Thu, 15 Oct 2026 16:18:32 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=/S/vnrxKeH9pYaj/rvPW7hEz4/4lakeNYouACcddWy8=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:feedback-id;
 b=W1Nrk+OxPmLM7AvEIRXGgCBE669lM+iZDq9ujtzuAljWc0kvGzwOdXvfOhpp9GIveSK748Fl1
 SO2NGKQws6kK/uckjle7BldM4RQ/VhMbKdkSc4jCwHpP8+Z95C9h6pcSMzM/nUvEIDzxOJU8aJl
 UURz/Gs1CAIQnhNnKLALwcgEXEjbqWzh/M5kuvPsKZjgFxZDubpF+n3Ka2xp+LHCth4TwhFUwq8
 xlPna2jpd0WkQzUqUxuMdWrneAzrsW2kdhOnlQ1azE6vH++xBITydGuIjg8TKjXSOtbkaWU3sWN
 WeN5YdRbKZdcOYmnRrindcow0pluSNaMVhci6iEU43Dw==
X-Zone-Loop: de952635a40a287915683ef08b6e0f15a5960ffb3bd3
x-campaign-type: default
x-transaction-id: 048133d2-2496-46c0-aff4-499b00ace9ad
x-swg-uid: 01-2cb22566-931f-4009-97d3-347ceb5318e7
X-Mailer: Sweego
Message-ID:
 <1792073912.8631fc262581453bbf619ec5b2062170.1a13fedd1870008425@vates.tech>
x-swg-bid: 1792073912.8631fc262581453bbf619ec5b2062170.1a13fedd1870008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [PATCH 0/3] Update Xen headers to RELEASE-4.22.0
Date: Thu, 15 Oct 2026 16:18:27 +0200
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.24a.a2f577c8a9f42483.1a13fedcf31.e02368c8fea2689b=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792073912114
X-purgate-ID: tlsNG-33051d/1792073917-74A894E9-8E556F40/0/0
X-purgate-type: clean
X-purgate-size: 1945

---=Part.24a.a2f577c8a9f42483.1a13fedcf31.e02368c8fea2689b=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Updates for each individual drivers to follow=2E

Tu Dinh (3):
  Remove XS_RESTRICT from StoreIgnoreHeaderType
  Update Xen headers to RELEASE-4=2E22=2E0
  xsd_errors structs are now const

 get_xen_headers=2Epy                       |   1 +
 include/xen/public/arch-x86/xen-x86_32=2Eh |  81 +++--
 include/xen/public/arch-x86/xen-x86_64=2Eh | 126 +++++---
 include/xen/public/arch-x86/xen=2Eh        | 121 +++++---
 include/xen/public/errno=2Eh               |  14 +-
 include/xen/public/event_channel=2Eh       |  52 ++--
 include/xen/public/features=2Eh            |  64 ++--
 include/xen/public/grant_table=2Eh         |  57 ++--
 include/xen/public/hvm/hvm_info_table=2Eh  |  21 +-
 include/xen/public/hvm/hvm_op=2Eh          | 372 ++++++++---------------
 include/xen/public/hvm/params=2Eh          | 114 ++++---
 include/xen/public/io/console=2Eh          |  37 +--
 include/xen/public/io/xs_wire=2Eh          |  65 ++--
 include/xen/public/memory=2Eh              | 178 ++++++++---
 include/xen/public/physdev=2Eh             |  67 ++--
 include/xen/public/sched=2Eh               |  19 +-
 include/xen/public/trace=2Eh               |  33 +-
 include/xen/public/vcpu=2Eh                |  48 +--
 include/xen/public/version=2Eh             | 125 ++++++--
 include/xen/public/xen-compat=2Eh          |  25 +-
 include/xen/public/xen=2Eh                 | 223 ++++++++++----
 include/xen/xen/errno=2Eh                  |   8 +-
 src/xenbus/store=2Ec                       |   3 +-
 23 files changed, 1037 insertions(+), 817 deletions(-)

--
2=2E55=2E0=2Ewindows=2E3


-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.24a.a2f577c8a9f42483.1a13fedcf31.e02368c8fea2689b=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 15 14:19:40 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 15 Oct 2026 14:19:40 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1450684.1666115 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHMJ2-0004mv-0m; Thu, 15 Oct 2026 14:19:40 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1450684.1666115; Thu, 15 Oct 2026 14:19:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHMJ1-0004mo-U5; Thu, 15 Oct 2026 14:19:39 +0000
Received: by outflank-mailman (input) for mailman id 1450684;
 Thu, 15 Oct 2026 14:19:38 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13feeca340008425@swg.vates.tech>)
 id 1xHMJ0-0004mM-TA
 for win-pv-devel@lists.xenproject.org; Thu, 15 Oct 2026 14:19:38 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xHMJ0-00FKt0-4n
 for win-pv-devel@lists.xenproject.org; Thu, 15 Oct 2026 16:19:38 +0200
Received: from [10.42.69.5] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13feeca340008425@swg.vates.tech>)
 id 6ad0e0ea-e002-0a2a0a5209dd-0a2a4505adb4-24
 for <win-pv-devel@lists.xenproject.org>; Thu, 15 Oct 2026 16:19:38 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-c201ff.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13feeca340008425@swg.vates.tech>)
 id 6ad0e0f9-4cb1-0a2a45050019-b9ff1c1295a9-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 15 Oct 2026 16:19:38 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a13feeca340008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 15 Oct 2026 14:19:36 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 8D3C8822FD;
 Thu, 15 Oct 2026 16:19:35 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=6yeTQYH/Sd1xfXrGS2iR07FQ+fgfO3tcP09q5JJPUHE=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=oCe5TtmQ7xd5zfhHFwgKGYvmezdWWCxAiqCX8I0JMqkqTzrFBvpzuZjcLgJbjces1jlk7U65a
 U/wyTm/TO+Ytae0Xn/XcgsGblbn3Nzdy8TkXqbFHsGhzGRATJ0QzKiIygZNTUm3/3Hu1Ejp/Fya
 mHnXBLZSBVCPiMdj/dObvq+nqPIc2qONqrbnTweGB4g21wHkJ/WhqBBDOg4YO7zb+BZPjjMnjFX
 29+aDd9K8FqlkLRJLSBD906TLkDTrNlD9pFd455B2X1pLMuvZG+PUZzfZlfr1/Koj3xD9MvyMA3
 YZSXGt1QmIbqyTCBBPIFy26bp1aoucamPQGNfE/ril5A==
X-Zone-Loop: 39ad45703409ebe7fcadeae8b8d7b6266ca22ac98cda
x-campaign-type: default
x-transaction-id: ceb42438-c081-4d8a-a28a-8b2cf715d3df
x-swg-uid: 01-7965f196-492a-4759-98df-9fdf188f17a6
X-Mailer: Sweego
Message-ID:
 <1792073976.8631fc262581453bbf619ec5b2062170.1a13feeca340008425@vates.tech>
x-swg-bid: 1792073976.8631fc262581453bbf619ec5b2062170.1a13feeca340008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [XENBUS PATCH 1/3] Remove XS_RESTRICT from StoreIgnoreHeaderType
Date: Thu, 15 Oct 2026 16:19:21 +0200
In-Reply-To: <1792073912.8631fc262581453bbf619ec5b2062170.1a13fedd1870008425@vates.tech>
References: <1792073912.8631fc262581453bbf619ec5b2062170.1a13fedd1870008425@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.24b.5f47d003b3afaf64.1a13feec77c.82a9ad5e65561308=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792073975677
X-purgate-ID: tlsNG-c201ff/1792073978-F66B52A1-4EF90B07/0/0
X-purgate-type: clean
X-purgate-size: 943

---=Part.24b.5f47d003b3afaf64.1a13feec77c.82a9ad5e65561308=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

This command is no longer supported and not used by XenBus in the first
place=2E

Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 src/xenbus/store=2Ec | 1 -
 1 file changed, 1 deletion(-)

diff --git a/src/xenbus/store=2Ec b/src/xenbus/store=2Ec
index fe3efcc=2E=2Eb0db5a8 100644
--- a/src/xenbus/store=2Ec
+++ b/src/xenbus/store=2Ec
@@ -459,7 +459,6 @@ StoreIgnoreHeaderType(
     case XS_IS_DOMAIN_INTRODUCED:
     case XS_RESUME:
     case XS_SET_TARGET:
-    case XS_RESTRICT:
         return TRUE;
     default:
         return FALSE;
--=20
2=2E55=2E0=2Ewindows=2E3



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.24b.5f47d003b3afaf64.1a13feec77c.82a9ad5e65561308=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 15 14:19:40 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 15 Oct 2026 14:19:40 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1450685.1666122 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHMJ2-0004nA-9D; Thu, 15 Oct 2026 14:19:40 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1450685.1666122; Thu, 15 Oct 2026 14:19:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHMJ1-0004n0-Vg; Thu, 15 Oct 2026 14:19:39 +0000
Received: by outflank-mailman (input) for mailman id 1450685;
 Thu, 15 Oct 2026 14:19:39 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13feeccfe0008425@swg.vates.tech>)
 id 1xHMJ1-0004mP-1t
 for win-pv-devel@lists.xenproject.org; Thu, 15 Oct 2026 14:19:39 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xHMJ0-00HDO1-D7
 for win-pv-devel@lists.xenproject.org; Thu, 15 Oct 2026 16:19:38 +0200
Received: from [10.42.69.8] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13feeccfe0008425@swg.vates.tech>)
 id 6ad0e0f3-2eae-0a2a0a5409dd-0a2a4508d0bc-18
 for <win-pv-devel@lists.xenproject.org>; Thu, 15 Oct 2026 16:19:38 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-c1860d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13feeccfe0008425@swg.vates.tech>)
 id 6ad0e0f9-f659-0a2a45080019-b9ff1c2293c9-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 15 Oct 2026 16:19:38 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a13feeccfe0008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 15 Oct 2026 14:19:37 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 8A9E3822FD;
 Thu, 15 Oct 2026 16:19:36 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=YwrVsnDWZ0mg8hjqR8GJKg4eFJNbhMHzLQ8Z9ITKd5I=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=nzyWnNkRMco2jVZgCbTmRId8y6pFaXkB5QMacQvFXVrT+8iJUuoivRzW9atyVYnlTfADsvA4r
 qySV0BCq3y4MnILlVNGYaqPubXwkgpRWqj9JvS56rRyiyJ+qxi1diR0ZPGTP/xH8uUKVKB5Knlg
 AyGm0ab1K4RT6CH36fY1IoIppD6G09wTUjk7/FSPUlis0SkIukc4GNIm2gZirWcgif3D36MepOB
 dzNqve8+MelFf+KqYuU5Nna0Ts9R7rgyefFDXOr7ldEy5SG4buv5e7EZbLlbFw1lAUdIPHFQDuB
 7o4YOHCcwETMyMuTlbeVVoj/a3CcIJpj2FgBbMJ1kgpQ==
X-Zone-Loop: ca05da17b5f0b3540a6bf87ce7f8cee7897748756e14
x-campaign-type: default
x-transaction-id: 7579d2cb-f4cb-4150-b6ba-9de658cd48d8
x-swg-uid: 01-e9ec6c95-2b75-432d-82fc-bc12970a9728
X-Mailer: Sweego
Message-ID:
 <1792073977.8631fc262581453bbf619ec5b2062170.1a13feeccfe0008425@vates.tech>
x-swg-bid: 1792073977.8631fc262581453bbf619ec5b2062170.1a13feeccfe0008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [XENBUS PATCH 3/3] xsd_errors structs are now const
Date: Thu, 15 Oct 2026 16:19:23 +0200
In-Reply-To: <20261015141933.1533-1-ngoc-tu.dinh@vates.tech>
References: <1792073912.8631fc262581453bbf619ec5b2062170.1a13fedd1870008425@vates.tech>
 <20261015141933.1533-1-ngoc-tu.dinh@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.24d.633e8522c2556de4.1a13feecb57.ea8f2929b1a266fd=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792073976663
X-purgate-ID: tlsNG-c1860d/1792073978-D775B87B-5E9CDF2A/0/0
X-purgate-type: clean
X-purgate-size: 1144

---=Part.24d.633e8522c2556de4.1a13feecb57.ea8f2929b1a266fd=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Fix the pointer type in StoreCheckResponse=2E

Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 src/xenbus/store=2Ec | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/xenbus/store=2Ec b/src/xenbus/store=2Ec
index b0db5a8=2E=2E6c2ffa5 100644
--- a/src/xenbus/store=2Ec
+++ b/src/xenbus/store=2Ec
@@ -1007,7 +1007,7 @@ StoreCheckResponse(
         for (Index =3D 0;
              Index < sizeof (xsd_errors) / sizeof (xsd_errors[0]);
              Index++) {
-            struct xsd_errors   *Entry =3D &xsd_errors[Index];
+            const struct xsd_errors *Entry =3D &xsd_errors[Index];
=20
             if (strncmp(Error, Entry->errstring, Length) =3D=3D 0) {
                 ERRNO_TO_STATUS(Entry->errnum, status);
--=20
2=2E55=2E0=2Ewindows=2E3



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.24d.633e8522c2556de4.1a13feecb57.ea8f2929b1a266fd=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 15 14:19:40 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 15 Oct 2026 14:19:40 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1450686.1666120 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHMJ2-0004ne-7b; Thu, 15 Oct 2026 14:19:40 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1450686.1666120; Thu, 15 Oct 2026 14:19:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHMJ2-0004nG-12; Thu, 15 Oct 2026 14:19:40 +0000
Received: by outflank-mailman (input) for mailman id 1450686;
 Thu, 15 Oct 2026 14:19:39 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13feece6b0008425@swg.vates.tech>)
 id 1xHMJ0-0004mO-TA
 for win-pv-devel@lists.xenproject.org; Thu, 15 Oct 2026 14:19:39 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xHMJ0-00FKt0-8d
 for win-pv-devel@lists.xenproject.org; Thu, 15 Oct 2026 16:19:38 +0200
Received: from [10.42.69.11] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13feece6b0008425@swg.vates.tech>)
 id 6ad0e0e6-e002-0a2a0a5209dd-0a2a450bdbdc-46
 for <win-pv-devel@lists.xenproject.org>; Thu, 15 Oct 2026 16:19:38 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-42698a.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13feece6b0008425@swg.vates.tech>)
 id 6ad0e0f9-b7e8-0a2a450b0019-b9ff1c228519-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 15 Oct 2026 16:19:38 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a13feece6b0008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 15 Oct 2026 14:19:37 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id C657482B93;
 Thu, 15 Oct 2026 16:19:36 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=gwXSPSeRDJF0/OiGUJ5O4MsIfjIwJl+/7QJ4PB4zrF8=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=EoRd1qW5nYGRdMxqK2iBZb5T/zt5P2XSkubCJUT7GsB0IIXzk/xz+Dcu1RYo5PN9jSEUjkDru
 xej2AcBF/8if0wnnDIlfv1xO4wr3OhhYlrMhNKxnBvTsewmcTPz/w3wy3zCfprEkDkLCryQ/l84
 B41OPG0+GvGFxEZkgt4sYyoqCvpGv2L30ah+Ot+eJOpk06QEh6cpcXSPKelp+N0TtHV8iM35onF
 b8sp0mPiLuX/TwiSwMeonmIxVrpVWXMrwoJXfDeOdPg76mKcS8rY0b/a5FKRLJi65+gp2rNys5W
 Qo39U8W2B6ueODLKFRQVZ86wTBuKu2mPkxBOYBziUDXA==
X-Zone-Loop: 9eb4ad7d74b6c065e7526c02eb37ea4fbb8d4910fb34
x-campaign-type: default
x-transaction-id: 9931760e-dfb1-461a-a416-f76fd5dfdffb
x-swg-uid: 01-b380e809-e261-415d-a9ff-93bb323e9662
X-Mailer: Sweego
Message-ID:
 <1792073977.8631fc262581453bbf619ec5b2062170.1a13feece6b0008425@vates.tech>
x-swg-bid: 1792073977.8631fc262581453bbf619ec5b2062170.1a13feece6b0008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [XENCONS PATCH 1/2] Update Xen headers to RELEASE-4.22.0
Date: Thu, 15 Oct 2026 16:19:24 +0200
In-Reply-To: <20261015141933.1533-1-ngoc-tu.dinh@vates.tech>
References: <1792073912.8631fc262581453bbf619ec5b2062170.1a13fedd1870008425@vates.tech>
 <20261015141933.1533-1-ngoc-tu.dinh@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.24e.43c3a2808bfa88a6.1a13feecc57.b649103aa80629fb=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792073976920
X-purgate-ID: tlsNG-42698a/1792073978-AA0C5A4A-22E63941/0/0
X-purgate-type: clean
X-purgate-size: 85935

---=Part.24e.43c3a2808bfa88a6.1a13feecc57.b649103aa80629fb=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Add the missing get_xen_headers=2Epy=2E

Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 get_xen_headers=2Epy                       |  81 +++++++
 include/xen/public/arch-x86/xen-x86_32=2Eh |  79 ++++---
 include/xen/public/arch-x86/xen-x86_64=2Eh | 124 +++++++----
 include/xen/public/arch-x86/xen=2Eh        | 117 +++++++---
 include/xen/public/errno=2Eh               |  16 +-
 include/xen/public/grant_table=2Eh         |  57 ++---
 include/xen/public/io/console=2Eh          |  37 ++--
 include/xen/public/io/ring=2Eh             | 266 ++++++++++++++++++----
 include/xen/public/io/xenbus=2Eh           |  19 +-
 include/xen/public/trace=2Eh               |  33 +--
 include/xen/public/xen-compat=2Eh          |  23 +-
 include/xen/public/xen=2Eh                 | 267 ++++++++++++++---------
 include/xen/xen/errno=2Eh                  |   8 +-
 13 files changed, 745 insertions(+), 382 deletions(-)
 create mode 100644 get_xen_headers=2Epy

diff --git a/get_xen_headers=2Epy b/get_xen_headers=2Epy
new file mode 100644
index 0000000=2E=2E6202ae0
--- /dev/null
+++ b/get_xen_headers=2Epy
@@ -0,0 +1,81 @@
+#!python
+
+import os, sys
+import shutil
+import subprocess
+import re
+
+def shell(command, dir =3D '=2E'):
+    print("in '%s' execute '%s'" % (dir, ' '=2Ejoin(command)))
+    sys=2Estdout=2Eflush()
+
+    sub =3D subprocess=2EPopen(' '=2Ejoin(command), cwd=3Ddir,
+                           stdout=3Dsubprocess=2EPIPE,
+                           stderr=3Dsubprocess=2ESTDOUT)
+
+    for line in sub=2Estdout:
+        print(line=2Edecode(sys=2Egetdefaultencoding())=2Erstrip())
+
+    sub=2Ewait()
+
+    return sub=2Ereturncode
+
+def get_repo(url, working):
+    shell(['git', 'clone', '--no-checkout', url, working])
+
+def get_branch(tag, working):
+    shell(['git', 'checkout', '-b', 'tmp', tag], working)
+
+def put_branch(working):
+    shell(['git', 'checkout', 'master'], working)
+    shell(['git', 'branch', '-d', 'tmp'], working)
+
+def copy_file(working, dir, name):
+    try:
+        os=2Emakedirs('include\\xen\\%s' % dir)
+    except OSError:
+        None
+
+    src =3D open('%s\\xen\\include\\%s\\%s' % (working, dir, name), 'r')
+    dst =3D open('include\\xen\\%s\\%s' % (dir, name), 'w', newline=3D'\n=
')
+
+    print(name)
+
+    for line in src:
+        line =3D re=2Esub(' unsigned long', ' ULONG_PTR', line)
+        line =3D re=2Esub('\(unsigned long', '(ULONG_PTR', line)
+        line =3D re=2Esub(' long', ' LONG_PTR', line)
+        line =3D re=2Esub('\(long', '(LONG_PTR', line)
+        dst=2Ewrite(line)
+
+    dst=2Eclose()
+    src=2Eclose()
+
+if __name__ =3D=3D '__main__':
+    tag =3D sys=2Eargv[1]
+    working =3D sys=2Eargv[2]
+
+    get_repo('git://xenbits=2Exen=2Eorg/xen=2Egit', working)
+    get_branch(tag, working)
+
+    shell(['git', 'rm', '-r', '-f', 'xen'], 'include')
+
+    copy_file(working, 'public', 'xen=2Eh')
+    copy_file(working, 'public', 'xen-compat=2Eh')
+    copy_file(working, 'public', 'trace=2Eh')
+    copy_file(working, 'public', 'grant_table=2Eh')
+    copy_file(working, 'public', 'errno=2Eh')
+
+    copy_file(working, 'xen', 'errno=2Eh')
+
+    copy_file(working, 'public\\arch-x86', 'xen=2Eh')
+    copy_file(working, 'public\\arch-x86', 'xen-x86_32=2Eh')
+    copy_file(working, 'public\\arch-x86', 'xen-x86_64=2Eh')
+
+    copy_file(working, 'public\\io', 'ring=2Eh')
+    copy_file(working, 'public\\io', 'console=2Eh')
+    copy_file(working, 'public\\io', 'xenbus=2Eh')
+
+    put_branch(working)
+
+    shell(['git', 'add', 'xen'], 'include')
diff --git a/include/xen/public/arch-x86/xen-x86_32=2Eh b/include/xen/publ=
ic/arch-x86/xen-x86_32=2Eh
index d23340b=2E=2E4ee19cc 100644
--- a/include/xen/public/arch-x86/xen-x86_32=2Eh
+++ b/include/xen/public/arch-x86/xen-x86_32=2Eh
@@ -1,26 +1,9 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * xen-x86_32=2Eh
  *
  * Guest OS interface to x86 32-bit Xen=2E
  *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
  * Copyright (c) 2004-2007, K A Fraser
  */
=20
@@ -29,7 +12,7 @@
=20
 /*
  * Hypercall interface:
- *  Input:  %ebx, %ecx, %edx, %esi, %edi, %ebp (arguments 1-6)
+ *  Input:  %ebx, %ecx, %edx, %esi, %edi (arguments 1-5)
  *  Output: %eax
  * Access is via hypercall page (set up by guest loader or via a Xen MSR)=
:
  *  call hypercall_page + hypercall-number * 32
@@ -107,32 +90,66 @@
 #define XEN_GUEST_HANDLE_64(name) __XEN_GUEST_HANDLE_64(name)
 #endif
=20
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
+
+#if defined(XEN_GENERATING_COMPAT_HEADERS)
+/* nothing */
+#elif defined(__XEN__) || defined(__XEN_TOOLS__)
+/* Anonymous unions include all permissible names (e=2Eg=2E, al/ah/ax/eax=
)=2E */
+#define __DECL_REG_LO8(which) union { \
+    uint32_t e ## which ## x; \
+    uint16_t which ## x; \
+    struct { \
+        uint8_t which ## l; \
+        uint8_t which ## h; \
+    }; \
+}
+#define __DECL_REG_LO16(name) union { \
+    uint32_t e ## name, _e ## name; \
+    uint16_t name; \
+}
+#else
+/* Other sources must always use the proper 32-bit name (e=2Eg=2E, eax)=
=2E */
+#define __DECL_REG_LO8(which) uint32_t e ## which ## x
+#define __DECL_REG_LO16(name) uint32_t e ## name
+#endif
+
+#ifdef __XEN__
+#define cpu_user_regs guest_user_regs
+#endif
=20
 struct cpu_user_regs {
-    uint32_t ebx;
-    uint32_t ecx;
-    uint32_t edx;
-    uint32_t esi;
-    uint32_t edi;
-    uint32_t ebp;
-    uint32_t eax;
+    __DECL_REG_LO8(b);
+    __DECL_REG_LO8(c);
+    __DECL_REG_LO8(d);
+    __DECL_REG_LO16(si);
+    __DECL_REG_LO16(di);
+    __DECL_REG_LO16(bp);
+    __DECL_REG_LO8(a);
     uint16_t error_code;    /* private */
     uint16_t entry_vector;  /* private */
-    uint32_t eip;
+    __DECL_REG_LO16(ip);
     uint16_t cs;
     uint8_t  saved_upcall_mask;
     uint8_t  _pad0;
-    uint32_t eflags;        /* eflags=2EIF =3D=3D !saved_upcall_mask */
-    uint32_t esp;
+    __DECL_REG_LO16(flags); /* eflags=2EIF =3D=3D !saved_upcall_mask */
+    __DECL_REG_LO16(sp);
     uint16_t ss, _pad1;
     uint16_t es, _pad2;
     uint16_t ds, _pad3;
     uint16_t fs, _pad4;
     uint16_t gs, _pad5;
 };
+
+#ifdef __XEN__
+#undef cpu_user_regs
+#else
 typedef struct cpu_user_regs cpu_user_regs_t;
 DEFINE_XEN_GUEST_HANDLE(cpu_user_regs_t);
+#endif
+
+#undef __DECL_REG_LO8
+#undef __DECL_REG_LO16
=20
 /*
  * Page-directory addresses above 4GB do not fit into architectural %cr3=
=2E
@@ -154,7 +171,7 @@ struct xen_callback {
 };
 typedef struct xen_callback xen_callback_t;
=20
-#endif /* !__ASSEMBLY__ */
+#endif /* !__ASSEMBLER__ */
=20
 #endif /* __XEN_PUBLIC_ARCH_X86_XEN_X86_32_H__ */
=20
diff --git a/include/xen/public/arch-x86/xen-x86_64=2Eh b/include/xen/publ=
ic/arch-x86/xen-x86_64=2Eh
index 2f53f69=2E=2E4ab9a99 100644
--- a/include/xen/public/arch-x86/xen-x86_64=2Eh
+++ b/include/xen/public/arch-x86/xen-x86_64=2Eh
@@ -1,26 +1,9 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * xen-x86_64=2Eh
  *
  * Guest OS interface to x86 64-bit Xen=2E
  *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
  * Copyright (c) 2004-2006, K A Fraser
  */
=20
@@ -29,7 +12,7 @@
=20
 /*
  * Hypercall interface:
- *  Input:  %rdi, %rsi, %rdx, %r10, %r8, %r9 (arguments 1-6)
+ *  Input:  %rdi, %rsi, %rdx, %r10, %r8 (arguments 1-5)
  *  Output: %rax
  * Access is via hypercall page (set up by guest loader or via a Xen MSR)=
:
  *  call hypercall_page + hypercall-number * 32
@@ -44,11 +27,11 @@
  */
=20
 #define FLAT_RING3_CS32 0xe023  /* GDT index 260 */
-#define FLAT_RING3_CS64 0xe033  /* GDT index 261 */
-#define FLAT_RING3_DS32 0xe02b  /* GDT index 262 */
+#define FLAT_RING3_CS64 0xe033  /* GDT index 262 */
+#define FLAT_RING3_DS32 0xe02b  /* GDT index 261 */
 #define FLAT_RING3_DS64 0x0000  /* NULL selector */
-#define FLAT_RING3_SS32 0xe02b  /* GDT index 262 */
-#define FLAT_RING3_SS64 0xe02b  /* GDT index 262 */
+#define FLAT_RING3_SS32 0xe02b  /* GDT index 261 */
+#define FLAT_RING3_SS64 0xe02b  /* GDT index 261 */
=20
 #define FLAT_KERNEL_DS64 FLAT_RING3_DS64
 #define FLAT_KERNEL_DS32 FLAT_RING3_DS32
@@ -120,9 +103,8 @@
 /* Guest exited in SYSCALL context? Return to guest with SYSRET? */
 #define _VGCF_in_syscall 8
 #define VGCF_in_syscall  (1<<_VGCF_in_syscall)
-#define VGCF_IN_SYSCALL  VGCF_in_syscall
=20
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
=20
 struct iret_context {
     /* Top of stack (%rsp at point of hypercall)=2E */
@@ -130,7 +112,35 @@ struct iret_context {
     /* Bottom of iret stack frame=2E */
 };
=20
-#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
+#if defined(__XEN__) || defined(__XEN_TOOLS__)
+/* Anonymous unions include all permissible names (e=2Eg=2E, al/ah/ax/eax=
/rax)=2E */
+#define __DECL_REG_LOHI(which) union { \
+    uint64_t r ## which ## x; \
+    uint32_t e ## which ## x; \
+    uint16_t which ## x; \
+    struct { \
+        uint8_t which ## l; \
+        uint8_t which ## h; \
+    }; \
+}
+#define __DECL_REG_LO8(name) union { \
+    uint64_t r ## name; \
+    uint32_t e ## name; \
+    uint16_t name; \
+    uint8_t name ## l; \
+}
+#define __DECL_REG_LO16(name) union { \
+    uint64_t r ## name; \
+    uint32_t e ## name; \
+    uint16_t name; \
+}
+#define __DECL_REG_HI(num) union { \
+    uint64_t r ## num; \
+    uint32_t r ## num ## d; \
+    uint16_t r ## num ## w; \
+    uint8_t r ## num ## b; \
+}
+#elif defined(__GNUC__) && !defined(__STRICT_ANSI__)
 /* Anonymous union includes both 32- and 64-bit names (e=2Eg=2E, eax/rax)=
=2E */
 #define __DECL_REG(name) union { \
     uint64_t r ## name, e ## name; \
@@ -141,40 +151,60 @@ struct iret_context {
 #define __DECL_REG(name) uint64_t r ## name
 #endif
=20
+#ifndef __DECL_REG_LOHI
+#define __DECL_REG_LOHI(name) __DECL_REG(name ## x)
+#define __DECL_REG_LO8        __DECL_REG
+#define __DECL_REG_LO16       __DECL_REG
+#define __DECL_REG_HI(num)    uint64_t r ## num
+#endif
+
+#ifdef __XEN__
+#define cpu_user_regs guest_user_regs
+#endif
+
 struct cpu_user_regs {
-    uint64_t r15;
-    uint64_t r14;
-    uint64_t r13;
-    uint64_t r12;
-    __DECL_REG(bp);
-    __DECL_REG(bx);
-    uint64_t r11;
-    uint64_t r10;
-    uint64_t r9;
-    uint64_t r8;
-    __DECL_REG(ax);
-    __DECL_REG(cx);
-    __DECL_REG(dx);
-    __DECL_REG(si);
-    __DECL_REG(di);
+    __DECL_REG_HI(15);
+    __DECL_REG_HI(14);
+    __DECL_REG_HI(13);
+    __DECL_REG_HI(12);
+    __DECL_REG_LO8(bp);
+    __DECL_REG_LOHI(b);
+    __DECL_REG_HI(11);
+    __DECL_REG_HI(10);
+    __DECL_REG_HI(9);
+    __DECL_REG_HI(8);
+    __DECL_REG_LOHI(a);
+    __DECL_REG_LOHI(c);
+    __DECL_REG_LOHI(d);
+    __DECL_REG_LO8(si);
+    __DECL_REG_LO8(di);
     uint32_t error_code;    /* private */
     uint32_t entry_vector;  /* private */
-    __DECL_REG(ip);
+    __DECL_REG_LO16(ip);
     uint16_t cs, _pad0[1];
     uint8_t  saved_upcall_mask;
     uint8_t  _pad1[3];
-    __DECL_REG(flags);      /* rflags=2EIF =3D=3D !saved_upcall_mask */
-    __DECL_REG(sp);
+    __DECL_REG_LO16(flags); /* rflags=2EIF =3D=3D !saved_upcall_mask */
+    __DECL_REG_LO8(sp);
     uint16_t ss, _pad2[3];
     uint16_t es, _pad3[3];
     uint16_t ds, _pad4[3];
-    uint16_t fs, _pad5[3]; /* Non-zero =3D> takes precedence over fs_base=
=2E     */
-    uint16_t gs, _pad6[3]; /* Non-zero =3D> takes precedence over gs_base=
_usr=2E */
+    uint16_t fs, _pad5[3];
+    uint16_t gs, _pad6[3];
 };
+
+#ifdef __XEN__
+#undef cpu_user_regs
+#else
 typedef struct cpu_user_regs cpu_user_regs_t;
 DEFINE_XEN_GUEST_HANDLE(cpu_user_regs_t);
+#endif
=20
 #undef __DECL_REG
+#undef __DECL_REG_LOHI
+#undef __DECL_REG_LO8
+#undef __DECL_REG_LO16
+#undef __DECL_REG_HI
=20
 #define xen_pfn_to_cr3(pfn) ((ULONG_PTR)(pfn) << 12)
 #define xen_cr3_to_pfn(cr3) ((ULONG_PTR)(cr3) >> 12)
@@ -187,7 +217,7 @@ typedef struct arch_vcpu_info arch_vcpu_info_t;
=20
 typedef ULONG_PTR xen_callback_t;
=20
-#endif /* !__ASSEMBLY__ */
+#endif /* !__ASSEMBLER__ */
=20
 #endif /* __XEN_PUBLIC_ARCH_X86_XEN_X86_64_H__ */
=20
diff --git a/include/xen/public/arch-x86/xen=2Eh b/include/xen/public/arch=
-x86/xen=2Eh
index 05db77f=2E=2E1ec1a20 100644
--- a/include/xen/public/arch-x86/xen=2Eh
+++ b/include/xen/public/arch-x86/xen=2Eh
@@ -1,31 +1,12 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * arch-x86/xen=2Eh
  *
  * Guest OS interface to x86 Xen=2E
  *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
  * Copyright (c) 2004-2006, K A Fraser
  */
=20
-#include "=2E=2E/xen=2Eh"
-
 #ifndef __XEN_PUBLIC_ARCH_X86_XEN_H__
 #define __XEN_PUBLIC_ARCH_X86_XEN_H__
=20
@@ -53,18 +34,29 @@
 #define __XEN_GUEST_HANDLE(name)        __guest_handle_ ## name
 #define XEN_GUEST_HANDLE(name)          __XEN_GUEST_HANDLE(name)
 #define XEN_GUEST_HANDLE_PARAM(name)    XEN_GUEST_HANDLE(name)
-#define set_xen_guest_handle_raw(hnd, val)  do { (hnd)=2Ep =3D val; } whi=
le (0)
+#define set_xen_guest_handle_raw(hnd, val)  do { (hnd)=2Ep =3D (val); } w=
hile (0)
 #define set_xen_guest_handle(hnd, val) set_xen_guest_handle_raw(hnd, val)
=20
 #if defined(__i386__)
+# ifdef __XEN__
+__DeFiNe__ __DECL_REG_LO8(which) uint32_t e ## which ## x
+__DeFiNe__ __DECL_REG_LO16(name) union { uint32_t e ## name; }
+# endif
 #include "xen-x86_32=2Eh"
+# ifdef __XEN__
+__UnDeF__ __DECL_REG_LO8
+__UnDeF__ __DECL_REG_LO16
+__DeFiNe__ __DECL_REG_LO8(which) e ## which ## x
+__DeFiNe__ __DECL_REG_LO16(name) e ## name
+# endif
 #elif defined(__x86_64__)
 #include "xen-x86_64=2Eh"
 #endif
=20
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
 typedef ULONG_PTR xen_pfn_t;
 #define PRI_xen_pfn "lx"
+#define PRIu_xen_pfn "lu"
 #endif
=20
 #define XEN_HAVE_PV_GUEST_ENTRY 1
@@ -105,7 +97,7 @@ typedef ULONG_PTR xen_pfn_t;
 /* Maximum number of virtual CPUs in legacy multi-processor guests=2E */
 #define XEN_LEGACY_MAX_VCPUS 32
=20
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
=20
 typedef ULONG_PTR xen_ulong_t;
 #define PRI_xen_ulong "lx"
@@ -132,6 +124,12 @@ typedef ULONG_PTR xen_ulong_t;
  *  Level =3D=3D 1: Kernel may enter
  *  Level =3D=3D 2: Kernel may enter
  *  Level =3D=3D 3: Everyone may enter
+ *
+ * Note: For compatibility with kernels not setting up exception handlers
+ *       early enough, Xen will avoid trying to inject #GP (and hence cra=
sh
+ *       the domain) when an RDMSR would require this, but no handler was
+ *       set yet=2E The precise conditions are implementation specific, a=
nd
+ *       new code may not rely on such behavior anyway=2E
  */
 #define TI_GET_DPL(_ti)      ((_ti)->flags & 3)
 #define TI_GET_IF(_ti)       ((_ti)->flags & 4)
@@ -152,20 +150,16 @@ typedef uint64_t tsc_timestamp_t; /* RDTSC timestamp=
 */
  * The following is all CPU context=2E Note that the fpu_ctxt block is fi=
lled
  * in by FXSAVE if the CPU has feature FXSR; otherwise FSAVE is used=2E
  *
- * Also note that when calling DOMCTL_setvcpucontext and VCPU_initialise
- * for HVM and PVH guests, not all information in this structure is updat=
ed:
- *
- * - For HVM guests, the structures read include: fpu_ctxt (if
- * VGCT_I387_VALID is set), flags, user_regs, debugreg[*]
+ * Also note that when calling DOMCTL_setvcpucontext for HVM guests, not =
all
+ * information in this structure is updated, the fields read include: fpu=
_ctxt
+ * (if VGCT_I387_VALID is set), flags, user_regs and debugreg[*]=2E
  *
- * - PVH guests are the same as HVM guests, but additionally use ctrlreg[=
3] to
- * set cr3=2E All other fields not used should be set to 0=2E
+ * Note: VCPUOP_initialise for HVM guests is non-symetric with
+ * DOMCTL_setvcpucontext, and uses struct vcpu_hvm_context from hvm/hvm_v=
cpu=2Eh
  */
 struct vcpu_guest_context {
     /* FPU registers come first so they can be aligned for FXSAVE/FXRSTOR=
=2E */
     struct { char x[512]; } fpu_ctxt;       /* User-level FPU registers  =
   */
-#define VGCF_I387_VALID                (1<<0)
-#define VGCF_IN_KERNEL                 (1<<2)
 #define _VGCF_i387_valid               0
 #define VGCF_i387_valid                (1<<_VGCF_i387_valid)
 #define _VGCF_in_kernel                2
@@ -177,7 +171,18 @@ struct vcpu_guest_context {
 #define _VGCF_online                   5
 #define VGCF_online                    (1<<_VGCF_online)
     ULONG_PTR flags;                    /* VGCF_* flags                 *=
/
+
+    /*
+     * Outside of Xen, regs type stays named cpu_user_regs for backwards
+     * compatibility=2E  Inside Xen, the type called cpu_user_regs is dif=
ferent,
+     * and the public API type is renamed to guest_user_regs=2E
+     */
+#ifdef __XEN__
+    struct guest_user_regs user_regs;       /* User-level CPU registers  =
   */
+#else
     struct cpu_user_regs user_regs;         /* User-level CPU registers  =
   */
+#endif
+
     struct trap_info trap_ctxt[256];        /* Virtual IDT               =
   */
     ULONG_PTR ldt_base, ldt_ents;       /* LDT (linear address, # ents) *=
/
     ULONG_PTR gdt_frames[16], gdt_ents; /* GDT (machine frames, # ents) *=
/
@@ -283,17 +288,52 @@ struct xen_arch_domainconfig {
 #define XEN_X86_EMU_IOMMU           (1U<<_XEN_X86_EMU_IOMMU)
 #define _XEN_X86_EMU_PIT            8
 #define XEN_X86_EMU_PIT             (1U<<_XEN_X86_EMU_PIT)
+#define _XEN_X86_EMU_USE_PIRQ       9
+#define XEN_X86_EMU_USE_PIRQ        (1U<<_XEN_X86_EMU_USE_PIRQ)
+#define _XEN_X86_EMU_VPCI           10
+#define XEN_X86_EMU_VPCI            (1U<<_XEN_X86_EMU_VPCI)
=20
 #define XEN_X86_EMU_ALL             (XEN_X86_EMU_LAPIC | XEN_X86_EMU_HPET=
 |  \
                                      XEN_X86_EMU_PM | XEN_X86_EMU_RTC |  =
    \
                                      XEN_X86_EMU_IOAPIC | XEN_X86_EMU_PIC=
 |  \
                                      XEN_X86_EMU_VGA | XEN_X86_EMU_IOMMU =
|   \
-                                     XEN_X86_EMU_PIT)
+                                     XEN_X86_EMU_PIT | XEN_X86_EMU_USE_PI=
RQ |\
+                                     XEN_X86_EMU_VPCI)
     uint32_t emulation_flags;
+
+/*
+ * Select whether to use a relaxed behavior for accesses to MSRs not expl=
icitly
+ * handled by Xen instead of injecting a #GP to the guest=2E Note this op=
tion
+ * doesn't allow the guest to read or write to the underlying MSR=2E
+ */
+#define XEN_X86_MSR_RELAXED (1u << 0)
+    uint32_t misc_flags;
 };
+
+/* Max  XEN_X86_* constant=2E Used for ABI checking=2E */
+#define XEN_X86_MISC_FLAGS_MAX XEN_X86_MSR_RELAXED
+
 #endif
=20
-#endif /* !__ASSEMBLY__ */
+/*
+ * Representations of architectural CPUID and MSR information=2E  Used as=
 the
+ * serialised version of Xen's internal representation=2E
+ */
+typedef struct xen_cpuid_leaf {
+#define XEN_CPUID_NO_SUBLEAF 0xffffffffu
+    uint32_t leaf, subleaf;
+    uint32_t a, b, c, d;
+} xen_cpuid_leaf_t;
+DEFINE_XEN_GUEST_HANDLE(xen_cpuid_leaf_t);
+
+typedef struct xen_msr_entry {
+    uint32_t idx;
+    uint32_t flags; /* Reserved MBZ=2E */
+    uint64_t val;
+} xen_msr_entry_t;
+DEFINE_XEN_GUEST_HANDLE(xen_msr_entry_t);
+
+#endif /* !__ASSEMBLER__ */
=20
 /*
  * ` enum neg_errnoval
@@ -317,7 +357,7 @@ struct xen_arch_domainconfig {
  * Prefix forces emulation of some non-trapping instructions=2E
  * Currently only CPUID=2E
  */
-#ifdef __ASSEMBLY__
+#ifdef __ASSEMBLER__
 #define XEN_EMULATE_PREFIX =2Ebyte 0x0f,0x0b,0x78,0x65,0x6e ;
 #define XEN_CPUID          XEN_EMULATE_PREFIX cpuid
 #else
@@ -325,6 +365,13 @@ struct xen_arch_domainconfig {
 #define XEN_CPUID          XEN_EMULATE_PREFIX "cpuid"
 #endif
=20
+/*
+ * Debug console IO port, also called "port E9 hack"=2E Each character wr=
itten
+ * to this IO port will be printed on the hypervisor console, subject to =
log
+ * level restrictions=2E
+ */
+#define XEN_HVM_DEBUGCONS_IOPORT 0xe9
+
 #endif /* __XEN_PUBLIC_ARCH_X86_XEN_H__ */
=20
 /*
diff --git a/include/xen/public/errno=2Eh b/include/xen/public/errno=2Eh
index e440237=2E=2Edf6aa53 100644
--- a/include/xen/public/errno=2Eh
+++ b/include/xen/public/errno=2Eh
@@ -1,3 +1,5 @@
+/* SPDX-License-Identifier: MIT */
+
 /*
  * There are two expected ways of including this header=2E
  *
@@ -15,6 +17,7 @@
  * will unilaterally #undef XEN_ERRNO()=2E
  */
=20
+/* SAF-8-safe inclusion procedure left to caller */
 #ifndef XEN_ERRNO
=20
 /*
@@ -27,16 +30,16 @@
=20
 #define XEN_ERRNO_DEFAULT_INCLUDE
=20
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
=20
-#define XEN_ERRNO(name, value) XEN_##name =3D value,
+#define XEN_ERRNO(name, value) XEN_##name =3D (value),
 enum xen_errno {
=20
 #elif __XEN_INTERFACE_VERSION__ < 0x00040700
=20
 #define XEN_ERRNO(name, value) =2Eequ XEN_##name, value
=20
-#endif /* __ASSEMBLY__ */
+#endif /* __ASSEMBLER__ */
=20
 #endif /* __XEN_PUBLIC_ERRNO_H__ */
 #endif /* !XEN_ERRNO */
@@ -78,6 +81,7 @@ XEN_ERRNO(EBUSY,	16)	/* Device or resource busy */
 XEN_ERRNO(EEXIST,	17)	/* File exists */
 XEN_ERRNO(EXDEV,	18)	/* Cross-device link */
 XEN_ERRNO(ENODEV,	19)	/* No such device */
+XEN_ERRNO(ENOTDIR,	20)	/* Not a directory */
 XEN_ERRNO(EISDIR,	21)	/* Is a directory */
 XEN_ERRNO(EINVAL,	22)	/* Invalid argument */
 XEN_ERRNO(ENFILE,	23)	/* File table overflow */
@@ -91,8 +95,8 @@ XEN_ERRNO(EDEADLK,	35)	/* Resource deadlock would occur =
*/
 XEN_ERRNO(EDEADLOCK,	35)	/* Resource deadlock would occur=2E Aliases EDEA=
DLK */
 XEN_ERRNO(ENAMETOOLONG,	36)	/* File name too LONG_PTR */
 XEN_ERRNO(ENOLCK,	37)	/* No record locks available */
-XEN_ERRNO(ENOTEMPTY,	39)	/* Directory not empty */
 XEN_ERRNO(ENOSYS,	38)	/* Function not implemented */
+XEN_ERRNO(ENOTEMPTY,	39)	/* Directory not empty */
 XEN_ERRNO(ENODATA,	61)	/* No data available */
 XEN_ERRNO(ETIME,	62)	/* Timer expired */
 XEN_ERRNO(EBADMSG,	74)	/* Not a data message */
@@ -102,6 +106,7 @@ XEN_ERRNO(EILSEQ,	84)	/* Illegal byte sequence */
 XEN_ERRNO(ERESTART,	85)	/* Interrupted system call should be restarted */
 #endif
 XEN_ERRNO(ENOTSOCK,	88)	/* Socket operation on non-socket */
+XEN_ERRNO(EMSGSIZE,	90)	/* Message too large=2E */
 XEN_ERRNO(EOPNOTSUPP,	95)	/* Operation not supported on transport endpoin=
t */
 XEN_ERRNO(EADDRINUSE,	98)	/* Address already in use */
 XEN_ERRNO(EADDRNOTAVAIL, 99)	/* Cannot assign requested address */
@@ -109,6 +114,7 @@ XEN_ERRNO(ENOBUFS,	105)	/* No buffer space available *=
/
 XEN_ERRNO(EISCONN,	106)	/* Transport endpoint is already connected */
 XEN_ERRNO(ENOTCONN,	107)	/* Transport endpoint is not connected */
 XEN_ERRNO(ETIMEDOUT,	110)	/* Connection timed out */
+XEN_ERRNO(ECONNREFUSED,	111)	/* Connection refused */
=20
 #undef XEN_ERRNO
 #endif /* XEN_ERRNO */
@@ -117,7 +123,7 @@ XEN_ERRNO(ETIMEDOUT,	110)	/* Connection timed out */
 /* Clean up from a default include=2E  Close the enum (for C)=2E */
 #ifdef XEN_ERRNO_DEFAULT_INCLUDE
 #undef XEN_ERRNO_DEFAULT_INCLUDE
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
 };
 #endif
=20
diff --git a/include/xen/public/grant_table=2Eh b/include/xen/public/grant=
_table=2Eh
index b68ffdd=2E=2Ecdde816 100644
--- a/include/xen/public/grant_table=2Eh
+++ b/include/xen/public/grant_table=2Eh
@@ -1,27 +1,10 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * grant_table=2Eh
  *
  * Interface for granting foreign access to page frames, and receiving
  * page-ownership transfers=2E
  *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
  * Copyright (c) 2004, K A Fraser
  */
=20
@@ -121,8 +104,9 @@ typedef uint32_t grant_ref_t;
  */
=20
 /*
- * Version 1 of the grant table entry structure is maintained purely
- * for backwards compatibility=2E  New guests should use version 2=2E
+ * Version 1 of the grant table entry structure is maintained largely for
+ * backwards compatibility=2E  New guests are recommended to support usin=
g
+ * version 2 to overcome version 1 limitations, but to default to version=
 1=2E
  */
 #if __XEN_INTERFACE_VERSION__ < 0x0003020a
 #define grant_entry_v1 grant_entry
@@ -166,11 +150,13 @@ typedef struct grant_entry_v1 grant_entry_v1_t;
 #define GTF_type_mask       (3U<<0)
=20
 /*
- * Subflags for GTF_permit_access=2E
+ * Subflags for GTF_permit_access and GTF_transitive=2E
  *  GTF_readonly: Restrict @domid to read-only mappings and accesses=2E [=
GST]
  *  GTF_reading: Grant entry is currently mapped for reading by @domid=2E=
 [XEN]
  *  GTF_writing: Grant entry is currently mapped for writing by @domid=2E=
 [XEN]
- *  GTF_PAT, GTF_PWT, GTF_PCD: (x86) cache attribute flags for the grant =
[GST]
+ * Further subflags for GTF_permit_access only=2E
+ *  GTF_PAT, GTF_PWT, GTF_PCD: (x86) cache attribute flags to be used for
+ *                             mappings of the grant [GST]
  *  GTF_sub_page: Grant access to only a subrange of the page=2E  @domid
  *                will only be allowed to copy from the grant, and not
  *                map it=2E [GST]
@@ -411,12 +397,13 @@ typedef struct gnttab_dump_table gnttab_dump_table_t=
;
 DEFINE_XEN_GUEST_HANDLE(gnttab_dump_table_t);
=20
 /*
- * GNTTABOP_transfer_grant_ref: Transfer <frame> to a foreign domain=2E T=
he
- * foreign domain has previously registered its interest in the transfer =
via
- * <domid, ref>=2E
+ * GNTTABOP_transfer: Transfer <frame> to a foreign domain=2E The foreign=
 domain
+ * has previously registered its interest in the transfer via <domid, ref=
>=2E
  *
  * Note that, even if the transfer fails, the specified page no LONG_PTRe=
r belongs
  * to the calling domain *unless* the error is GNTST_bad_page=2E
+ *
+ * Note further that only PV guests can use this operation=2E
  */
 struct gnttab_transfer {
     /* IN parameters=2E */
@@ -514,10 +501,9 @@ DEFINE_XEN_GUEST_HANDLE(gnttab_unmap_and_replace_t);
 #if __XEN_INTERFACE_VERSION__ >=3D 0x0003020a
 /*
  * GNTTABOP_set_version: Request a particular version of the grant
- * table shared table structure=2E  This operation can only be performed
- * once in any given domain=2E  It must be performed before any grants
- * are activated; otherwise, the domain will be stuck with version 1=2E
- * The only defined versions are 1 and 2=2E
+ * table shared table structure=2E  This operation may be used to toggle
+ * between different versions, but must be performed while no grants
+ * are active=2E  The only defined versions are 1 and 2=2E
  */
 struct gnttab_set_version {
     /* IN/OUT parameters */
@@ -588,9 +574,9 @@ struct gnttab_cache_flush {
     } a;
     uint16_t offset; /* offset from start of grant */
     uint16_t length; /* size within the grant */
-#define GNTTAB_CACHE_CLEAN          (1<<0)
-#define GNTTAB_CACHE_INVAL          (1<<1)
-#define GNTTAB_CACHE_SOURCE_GREF    (1<<31)
+#define GNTTAB_CACHE_CLEAN          (1u<<0)
+#define GNTTAB_CACHE_INVAL          (1u<<1)
+#define GNTTAB_CACHE_SOURCE_GREF    (1u<<31)
     uint32_t op;
 };
 typedef struct gnttab_cache_flush gnttab_cache_flush_t;
@@ -626,9 +612,6 @@ DEFINE_XEN_GUEST_HANDLE(gnttab_cache_flush_t);
 #define _GNTMAP_contains_pte    (4)
 #define GNTMAP_contains_pte     (1<<_GNTMAP_contains_pte)
=20
-#define _GNTMAP_can_fail        (5)
-#define GNTMAP_can_fail         (1<<_GNTMAP_can_fail)
-
 /*
  * Bits to be placed in guest kernel available PTE bits (architecture
  * dependent; only supported when XENFEAT_gnttab_map_avail_bits is set)=
=2E
@@ -653,6 +636,7 @@ DEFINE_XEN_GUEST_HANDLE(gnttab_cache_flush_t);
 #define GNTST_bad_copy_arg    (-10) /* copy arguments cross page boundary=
=2E   */
 #define GNTST_address_too_big (-11) /* transfer page address too large=2E=
      */
 #define GNTST_eagain          (-12) /* Operation not done; try again=2E  =
      */
+#define GNTST_no_space        (-13) /* Out of space (handles etc)=2E     =
      */
 /* ` } */
=20
 #define GNTTABOP_error_msgs {                   \
@@ -668,7 +652,8 @@ DEFINE_XEN_GUEST_HANDLE(gnttab_cache_flush_t);
     "bad page",                                 \
     "copy arguments cross page boundary",       \
     "page address size too large",              \
-    "operation not done; try again"             \
+    "operation not done; try again",            \
+    "out of space",                             \
 }
=20
 #endif /* __XEN_PUBLIC_GRANT_TABLE_H__ */
diff --git a/include/xen/public/io/console=2Eh b/include/xen/public/io/con=
sole=2Eh
index 6496018=2E=2Eb9ebfaf 100644
--- a/include/xen/public/io/console=2Eh
+++ b/include/xen/public/io/console=2Eh
@@ -1,26 +1,9 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * console=2Eh
  *
  * Console I/O interface for Xen guest OSes=2E
  *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
  * Copyright (c) 2005, Keir Fraser
  */
=20
@@ -36,8 +19,26 @@ struct xencons_interface {
     char out[2048];
     XENCONS_RING_IDX in_cons, in_prod;
     XENCONS_RING_IDX out_cons, out_prod;
+/*
+ * Flag values signaling from backend to frontend whether the console is
+ * connected=2E  i=2Ee=2E Whether it will be serviced and emptied=2E
+ *
+ * The flag starts as disconnected=2E
+ */
+#define XENCONSOLE_DISCONNECTED 1
+/*
+ * The flag is set to connected when the backend connects and the console
+ * will be serviced=2E
+ */
+#define XENCONSOLE_CONNECTED    0
+    uint8_t connection;
 };
=20
+#ifdef XEN_WANT_FLEX_CONSOLE_RING
+#include "ring=2Eh"
+DEFINE_XEN_FLEX_RING(xencons);
+#endif
+
 #endif /* __XEN_PUBLIC_IO_CONSOLE_H__ */
=20
 /*
diff --git a/include/xen/public/io/ring=2Eh b/include/xen/public/io/ring=
=2Eh
index 1d29cc0=2E=2Eb4cea93 100644
--- a/include/xen/public/io/ring=2Eh
+++ b/include/xen/public/io/ring=2Eh
@@ -1,34 +1,40 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * ring=2Eh
  *
  * Shared producer-consumer ring macros=2E
  *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
  * Tim Deegan and Andrew Warfield November 2004=2E
  */
=20
 #ifndef __XEN_PUBLIC_IO_RING_H__
 #define __XEN_PUBLIC_IO_RING_H__
=20
+/*
+ * When #include'ing this header, you need to provide the following
+ * declaration upfront:
+ * - standard integers types (uint8_t, uint16_t, etc)
+ * They are provided by stdint=2Eh of the standard headers=2E
+ *
+ * In addition, if you intend to use the FLEX macros, you also need to
+ * provide the following, before invoking the FLEX macros:
+ * - size_t
+ * - memcpy
+ * - grant_ref_t
+ * These declarations are provided by string=2Eh of the standard headers,
+ * and grant_table=2Eh from the Xen public headers=2E
+ */
+
+#include "=2E=2E/xen=2Eh"
 #include "=2E=2E/xen-compat=2Eh"
=20
+/* Some PV I/O interfaces need a compatibility variant=2E */
+#if __XEN_INTERFACE_VERSION__ < 0x00041300
+#define XENPV_FLEX_ARRAY_DIM  1 /* variable size */
+#else
+#define XENPV_FLEX_ARRAY_DIM  XEN_FLEX_ARRAY_DIM
+#endif
+
 #if __XEN_INTERFACE_VERSION__ < 0x00030208
 #define xen_mb()  mb()
 #define xen_rmb() rmb()
@@ -38,11 +44,11 @@
 typedef unsigned int RING_IDX;
=20
 /* Round a 32-bit unsigned constant down to the nearest power of two=2E *=
/
-#define __RD2(_x)  (((_x) & 0x00000002) ? 0x2                  : ((_x) & =
0x1))
-#define __RD4(_x)  (((_x) & 0x0000000c) ? __RD2((_x)>>2)<<2    : __RD2(_x=
))
-#define __RD8(_x)  (((_x) & 0x000000f0) ? __RD4((_x)>>4)<<4    : __RD4(_x=
))
-#define __RD16(_x) (((_x) & 0x0000ff00) ? __RD8((_x)>>8)<<8    : __RD8(_x=
))
-#define __RD32(_x) (((_x) & 0xffff0000) ? __RD16((_x)>>16)<<16 : __RD16(_=
x))
+#define __RD2(x)  (((x) & 0x00000002U) ? 0x2                     : ((x) &=
 0x1))
+#define __RD4(x)  (((x) & 0x0000000cU) ? __RD2((x) >> 2) << 2    : __RD2(=
x))
+#define __RD8(x)  (((x) & 0x000000f0U) ? __RD4((x) >> 4) << 4    : __RD4(=
x))
+#define __RD16(x) (((x) & 0x0000ff00U) ? __RD8((x) >> 8) << 8    : __RD8(=
x))
+#define __RD32(x) (((x) & 0xffff0000U) ? __RD16((x) >> 16) << 16 : __RD16=
(x))
=20
 /*
  * Calculate size of a shared ring, given the total available space for t=
he
@@ -80,9 +86,8 @@ typedef unsigned int RING_IDX;
  * of the shared memory area (PAGE_SIZE, for instance)=2E To initialise
  * the front half:
  *
- *     mytag_front_ring_t front_ring;
- *     SHARED_RING_INIT((mytag_sring_t *)shared_page);
- *     FRONT_RING_INIT(&front_ring, (mytag_sring_t *)shared_page, PAGE_SI=
ZE);
+ *     mytag_front_ring_t ring;
+ *     XEN_FRONT_RING_INIT(&ring, (mytag_sring_t *)shared_page, PAGE_SIZE=
);
  *
  * Initializing the back follows similarly (note that only the front
  * initializes the shared ring):
@@ -113,7 +118,7 @@ struct __name##_sring {                               =
                  \
         uint8_t pvt_pad[4];                                             \
     } pvt;                                                              \
     uint8_t __pad[44];                                                  \
-    union __name##_sring_entry ring[1]; /* variable-length */           \
+    union __name##_sring_entry ring[XENPV_FLEX_ARRAY_DIM];              \
 };                                                                      \
                                                                         \
 /* "Front" end's private variables */                                   \
@@ -160,20 +165,29 @@ typedef struct __name##_back_ring __name##_back_ring=
_t
     (void)memset((_s)->__pad, 0, sizeof((_s)->__pad));                  \
 } while(0)
=20
-#define FRONT_RING_INIT(_r, _s, __size) do {                            \
-    (_r)->req_prod_pvt =3D 0;                                            =
 \
-    (_r)->rsp_cons =3D 0;                                                =
 \
+#define FRONT_RING_ATTACH(_r, _s, _i, __size) do {                      \
+    (_r)->req_prod_pvt =3D (_i);                                         =
 \
+    (_r)->rsp_cons =3D (_i);                                             =
 \
     (_r)->nr_ents =3D __RING_SIZE(_s, __size);                           =
 \
     (_r)->sring =3D (_s);                                                =
 \
 } while (0)
=20
-#define BACK_RING_INIT(_r, _s, __size) do {                             \
-    (_r)->rsp_prod_pvt =3D 0;                                            =
 \
-    (_r)->req_cons =3D 0;                                                =
 \
+#define FRONT_RING_INIT(_r, _s, __size) FRONT_RING_ATTACH(_r, _s, 0, __si=
ze)
+
+#define XEN_FRONT_RING_INIT(r, s, size) do {                            \
+    SHARED_RING_INIT(s);                                                \
+    FRONT_RING_INIT(r, s, size);                                        \
+} while (0)
+
+#define BACK_RING_ATTACH(_r, _s, _i, __size) do {                       \
+    (_r)->rsp_prod_pvt =3D (_i);                                         =
 \
+    (_r)->req_cons =3D (_i);                                             =
 \
     (_r)->nr_ents =3D __RING_SIZE(_s, __size);                           =
 \
     (_r)->sring =3D (_s);                                                =
 \
 } while (0)
=20
+#define BACK_RING_INIT(_r, _s, __size) BACK_RING_ATTACH(_r, _s, 0, __size=
)
+
 /* How big is this ring? */
 #define RING_SIZE(_r)                                                   \
     ((_r)->nr_ents)
@@ -189,11 +203,11 @@ typedef struct __name##_back_ring __name##_back_ring=
_t
     (RING_FREE_REQUESTS(_r) =3D=3D 0)
=20
 /* Test if there are outstanding messages to be processed on a ring=2E */
-#define RING_HAS_UNCONSUMED_RESPONSES(_r)                               \
+#define XEN_RING_NR_UNCONSUMED_RESPONSES(_r)                            \
     ((_r)->sring->rsp_prod - (_r)->rsp_cons)
=20
 #ifdef __GNUC__
-#define RING_HAS_UNCONSUMED_REQUESTS(_r) ({                             \
+#define XEN_RING_NR_UNCONSUMED_REQUESTS(_r) ({                          \
     unsigned int req =3D (_r)->sring->req_prod - (_r)->req_cons;         =
 \
     unsigned int rsp =3D RING_SIZE(_r) -                                 =
 \
         ((_r)->req_cons - (_r)->rsp_prod_pvt);                          \
@@ -201,33 +215,50 @@ typedef struct __name##_back_ring __name##_back_ring=
_t
 })
 #else
 /* Same as above, but without the nice GCC ({ =2E=2E=2E }) syntax=2E */
-#define RING_HAS_UNCONSUMED_REQUESTS(_r)                                \
+#define XEN_RING_NR_UNCONSUMED_REQUESTS(_r)                             \
     ((((_r)->sring->req_prod - (_r)->req_cons) <                        \
       (RING_SIZE(_r) - ((_r)->req_cons - (_r)->rsp_prod_pvt))) ?        \
      ((_r)->sring->req_prod - (_r)->req_cons) :                         \
      (RING_SIZE(_r) - ((_r)->req_cons - (_r)->rsp_prod_pvt)))
 #endif
=20
+#ifdef XEN_RING_HAS_UNCONSUMED_IS_BOOL
+/*
+ * These variants should only be used in case no caller is abusing them f=
or
+ * obtaining the number of unconsumed responses/requests=2E
+ */
+#define RING_HAS_UNCONSUMED_RESPONSES(_r) \
+    (!!XEN_RING_NR_UNCONSUMED_RESPONSES(_r))
+#define RING_HAS_UNCONSUMED_REQUESTS(_r)  \
+    (!!XEN_RING_NR_UNCONSUMED_REQUESTS(_r))
+#else
+#define RING_HAS_UNCONSUMED_RESPONSES(_r) XEN_RING_NR_UNCONSUMED_RESPONSE=
S(_r)
+#define RING_HAS_UNCONSUMED_REQUESTS(_r)  XEN_RING_NR_UNCONSUMED_REQUESTS=
(_r)
+#endif
+
 /* Direct access to individual ring elements, by index=2E */
 #define RING_GET_REQUEST(_r, _idx)                                      \
     (&((_r)->sring->ring[((_idx) & (RING_SIZE(_r) - 1))]=2Ereq))
=20
+#define RING_GET_RESPONSE(_r, _idx)                                     \
+    (&((_r)->sring->ring[((_idx) & (RING_SIZE(_r) - 1))]=2Ersp))
+
 /*
- * Get a local copy of a request=2E
+ * Get a local copy of a request/response=2E
  *
- * Use this in preference to RING_GET_REQUEST() so all processing is
+ * Use this in preference to RING_GET_{REQUEST,RESPONSE}() so all process=
ing is
  * done on a local copy that cannot be modified by the other end=2E
  *
  * Note that https://gcc=2Egnu=2Eorg/bugzilla/show_bug=2Ecgi?id=3D58145 m=
ay cause this
- * to be ineffective where _req is a struct which consists of only bitfie=
lds=2E
+ * to be ineffective where dest is a struct which consists of only bitfie=
lds=2E
  */
-#define RING_COPY_REQUEST(_r, _idx, _req) do {				\
-	/* Use volatile to force the copy into _req=2E */			\
-	*(_req) =3D *(volatile typeof(_req))RING_GET_REQUEST(_r, _idx);	\
+#define RING_COPY_(type, r, idx, dest) do {				\
+	/* Use volatile to force the copy into dest=2E */			\
+	*(dest) =3D *(volatile __typeof__(dest))RING_GET_##type(r, idx);	\
 } while (0)
=20
-#define RING_GET_RESPONSE(_r, _idx)                                     \
-    (&((_r)->sring->ring[((_idx) & (RING_SIZE(_r) - 1))]=2Ersp))
+#define RING_COPY_REQUEST(r, idx, req)  RING_COPY_(REQUEST, r, idx, req)
+#define RING_COPY_RESPONSE(r, idx, rsp) RING_COPY_(RESPONSE, r, idx, rsp)
=20
 /* Loop termination condition: Would the specified index overflow the rin=
g? */
 #define RING_REQUEST_CONS_OVERFLOW(_r, _cons)                           \
@@ -237,6 +268,10 @@ typedef struct __name##_back_ring __name##_back_ring_=
t
 #define RING_REQUEST_PROD_OVERFLOW(_r, _prod)                           \
     (((_prod) - (_r)->rsp_prod_pvt) > RING_SIZE(_r))
=20
+/* Ill-behaved backend determination: Can there be this many responses? *=
/
+#define RING_RESPONSE_PROD_OVERFLOW(_r, _prod)                          \
+    (((_prod) - (_r)->rsp_cons) > RING_SIZE(_r))
+
 #define RING_PUSH_REQUESTS(_r) do {                                     \
     xen_wmb(); /* back sees requests /before/ updated producer index */ \
     (_r)->sring->req_prod =3D (_r)->req_prod_pvt;                        =
 \
@@ -313,6 +348,149 @@ typedef struct __name##_back_ring __name##_back_ring=
_t
     (_work_to_do) =3D RING_HAS_UNCONSUMED_RESPONSES(_r);                 =
 \
 } while (0)
=20
+
+/*
+ * DEFINE_XEN_FLEX_RING_AND_INTF defines two monodirectional rings and
+ * functions to check if there is data on the ring, and to read and
+ * write to them=2E
+ *
+ * DEFINE_XEN_FLEX_RING is similar to DEFINE_XEN_FLEX_RING_AND_INTF, but
+ * does not define the indexes page=2E As different protocols can have
+ * extensions to the basic format, this macro allow them to define their
+ * own struct=2E
+ *
+ * XEN_FLEX_RING_SIZE
+ *   Convenience macro to calculate the size of one of the two rings
+ *   from the overall order=2E
+ *
+ * $NAME_mask
+ *   Function to apply the size mask to an index, to reduce the index
+ *   within the range [0-size]=2E
+ *
+ * $NAME_read_packet
+ *   Function to read data from the ring=2E The amount of data to read is
+ *   specified by the "size" argument=2E
+ *
+ * $NAME_write_packet
+ *   Function to write data to the ring=2E The amount of data to write is
+ *   specified by the "size" argument=2E
+ *
+ * $NAME_get_ring_ptr
+ *   Convenience function that returns a pointer to read/write to the
+ *   ring at the right location=2E
+ *
+ * $NAME_data_intf
+ *   Indexes page, shared between frontend and backend=2E It also
+ *   contains the array of grant refs=2E
+ *
+ * $NAME_queued
+ *   Function to calculate how many bytes are currently on the ring,
+ *   ready to be read=2E It can also be used to calculate how much free
+ *   space is currently on the ring (XEN_FLEX_RING_SIZE() -
+ *   $NAME_queued())=2E
+ */
+
+#ifndef XEN_PAGE_SHIFT
+/* The PAGE_SIZE for ring protocols and hypercall interfaces is always
+ * 4K, regardless of the architecture, and page granularity chosen by
+ * operating systems=2E
+ */
+#define XEN_PAGE_SHIFT 12
+#endif
+#define XEN_FLEX_RING_SIZE(order)                                        =
     \
+    (1UL << ((order) + XEN_PAGE_SHIFT - 1))
+
+#define DEFINE_XEN_FLEX_RING(name)                                       =
     \
+static inline RING_IDX name##_mask(RING_IDX idx, RING_IDX ring_size)     =
     \
+{                                                                        =
     \
+    return idx & (ring_size - 1);                                        =
     \
+}                                                                        =
     \
+                                                                         =
     \
+static inline unsigned char *name##_get_ring_ptr(unsigned char *buf,     =
     \
+                                                 RING_IDX idx,           =
     \
+                                                 RING_IDX ring_size)     =
     \
+{                                                                        =
     \
+    return buf + name##_mask(idx, ring_size);                            =
     \
+}                                                                        =
     \
+                                                                         =
     \
+static inline void name##_read_packet(void *opaque,                      =
     \
+                                      const unsigned char *buf,          =
     \
+                                      size_t size,                       =
     \
+                                      RING_IDX masked_prod,              =
     \
+                                      RING_IDX *masked_cons,             =
     \
+                                      RING_IDX ring_size)                =
     \
+{                                                                        =
     \
+    if (*masked_cons < masked_prod ||                                    =
     \
+        size <=3D ring_size - *masked_cons) {                            =
       \
+        memcpy(opaque, buf + *masked_cons, size);                        =
     \
+    } else {                                                             =
     \
+        memcpy(opaque, buf + *masked_cons, ring_size - *masked_cons);    =
     \
+        memcpy((unsigned char *)opaque + ring_size - *masked_cons, buf,  =
     \
+               size - (ring_size - *masked_cons));                       =
     \
+    }                                                                    =
     \
+    *masked_cons =3D name##_mask(*masked_cons + size, ring_size);        =
       \
+}                                                                        =
     \
+                                                                         =
     \
+static inline void name##_write_packet(unsigned char *buf,               =
     \
+                                       const void *opaque,               =
     \
+                                       size_t size,                      =
     \
+                                       RING_IDX *masked_prod,            =
     \
+                                       RING_IDX masked_cons,             =
     \
+                                       RING_IDX ring_size)               =
     \
+{                                                                        =
     \
+    if (*masked_prod < masked_cons ||                                    =
     \
+        size <=3D ring_size - *masked_prod) {                            =
       \
+        memcpy(buf + *masked_prod, opaque, size);                        =
     \
+    } else {                                                             =
     \
+        memcpy(buf + *masked_prod, opaque, ring_size - *masked_prod);    =
     \
+        memcpy(buf, (unsigned char *)opaque + (ring_size - *masked_prod),=
     \
+               size - (ring_size - *masked_prod));                       =
     \
+    }                                                                    =
     \
+    *masked_prod =3D name##_mask(*masked_prod + size, ring_size);        =
       \
+}                                                                        =
     \
+                                                                         =
     \
+static inline RING_IDX name##_queued(RING_IDX prod,                      =
     \
+                                     RING_IDX cons,                      =
     \
+                                     RING_IDX ring_size)                 =
     \
+{                                                                        =
     \
+    RING_IDX size;                                                       =
     \
+                                                                         =
     \
+    if (prod =3D=3D cons)                                                =
         \
+        return 0;                                                        =
     \
+                                                                         =
     \
+    prod =3D name##_mask(prod, ring_size);                               =
       \
+    cons =3D name##_mask(cons, ring_size);                               =
       \
+                                                                         =
     \
+    if (prod =3D=3D cons)                                                =
         \
+        return ring_size;                                                =
     \
+                                                                         =
     \
+    if (prod > cons)                                                     =
     \
+        size =3D prod - cons;                                            =
       \
+    else                                                                 =
     \
+        size =3D ring_size - (cons - prod);                              =
       \
+    return size;                                                         =
     \
+}                                                                        =
     \
+                                                                         =
     \
+struct name##_data {                                                     =
     \
+    unsigned char *in; /* half of the allocation */                      =
     \
+    unsigned char *out; /* half of the allocation */                     =
     \
+}
+
+#define DEFINE_XEN_FLEX_RING_AND_INTF(name)                              =
     \
+struct name##_data_intf {                                                =
     \
+    RING_IDX in_cons, in_prod;                                           =
     \
+                                                                         =
     \
+    uint8_t pad1[56];                                                    =
     \
+                                                                         =
     \
+    RING_IDX out_cons, out_prod;                                         =
     \
+                                                                         =
     \
+    uint8_t pad2[56];                                                    =
     \
+                                                                         =
     \
+    RING_IDX ring_order;                                                 =
     \
+    grant_ref_t ref[XEN_FLEX_ARRAY_DIM];                                 =
     \
+};                                                                       =
     \
+DEFINE_XEN_FLEX_RING(name)
+
 #endif /* __XEN_PUBLIC_IO_RING_H__ */
=20
 /*
diff --git a/include/xen/public/io/xenbus=2Eh b/include/xen/public/io/xenb=
us=2Eh
index 927f9db=2E=2E9cd0cd7 100644
--- a/include/xen/public/io/xenbus=2Eh
+++ b/include/xen/public/io/xenbus=2Eh
@@ -1,26 +1,9 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
*****
  * xenbus=2Eh
  *
  * Xenbus protocol details=2E
  *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
  * Copyright (C) 2005 XenSource Ltd=2E
  */
=20
diff --git a/include/xen/public/trace=2Eh b/include/xen/public/trace=2Eh
index 95b00e8=2E=2E19b3551 100644
--- a/include/xen/public/trace=2Eh
+++ b/include/xen/public/trace=2Eh
@@ -1,24 +1,7 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * include/public/trace=2Eh
  *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
  * Mark Williamson, (C) 2004 Intel Research Cambridge
  * Copyright (C) 2005 Bin Ren
  */
@@ -78,12 +61,13 @@
 /* #define XEN_SCHEDULER_SEDF 2 (Removed) */
 #define TRC_SCHED_ARINC653 3
 #define TRC_SCHED_RTDS     4
+#define TRC_SCHED_SNULL    5
=20
 /* Per-scheduler tracing */
 #define TRC_SCHED_CLASS_EVT(_c, _e) \
   ( ( TRC_SCHED_CLASS | \
       ((TRC_SCHED_##_c << TRC_SCHED_ID_SHIFT) & TRC_SCHED_ID_MASK) ) + \
-    (_e & TRC_SCHED_EVT_MASK) )
+    ((_e) & TRC_SCHED_EVT_MASK) )
=20
 /* Trace classes for DOM0 operations */
 #define TRC_DOM0_DOMOPS     0x00041000   /* Domains manipulations */
@@ -115,6 +99,7 @@
 #define TRC_SCHED_SWITCH_INFPREV (TRC_SCHED_VERBOSE + 14)
 #define TRC_SCHED_SWITCH_INFNEXT (TRC_SCHED_VERBOSE + 15)
 #define TRC_SCHED_SHUTDOWN_CODE  (TRC_SCHED_VERBOSE + 16)
+#define TRC_SCHED_SWITCH_INFCONT (TRC_SCHED_VERBOSE + 17)
=20
 #define TRC_DOM0_DOM_ADD         (TRC_DOM0_DOMOPS + 1)
 #define TRC_DOM0_DOM_REM         (TRC_DOM0_DOMOPS + 2)
@@ -172,7 +157,7 @@
  */
 #define TRC_PV_HYPERCALL_V2_ARG_32(i) (0x1 << (20 + 2*(i)))
 #define TRC_PV_HYPERCALL_V2_ARG_64(i) (0x2 << (20 + 2*(i)))
-#define TRC_PV_HYPERCALL_V2_ARG_MASK  (0xfff00000)
+#define TRC_PV_HYPERCALL_V2_ARG_MASK  0xfff00000U
=20
 #define TRC_SHADOW_NOT_SHADOW                 (TRC_SHADOW +  1)
 #define TRC_SHADOW_FAST_PROPAGATE             (TRC_SHADOW +  2)
@@ -193,8 +178,10 @@
 /* trace events per subclass */
 #define TRC_HVM_NESTEDFLAG      (0x400)
 #define TRC_HVM_VMENTRY         (TRC_HVM_ENTRYEXIT + 0x01)
-#define TRC_HVM_VMEXIT          (TRC_HVM_ENTRYEXIT + 0x02)
-#define TRC_HVM_VMEXIT64        (TRC_HVM_ENTRYEXIT + TRC_64_FLAG + 0x02)
+#define TRC_HVM_VMX_EXIT        (TRC_HVM_ENTRYEXIT + 0x02)
+#define TRC_HVM_VMX_EXIT64      (TRC_HVM_ENTRYEXIT + TRC_64_FLAG + 0x02)
+#define TRC_HVM_SVM_EXIT        (TRC_HVM_ENTRYEXIT + 0x03)
+#define TRC_HVM_SVM_EXIT64      (TRC_HVM_ENTRYEXIT + TRC_64_FLAG + 0x03)
 #define TRC_HVM_PF_XEN          (TRC_HVM_HANDLER + 0x01)
 #define TRC_HVM_PF_XEN64        (TRC_HVM_HANDLER + TRC_64_FLAG + 0x01)
 #define TRC_HVM_PF_INJECT       (TRC_HVM_HANDLER + 0x02)
@@ -233,6 +220,8 @@
 #define TRC_HVM_TRAP             (TRC_HVM_HANDLER + 0x23)
 #define TRC_HVM_TRAP_DEBUG       (TRC_HVM_HANDLER + 0x24)
 #define TRC_HVM_VLAPIC           (TRC_HVM_HANDLER + 0x25)
+#define TRC_HVM_XCR_READ64      (TRC_HVM_HANDLER + TRC_64_FLAG + 0x26)
+#define TRC_HVM_XCR_WRITE64     (TRC_HVM_HANDLER + TRC_64_FLAG + 0x27)
=20
 #define TRC_HVM_IOPORT_WRITE    (TRC_HVM_HANDLER + 0x216)
 #define TRC_HVM_IOMEM_WRITE     (TRC_HVM_HANDLER + 0x217)
diff --git a/include/xen/public/xen-compat=2Eh b/include/xen/public/xen-co=
mpat=2Eh
index 2eea0e2=2E=2E078b796 100644
--- a/include/xen/public/xen-compat=2Eh
+++ b/include/xen/public/xen-compat=2Eh
@@ -1,33 +1,16 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * xen-compat=2Eh
  *
  * Guest OS interface to Xen=2E  Compatibility layer=2E
  *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
  * Copyright (c) 2006, Christian Limpach
  */
=20
 #ifndef __XEN_PUBLIC_XEN_COMPAT_H__
 #define __XEN_PUBLIC_XEN_COMPAT_H__
=20
-#define __XEN_LATEST_INTERFACE_VERSION__ 0x00040700
+#define __XEN_LATEST_INTERFACE_VERSION__ 0x00041300
=20
 #if defined(__XEN__) || defined(__XEN_TOOLS__)
 /* Xen is built with matching headers and implements the latest interface=
=2E */
@@ -41,4 +24,6 @@
 #error "These header files do not support the requested interface version=
=2E"
 #endif
=20
+#define COMPAT_FLEX_ARRAY_DIM XEN_FLEX_ARRAY_DIM
+
 #endif /* __XEN_PUBLIC_XEN_COMPAT_H__ */
diff --git a/include/xen/public/xen=2Eh b/include/xen/public/xen=2Eh
index 2057b52=2E=2E728bda2 100644
--- a/include/xen/public/xen=2Eh
+++ b/include/xen/public/xen=2Eh
@@ -1,26 +1,9 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * xen=2Eh
  *
  * Guest OS interface to Xen=2E
  *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
  * Copyright (c) 2004, K A Fraser
  */
=20
@@ -33,11 +16,15 @@
 #include "arch-x86/xen=2Eh"
 #elif defined(__arm__) || defined (__aarch64__)
 #include "arch-arm=2Eh"
+#elif defined(__powerpc64__)
+#include "arch-ppc=2Eh"
+#elif defined(__riscv)
+#include "arch-riscv=2Eh"
 #else
 #error "Unsupported architecture"
 #endif
=20
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
 /* Guest handles for primitive C types=2E */
 DEFINE_XEN_GUEST_HANDLE(char);
 __DEFINE_XEN_GUEST_HANDLE(uchar, unsigned char);
@@ -53,17 +40,31 @@ DEFINE_XEN_GUEST_HANDLE(uint64_t);
 DEFINE_XEN_GUEST_HANDLE(xen_pfn_t);
 DEFINE_XEN_GUEST_HANDLE(xen_ulong_t);
=20
-/* Turn a plain number into a C unsigned (LONG_PTR) constant=2E */
+/* Define a variable length array (depends on compiler)=2E */
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >=3D 199901L
+#define XEN_FLEX_ARRAY_DIM
+#elif defined(__GNUC__)
+#define XEN_FLEX_ARRAY_DIM  0
+#else
+#define XEN_FLEX_ARRAY_DIM  1 /* variable size */
+#endif
+
+/* Turn a plain number into a C unsigned (LONG_PTR (LONG_PTR)) constant=
=2E */
 #define __xen_mk_uint(x)  x ## U
 #define __xen_mk_ulong(x) x ## UL
+#ifndef __xen_mk_ullong
+# define __xen_mk_ullong(x) x ## ULL
+#endif
 #define xen_mk_uint(x)    __xen_mk_uint(x)
 #define xen_mk_ulong(x)   __xen_mk_ulong(x)
+#define xen_mk_ullong(x)  __xen_mk_ullong(x)
=20
 #else
=20
 /* In assembly code we cannot use C numeric constant suffixes=2E */
-#define xen_mk_uint(x)  x
-#define xen_mk_ulong(x) x
+#define xen_mk_uint(x)   x
+#define xen_mk_ulong(x)  x
+#define xen_mk_ullong(x) x
=20
 #endif
=20
@@ -105,7 +106,7 @@ DEFINE_XEN_GUEST_HANDLE(xen_ulong_t);
 #define __HYPERVISOR_nmi_op               28
 #define __HYPERVISOR_sched_op             29
 #define __HYPERVISOR_callback_op          30
-#define __HYPERVISOR_xenoprof_op          31
+#define __HYPERVISOR_xenoprof_op          31 /* Dropped in Xen 4=2E22 */
 #define __HYPERVISOR_event_channel_op     32
 #define __HYPERVISOR_physdev_op           33
 #define __HYPERVISOR_hvm_op               34
@@ -113,8 +114,10 @@ DEFINE_XEN_GUEST_HANDLE(xen_ulong_t);
 #define __HYPERVISOR_domctl               36
 #define __HYPERVISOR_kexec_op             37
 #define __HYPERVISOR_tmem_op              38
-#define __HYPERVISOR_xc_reserved_op       39 /* reserved for XenClient */
+#define __HYPERVISOR_argo_op              39
 #define __HYPERVISOR_xenpmu_op            40
+#define __HYPERVISOR_dm_op                41
+#define __HYPERVISOR_hypfs_op             42
=20
 /* Architecture-specific hypercall definitions=2E */
 #define __HYPERVISOR_arch_0               48
@@ -156,25 +159,34 @@ DEFINE_XEN_GUEST_HANDLE(xen_ulong_t);
  *
  * Virtual interrupts that a guest OS may receive from Xen=2E
  *
- * In the side comments, 'V=2E' denotes a per-VCPU VIRQ while 'G=2E' deno=
tes a
- * global VIRQ=2E The former can be bound once per VCPU and cannot be re-=
bound=2E
- * The latter can be allocated only once per guest: they must initially b=
e
- * allocated to VCPU0 but can subsequently be re-bound=2E
+ * There are three types:
+ *
+ * 1=2E (V) Per-vcpu:
+ *    These can be bound once per vCPU, each using a different evtchn por=
t=2E
+ *    An evtchn for one vCPU cannot be rebound to a different vCPU=2E
+ *
+ * 2=2E (D) Per-domain:
+ *    These can be bound once per domain=2E  They must be bound on vCPU 0=
 first,
+ *    but can be rebound to other vCPUs afterwards=2E
+ *
+ * 3=2E (G) Global:
+ *    Like per-domain, but can only be bound to a single domain at a time=
=2E
+ *    The owning domain must unbind before a new domain can bind=2E
  */
 /* ` enum virq { */
 #define VIRQ_TIMER      0  /* V=2E Timebase update, and/or requested time=
out=2E  */
 #define VIRQ_DEBUG      1  /* V=2E Request guest to dump debug info=2E   =
        */
-#define VIRQ_CONSOLE    2  /* G=2E (DOM0) Bytes received on emergency con=
sole=2E */
-#define VIRQ_DOM_EXC    3  /* G=2E (DOM0) Exceptional event for some doma=
in=2E   */
-#define VIRQ_TBUF       4  /* G=2E (DOM0) Trace buffer has records availa=
ble=2E  */
-#define VIRQ_DEBUGGER   6  /* G=2E (DOM0) A domain has paused for debuggi=
ng=2E   */
+#define VIRQ_CONSOLE    2  /* G=2E Bytes received on emergency console=2E=
        */
+#define VIRQ_DOM_EXC    3  /* G=2E Exceptional event for some domain=2E  =
        */
+#define VIRQ_TBUF       4  /* G=2E Trace buffer has records available=2E =
        */
+#define VIRQ_DEBUGGER   6  /* G=2E A domain has paused for debugging=2E  =
        */
 #define VIRQ_XENOPROF   7  /* V=2E XenOprofile interrupt: new sample avai=
lable */
-#define VIRQ_CON_RING   8  /* G=2E (DOM0) Bytes received on console      =
      */
-#define VIRQ_PCPU_STATE 9  /* G=2E (DOM0) PCPU state changed             =
      */
-#define VIRQ_MEM_EVENT  10 /* G=2E (DOM0) A memory event has occured     =
      */
-#define VIRQ_XC_RESERVED 11 /* G=2E Reserved for XenClient               =
      */
-#define VIRQ_ENOMEM     12 /* G=2E (DOM0) Low on heap memory       */
-#define VIRQ_XENPMU     13 /* V=2E  PMC interrupt                        =
      */
+#define VIRQ_CON_RING   8  /* G=2E Bytes received on console             =
      */
+#define VIRQ_PCPU_STATE 9  /* G=2E PCPU state changed                    =
      */
+#define VIRQ_MEM_EVENT  10 /* G=2E A memory event has occurred           =
      */
+#define VIRQ_ARGO       11 /* D=2E Argo interdomain message notification =
      */
+#define VIRQ_ENOMEM     12 /* G=2E Low on heap memory                    =
      */
+#define VIRQ_XENPMU     13 /* V=2E PMC interrupt                         =
      */
=20
 /* Architecture-specific VIRQ definitions=2E */
 #define VIRQ_ARCH_0    16
@@ -262,6 +274,10 @@ DEFINE_XEN_GUEST_HANDLE(xen_ulong_t);
  * As MMU_NORMAL_PT_UPDATE above, but A/D bits currently in the PTE are O=
Red
  * with those in @val=2E
  *
+ * ptr[1:0] =3D=3D MMU_PT_UPDATE_NO_TRANSLATE:
+ * As MMU_NORMAL_PT_UPDATE above, but @val is not translated though FD
+ * page tables=2E
+ *
  * @val is usually the machine frame number along with some attributes=2E
  * The attributes by default follow the architecture defined bits=2E Mean=
ing that
  * if this is a X86_64 machine and four page table layout is used, the la=
yout
@@ -328,9 +344,11 @@ DEFINE_XEN_GUEST_HANDLE(xen_ulong_t);
  *
  * PAT (bit 7 on) --> PWT (bit 3 on) and clear bit 7=2E
  */
-#define MMU_NORMAL_PT_UPDATE      0 /* checked '*ptr =3D val'=2E ptr is M=
A=2E      */
-#define MMU_MACHPHYS_UPDATE       1 /* ptr =3D MA of frame to modify entr=
y for */
-#define MMU_PT_UPDATE_PRESERVE_AD 2 /* atomically: *ptr =3D val | (*ptr&(=
A|D)) */
+#define MMU_NORMAL_PT_UPDATE       0 /* checked '*ptr =3D val'=2E ptr is =
MA=2E      */
+#define MMU_MACHPHYS_UPDATE        1 /* ptr =3D MA of frame to modify ent=
ry for */
+#define MMU_PT_UPDATE_PRESERVE_AD  2 /* atomically: *ptr =3D val | (*ptr&=
(A|D)) */
+#define MMU_PT_UPDATE_NO_TRANSLATE 3 /* checked '*ptr =3D val'=2E ptr is =
MA=2E      */
+                                     /* val never translated=2E          =
       */
=20
 /*
  * MMU EXTENDED OPERATIONS
@@ -419,7 +437,7 @@ DEFINE_XEN_GUEST_HANDLE(xen_ulong_t);
 #define MMUEXT_UNMARK_SUPER     20
 /* ` } */
=20
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
 struct mmuext_op {
     unsigned int cmd; /* =3D> enum mmuext_cmd */
     union {
@@ -474,7 +492,28 @@ DEFINE_XEN_GUEST_HANDLE(mmuext_op_t);
 /* ` } */
=20
 /*
- * Commands to HYPERVISOR_console_io()=2E
+ * ` int
+ * ` HYPERVISOR_console_io(unsigned int cmd,
+ * `                       unsigned int count,
+ * `                       char buffer[]);
+ *
+ * @cmd: Command (see below)
+ * @count: Size of the buffer to read/write
+ * @buffer: Pointer in the guest memory
+ *
+ * List of commands:
+ *
+ *  * CONSOLEIO_write: Write the buffer to Xen console=2E
+ *      For the hardware domain, all the characters in the buffer will
+ *      be written=2E Characters will be printed directly to the console=
=2E
+ *      For all the other domains, only the printable characters will be
+ *      written=2E Characters may be buffered until a newline (i=2Ee '\n'=
) is
+ *      found=2E
+ *      @return 0 on success, otherwise return an error code=2E
+ *  * CONSOLEIO_read: Attempts to read up to @count characters from Xen
+ *      console=2E The maximum buffer size (i=2Ee=2E @count) supported is=
 2GB=2E
+ *      @return the number of characters read on success, otherwise retur=
n
+ *      an error code=2E
  */
 #define CONSOLEIO_write         0
 #define CONSOLEIO_read          1
@@ -509,6 +548,13 @@ DEFINE_XEN_GUEST_HANDLE(mmuext_op_t);
  */
 #define VMASST_TYPE_architectural_iopl   4
=20
+/*
+ * All guests: activate update indicator in vcpu_runstate_info
+ * Enable setting the XEN_RUNSTATE_UPDATE flag in guest memory mapped
+ * vcpu_runstate_info during updates of the runstate information=2E
+ */
+#define VMASST_TYPE_runstate_update_flag 5
+
 /*
  * x86/64 guests: strictly hide M2P from user mode=2E
  * This allows the guest to control respective hypervisor behavior:
@@ -537,16 +583,21 @@ DEFINE_XEN_GUEST_HANDLE(mmuext_op_t);
  * is useful to ensure that no mappings to the OS's own heap are accident=
ally
  * installed=2E (e=2Eg=2E, in Linux this could cause havoc as reference c=
ounts
  * aren't adjusted on the I/O-mapping code path)=2E
- * This only makes sense in MMUEXT_SET_FOREIGNDOM, but in that context ca=
n
- * be specified by any calling domain=2E
+ * This only makes sense as HYPERVISOR_mmu_update()'s and
+ * HYPERVISOR_update_va_mapping_otherdomain()'s "foreigndom" argument=2E =
For
+ * HYPERVISOR_mmu_update() context it can be specified by any calling dom=
ain,
+ * otherwise it's only permitted if the caller is privileged=2E
  */
 #define DOMID_IO             xen_mk_uint(0x7FF1)
=20
 /*
  * DOMID_XEN is used to allow privileged domains to map restricted parts =
of
  * Xen's heap space (e=2Eg=2E, the machine_to_phys table)=2E
- * This only makes sense in MMUEXT_SET_FOREIGNDOM, and is only permitted =
if
- * the caller is privileged=2E
+ * This only makes sense as
+ * - HYPERVISOR_mmu_update()'s, HYPERVISOR_mmuext_op()'s, or
+ *   HYPERVISOR_update_va_mapping_otherdomain()'s "foreigndom" argument,
+ * - with XENMAPSPACE_gmfn_foreign,
+ * and is only permitted if the caller is privileged=2E
  */
 #define DOMID_XEN            xen_mk_uint(0x7FF2)
=20
@@ -557,10 +608,20 @@ DEFINE_XEN_GUEST_HANDLE(mmuext_op_t);
 /* DOMID_INVALID is used to identify pages with unknown owner=2E */
 #define DOMID_INVALID        xen_mk_uint(0x7FF4)
=20
+/*
+ * DOMID_ANY is used to signal no specific domain ID requested=2E
+ * Handler should pick a valid ID, or handle it as a wildcard value
+ * depending on the context=2E
+ */
+#define DOMID_ANY            xen_mk_uint(0x7FF5)
+
 /* Idle domain=2E */
 #define DOMID_IDLE           xen_mk_uint(0x7FFF)
=20
-#ifndef __ASSEMBLY__
+/* Mask for valid domain id values */
+#define DOMID_MASK           xen_mk_uint(0x7FFF)
+
+#ifndef __ASSEMBLER__
=20
 typedef uint16_t domid_t;
=20
@@ -578,7 +639,7 @@ DEFINE_XEN_GUEST_HANDLE(mmu_update_t);
 /*
  * ` enum neg_errnoval
  * ` HYPERVISOR_multicall(multicall_entry_t call_list[],
- * `                      uint32_t nr_calls);
+ * `                      ULONG_PTR nr_calls);
  *
  * NB=2E The fields are logically the natural register size for this
  * architecture=2E In cases where xen_ulong_t is larger than this then
@@ -586,7 +647,11 @@ DEFINE_XEN_GUEST_HANDLE(mmu_update_t);
  */
 struct multicall_entry {
     xen_ulong_t op, result;
+#ifndef __XEN__
     xen_ulong_t args[6];
+#else /* Only 5 arguments are supported in reality=2E */
+    xen_ulong_t args[5], unused;
+#endif
 };
 typedef struct multicall_entry multicall_entry_t;
 DEFINE_XEN_GUEST_HANDLE(multicall_entry_t);
@@ -668,7 +733,7 @@ struct vcpu_info {
 #endif /* XEN_HAVE_PV_UPCALL_MASK */
     xen_ulong_t evtchn_pending_sel;
     struct arch_vcpu_info arch;
-    struct vcpu_time_info time;
+    vcpu_time_info_t time;
 }; /* 64 bytes (x86) */
 #ifndef __XEN__
 typedef struct vcpu_info vcpu_info_t;
@@ -721,12 +786,17 @@ struct shared_info {
     xen_ulong_t evtchn_mask[sizeof(xen_ulong_t) * 8];
=20
     /*
-     * Wallclock time: updated only by control software=2E Guests should =
base
-     * their gettimeofday() syscall on this wallclock-base value=2E
+     * Wallclock time: updated by control software or RTC emulation=2E
+     * Guests should base their gettimeofday() syscall on this
+     * wallclock-base value=2E
+     * The values of wc_sec and wc_nsec are offsets from the Unix epoch
+     * adjusted by the domain's 'time offset' (in seconds) as set either
+     * by XEN_DOMCTL_settimeoffset, or adjusted via a guest write to the
+     * emulated RTC=2E
      */
     uint32_t wc_version;      /* Version counter: see vcpu_time_info_t=2E=
 */
-    uint32_t wc_sec;          /* Secs  00:00:00 UTC, Jan 1, 1970=2E  */
-    uint32_t wc_nsec;         /* Nsecs 00:00:00 UTC, Jan 1, 1970=2E  */
+    uint32_t wc_sec;
+    uint32_t wc_nsec;
 #if !defined(__i386__)
     uint32_t wc_sec_hi;
 # define xen_wc_sec_hi wc_sec_hi
@@ -752,7 +822,7 @@ typedef struct shared_info shared_info_t;
  *         (may be omitted)
  *      c=2E list of allocated page frames [mfn_list, nr_pages]
  *         (unless relocated due to XEN_ELFNOTE_INIT_P2M)
- *      d=2E start_info_t structure        [register ESI (x86)]
+ *      d=2E start_info_t structure        [register rSI (x86)]
  *         in case of dom0 this page contains the console info, too
  *      e=2E unless dom0: xenstore ring page
  *      f=2E unless dom0: console ring page
@@ -813,52 +883,6 @@ struct start_info {
 };
 typedef struct start_info start_info_t;
=20
-/*
- * Start of day structure passed to PVH guests in %ebx=2E
- *
- * NOTE: nothing will be loaded at physical address 0, so a 0 value in an=
y
- * of the address fields should be treated as not present=2E
- *
- *  0 +----------------+
- *    | magic          | Contains the magic value XEN_HVM_START_MAGIC_VAL=
UE
- *    |                | ("xEn3" with the 0x80 bit of the "E" set)=2E
- *  4 +----------------+
- *    | version        | Version of this structure=2E Current version is =
0=2E New
- *    |                | versions are guaranteed to be backwards-compatib=
le=2E
- *  8 +----------------+
- *    | flags          | SIF_xxx flags=2E
- * 12 +----------------+
- *    | nr_modules     | Number of modules passed to the kernel=2E
- * 16 +----------------+
- *    | modlist_paddr  | Physical address of an array of modules
- *    |                | (layout of the structure below)=2E
- * 24 +----------------+
- *    | cmdline_paddr  | Physical address of the command line,
- *    |                | a zero-terminated ASCII string=2E
- * 32 +----------------+
- *    | rsdp_paddr     | Physical address of the RSDP ACPI data structure=
=2E
- * 40 +----------------+
- *
- * The layout of each entry in the module structure is the following:
- *
- *  0 +----------------+
- *    | paddr          | Physical address of the module=2E
- *  8 +----------------+
- *    | size           | Size of the module in bytes=2E
- * 16 +----------------+
- *    | cmdline_paddr  | Physical address of the command line,
- *    |                | a zero-terminated ASCII string=2E
- * 24 +----------------+
- *    | reserved       |
- * 32 +----------------+
- *
- * The address and sizes are always a 64bit little endian unsigned intege=
r=2E
- *
- * NB: Xen on x86 will always try to place all the data below the 4GiB
- * boundary=2E
- */
-#define XEN_HVM_START_MAGIC_VALUE 0x336ec578
-
 /* New console union for dom0 introduced in 0x00030203=2E */
 #if __XEN_INTERFACE_VERSION__ < 0x00030203
 #define console_mfn    console=2EdomU=2Emfn
@@ -944,6 +968,11 @@ typedef struct dom0_vga_console_info {
             uint32_t gbl_caps;
             /* Mode attributes (offset 0x0, VESA command 0x4f01)=2E */
             uint16_t mode_attrs;
+            uint16_t pad;
+#endif
+#if __XEN_INTERFACE_VERSION__ >=3D 0x00040d00
+            /* high 32 bits of lfb_base */
+            uint32_t ext_lfb_base;
 #endif
         } vesa_lfb;
     } u;
@@ -958,7 +987,38 @@ __DEFINE_XEN_GUEST_HANDLE(uint16, uint16_t);
 __DEFINE_XEN_GUEST_HANDLE(uint32, uint32_t);
 __DEFINE_XEN_GUEST_HANDLE(uint64, uint64_t);
=20
-#endif /* !__ASSEMBLY__ */
+typedef struct {
+    uint8_t a[16];
+} xen_uuid_t;
+
+/*
+ * XEN_DEFINE_UUID(0x00112233, 0x4455, 0x6677, 0x8899,
+ *                 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff)
+ * will construct UUID 00112233-4455-6677-8899-aabbccddeeff presented as
+ * {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88,
+ * 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff};
+ *
+ * NB: This is compatible with Linux kernel and with libuuid, but it is n=
ot
+ * compatible with Microsoft, as they use mixed-endian encoding (some
+ * components are little-endian, some are big-endian)=2E
+ */
+#define XEN_DEFINE_UUID_(a, b, c, d, e1, e2, e3, e4, e5, e6)            \
+    {{((a) >> 24) & 0xFF, ((a) >> 16) & 0xFF,                           \
+      ((a) >>  8) & 0xFF, ((a) >>  0) & 0xFF,                           \
+      ((b) >>  8) & 0xFF, ((b) >>  0) & 0xFF,                           \
+      ((c) >>  8) & 0xFF, ((c) >>  0) & 0xFF,                           \
+      ((d) >>  8) & 0xFF, ((d) >>  0) & 0xFF,                           \
+                e1, e2, e3, e4, e5, e6}}
+
+#if defined(__STDC_VERSION__) ? __STDC_VERSION__ >=3D 199901L : defined(_=
_GNUC__)
+#define XEN_DEFINE_UUID(a, b, c, d, e1, e2, e3, e4, e5, e6)             \
+    ((xen_uuid_t)XEN_DEFINE_UUID_(a, b, c, d, e1, e2, e3, e4, e5, e6))
+#else
+#define XEN_DEFINE_UUID(a, b, c, d, e1, e2, e3, e4, e5, e6)             \
+    XEN_DEFINE_UUID_(a, b, c, d, e1, e2, e3, e4, e5, e6)
+#endif /* __STDC_VERSION__ / __GNUC__ */
+
+#endif /* !__ASSEMBLER__ */
=20
 /* Default definitions for macros used by domctl/sysctl=2E */
 #if defined(__XEN__) || defined(__XEN_TOOLS__)
@@ -973,11 +1033,12 @@ __DEFINE_XEN_GUEST_HANDLE(uint64, uint64_t);
 #define XEN_GUEST_HANDLE_64(name) XEN_GUEST_HANDLE(name)
 #endif
=20
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
 struct xenctl_bitmap {
     XEN_GUEST_HANDLE_64(uint8) bitmap;
     uint32_t nr_bits;
 };
+typedef struct xenctl_bitmap xenctl_bitmap_t;
 #endif
=20
 #endif /* defined(__XEN__) || defined(__XEN_TOOLS__) */
diff --git a/include/xen/xen/errno=2Eh b/include/xen/xen/errno=2Eh
index 69b28dd=2E=2Edb9ef7f 100644
--- a/include/xen/xen/errno=2Eh
+++ b/include/xen/xen/errno=2Eh
@@ -1,18 +1,18 @@
 #ifndef __XEN_ERRNO_H__
 #define __XEN_ERRNO_H__
=20
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
=20
-#define XEN_ERRNO(name, value) name =3D value,
+#define XEN_ERRNO(name, value) name =3D (value),
 enum {
 #include <public/errno=2Eh>
 };
=20
-#else /* !__ASSEMBLY__ */
+#else /* !__ASSEMBLER__ */
=20
 #define XEN_ERRNO(name, value) =2Eequ name, value
 #include <public/errno=2Eh>
=20
-#endif /* __ASSEMBLY__ */
+#endif /* __ASSEMBLER__ */
=20
 #endif /*  __XEN_ERRNO_H__ */
--=20
2=2E55=2E0=2Ewindows=2E3



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.24e.43c3a2808bfa88a6.1a13feecc57.b649103aa80629fb=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 15 14:19:40 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 15 Oct 2026 14:19:40 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1450687.1666129 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHMJ2-0004oZ-FG; Thu, 15 Oct 2026 14:19:40 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1450687.1666129; Thu, 15 Oct 2026 14:19:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHMJ2-0004ni-3s; Thu, 15 Oct 2026 14:19:40 +0000
Received: by outflank-mailman (input) for mailman id 1450687;
 Thu, 15 Oct 2026 14:19:39 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13feecbfe0008425@swg.vates.tech>)
 id 1xHMJ1-0004mN-1N
 for win-pv-devel@lists.xenproject.org; Thu, 15 Oct 2026 14:19:39 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xHMJ0-008GHL-6w
 for win-pv-devel@lists.xenproject.org; Thu, 15 Oct 2026 16:19:38 +0200
Received: from [10.42.69.2] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13feecbfe0008425@swg.vates.tech>)
 id 6ad0e0ee-bab6-0a2a0a5309dd-0a2a4502be3c-26
 for <win-pv-devel@lists.xenproject.org>; Thu, 15 Oct 2026 16:19:38 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13feecbfe0008425@swg.vates.tech>)
 id 6ad0e0f9-6ca4-0a2a45020019-b9ff1c2392fd-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 15 Oct 2026 16:19:38 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a13feecbfe0008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 15 Oct 2026 14:19:36 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 18D1882B33;
 Thu, 15 Oct 2026 16:19:36 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=GSzuqgv2IV7NIpFu1oF8mWyHJgYZUTIgs8u0oBEdyW8=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=NfQmA8IT7YJYKO1niR80UIZqF5IWjunG+G7heTmtNWh3TCpQUyCUvTrPbYpFrpBXgts8KlUi4
 3uA6LIFGU6X2V7UhHan/qlsJ4vt4ZLu5Hh4ce/H00utCHIXZv0Wqkxa9VVG2lKFoS+fcYINRdXM
 sETwghTEuCD70Ef+Fdi/exOV2uJEMfU+YDrSaK2XCPx27wd+0EQFmLrKPKlF39DMVPIsyORQkNj
 KqrgbgUpnea2LgObutMOl7K9v1dHxTx7PYL+2ZOp7tJBbV5uUZP/LJfd1k0fnV4viI19655vl6q
 ybVWJy+Xuq4qhzbBQ7b4i7gRjZrcnzxv5yENezLStuqg==
X-Zone-Loop: 698eddf64763e792531464ac206255f6fa5ac3c1fa25
x-campaign-type: default
x-transaction-id: 2f84c1ec-3ee0-4480-8e75-af498d7460cf
x-swg-uid: 01-69c4a064-aea1-48ae-a9ca-723e36a8c302
X-Mailer: Sweego
Message-ID:
 <1792073976.8631fc262581453bbf619ec5b2062170.1a13feecbfe0008425@vates.tech>
x-swg-bid: 1792073976.8631fc262581453bbf619ec5b2062170.1a13feecbfe0008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [XENBUS PATCH 2/3] Update Xen headers to RELEASE-4.22.0
Date: Thu, 15 Oct 2026 16:19:22 +0200
In-Reply-To: <20261015141933.1533-1-ngoc-tu.dinh@vates.tech>
References: <1792073912.8631fc262581453bbf619ec5b2062170.1a13fedd1870008425@vates.tech>
 <20261015141933.1533-1-ngoc-tu.dinh@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.24c.b5b99c2fb7c4e4cf.1a13feec9ba.1282e3f712c7b844=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792073976250
X-purgate-ID: tlsNG-720697/1792073978-F1CAA10C-00CB14E9/0/0
X-purgate-type: clean
X-purgate-size: 135063

---=Part.24c.b5b99c2fb7c4e4cf.1a13feec9ba.1282e3f712c7b844=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Add the missing vcpu=2Eh to get_xen_headers=2Epy

Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 get_xen_headers=2Epy                       |   1 +
 include/xen/public/arch-x86/xen-x86_32=2Eh |  81 +++--
 include/xen/public/arch-x86/xen-x86_64=2Eh | 126 +++++---
 include/xen/public/arch-x86/xen=2Eh        | 121 +++++---
 include/xen/public/errno=2Eh               |  14 +-
 include/xen/public/event_channel=2Eh       |  52 ++--
 include/xen/public/features=2Eh            |  64 ++--
 include/xen/public/grant_table=2Eh         |  57 ++--
 include/xen/public/hvm/hvm_info_table=2Eh  |  21 +-
 include/xen/public/hvm/hvm_op=2Eh          | 372 ++++++++---------------
 include/xen/public/hvm/params=2Eh          | 114 ++++---
 include/xen/public/io/console=2Eh          |  37 +--
 include/xen/public/io/xs_wire=2Eh          |  65 ++--
 include/xen/public/memory=2Eh              | 178 ++++++++---
 include/xen/public/physdev=2Eh             |  67 ++--
 include/xen/public/sched=2Eh               |  19 +-
 include/xen/public/trace=2Eh               |  33 +-
 include/xen/public/vcpu=2Eh                |  48 +--
 include/xen/public/version=2Eh             | 125 ++++++--
 include/xen/public/xen-compat=2Eh          |  25 +-
 include/xen/public/xen=2Eh                 | 223 ++++++++++----
 include/xen/xen/errno=2Eh                  |   8 +-
 22 files changed, 1036 insertions(+), 815 deletions(-)

diff --git a/get_xen_headers=2Epy b/get_xen_headers=2Epy
index 32f27ed=2E=2E5e1df9b 100755
--- a/get_xen_headers=2Epy
+++ b/get_xen_headers=2Epy
@@ -71,6 +71,7 @@ if __name__ =3D=3D '__main__':
     copy_file(working, 'public', 'version=2Eh')
     copy_file(working, 'public', 'features=2Eh')
     copy_file(working, 'public', 'errno=2Eh')
+    copy_file(working, 'public', 'vcpu=2Eh')
=20
     copy_file(working, 'xen', 'errno=2Eh')
=20
diff --git a/include/xen/public/arch-x86/xen-x86_32=2Eh b/include/xen/publ=
ic/arch-x86/xen-x86_32=2Eh
index cf60d86=2E=2E4ee19cc 100644
--- a/include/xen/public/arch-x86/xen-x86_32=2Eh
+++ b/include/xen/public/arch-x86/xen-x86_32=2Eh
@@ -1,25 +1,8 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * xen-x86_32=2Eh
- *=20
- * Guest OS interface to x86 32-bit Xen=2E
- *=20
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
  *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
+ * Guest OS interface to x86 32-bit Xen=2E
  *
  * Copyright (c) 2004-2007, K A Fraser
  */
@@ -29,7 +12,7 @@
=20
 /*
  * Hypercall interface:
- *  Input:  %ebx, %ecx, %edx, %esi, %edi, %ebp (arguments 1-6)
+ *  Input:  %ebx, %ecx, %edx, %esi, %edi (arguments 1-5)
  *  Output: %eax
  * Access is via hypercall page (set up by guest loader or via a Xen MSR)=
:
  *  call hypercall_page + hypercall-number * 32
@@ -107,32 +90,66 @@
 #define XEN_GUEST_HANDLE_64(name) __XEN_GUEST_HANDLE_64(name)
 #endif
=20
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
+
+#if defined(XEN_GENERATING_COMPAT_HEADERS)
+/* nothing */
+#elif defined(__XEN__) || defined(__XEN_TOOLS__)
+/* Anonymous unions include all permissible names (e=2Eg=2E, al/ah/ax/eax=
)=2E */
+#define __DECL_REG_LO8(which) union { \
+    uint32_t e ## which ## x; \
+    uint16_t which ## x; \
+    struct { \
+        uint8_t which ## l; \
+        uint8_t which ## h; \
+    }; \
+}
+#define __DECL_REG_LO16(name) union { \
+    uint32_t e ## name, _e ## name; \
+    uint16_t name; \
+}
+#else
+/* Other sources must always use the proper 32-bit name (e=2Eg=2E, eax)=
=2E */
+#define __DECL_REG_LO8(which) uint32_t e ## which ## x
+#define __DECL_REG_LO16(name) uint32_t e ## name
+#endif
+
+#ifdef __XEN__
+#define cpu_user_regs guest_user_regs
+#endif
=20
 struct cpu_user_regs {
-    uint32_t ebx;
-    uint32_t ecx;
-    uint32_t edx;
-    uint32_t esi;
-    uint32_t edi;
-    uint32_t ebp;
-    uint32_t eax;
+    __DECL_REG_LO8(b);
+    __DECL_REG_LO8(c);
+    __DECL_REG_LO8(d);
+    __DECL_REG_LO16(si);
+    __DECL_REG_LO16(di);
+    __DECL_REG_LO16(bp);
+    __DECL_REG_LO8(a);
     uint16_t error_code;    /* private */
     uint16_t entry_vector;  /* private */
-    uint32_t eip;
+    __DECL_REG_LO16(ip);
     uint16_t cs;
     uint8_t  saved_upcall_mask;
     uint8_t  _pad0;
-    uint32_t eflags;        /* eflags=2EIF =3D=3D !saved_upcall_mask */
-    uint32_t esp;
+    __DECL_REG_LO16(flags); /* eflags=2EIF =3D=3D !saved_upcall_mask */
+    __DECL_REG_LO16(sp);
     uint16_t ss, _pad1;
     uint16_t es, _pad2;
     uint16_t ds, _pad3;
     uint16_t fs, _pad4;
     uint16_t gs, _pad5;
 };
+
+#ifdef __XEN__
+#undef cpu_user_regs
+#else
 typedef struct cpu_user_regs cpu_user_regs_t;
 DEFINE_XEN_GUEST_HANDLE(cpu_user_regs_t);
+#endif
+
+#undef __DECL_REG_LO8
+#undef __DECL_REG_LO16
=20
 /*
  * Page-directory addresses above 4GB do not fit into architectural %cr3=
=2E
@@ -154,7 +171,7 @@ struct xen_callback {
 };
 typedef struct xen_callback xen_callback_t;
=20
-#endif /* !__ASSEMBLY__ */
+#endif /* !__ASSEMBLER__ */
=20
 #endif /* __XEN_PUBLIC_ARCH_X86_XEN_X86_32_H__ */
=20
diff --git a/include/xen/public/arch-x86/xen-x86_64=2Eh b/include/xen/publ=
ic/arch-x86/xen-x86_64=2Eh
index 47b1134=2E=2E4ab9a99 100644
--- a/include/xen/public/arch-x86/xen-x86_64=2Eh
+++ b/include/xen/public/arch-x86/xen-x86_64=2Eh
@@ -1,25 +1,8 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * xen-x86_64=2Eh
- *=20
- * Guest OS interface to x86 64-bit Xen=2E
- *=20
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
  *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
+ * Guest OS interface to x86 64-bit Xen=2E
  *
  * Copyright (c) 2004-2006, K A Fraser
  */
@@ -29,7 +12,7 @@
=20
 /*
  * Hypercall interface:
- *  Input:  %rdi, %rsi, %rdx, %r10, %r8, %r9 (arguments 1-6)
+ *  Input:  %rdi, %rsi, %rdx, %r10, %r8 (arguments 1-5)
  *  Output: %rax
  * Access is via hypercall page (set up by guest loader or via a Xen MSR)=
:
  *  call hypercall_page + hypercall-number * 32
@@ -44,11 +27,11 @@
  */
=20
 #define FLAT_RING3_CS32 0xe023  /* GDT index 260 */
-#define FLAT_RING3_CS64 0xe033  /* GDT index 261 */
-#define FLAT_RING3_DS32 0xe02b  /* GDT index 262 */
+#define FLAT_RING3_CS64 0xe033  /* GDT index 262 */
+#define FLAT_RING3_DS32 0xe02b  /* GDT index 261 */
 #define FLAT_RING3_DS64 0x0000  /* NULL selector */
-#define FLAT_RING3_SS32 0xe02b  /* GDT index 262 */
-#define FLAT_RING3_SS64 0xe02b  /* GDT index 262 */
+#define FLAT_RING3_SS32 0xe02b  /* GDT index 261 */
+#define FLAT_RING3_SS64 0xe02b  /* GDT index 261 */
=20
 #define FLAT_KERNEL_DS64 FLAT_RING3_DS64
 #define FLAT_KERNEL_DS32 FLAT_RING3_DS32
@@ -120,9 +103,8 @@
 /* Guest exited in SYSCALL context? Return to guest with SYSRET? */
 #define _VGCF_in_syscall 8
 #define VGCF_in_syscall  (1<<_VGCF_in_syscall)
-#define VGCF_IN_SYSCALL  VGCF_in_syscall
=20
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
=20
 struct iret_context {
     /* Top of stack (%rsp at point of hypercall)=2E */
@@ -130,7 +112,35 @@ struct iret_context {
     /* Bottom of iret stack frame=2E */
 };
=20
-#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
+#if defined(__XEN__) || defined(__XEN_TOOLS__)
+/* Anonymous unions include all permissible names (e=2Eg=2E, al/ah/ax/eax=
/rax)=2E */
+#define __DECL_REG_LOHI(which) union { \
+    uint64_t r ## which ## x; \
+    uint32_t e ## which ## x; \
+    uint16_t which ## x; \
+    struct { \
+        uint8_t which ## l; \
+        uint8_t which ## h; \
+    }; \
+}
+#define __DECL_REG_LO8(name) union { \
+    uint64_t r ## name; \
+    uint32_t e ## name; \
+    uint16_t name; \
+    uint8_t name ## l; \
+}
+#define __DECL_REG_LO16(name) union { \
+    uint64_t r ## name; \
+    uint32_t e ## name; \
+    uint16_t name; \
+}
+#define __DECL_REG_HI(num) union { \
+    uint64_t r ## num; \
+    uint32_t r ## num ## d; \
+    uint16_t r ## num ## w; \
+    uint8_t r ## num ## b; \
+}
+#elif defined(__GNUC__) && !defined(__STRICT_ANSI__)
 /* Anonymous union includes both 32- and 64-bit names (e=2Eg=2E, eax/rax)=
=2E */
 #define __DECL_REG(name) union { \
     uint64_t r ## name, e ## name; \
@@ -141,40 +151,60 @@ struct iret_context {
 #define __DECL_REG(name) uint64_t r ## name
 #endif
=20
+#ifndef __DECL_REG_LOHI
+#define __DECL_REG_LOHI(name) __DECL_REG(name ## x)
+#define __DECL_REG_LO8        __DECL_REG
+#define __DECL_REG_LO16       __DECL_REG
+#define __DECL_REG_HI(num)    uint64_t r ## num
+#endif
+
+#ifdef __XEN__
+#define cpu_user_regs guest_user_regs
+#endif
+
 struct cpu_user_regs {
-    uint64_t r15;
-    uint64_t r14;
-    uint64_t r13;
-    uint64_t r12;
-    __DECL_REG(bp);
-    __DECL_REG(bx);
-    uint64_t r11;
-    uint64_t r10;
-    uint64_t r9;
-    uint64_t r8;
-    __DECL_REG(ax);
-    __DECL_REG(cx);
-    __DECL_REG(dx);
-    __DECL_REG(si);
-    __DECL_REG(di);
+    __DECL_REG_HI(15);
+    __DECL_REG_HI(14);
+    __DECL_REG_HI(13);
+    __DECL_REG_HI(12);
+    __DECL_REG_LO8(bp);
+    __DECL_REG_LOHI(b);
+    __DECL_REG_HI(11);
+    __DECL_REG_HI(10);
+    __DECL_REG_HI(9);
+    __DECL_REG_HI(8);
+    __DECL_REG_LOHI(a);
+    __DECL_REG_LOHI(c);
+    __DECL_REG_LOHI(d);
+    __DECL_REG_LO8(si);
+    __DECL_REG_LO8(di);
     uint32_t error_code;    /* private */
     uint32_t entry_vector;  /* private */
-    __DECL_REG(ip);
+    __DECL_REG_LO16(ip);
     uint16_t cs, _pad0[1];
     uint8_t  saved_upcall_mask;
     uint8_t  _pad1[3];
-    __DECL_REG(flags);      /* rflags=2EIF =3D=3D !saved_upcall_mask */
-    __DECL_REG(sp);
+    __DECL_REG_LO16(flags); /* rflags=2EIF =3D=3D !saved_upcall_mask */
+    __DECL_REG_LO8(sp);
     uint16_t ss, _pad2[3];
     uint16_t es, _pad3[3];
     uint16_t ds, _pad4[3];
-    uint16_t fs, _pad5[3]; /* Non-zero =3D> takes precedence over fs_base=
=2E     */
-    uint16_t gs, _pad6[3]; /* Non-zero =3D> takes precedence over gs_base=
_usr=2E */
+    uint16_t fs, _pad5[3];
+    uint16_t gs, _pad6[3];
 };
+
+#ifdef __XEN__
+#undef cpu_user_regs
+#else
 typedef struct cpu_user_regs cpu_user_regs_t;
 DEFINE_XEN_GUEST_HANDLE(cpu_user_regs_t);
+#endif
=20
 #undef __DECL_REG
+#undef __DECL_REG_LOHI
+#undef __DECL_REG_LO8
+#undef __DECL_REG_LO16
+#undef __DECL_REG_HI
=20
 #define xen_pfn_to_cr3(pfn) ((ULONG_PTR)(pfn) << 12)
 #define xen_cr3_to_pfn(cr3) ((ULONG_PTR)(cr3) >> 12)
@@ -187,7 +217,7 @@ typedef struct arch_vcpu_info arch_vcpu_info_t;
=20
 typedef ULONG_PTR xen_callback_t;
=20
-#endif /* !__ASSEMBLY__ */
+#endif /* !__ASSEMBLER__ */
=20
 #endif /* __XEN_PUBLIC_ARCH_X86_XEN_X86_64_H__ */
=20
diff --git a/include/xen/public/arch-x86/xen=2Eh b/include/xen/public/arch=
-x86/xen=2Eh
index c16fea4=2E=2E1ec1a20 100644
--- a/include/xen/public/arch-x86/xen=2Eh
+++ b/include/xen/public/arch-x86/xen=2Eh
@@ -1,31 +1,12 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * arch-x86/xen=2Eh
- *=20
- * Guest OS interface to x86 Xen=2E
- *=20
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
  *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
+ * Guest OS interface to x86 Xen=2E
  *
  * Copyright (c) 2004-2006, K A Fraser
  */
=20
-#include "=2E=2E/xen=2Eh"
-
 #ifndef __XEN_PUBLIC_ARCH_X86_XEN_H__
 #define __XEN_PUBLIC_ARCH_X86_XEN_H__
=20
@@ -53,18 +34,29 @@
 #define __XEN_GUEST_HANDLE(name)        __guest_handle_ ## name
 #define XEN_GUEST_HANDLE(name)          __XEN_GUEST_HANDLE(name)
 #define XEN_GUEST_HANDLE_PARAM(name)    XEN_GUEST_HANDLE(name)
-#define set_xen_guest_handle_raw(hnd, val)  do { (hnd)=2Ep =3D val; } whi=
le (0)
+#define set_xen_guest_handle_raw(hnd, val)  do { (hnd)=2Ep =3D (val); } w=
hile (0)
 #define set_xen_guest_handle(hnd, val) set_xen_guest_handle_raw(hnd, val)
=20
 #if defined(__i386__)
+# ifdef __XEN__
+__DeFiNe__ __DECL_REG_LO8(which) uint32_t e ## which ## x
+__DeFiNe__ __DECL_REG_LO16(name) union { uint32_t e ## name; }
+# endif
 #include "xen-x86_32=2Eh"
+# ifdef __XEN__
+__UnDeF__ __DECL_REG_LO8
+__UnDeF__ __DECL_REG_LO16
+__DeFiNe__ __DECL_REG_LO8(which) e ## which ## x
+__DeFiNe__ __DECL_REG_LO16(name) e ## name
+# endif
 #elif defined(__x86_64__)
 #include "xen-x86_64=2Eh"
 #endif
=20
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
 typedef ULONG_PTR xen_pfn_t;
 #define PRI_xen_pfn "lx"
+#define PRIu_xen_pfn "lu"
 #endif
=20
 #define XEN_HAVE_PV_GUEST_ENTRY 1
@@ -105,7 +97,7 @@ typedef ULONG_PTR xen_pfn_t;
 /* Maximum number of virtual CPUs in legacy multi-processor guests=2E */
 #define XEN_LEGACY_MAX_VCPUS 32
=20
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
=20
 typedef ULONG_PTR xen_ulong_t;
 #define PRI_xen_ulong "lx"
@@ -132,6 +124,12 @@ typedef ULONG_PTR xen_ulong_t;
  *  Level =3D=3D 1: Kernel may enter
  *  Level =3D=3D 2: Kernel may enter
  *  Level =3D=3D 3: Everyone may enter
+ *
+ * Note: For compatibility with kernels not setting up exception handlers
+ *       early enough, Xen will avoid trying to inject #GP (and hence cra=
sh
+ *       the domain) when an RDMSR would require this, but no handler was
+ *       set yet=2E The precise conditions are implementation specific, a=
nd
+ *       new code may not rely on such behavior anyway=2E
  */
 #define TI_GET_DPL(_ti)      ((_ti)->flags & 3)
 #define TI_GET_IF(_ti)       ((_ti)->flags & 4)
@@ -149,23 +147,19 @@ DEFINE_XEN_GUEST_HANDLE(trap_info_t);
 typedef uint64_t tsc_timestamp_t; /* RDTSC timestamp */
=20
 /*
- * The following is all CPU context=2E Note that the fpu_ctxt block is fi=
lled=20
+ * The following is all CPU context=2E Note that the fpu_ctxt block is fi=
lled
  * in by FXSAVE if the CPU has feature FXSR; otherwise FSAVE is used=2E
  *
- * Also note that when calling DOMCTL_setvcpucontext and VCPU_initialise
- * for HVM and PVH guests, not all information in this structure is updat=
ed:
- *
- * - For HVM guests, the structures read include: fpu_ctxt (if
- * VGCT_I387_VALID is set), flags, user_regs, debugreg[*]
+ * Also note that when calling DOMCTL_setvcpucontext for HVM guests, not =
all
+ * information in this structure is updated, the fields read include: fpu=
_ctxt
+ * (if VGCT_I387_VALID is set), flags, user_regs and debugreg[*]=2E
  *
- * - PVH guests are the same as HVM guests, but additionally use ctrlreg[=
3] to
- * set cr3=2E All other fields not used should be set to 0=2E
+ * Note: VCPUOP_initialise for HVM guests is non-symetric with
+ * DOMCTL_setvcpucontext, and uses struct vcpu_hvm_context from hvm/hvm_v=
cpu=2Eh
  */
 struct vcpu_guest_context {
     /* FPU registers come first so they can be aligned for FXSAVE/FXRSTOR=
=2E */
     struct { char x[512]; } fpu_ctxt;       /* User-level FPU registers  =
   */
-#define VGCF_I387_VALID                (1<<0)
-#define VGCF_IN_KERNEL                 (1<<2)
 #define _VGCF_i387_valid               0
 #define VGCF_i387_valid                (1<<_VGCF_i387_valid)
 #define _VGCF_in_kernel                2
@@ -177,7 +171,18 @@ struct vcpu_guest_context {
 #define _VGCF_online                   5
 #define VGCF_online                    (1<<_VGCF_online)
     ULONG_PTR flags;                    /* VGCF_* flags                 *=
/
+
+    /*
+     * Outside of Xen, regs type stays named cpu_user_regs for backwards
+     * compatibility=2E  Inside Xen, the type called cpu_user_regs is dif=
ferent,
+     * and the public API type is renamed to guest_user_regs=2E
+     */
+#ifdef __XEN__
+    struct guest_user_regs user_regs;       /* User-level CPU registers  =
   */
+#else
     struct cpu_user_regs user_regs;         /* User-level CPU registers  =
   */
+#endif
+
     struct trap_info trap_ctxt[256];        /* Virtual IDT               =
   */
     ULONG_PTR ldt_base, ldt_ents;       /* LDT (linear address, # ents) *=
/
     ULONG_PTR gdt_frames[16], gdt_ents; /* GDT (machine frames, # ents) *=
/
@@ -283,17 +288,52 @@ struct xen_arch_domainconfig {
 #define XEN_X86_EMU_IOMMU           (1U<<_XEN_X86_EMU_IOMMU)
 #define _XEN_X86_EMU_PIT            8
 #define XEN_X86_EMU_PIT             (1U<<_XEN_X86_EMU_PIT)
+#define _XEN_X86_EMU_USE_PIRQ       9
+#define XEN_X86_EMU_USE_PIRQ        (1U<<_XEN_X86_EMU_USE_PIRQ)
+#define _XEN_X86_EMU_VPCI           10
+#define XEN_X86_EMU_VPCI            (1U<<_XEN_X86_EMU_VPCI)
=20
 #define XEN_X86_EMU_ALL             (XEN_X86_EMU_LAPIC | XEN_X86_EMU_HPET=
 |  \
                                      XEN_X86_EMU_PM | XEN_X86_EMU_RTC |  =
    \
                                      XEN_X86_EMU_IOAPIC | XEN_X86_EMU_PIC=
 |  \
                                      XEN_X86_EMU_VGA | XEN_X86_EMU_IOMMU =
|   \
-                                     XEN_X86_EMU_PIT)
+                                     XEN_X86_EMU_PIT | XEN_X86_EMU_USE_PI=
RQ |\
+                                     XEN_X86_EMU_VPCI)
     uint32_t emulation_flags;
+
+/*
+ * Select whether to use a relaxed behavior for accesses to MSRs not expl=
icitly
+ * handled by Xen instead of injecting a #GP to the guest=2E Note this op=
tion
+ * doesn't allow the guest to read or write to the underlying MSR=2E
+ */
+#define XEN_X86_MSR_RELAXED (1u << 0)
+    uint32_t misc_flags;
 };
+
+/* Max  XEN_X86_* constant=2E Used for ABI checking=2E */
+#define XEN_X86_MISC_FLAGS_MAX XEN_X86_MSR_RELAXED
+
 #endif
=20
-#endif /* !__ASSEMBLY__ */
+/*
+ * Representations of architectural CPUID and MSR information=2E  Used as=
 the
+ * serialised version of Xen's internal representation=2E
+ */
+typedef struct xen_cpuid_leaf {
+#define XEN_CPUID_NO_SUBLEAF 0xffffffffu
+    uint32_t leaf, subleaf;
+    uint32_t a, b, c, d;
+} xen_cpuid_leaf_t;
+DEFINE_XEN_GUEST_HANDLE(xen_cpuid_leaf_t);
+
+typedef struct xen_msr_entry {
+    uint32_t idx;
+    uint32_t flags; /* Reserved MBZ=2E */
+    uint64_t val;
+} xen_msr_entry_t;
+DEFINE_XEN_GUEST_HANDLE(xen_msr_entry_t);
+
+#endif /* !__ASSEMBLER__ */
=20
 /*
  * ` enum neg_errnoval
@@ -317,7 +357,7 @@ struct xen_arch_domainconfig {
  * Prefix forces emulation of some non-trapping instructions=2E
  * Currently only CPUID=2E
  */
-#ifdef __ASSEMBLY__
+#ifdef __ASSEMBLER__
 #define XEN_EMULATE_PREFIX =2Ebyte 0x0f,0x0b,0x78,0x65,0x6e ;
 #define XEN_CPUID          XEN_EMULATE_PREFIX cpuid
 #else
@@ -325,6 +365,13 @@ struct xen_arch_domainconfig {
 #define XEN_CPUID          XEN_EMULATE_PREFIX "cpuid"
 #endif
=20
+/*
+ * Debug console IO port, also called "port E9 hack"=2E Each character wr=
itten
+ * to this IO port will be printed on the hypervisor console, subject to =
log
+ * level restrictions=2E
+ */
+#define XEN_HVM_DEBUGCONS_IOPORT 0xe9
+
 #endif /* __XEN_PUBLIC_ARCH_X86_XEN_H__ */
=20
 /*
diff --git a/include/xen/public/errno=2Eh b/include/xen/public/errno=2Eh
index a3b77aa=2E=2Edf6aa53 100644
--- a/include/xen/public/errno=2Eh
+++ b/include/xen/public/errno=2Eh
@@ -1,3 +1,5 @@
+/* SPDX-License-Identifier: MIT */
+
 /*
  * There are two expected ways of including this header=2E
  *
@@ -15,6 +17,7 @@
  * will unilaterally #undef XEN_ERRNO()=2E
  */
=20
+/* SAF-8-safe inclusion procedure left to caller */
 #ifndef XEN_ERRNO
=20
 /*
@@ -27,16 +30,16 @@
=20
 #define XEN_ERRNO_DEFAULT_INCLUDE
=20
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
=20
-#define XEN_ERRNO(name, value) XEN_##name =3D value,
+#define XEN_ERRNO(name, value) XEN_##name =3D (value),
 enum xen_errno {
=20
 #elif __XEN_INTERFACE_VERSION__ < 0x00040700
=20
 #define XEN_ERRNO(name, value) =2Eequ XEN_##name, value
=20
-#endif /* __ASSEMBLY__ */
+#endif /* __ASSEMBLER__ */
=20
 #endif /* __XEN_PUBLIC_ERRNO_H__ */
 #endif /* !XEN_ERRNO */
@@ -78,6 +81,7 @@ XEN_ERRNO(EBUSY,	16)	/* Device or resource busy */
 XEN_ERRNO(EEXIST,	17)	/* File exists */
 XEN_ERRNO(EXDEV,	18)	/* Cross-device link */
 XEN_ERRNO(ENODEV,	19)	/* No such device */
+XEN_ERRNO(ENOTDIR,	20)	/* Not a directory */
 XEN_ERRNO(EISDIR,	21)	/* Is a directory */
 XEN_ERRNO(EINVAL,	22)	/* Invalid argument */
 XEN_ERRNO(ENFILE,	23)	/* File table overflow */
@@ -102,6 +106,7 @@ XEN_ERRNO(EILSEQ,	84)	/* Illegal byte sequence */
 XEN_ERRNO(ERESTART,	85)	/* Interrupted system call should be restarted */
 #endif
 XEN_ERRNO(ENOTSOCK,	88)	/* Socket operation on non-socket */
+XEN_ERRNO(EMSGSIZE,	90)	/* Message too large=2E */
 XEN_ERRNO(EOPNOTSUPP,	95)	/* Operation not supported on transport endpoin=
t */
 XEN_ERRNO(EADDRINUSE,	98)	/* Address already in use */
 XEN_ERRNO(EADDRNOTAVAIL, 99)	/* Cannot assign requested address */
@@ -109,6 +114,7 @@ XEN_ERRNO(ENOBUFS,	105)	/* No buffer space available *=
/
 XEN_ERRNO(EISCONN,	106)	/* Transport endpoint is already connected */
 XEN_ERRNO(ENOTCONN,	107)	/* Transport endpoint is not connected */
 XEN_ERRNO(ETIMEDOUT,	110)	/* Connection timed out */
+XEN_ERRNO(ECONNREFUSED,	111)	/* Connection refused */
=20
 #undef XEN_ERRNO
 #endif /* XEN_ERRNO */
@@ -117,7 +123,7 @@ XEN_ERRNO(ETIMEDOUT,	110)	/* Connection timed out */
 /* Clean up from a default include=2E  Close the enum (for C)=2E */
 #ifdef XEN_ERRNO_DEFAULT_INCLUDE
 #undef XEN_ERRNO_DEFAULT_INCLUDE
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
 };
 #endif
=20
diff --git a/include/xen/public/event_channel=2Eh b/include/xen/public/eve=
nt_channel=2Eh
index 44c549d=2E=2Ec5548d2 100644
--- a/include/xen/public/event_channel=2Eh
+++ b/include/xen/public/event_channel=2Eh
@@ -1,26 +1,9 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * event_channel=2Eh
  *
  * Event channels between domains=2E
  *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
  * Copyright (c) 2003-2004, K A Fraser=2E
  */
=20
@@ -74,6 +57,9 @@
 #define EVTCHNOP_init_control    11
 #define EVTCHNOP_expand_array    12
 #define EVTCHNOP_set_priority    13
+#ifdef __XEN__
+#define EVTCHNOP_reset_cont      14
+#endif
 /* ` } */
=20
 typedef uint32_t evtchn_port_t;
@@ -128,10 +114,10 @@ typedef struct evtchn_bind_interdomain evtchn_bind_i=
nterdomain_t;
  * EVTCHNOP_bind_virq: Bind a local event channel to VIRQ <irq> on specif=
ied
  * vcpu=2E
  * NOTES:
- *  1=2E Virtual IRQs are classified as per-vcpu or global=2E See the VIR=
Q list
- *     in xen=2Eh for the classification of each VIRQ=2E
- *  2=2E Global VIRQs must be allocated on VCPU0 but can subsequently be
- *     re-bound via EVTCHNOP_bind_vcpu=2E
+ *  1=2E Virtual IRQs are classified as per-vcpu, per-domain or global=2E=
 See the
+ *     VIRQ list in xen=2Eh for the classification of each VIRQ=2E
+ *  2=2E Per-domain and global VIRQs must be allocated on vCPU0 but can
+ *     subsequently be re-bound via EVTCHNOP_bind_vcpu=2E
  *  3=2E Per-vcpu VIRQs may be bound to at most one event channel per vcp=
u=2E
  *     The allocated event channel is bound to the specified vcpu and the
  *     binding cannot be changed=2E
@@ -307,7 +293,7 @@ typedef struct evtchn_expand_array evtchn_expand_array=
_t;
  */
 struct evtchn_set_priority {
     /* IN parameters=2E */
-    uint32_t port;
+    evtchn_port_t port;
     uint32_t priority;
 };
 typedef struct evtchn_set_priority evtchn_set_priority_t;
@@ -321,16 +307,16 @@ typedef struct evtchn_set_priority evtchn_set_priori=
ty_t;
 struct evtchn_op {
     uint32_t cmd; /* enum event_channel_op */
     union {
-        struct evtchn_alloc_unbound    alloc_unbound;
-        struct evtchn_bind_interdomain bind_interdomain;
-        struct evtchn_bind_virq        bind_virq;
-        struct evtchn_bind_pirq        bind_pirq;
-        struct evtchn_bind_ipi         bind_ipi;
-        struct evtchn_close            close;
-        struct evtchn_send             send;
-        struct evtchn_status           status;
-        struct evtchn_bind_vcpu        bind_vcpu;
-        struct evtchn_unmask           unmask;
+        evtchn_alloc_unbound_t    alloc_unbound;
+        evtchn_bind_interdomain_t bind_interdomain;
+        evtchn_bind_virq_t        bind_virq;
+        evtchn_bind_pirq_t        bind_pirq;
+        evtchn_bind_ipi_t         bind_ipi;
+        evtchn_close_t            close;
+        evtchn_send_t             send;
+        evtchn_status_t           status;
+        evtchn_bind_vcpu_t        bind_vcpu;
+        evtchn_unmask_t           unmask;
     } u;
 };
 typedef struct evtchn_op evtchn_op_t;
diff --git a/include/xen/public/features=2Eh b/include/xen/public/features=
=2Eh
index 2110b04=2E=2E8801930 100644
--- a/include/xen/public/features=2Eh
+++ b/include/xen/public/features=2Eh
@@ -1,25 +1,8 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * features=2Eh
- *=20
- * Feature flags, reported by XENVER_get_features=2E
- *=20
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
  *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
+ * Feature flags, reported by XENVER_get_features=2E
  *
  * Copyright (c) 2006, Keir Fraser <keir@xensource=2Ecom>
  */
@@ -102,6 +85,49 @@
 /* Guest can use XENMEMF_vnode to specify virtual node for memory op=2E *=
/
 #define XENFEAT_memory_op_vnode_supported 13
=20
+/* arm: Hypervisor supports ARM SMC calling convention=2E */
+#define XENFEAT_ARM_SMCCC_supported       14
+
+/*
+ * x86/PVH: If set, ACPI RSDP can be placed at any address=2E Otherwise R=
SDP
+ * must be located in lower 1MB, as required by ACPI Specification for IA=
-PC
+ * systems=2E
+ * This feature flag is only consulted if XEN_ELFNOTE_GUEST_OS contains
+ * the "linux" string=2E
+ */
+#define XENFEAT_linux_rsdp_unrestricted   15
+
+/*
+ * A direct-mapped (or 1:1 mapped) domain is a domain for which its
+ * local pages have gfn =3D=3D mfn=2E If a domain is direct-mapped,
+ * XENFEAT_direct_mapped is set; otherwise XENFEAT_not_direct_mapped
+ * is set=2E
+ *
+ * If neither flag is set (e=2Eg=2E older Xen releases) the assumptions a=
re:
+ * - not auto_translated domains (x86 only) are always direct-mapped
+ * - on x86, auto_translated domains are not direct-mapped
+ * - on ARM, Dom0 is direct-mapped, DomUs are not
+ */
+#define XENFEAT_not_direct_mapped         16
+#define XENFEAT_direct_mapped             17
+
+/*
+ * Signal whether the domain is able to use the following hypercalls:
+ *
+ * VCPUOP_register_runstate_phys_area
+ * VCPUOP_register_vcpu_time_phys_area
+ */
+#define XENFEAT_runstate_phys_area        18
+#define XENFEAT_vcpu_time_phys_area       19
+
+/*
+ * If set, Xen will passthrough all MSI-X vector ctrl writes to device mo=
del,
+ * not only those unmasking an entry=2E This allows device model to prope=
rly keep
+ * track of the MSI-X table without having to read it from the device beh=
ind
+ * Xen's backs=2E This information is relevant only for device models=2E
+ */
+#define XENFEAT_dm_msix_all_writes        20
+
 #define XENFEAT_NR_SUBMAPS 1
=20
 #endif /* __XEN_PUBLIC_FEATURES_H__ */
diff --git a/include/xen/public/grant_table=2Eh b/include/xen/public/grant=
_table=2Eh
index b68ffdd=2E=2Ecdde816 100644
--- a/include/xen/public/grant_table=2Eh
+++ b/include/xen/public/grant_table=2Eh
@@ -1,27 +1,10 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * grant_table=2Eh
  *
  * Interface for granting foreign access to page frames, and receiving
  * page-ownership transfers=2E
  *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
  * Copyright (c) 2004, K A Fraser
  */
=20
@@ -121,8 +104,9 @@ typedef uint32_t grant_ref_t;
  */
=20
 /*
- * Version 1 of the grant table entry structure is maintained purely
- * for backwards compatibility=2E  New guests should use version 2=2E
+ * Version 1 of the grant table entry structure is maintained largely for
+ * backwards compatibility=2E  New guests are recommended to support usin=
g
+ * version 2 to overcome version 1 limitations, but to default to version=
 1=2E
  */
 #if __XEN_INTERFACE_VERSION__ < 0x0003020a
 #define grant_entry_v1 grant_entry
@@ -166,11 +150,13 @@ typedef struct grant_entry_v1 grant_entry_v1_t;
 #define GTF_type_mask       (3U<<0)
=20
 /*
- * Subflags for GTF_permit_access=2E
+ * Subflags for GTF_permit_access and GTF_transitive=2E
  *  GTF_readonly: Restrict @domid to read-only mappings and accesses=2E [=
GST]
  *  GTF_reading: Grant entry is currently mapped for reading by @domid=2E=
 [XEN]
  *  GTF_writing: Grant entry is currently mapped for writing by @domid=2E=
 [XEN]
- *  GTF_PAT, GTF_PWT, GTF_PCD: (x86) cache attribute flags for the grant =
[GST]
+ * Further subflags for GTF_permit_access only=2E
+ *  GTF_PAT, GTF_PWT, GTF_PCD: (x86) cache attribute flags to be used for
+ *                             mappings of the grant [GST]
  *  GTF_sub_page: Grant access to only a subrange of the page=2E  @domid
  *                will only be allowed to copy from the grant, and not
  *                map it=2E [GST]
@@ -411,12 +397,13 @@ typedef struct gnttab_dump_table gnttab_dump_table_t=
;
 DEFINE_XEN_GUEST_HANDLE(gnttab_dump_table_t);
=20
 /*
- * GNTTABOP_transfer_grant_ref: Transfer <frame> to a foreign domain=2E T=
he
- * foreign domain has previously registered its interest in the transfer =
via
- * <domid, ref>=2E
+ * GNTTABOP_transfer: Transfer <frame> to a foreign domain=2E The foreign=
 domain
+ * has previously registered its interest in the transfer via <domid, ref=
>=2E
  *
  * Note that, even if the transfer fails, the specified page no LONG_PTRe=
r belongs
  * to the calling domain *unless* the error is GNTST_bad_page=2E
+ *
+ * Note further that only PV guests can use this operation=2E
  */
 struct gnttab_transfer {
     /* IN parameters=2E */
@@ -514,10 +501,9 @@ DEFINE_XEN_GUEST_HANDLE(gnttab_unmap_and_replace_t);
 #if __XEN_INTERFACE_VERSION__ >=3D 0x0003020a
 /*
  * GNTTABOP_set_version: Request a particular version of the grant
- * table shared table structure=2E  This operation can only be performed
- * once in any given domain=2E  It must be performed before any grants
- * are activated; otherwise, the domain will be stuck with version 1=2E
- * The only defined versions are 1 and 2=2E
+ * table shared table structure=2E  This operation may be used to toggle
+ * between different versions, but must be performed while no grants
+ * are active=2E  The only defined versions are 1 and 2=2E
  */
 struct gnttab_set_version {
     /* IN/OUT parameters */
@@ -588,9 +574,9 @@ struct gnttab_cache_flush {
     } a;
     uint16_t offset; /* offset from start of grant */
     uint16_t length; /* size within the grant */
-#define GNTTAB_CACHE_CLEAN          (1<<0)
-#define GNTTAB_CACHE_INVAL          (1<<1)
-#define GNTTAB_CACHE_SOURCE_GREF    (1<<31)
+#define GNTTAB_CACHE_CLEAN          (1u<<0)
+#define GNTTAB_CACHE_INVAL          (1u<<1)
+#define GNTTAB_CACHE_SOURCE_GREF    (1u<<31)
     uint32_t op;
 };
 typedef struct gnttab_cache_flush gnttab_cache_flush_t;
@@ -626,9 +612,6 @@ DEFINE_XEN_GUEST_HANDLE(gnttab_cache_flush_t);
 #define _GNTMAP_contains_pte    (4)
 #define GNTMAP_contains_pte     (1<<_GNTMAP_contains_pte)
=20
-#define _GNTMAP_can_fail        (5)
-#define GNTMAP_can_fail         (1<<_GNTMAP_can_fail)
-
 /*
  * Bits to be placed in guest kernel available PTE bits (architecture
  * dependent; only supported when XENFEAT_gnttab_map_avail_bits is set)=
=2E
@@ -653,6 +636,7 @@ DEFINE_XEN_GUEST_HANDLE(gnttab_cache_flush_t);
 #define GNTST_bad_copy_arg    (-10) /* copy arguments cross page boundary=
=2E   */
 #define GNTST_address_too_big (-11) /* transfer page address too large=2E=
      */
 #define GNTST_eagain          (-12) /* Operation not done; try again=2E  =
      */
+#define GNTST_no_space        (-13) /* Out of space (handles etc)=2E     =
      */
 /* ` } */
=20
 #define GNTTABOP_error_msgs {                   \
@@ -668,7 +652,8 @@ DEFINE_XEN_GUEST_HANDLE(gnttab_cache_flush_t);
     "bad page",                                 \
     "copy arguments cross page boundary",       \
     "page address size too large",              \
-    "operation not done; try again"             \
+    "operation not done; try again",            \
+    "out of space",                             \
 }
=20
 #endif /* __XEN_PUBLIC_GRANT_TABLE_H__ */
diff --git a/include/xen/public/hvm/hvm_info_table=2Eh b/include/xen/publi=
c/hvm/hvm_info_table=2Eh
index 08c252e=2E=2Ea885f35 100644
--- a/include/xen/public/hvm/hvm_info_table=2Eh
+++ b/include/xen/public/hvm/hvm_info_table=2Eh
@@ -1,25 +1,8 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * hvm/hvm_info_table=2Eh
- *=20
- * HVM parameter and information table, written into guest memory map=2E
- *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
  *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
+ * HVM parameter and information table, written into guest memory map=2E
  *
  * Copyright (c) 2006, Keir Fraser
  */
diff --git a/include/xen/public/hvm/hvm_op=2Eh b/include/xen/public/hvm/hv=
m_op=2Eh
index b3e45cf=2E=2Ee22adf0 100644
--- a/include/xen/public/hvm/hvm_op=2Eh
+++ b/include/xen/public/hvm/hvm_op=2Eh
@@ -1,22 +1,5 @@
+/* SPDX-License-Identifier: MIT */
 /*
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
  * Copyright (c) 2007, Keir Fraser
  */
=20
@@ -32,12 +15,33 @@
 #define HVMOP_get_param           1
 struct xen_hvm_param {
     domid_t  domid;    /* IN */
+    uint16_t pad;
     uint32_t index;    /* IN */
     uint64_t value;    /* IN/OUT */
 };
 typedef struct xen_hvm_param xen_hvm_param_t;
 DEFINE_XEN_GUEST_HANDLE(xen_hvm_param_t);
=20
+struct xen_hvm_altp2m_suppress_ve {
+    uint16_t view;
+    uint8_t suppress_ve; /* Boolean type=2E */
+    uint8_t pad1;
+    uint32_t pad2;
+    uint64_t gfn;
+};
+
+struct xen_hvm_altp2m_suppress_ve_multi {
+    uint16_t view;
+    uint8_t suppress_ve; /* Boolean type=2E */
+    uint8_t pad1;
+    int32_t first_error; /* Should be set to 0=2E */
+    uint64_t first_gfn; /* Value may be updated=2E */
+    uint64_t last_gfn;
+    uint64_t first_error_gfn; /* Gfn of the first error=2E */
+};
+
+#if __XEN_INTERFACE_VERSION__ < 0x00040900
+
 /* Set the logical level of one of a domain's PCI INTx wires=2E */
 #define HVMOP_set_pci_intx_level  2
 struct xen_hvm_set_pci_intx_level {
@@ -76,9 +80,18 @@ struct xen_hvm_set_pci_link_route {
 typedef struct xen_hvm_set_pci_link_route xen_hvm_set_pci_link_route_t;
 DEFINE_XEN_GUEST_HANDLE(xen_hvm_set_pci_link_route_t);
=20
+#endif /* __XEN_INTERFACE_VERSION__ < 0x00040900 */
+
 /* Flushes all VCPU TLBs: @arg must be NULL=2E */
 #define HVMOP_flush_tlbs          5
=20
+/*
+ * hvmmem_type_t should not be defined when generating the corresponding
+ * compat header=2E This will ensure that the improperly named HVMMEM_(*)
+ * values are defined only once=2E
+ */
+#ifndef XEN_GENERATING_COMPAT_HEADERS
+
 typedef enum {
     HVMMEM_ram_rw,             /* Normal read/write guest RAM */
     HVMMEM_ram_ro,             /* Read-only; writes are discarded */
@@ -89,57 +102,16 @@ typedef enum {
     HVMMEM_unused,             /* Placeholder; setting memory to this typ=
e
                                   will fail for code after 4=2E7=2E0 */
 #endif
-    HVMMEM_ioreq_server
+    HVMMEM_ioreq_server        /* Memory type claimed by an ioreq server;=
 type
+                                  changes to this value are only allowed =
after
+                                  an ioreq server has claimed its ownersh=
ip=2E
+                                  Only pages with HVMMEM_ram_rw are allow=
ed to
+                                  change to this type; conversely, pages =
with
+                                  this type are only allowed to be change=
d back
+                                  to HVMMEM_ram_rw=2E */
 } hvmmem_type_t;
=20
-/* Following tools-only interfaces may change in future=2E */
-#if defined(__XEN__) || defined(__XEN_TOOLS__)
-
-/* Track dirty VRAM=2E */
-#define HVMOP_track_dirty_vram    6
-struct xen_hvm_track_dirty_vram {
-    /* Domain to be tracked=2E */
-    domid_t  domid;
-    /* Number of pages to track=2E */
-    uint32_t nr;
-    /* First pfn to track=2E */
-    uint64_aligned_t first_pfn;
-    /* OUT variable=2E */
-    /* Dirty bitmap buffer=2E */
-    XEN_GUEST_HANDLE_64(uint8) dirty_bitmap;
-};
-typedef struct xen_hvm_track_dirty_vram xen_hvm_track_dirty_vram_t;
-DEFINE_XEN_GUEST_HANDLE(xen_hvm_track_dirty_vram_t);
-
-/* Notify that some pages got modified by the Device Model=2E */
-#define HVMOP_modified_memory    7
-struct xen_hvm_modified_memory {
-    /* Domain to be updated=2E */
-    domid_t  domid;
-    /* Number of pages=2E */
-    uint32_t nr;
-    /* First pfn=2E */
-    uint64_aligned_t first_pfn;
-};
-typedef struct xen_hvm_modified_memory xen_hvm_modified_memory_t;
-DEFINE_XEN_GUEST_HANDLE(xen_hvm_modified_memory_t);
-
-#define HVMOP_set_mem_type    8
-/* Notify that a region of memory is to be treated in a specific way=2E *=
/
-struct xen_hvm_set_mem_type {
-    /* Domain to be updated=2E */
-    domid_t domid;
-    /* Memory type */
-    uint16_t hvmmem_type;
-    /* Number of pages=2E */
-    uint32_t nr;
-    /* First pfn=2E */
-    uint64_aligned_t first_pfn;
-};
-typedef struct xen_hvm_set_mem_type xen_hvm_set_mem_type_t;
-DEFINE_XEN_GUEST_HANDLE(xen_hvm_set_mem_type_t);
-
-#endif /* defined(__XEN__) || defined(__XEN_TOOLS__) */
+#endif /* XEN_GENERATING_COMPAT_HEADERS */
=20
 /* Hint from PV drivers for pagetable destruction=2E */
 #define HVMOP_pagetable_dying        9
@@ -178,38 +150,6 @@ DEFINE_XEN_GUEST_HANDLE(xen_hvm_xentrace_t);
 /* Deprecated by XENMEM_access_op_get_access */
 #define HVMOP_get_mem_access        13
=20
-#define HVMOP_inject_trap            14
-/* Inject a trap into a VCPU, which will get taken up on the next
- * scheduling of it=2E Note that the caller should know enough of the
- * state of the CPU before injecting, to know what the effect of
- * injecting the trap will be=2E
- */
-struct xen_hvm_inject_trap {
-    /* Domain to be queried=2E */
-    domid_t domid;
-    /* VCPU */
-    uint32_t vcpuid;
-    /* Vector number */
-    uint32_t vector;
-    /* Trap type (HVMOP_TRAP_*) */
-    uint32_t type;
-/* NB=2E This enumeration precisely matches hvm=2Eh:X86_EVENTTYPE_* */
-# define HVMOP_TRAP_ext_int    0 /* external interrupt */
-# define HVMOP_TRAP_nmi        2 /* nmi */
-# define HVMOP_TRAP_hw_exc     3 /* hardware exception */
-# define HVMOP_TRAP_sw_int     4 /* software interrupt (CD nn) */
-# define HVMOP_TRAP_pri_sw_exc 5 /* ICEBP (F1) */
-# define HVMOP_TRAP_sw_exc     6 /* INT3 (CC), INTO (CE) */
-    /* Error code, or ~0u to skip */
-    uint32_t error_code;
-    /* Intruction length */
-    uint32_t insn_len;
-    /* CR2 for page faults */
-    uint64_aligned_t cr2;
-};
-typedef struct xen_hvm_inject_trap xen_hvm_inject_trap_t;
-DEFINE_XEN_GUEST_HANDLE(xen_hvm_inject_trap_t);
-
 #endif /* defined(__XEN__) || defined(__XEN_TOOLS__) */
=20
 #define HVMOP_get_mem_type    15
@@ -229,51 +169,11 @@ DEFINE_XEN_GUEST_HANDLE(xen_hvm_get_mem_type_t);
 /* Following tools-only interfaces may change in future=2E */
 #if defined(__XEN__) || defined(__XEN_TOOLS__)
=20
-/* MSI injection for emulated devices */
-#define HVMOP_inject_msi         16
-struct xen_hvm_inject_msi {
-    /* Domain to be injected */
-    domid_t   domid;
-    /* Data -- lower 32 bits */
-    uint32_t  data;
-    /* Address (0xfeexxxxx) */
-    uint64_t  addr;
-};
-typedef struct xen_hvm_inject_msi xen_hvm_inject_msi_t;
-DEFINE_XEN_GUEST_HANDLE(xen_hvm_inject_msi_t);
-
 /*
- * IOREQ Servers
- *
- * The interface between an I/O emulator an Xen is called an IOREQ Server=
=2E
- * A domain supports a single 'legacy' IOREQ Server which is instantiated=
 if
- * parameter=2E=2E=2E
- *
- * HVM_PARAM_IOREQ_PFN is read (to get the gmfn containing the synchronou=
s
- * ioreq structures), or=2E=2E=2E
- * HVM_PARAM_BUFIOREQ_PFN is read (to get the gmfn containing the buffere=
d
- * ioreq ring), or=2E=2E=2E
- * HVM_PARAM_BUFIOREQ_EVTCHN is read (to get the event channel that Xen u=
ses
- * to request buffered I/O emulation)=2E
- *=20
- * The following hypercalls facilitate the creation of IOREQ Servers for
- * 'secondary' emulators which are invoked to implement port I/O, memory,=
 or
- * PCI config space ranges which they explicitly register=2E
+ * Definitions relating to DMOP_create_ioreq_server=2E (Defined here for
+ * backwards compatibility)=2E
  */
=20
-typedef uint16_t ioservid_t;
-
-/*
- * HVMOP_create_ioreq_server: Instantiate a new IOREQ Server for a second=
ary
- *                            emulator servicing domain <domid>=2E
- *
- * The <id> handed back is unique for <domid>=2E If <handle_bufioreq> is =
zero
- * the buffered ioreq ring will not be allocated and hence all emulation
- * requestes to this server will be synchronous=2E
- */
-#define HVMOP_create_ioreq_server 17
-struct xen_hvm_create_ioreq_server {
-    domid_t domid;           /* IN - domain to be serviced */
 #define HVM_IOREQSRV_BUFIOREQ_OFF    0
 #define HVM_IOREQSRV_BUFIOREQ_LEGACY 1
 /*
@@ -281,107 +181,6 @@ struct xen_hvm_create_ioreq_server {
  * the pointer pair gets read atomically:
  */
 #define HVM_IOREQSRV_BUFIOREQ_ATOMIC 2
-    uint8_t handle_bufioreq; /* IN - should server handle buffered ioreqs=
 */
-    ioservid_t id;           /* OUT - server id */
-};
-typedef struct xen_hvm_create_ioreq_server xen_hvm_create_ioreq_server_t;
-DEFINE_XEN_GUEST_HANDLE(xen_hvm_create_ioreq_server_t);
-
-/*
- * HVMOP_get_ioreq_server_info: Get all the information necessary to acce=
ss
- *                              IOREQ Server <id>=2E=20
- *
- * The emulator needs to map the synchronous ioreq structures and buffere=
d
- * ioreq ring (if it exists) that Xen uses to request emulation=2E These =
are
- * hosted in domain <domid>'s gmfns <ioreq_pfn> and <bufioreq_pfn>
- * respectively=2E In addition, if the IOREQ Server is handling buffered
- * emulation requests, the emulator needs to bind to event channel
- * <bufioreq_port> to listen for them=2E (The event channels used for
- * synchronous emulation requests are specified in the per-CPU ioreq
- * structures in <ioreq_pfn>)=2E
- * If the IOREQ Server is not handling buffered emulation requests then t=
he
- * values handed back in <bufioreq_pfn> and <bufioreq_port> will both be =
0=2E
- */
-#define HVMOP_get_ioreq_server_info 18
-struct xen_hvm_get_ioreq_server_info {
-    domid_t domid;                 /* IN - domain to be serviced */
-    ioservid_t id;                 /* IN - server id */
-    evtchn_port_t bufioreq_port;   /* OUT - buffered ioreq port */
-    uint64_aligned_t ioreq_pfn;    /* OUT - sync ioreq pfn */
-    uint64_aligned_t bufioreq_pfn; /* OUT - buffered ioreq pfn */
-};
-typedef struct xen_hvm_get_ioreq_server_info xen_hvm_get_ioreq_server_inf=
o_t;
-DEFINE_XEN_GUEST_HANDLE(xen_hvm_get_ioreq_server_info_t);
-
-/*
- * HVM_map_io_range_to_ioreq_server: Register an I/O range of domain <dom=
id>
- *                                   for emulation by the client of IOREQ
- *                                   Server <id>
- * HVM_unmap_io_range_from_ioreq_server: Deregister an I/O range of <domi=
d>
- *                                       for emulation by the client of I=
OREQ
- *                                       Server <id>
- *
- * There are three types of I/O that can be emulated: port I/O, memory ac=
cesses
- * and PCI config space accesses=2E The <type> field denotes which type o=
f range
- * the <start> and <end> (inclusive) fields are specifying=2E
- * PCI config space ranges are specified by segment/bus/device/function v=
alues
- * which should be encoded using the HVMOP_PCI_SBDF helper macro below=2E
- *
- * NOTE: unless an emulation request falls entirely within a range mapped
- * by a secondary emulator, it will not be passed to that emulator=2E
- */
-#define HVMOP_map_io_range_to_ioreq_server 19
-#define HVMOP_unmap_io_range_from_ioreq_server 20
-struct xen_hvm_io_range {
-    domid_t domid;               /* IN - domain to be serviced */
-    ioservid_t id;               /* IN - server id */
-    uint32_t type;               /* IN - type of range */
-# define HVMOP_IO_RANGE_PORT   0 /* I/O port range */
-# define HVMOP_IO_RANGE_MEMORY 1 /* MMIO range */
-# define HVMOP_IO_RANGE_PCI    2 /* PCI segment/bus/dev/func range */
-    uint64_aligned_t start, end; /* IN - inclusive start and end of range=
 */
-};
-typedef struct xen_hvm_io_range xen_hvm_io_range_t;
-DEFINE_XEN_GUEST_HANDLE(xen_hvm_io_range_t);
-
-#define HVMOP_PCI_SBDF(s,b,d,f)                 \
-	((((s) & 0xffff) << 16) |                   \
-	 (((b) & 0xff) << 8) |                      \
-	 (((d) & 0x1f) << 3) |                      \
-	 ((f) & 0x07))
-
-/*
- * HVMOP_destroy_ioreq_server: Destroy the IOREQ Server <id> servicing do=
main
- *                             <domid>=2E
- *
- * Any registered I/O ranges will be automatically deregistered=2E
- */
-#define HVMOP_destroy_ioreq_server 21
-struct xen_hvm_destroy_ioreq_server {
-    domid_t domid; /* IN - domain to be serviced */
-    ioservid_t id; /* IN - server id */
-};
-typedef struct xen_hvm_destroy_ioreq_server xen_hvm_destroy_ioreq_server_=
t;
-DEFINE_XEN_GUEST_HANDLE(xen_hvm_destroy_ioreq_server_t);
-
-/*
- * HVMOP_set_ioreq_server_state: Enable or disable the IOREQ Server <id> =
servicing
- *                               domain <domid>=2E
- *
- * The IOREQ Server will not be passed any emulation requests until it is=
 in the
- * enabled state=2E
- * Note that the contents of the ioreq_pfn and bufioreq_fn (see
- * HVMOP_get_ioreq_server_info) are not meaningful until the IOREQ Server=
 is in
- * the enabled state=2E
- */
-#define HVMOP_set_ioreq_server_state 22
-struct xen_hvm_set_ioreq_server_state {
-    domid_t domid;   /* IN - domain to be serviced */
-    ioservid_t id;   /* IN - server id */
-    uint8_t enabled; /* IN - enabled? */   =20
-};
-typedef struct xen_hvm_set_ioreq_server_state xen_hvm_set_ioreq_server_st=
ate_t;
-DEFINE_XEN_GUEST_HANDLE(xen_hvm_set_ioreq_server_state_t);
=20
 #endif /* defined(__XEN__) || defined(__XEN_TOOLS__) */
=20
@@ -427,27 +226,62 @@ struct xen_hvm_altp2m_vcpu_enable_notify {
 typedef struct xen_hvm_altp2m_vcpu_enable_notify xen_hvm_altp2m_vcpu_enab=
le_notify_t;
 DEFINE_XEN_GUEST_HANDLE(xen_hvm_altp2m_vcpu_enable_notify_t);
=20
+struct xen_hvm_altp2m_vcpu_disable_notify {
+    uint32_t vcpu_id;
+};
+typedef struct xen_hvm_altp2m_vcpu_disable_notify xen_hvm_altp2m_vcpu_dis=
able_notify_t;
+DEFINE_XEN_GUEST_HANDLE(xen_hvm_altp2m_vcpu_disable_notify_t);
+
 struct xen_hvm_altp2m_view {
     /* IN/OUT variable */
     uint16_t view;
-    /* Create view only: default access type
-     * NOTE: currently ignored */
     uint16_t hvmmem_default_access; /* xenmem_access_t */
 };
 typedef struct xen_hvm_altp2m_view xen_hvm_altp2m_view_t;
 DEFINE_XEN_GUEST_HANDLE(xen_hvm_altp2m_view_t);
=20
+#if __XEN_INTERFACE_VERSION__ < 0x00040a00
 struct xen_hvm_altp2m_set_mem_access {
     /* view */
     uint16_t view;
     /* Memory type */
-    uint16_t hvmmem_access; /* xenmem_access_t */
+    uint16_t access; /* xenmem_access_t */
     uint32_t pad;
     /* gfn */
     uint64_t gfn;
 };
 typedef struct xen_hvm_altp2m_set_mem_access xen_hvm_altp2m_set_mem_acces=
s_t;
 DEFINE_XEN_GUEST_HANDLE(xen_hvm_altp2m_set_mem_access_t);
+#endif /* __XEN_INTERFACE_VERSION__ < 0x00040a00 */
+
+struct xen_hvm_altp2m_mem_access {
+    /* view */
+    uint16_t view;
+    /* Memory type */
+    uint16_t access; /* xenmem_access_t */
+    uint32_t pad;
+    /* gfn */
+    uint64_t gfn;
+};
+typedef struct xen_hvm_altp2m_mem_access xen_hvm_altp2m_mem_access_t;
+DEFINE_XEN_GUEST_HANDLE(xen_hvm_altp2m_mem_access_t);
+
+struct xen_hvm_altp2m_set_mem_access_multi {
+    /* view */
+    uint16_t view;
+    uint16_t pad;
+    /* Number of pages */
+    uint32_t nr;
+    /*
+     * Used for continuation purposes=2E
+     * Must be set to zero upon initial invocation=2E
+     */
+    uint64_t opaque;
+    /* List of pfns to set access for */
+    XEN_GUEST_HANDLE(const_uint64) pfn_list;
+    /* Corresponding list of access settings for pfn_list */
+    XEN_GUEST_HANDLE(const_uint8) access_list;
+};
=20
 struct xen_hvm_altp2m_change_gfn {
     /* view */
@@ -462,13 +296,24 @@ struct xen_hvm_altp2m_change_gfn {
 typedef struct xen_hvm_altp2m_change_gfn xen_hvm_altp2m_change_gfn_t;
 DEFINE_XEN_GUEST_HANDLE(xen_hvm_altp2m_change_gfn_t);
=20
+struct xen_hvm_altp2m_get_vcpu_p2m_idx {
+    uint32_t vcpu_id;
+    uint16_t altp2m_idx;
+};
+
+struct xen_hvm_altp2m_set_visibility {
+    uint16_t altp2m_idx;
+    uint8_t visible;
+    uint8_t pad;
+};
+
 struct xen_hvm_altp2m_op {
     uint32_t version;   /* HVMOP_ALTP2M_INTERFACE_VERSION */
     uint32_t cmd;
 /* Get/set the altp2m state for a domain */
 #define HVMOP_altp2m_get_domain_state     1
 #define HVMOP_altp2m_set_domain_state     2
-/* Set the current VCPU to receive altp2m event notifications */
+/* Set a given VCPU to receive altp2m event notifications */
 #define HVMOP_altp2m_vcpu_enable_notify   3
 /* Create a new view */
 #define HVMOP_altp2m_create_p2m           4
@@ -480,15 +325,40 @@ struct xen_hvm_altp2m_op {
 #define HVMOP_altp2m_set_mem_access       7
 /* Change a p2m entry to have a different gfn->mfn mapping */
 #define HVMOP_altp2m_change_gfn           8
+/* Set access for an array of pages */
+#define HVMOP_altp2m_set_mem_access_multi 9
+/* Set the "Suppress #VE" bit on a page */
+#define HVMOP_altp2m_set_suppress_ve      10
+/* Get the "Suppress #VE" bit of a page */
+#define HVMOP_altp2m_get_suppress_ve      11
+/* Get the access of a page of memory from a certain view */
+#define HVMOP_altp2m_get_mem_access       12
+/* Disable altp2m event notifications for a given VCPU */
+#define HVMOP_altp2m_vcpu_disable_notify  13
+/* Get the active vcpu p2m index */
+#define HVMOP_altp2m_get_p2m_idx          14
+/* Set the "Supress #VE" bit for a range of pages */
+#define HVMOP_altp2m_set_suppress_ve_multi 15
+/* Set visibility for a given altp2m view */
+#define HVMOP_altp2m_set_visibility       16
     domid_t domain;
     uint16_t pad1;
     uint32_t pad2;
     union {
-        struct xen_hvm_altp2m_domain_state       domain_state;
-        struct xen_hvm_altp2m_vcpu_enable_notify enable_notify;
-        struct xen_hvm_altp2m_view               view;
-        struct xen_hvm_altp2m_set_mem_access     set_mem_access;
-        struct xen_hvm_altp2m_change_gfn         change_gfn;
+        struct xen_hvm_altp2m_domain_state         domain_state;
+        struct xen_hvm_altp2m_vcpu_enable_notify   enable_notify;
+        struct xen_hvm_altp2m_view                 view;
+#if __XEN_INTERFACE_VERSION__ < 0x00040a00
+        struct xen_hvm_altp2m_set_mem_access       set_mem_access;
+#endif /* __XEN_INTERFACE_VERSION__ < 0x00040a00 */
+        struct xen_hvm_altp2m_mem_access           mem_access;
+        struct xen_hvm_altp2m_change_gfn           change_gfn;
+        struct xen_hvm_altp2m_set_mem_access_multi set_mem_access_multi;
+        struct xen_hvm_altp2m_suppress_ve          suppress_ve;
+        struct xen_hvm_altp2m_suppress_ve_multi    suppress_ve_multi;
+        struct xen_hvm_altp2m_vcpu_disable_notify  disable_notify;
+        struct xen_hvm_altp2m_get_vcpu_p2m_idx     get_vcpu_p2m_idx;
+        struct xen_hvm_altp2m_set_visibility       set_visibility;
         uint8_t pad[64];
     } u;
 };
diff --git a/include/xen/public/hvm/params=2Eh b/include/xen/public/hvm/pa=
rams=2Eh
index 3f54a49=2E=2E99c40b4 100644
--- a/include/xen/public/hvm/params=2Eh
+++ b/include/xen/public/hvm/params=2Eh
@@ -1,22 +1,5 @@
+/* SPDX-License-Identifier: MIT */
 /*
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
  * Copyright (c) 2007, Keir Fraser
  */
=20
@@ -25,6 +8,22 @@
=20
 #include "hvm_op=2Eh"
=20
+/* These parameters are deprecated and their meaning is undefined=2E */
+#if defined(__XEN__) || defined(__XEN_TOOLS__)
+
+#define HVM_PARAM_PAE_ENABLED                4
+#define HVM_PARAM_DM_DOMAIN                 13
+#define HVM_PARAM_MEMORY_EVENT_CR0          20
+#define HVM_PARAM_MEMORY_EVENT_CR3          21
+#define HVM_PARAM_MEMORY_EVENT_CR4          22
+#define HVM_PARAM_MEMORY_EVENT_INT3         23
+#define HVM_PARAM_NESTEDHVM                 24
+#define HVM_PARAM_MEMORY_EVENT_SINGLE_STEP  25
+#define HVM_PARAM_BUFIOREQ_EVTCHN           26
+#define HVM_PARAM_MEMORY_EVENT_MSR          30
+
+#endif /* defined(__XEN__) || defined(__XEN_TOOLS__) */
+
 /*
  * Parameter space for HVMOP_{set,get}_param=2E
  */
@@ -78,12 +77,9 @@
 #define HVM_PARAM_STORE_PFN    1
 #define HVM_PARAM_STORE_EVTCHN 2
=20
-#define HVM_PARAM_PAE_ENABLED  4
-
 #define HVM_PARAM_IOREQ_PFN    5
=20
 #define HVM_PARAM_BUFIOREQ_PFN 6
-#define HVM_PARAM_BUFIOREQ_EVTCHN 26
=20
 #if defined(__i386__) || defined(__x86_64__)
=20
@@ -135,13 +131,48 @@
 #define _HVMPV_apic_assist 5
 #define HVMPV_apic_assist (1 << _HVMPV_apic_assist)
=20
+/* Enable crash MSRs */
+#define _HVMPV_crash_ctl 6
+#define HVMPV_crash_ctl (1 << _HVMPV_crash_ctl)
+
+/* Enable SYNIC MSRs */
+#define _HVMPV_synic 7
+#define HVMPV_synic (1 << _HVMPV_synic)
+
+/* Enable STIMER MSRs */
+#define _HVMPV_stimer 8
+#define HVMPV_stimer (1 << _HVMPV_stimer)
+
+/* Use Synthetic Cluster IPI Hypercall */
+#define _HVMPV_hcall_ipi 9
+#define HVMPV_hcall_ipi (1 << _HVMPV_hcall_ipi)
+
+/* Enable ExProcessorMasks */
+#define _HVMPV_ex_processor_masks 10
+#define HVMPV_ex_processor_masks (1 << _HVMPV_ex_processor_masks)
+
+/* Allow more than 64 VPs */
+#define _HVMPV_no_vp_limit 11
+#define HVMPV_no_vp_limit (1 << _HVMPV_no_vp_limit)
+
+/* Enable vCPU hotplug */
+#define _HVMPV_cpu_hotplug 12
+#define HVMPV_cpu_hotplug (1 << _HVMPV_cpu_hotplug)
+
 #define HVMPV_feature_mask \
         (HVMPV_base_freq | \
          HVMPV_no_freq | \
          HVMPV_time_ref_count | \
          HVMPV_reference_tsc | \
          HVMPV_hcall_remote_tlb_flush | \
-         HVMPV_apic_assist)
+         HVMPV_apic_assist | \
+         HVMPV_crash_ctl | \
+         HVMPV_synic | \
+         HVMPV_stimer | \
+         HVMPV_hcall_ipi | \
+         HVMPV_ex_processor_masks | \
+         HVMPV_no_vp_limit | \
+         HVMPV_cpu_hotplug)
=20
 #endif
=20
@@ -176,9 +207,6 @@
 /* Identity-map page directory used by Intel EPT when CR0=2EPG=3D0=2E */
 #define HVM_PARAM_IDENT_PT     12
=20
-/* Device Model domain, defaults to 0=2E */
-#define HVM_PARAM_DM_DOMAIN    13
-
 /* ACPI S state: currently support S0 and S3 on x86=2E */
 #define HVM_PARAM_ACPI_S_STATE 14
=20
@@ -203,17 +231,6 @@
  */
 #define HVM_PARAM_ACPI_IOPORTS_LOCATION 19
=20
-/* Deprecated */
-#define HVM_PARAM_MEMORY_EVENT_CR0          20
-#define HVM_PARAM_MEMORY_EVENT_CR3          21
-#define HVM_PARAM_MEMORY_EVENT_CR4          22
-#define HVM_PARAM_MEMORY_EVENT_INT3         23
-#define HVM_PARAM_MEMORY_EVENT_SINGLE_STEP  25
-#define HVM_PARAM_MEMORY_EVENT_MSR          30
-
-/* Boolean: Enable nestedhvm (hvm only) */
-#define HVM_PARAM_NESTEDHVM    24
-
 /* Params for the mem event rings */
 #define HVM_PARAM_PAGING_RING_PFN   27
 #define HVM_PARAM_MONITOR_RING_PFN  28
@@ -228,8 +245,18 @@
 /* Location of the VM Generation ID in guest physical address space=2E */
 #define HVM_PARAM_VM_GENERATION_ID_ADDR 34
=20
-/* Boolean: Enable altp2m */
+/*
+ * Get mode for altp2m:
+ *  disabled: altp2m not active (default)
+ *  mixed: allow access to all altp2m ops for both in-guest and external =
tools
+ *  external: allow access to external privileged tools only
+ *  limited: guest only has limited access (ie=2E control VMFUNC and #VE)
+ */
 #define HVM_PARAM_ALTP2M       35
+#define XEN_ALTP2M_disabled      0
+#define XEN_ALTP2M_mixed         1
+#define XEN_ALTP2M_external      2
+#define XEN_ALTP2M_limited       3
=20
 /*
  * Size of the x87 FPU FIP/FDP registers that the hypervisor needs to
@@ -253,6 +280,17 @@
  */
 #define HVM_PARAM_X87_FIP_WIDTH 36
=20
-#define HVM_NR_PARAMS 37
+/*
+ * TSS (and its size) used on Intel when CR0=2EPE=3D0=2E The address occu=
pies
+ * the low 32 bits, while the size is in the high 32 ones=2E
+ */
+#define HVM_PARAM_VM86_TSS_SIZED 37
+
+/* Enable MCA capabilities=2E */
+#define HVM_PARAM_MCA_CAP 38
+#define XEN_HVM_MCA_CAP_LMCE   (xen_mk_ullong(1) << 0)
+#define XEN_HVM_MCA_CAP_MASK   XEN_HVM_MCA_CAP_LMCE
+
+#define HVM_NR_PARAMS 39
=20
 #endif /* __XEN_PUBLIC_HVM_PARAMS_H__ */
diff --git a/include/xen/public/io/console=2Eh b/include/xen/public/io/con=
sole=2Eh
index 6496018=2E=2Eb9ebfaf 100644
--- a/include/xen/public/io/console=2Eh
+++ b/include/xen/public/io/console=2Eh
@@ -1,26 +1,9 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * console=2Eh
  *
  * Console I/O interface for Xen guest OSes=2E
  *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
  * Copyright (c) 2005, Keir Fraser
  */
=20
@@ -36,8 +19,26 @@ struct xencons_interface {
     char out[2048];
     XENCONS_RING_IDX in_cons, in_prod;
     XENCONS_RING_IDX out_cons, out_prod;
+/*
+ * Flag values signaling from backend to frontend whether the console is
+ * connected=2E  i=2Ee=2E Whether it will be serviced and emptied=2E
+ *
+ * The flag starts as disconnected=2E
+ */
+#define XENCONSOLE_DISCONNECTED 1
+/*
+ * The flag is set to connected when the backend connects and the console
+ * will be serviced=2E
+ */
+#define XENCONSOLE_CONNECTED    0
+    uint8_t connection;
 };
=20
+#ifdef XEN_WANT_FLEX_CONSOLE_RING
+#include "ring=2Eh"
+DEFINE_XEN_FLEX_RING(xencons);
+#endif
+
 #endif /* __XEN_PUBLIC_IO_CONSOLE_H__ */
=20
 /*
diff --git a/include/xen/public/io/xs_wire=2Eh b/include/xen/public/io/xs_=
wire=2Eh
index 0a0cdbc=2E=2Efce212e 100644
--- a/include/xen/public/io/xs_wire=2Eh
+++ b/include/xen/public/io/xs_wire=2Eh
@@ -1,25 +1,8 @@
+/* SPDX-License-Identifier: MIT */
 /*
  * Details of the "wire" protocol between Xen Store Daemon and client
  * library or guest kernel=2E
  *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
  * Copyright (C) 2005 Rusty Russell IBM Corporation
  */
=20
@@ -28,7 +11,8 @@
=20
 enum xsd_sockmsg_type
 {
-    XS_DEBUG,
+    XS_CONTROL,
+#define XS_DEBUG XS_CONTROL
     XS_DIRECTORY,
     XS_READ,
     XS_GET_PERMS,
@@ -48,16 +32,19 @@ enum xsd_sockmsg_type
     XS_IS_DOMAIN_INTRODUCED,
     XS_RESUME,
     XS_SET_TARGET,
-    XS_RESTRICT,
-    XS_RESET_WATCHES,
+    /* XS_RESTRICT has been removed */
+    XS_RESET_WATCHES =3D XS_SET_TARGET + 2,
+    XS_DIRECTORY_PART,
+    XS_GET_FEATURE,
+    XS_SET_FEATURE,
+    XS_GET_QUOTA,
+    XS_SET_QUOTA,
+
+    XS_TYPE_COUNT,      /* Number of valid types=2E */
=20
     XS_INVALID =3D 0xffff /* Guaranteed to remain an invalid type */
 };
=20
-#define XS_WRITE_NONE "NONE"
-#define XS_WRITE_CREATE "CREATE"
-#define XS_WRITE_CREATE_EXCL "CREATE|EXCL"
-
 /* We hand errors as strings, for portability=2E */
 struct xsd_errors
 {
@@ -67,11 +54,12 @@ struct xsd_errors
 #ifdef EINVAL
 #define XSD_ERROR(x) { x, #x }
 /* LINTED: static unused */
-static struct xsd_errors xsd_errors[]
+static const struct xsd_errors xsd_errors[]
 #if defined(__GNUC__)
 __attribute__((unused))
 #endif
     =3D {
+    /* /!\ New errors should be added at the end of the array=2E */
     XSD_ERROR(EINVAL),
     XSD_ERROR(EACCES),
     XSD_ERROR(EEXIST),
@@ -86,7 +74,8 @@ __attribute__((unused))
     XSD_ERROR(EBUSY),
     XSD_ERROR(EAGAIN),
     XSD_ERROR(EISCONN),
-    XSD_ERROR(E2BIG)
+    XSD_ERROR(E2BIG),
+    XSD_ERROR(EPERM),
 };
 #endif
=20
@@ -120,6 +109,8 @@ struct xenstore_domain_interface {
     XENSTORE_RING_IDX rsp_cons, rsp_prod;
     uint32_t server_features; /* Bitmap of features supported by the serv=
er */
     uint32_t connection;
+    uint32_t error;
+    uint32_t evtchn_port;
 };
=20
 /* Violating this is very bad=2E  See docs/misc/xenstore=2Etxt=2E */
@@ -131,10 +122,28 @@ struct xenstore_domain_interface {
=20
 /* The ability to reconnect a ring */
 #define XENSTORE_SERVER_FEATURE_RECONNECTION 1
+/* The presence of the "error" field in the ring page */
+#define XENSTORE_SERVER_FEATURE_ERROR        2
+/* The XS_WATCH command can be used with a <depth> parameter */
+#define XENSTORE_SERVER_FEATURE_WATCHDEPTH   4
+/* The capability to use DOMID_ANY for node permissions */
+#define XENSTORE_SERVER_FEATURE_DOMID_ANY    8
=20
 /* Valid values for the connection field */
 #define XENSTORE_CONNECTED 0 /* the steady-state */
-#define XENSTORE_RECONNECT 1 /* guest has initiated a reconnect */
+#define XENSTORE_RECONNECT 1 /* reconnect in progress */
+
+/* Valid values for the error field */
+#define XENSTORE_ERROR_NONE    0 /* No error */
+#define XENSTORE_ERROR_COMM    1 /* Communication problem */
+#define XENSTORE_ERROR_RINGIDX 2 /* Invalid ring index */
+#define XENSTORE_ERROR_PROTO   3 /* Protocol violation (payload too LONG_=
PTR) */
+
+/*
+ * The evtchn_port field is the domain's event channel for xenstored to s=
ignal=2E
+ * It is filled in by Xen for dom0less/Hyperlaunch domains=2E  It is only=
 used
+ * when non-zero=2E  Otherwise the event channel from XS_INTRODUCE is use=
d=2E
+ */
=20
 #endif /* _XS_WIRE_H */
=20
diff --git a/include/xen/public/memory=2Eh b/include/xen/public/memory=2Eh
index 5bf840f=2E=2Ebd9fc37 100644
--- a/include/xen/public/memory=2Eh
+++ b/include/xen/public/memory=2Eh
@@ -1,25 +1,8 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * memory=2Eh
- *=20
- * Memory reservation and information=2E
- *=20
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
  *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
+ * Memory reservation and information=2E
  *
  * Copyright (c) 2005, Keir Fraser <keir@xensource=2Ecom>
  */
@@ -41,9 +24,9 @@
=20
 #if __XEN_INTERFACE_VERSION__ >=3D 0x00030209
 /*
- * Maximum # bits addressable by the user of the allocated region (e=2Eg=
=2E, I/O=20
- * devices often have a 32-bit limitation even in 64-bit systems)=2E If z=
ero=20
- * then the user has no addressing restriction=2E This field is not used =
by=20
+ * Maximum # bits addressable by the user of the allocated region (e=2Eg=
=2E, I/O
+ * devices often have a 32-bit limitation even in 64-bit systems)=2E If z=
ero
+ * then the user has no addressing restriction=2E This field is not used =
by
  * XENMEM_decrease_reservation=2E
  */
 #define XENMEMF_address_bits(x)     (x)
@@ -102,6 +85,8 @@ DEFINE_XEN_GUEST_HANDLE(xen_memory_reservation_t);
  * Returns zero on complete success, otherwise a negative error code=2E
  * On complete success then always @nr_exchanged =3D=3D @in=2Enr_extents=
=2E
  * On partial success @nr_exchanged indicates how much work was done=2E
+ *
+ * Note that only PV guests can use this operation=2E
  */
 #define XENMEM_exchange             11
 struct xen_memory_exchange {
@@ -115,7 +100,7 @@ struct xen_memory_exchange {
      * [IN/OUT] Details of new memory extents=2E
      * We require that:
      *  1=2E @in=2Edomid =3D=3D @out=2Edomid
-     *  2=2E @in=2Enr_extents  << @in=2Eextent_order =3D=3D=20
+     *  2=2E @in=2Enr_extents  << @in=2Eextent_order =3D=3D
      *     @out=2Enr_extents << @out=2Eextent_order
      *  3=2E @in=2Eextent_start and @out=2Eextent_start lists must not ov=
erlap
      *  4=2E @out=2Eextent_start lists GPFN bases to be populated
@@ -146,16 +131,23 @@ DEFINE_XEN_GUEST_HANDLE(xen_memory_exchange_t);
  */
 #define XENMEM_maximum_ram_page     2
=20
+struct xen_memory_domain {
+    /* [IN] Domain information is being queried for=2E */
+    domid_t domid;
+};
+
 /*
  * Returns the current or maximum memory reservation, in pages, of the
  * specified domain (may be DOMID_SELF)=2E Returns -ve errcode on failure=
=2E
- * arg =3D=3D addr of domid_t=2E
+ * arg =3D=3D addr of struct xen_memory_domain=2E
  */
 #define XENMEM_current_reservation  3
 #define XENMEM_maximum_reservation  4
=20
 /*
- * Returns the maximum GPFN in use by the guest, or -ve errcode on failur=
e=2E
+ * Returns the maximum GFN in use by the specified domain (may be DOMID_S=
ELF)=2E
+ * Returns -ve errcode on failure=2E
+ * arg =3D=3D addr of struct xen_memory_domain=2E
  */
 #define XENMEM_maximum_gpfn         14
=20
@@ -222,14 +214,14 @@ DEFINE_XEN_GUEST_HANDLE(xen_machphys_mapping_t);
                                     * XENMEM_add_to_physmap_batch only=2E=
 */
 #define XENMAPSPACE_dev_mmio     5 /* device mmio region
                                       ARM only; the region is mapped in
-                                      Stage-2 using the memory attribute
-                                      "Device-nGnRE" (previously named
-                                      "Device" on ARMv7) */
+                                      Stage-2 using the Normal Memory
+                                      Inner/Outer Write-Back Cacheable
+                                      memory attribute=2E */
 /* ` } */
=20
 /*
  * Sets the GPFN at which a particular page appears in the specified gues=
t's
- * pseudophysical address space=2E
+ * physical address space (translated guests only)=2E
  * arg =3D=3D addr of xen_add_to_physmap_t=2E
  */
 #define XENMEM_add_to_physmap      7
@@ -242,7 +234,7 @@ struct xen_add_to_physmap {
=20
     unsigned int space; /* =3D> enum phys_map_space */
=20
-#define XENMAPIDX_grant_table_status 0x80000000
+#define XENMAPIDX_grant_table_status 0x80000000U
=20
     /* Index into space being mapped=2E */
     xen_ulong_t idx;
@@ -296,7 +288,7 @@ DEFINE_XEN_GUEST_HANDLE(xen_add_to_physmap_range_t);
=20
 /*
  * Unmaps the page appearing at a particular GPFN from the specified gues=
t's
- * pseudophysical address space=2E
+ * physical address space (translated guests only)=2E
  * arg =3D=3D addr of xen_remove_from_physmap_t=2E
  */
 #define XENMEM_remove_from_physmap      15
@@ -339,6 +331,8 @@ DEFINE_XEN_GUEST_HANDLE(xen_memory_map_t);
 /*
  * Returns the real physical memory map=2E Passes the same structure as
  * XENMEM_memory_map=2E
+ * Specifying buffer as NULL will return the number of entries required
+ * to store the complete memory map=2E
  * arg =3D=3D addr of xen_memory_map_t=2E
  */
 #define XENMEM_machine_memory_map   10
@@ -378,7 +372,7 @@ typedef struct xen_pod_target xen_pod_target_t;
=20
 /*
  * Get the number of MFNs saved through memory sharing=2E
- * The call never fails=2E=20
+ * The call never fails=2E
  */
 #define XENMEM_get_sharing_freed_pages    18
 #define XENMEM_get_sharing_shared_pages   19
@@ -392,10 +386,10 @@ struct xen_mem_paging_op {
     uint8_t     op;         /* XENMEM_paging_op_* */
     domid_t     domain;
=20
-    /* PAGING_PREP IN: buffer to immediately fill page in */
-    uint64_aligned_t    buffer;
-    /* Other OPs */
-    uint64_aligned_t    gfn;           /* IN:  gfn of page being operated=
 on */
+    /* IN: (XENMEM_paging_op_prep) buffer to immediately fill page from *=
/
+    XEN_GUEST_HANDLE_64(const_uint8) buffer;
+    /* IN:  gfn of page being operated on */
+    uint64_aligned_t    gfn;
 };
 typedef struct xen_mem_paging_op xen_mem_paging_op_t;
 DEFINE_XEN_GUEST_HANDLE(xen_mem_paging_op_t);
@@ -432,6 +426,15 @@ typedef enum {
      * pausing the vcpu
      */
     XENMEM_access_n2rwx,
+
+    /*
+     * Same as XENMEM_access_r, but on processors with
+     * the TERTIARY_EXEC_EPT_PAGING_WRITE support,
+     * CPU-initiated page-table walks can still
+     * write to it (e=2Eg=2E, update A/D bits)
+     */
+    XENMEM_access_r_pw,
+
     /* Take the domain default */
     XENMEM_access_default
 } xenmem_access_t;
@@ -478,18 +481,20 @@ DEFINE_XEN_GUEST_HANDLE(xen_mem_access_op_t);
 #define XENMEM_sharing_op_add_physmap       6
 #define XENMEM_sharing_op_audit             7
 #define XENMEM_sharing_op_range_share       8
+#define XENMEM_sharing_op_fork              9
+#define XENMEM_sharing_op_fork_reset        10
=20
 #define XENMEM_SHARING_OP_S_HANDLE_INVALID  (-10)
 #define XENMEM_SHARING_OP_C_HANDLE_INVALID  (-9)
=20
 /* The following allows sharing of grant refs=2E This is useful
  * for sharing utilities sitting as "filters" in IO backends
- * (e=2Eg=2E memshr + blktap(2))=2E The IO backend is only exposed=20
+ * (e=2Eg=2E memshr + blktap(2))=2E The IO backend is only exposed
  * to grant references, and this allows sharing of the grefs */
 #define XENMEM_SHARING_OP_FIELD_IS_GREF_FLAG   (xen_mk_ullong(1) << 62)
=20
 #define XENMEM_SHARING_OP_FIELD_MAKE_GREF(field, val)  \
-    (field) =3D (XENMEM_SHARING_OP_FIELD_IS_GREF_FLAG | val)
+    (field) =3D (XENMEM_SHARING_OP_FIELD_IS_GREF_FLAG | (val))
 #define XENMEM_SHARING_OP_FIELD_IS_GREF(field)         \
     ((field) & XENMEM_SHARING_OP_FIELD_IS_GREF_FLAG)
 #define XENMEM_SHARING_OP_FIELD_GET_GREF(field)        \
@@ -528,6 +533,17 @@ struct xen_mem_sharing_op {
                 uint32_t gref;     /* IN: gref to debug         */
             } u;
         } debug;
+        struct mem_sharing_op_fork {      /* OP_FORK{,_RESET} */
+            domid_t parent_domain;        /* IN: parent's domain id */
+/* Only makes sense for short-lived forks */
+#define XENMEM_FORK_WITH_IOMMU_ALLOWED (1u << 0)
+/* Only makes sense for short-lived forks */
+#define XENMEM_FORK_BLOCK_INTERRUPTS   (1u << 1)
+#define XENMEM_FORK_RESET_STATE        (1u << 2)
+#define XENMEM_FORK_RESET_MEMORY       (1u << 3)
+            uint16_t flags;               /* IN: optional settings */
+            uint32_t pad;                 /* Must be set to 0 */
+        } fork;
     } u;
 };
 typedef struct xen_mem_sharing_op xen_mem_sharing_op_t;
@@ -549,8 +565,8 @@ DEFINE_XEN_GUEST_HANDLE(xen_mem_sharing_op_t);
  *
  * Note that a valid claim may be staked even after memory has been
  * allocated for a domain=2E  In this case, the claim is not incremental,
- * i=2Ee=2E if the domain's tot_pages is 3, and a claim is staked for 10,
- * only 7 additional pages are claimed=2E
+ * i=2Ee=2E if the domain's total page count is 3, and a claim is staked
+ * for 10, only 7 additional pages are claimed=2E
  *
  * Caller must be privileged or the hypercall fails=2E
  */
@@ -589,7 +605,7 @@ struct xen_reserved_device_memory_map {
     XEN_GUEST_HANDLE(xen_reserved_device_memory_t) buffer;
     /* IN */
     union {
-        struct physdev_pci_device pci;
+        physdev_pci_device_t pci;
     } dev;
 };
 typedef struct xen_reserved_device_memory_map xen_reserved_device_memory_=
map_t;
@@ -597,6 +613,84 @@ DEFINE_XEN_GUEST_HANDLE(xen_reserved_device_memory_ma=
p_t);
=20
 #endif /* defined(__XEN__) || defined(__XEN_TOOLS__) */
=20
+/*
+ * Get the pages for a particular guest resource, so that they can be
+ * mapped directly by a tools domain=2E
+ */
+#define XENMEM_acquire_resource 28
+struct xen_mem_acquire_resource {
+    /* IN - The domain whose resource is to be mapped */
+    domid_t domid;
+    /* IN - the type of resource */
+    uint16_t type;
+
+#define XENMEM_resource_ioreq_server 0
+#define XENMEM_resource_grant_table 1
+#define XENMEM_resource_vmtrace_buf 2
+
+    /*
+     * IN - a type-specific resource identifier, which must be zero
+     *      unless stated otherwise=2E
+     *
+     * type =3D=3D XENMEM_resource_ioreq_server -> id =3D=3D ioreq server=
 id
+     * type =3D=3D XENMEM_resource_grant_table -> id defined below
+     */
+    uint32_t id;
+
+#define XENMEM_resource_grant_table_id_shared 0
+#define XENMEM_resource_grant_table_id_status 1
+
+    /*
+     * IN/OUT
+     *
+     * As an IN parameter number of frames of the resource to be mapped=
=2E
+     * This value may be updated over the course of the operation=2E
+     *
+     * When frame_list is NULL and nr_frames is 0, this is interpreted as=
 a
+     * request for the size of the resource, which shall be returned in t=
he
+     * nr_frames field=2E
+     *
+     * The size of a resource will never be zero, but a nonzero result do=
esn't
+     * guarantee that a subsequent mapping request will be successful=2E =
 There
+     * are further type/id specific constraints which may change between =
the
+     * two calls=2E
+     */
+    uint32_t nr_frames;
+    /*
+     * Padding field, must be zero on input=2E
+     * In a previous version this was an output field with the lowest bit
+     * named XENMEM_rsrc_acq_caller_owned=2E Future versions of this inte=
rface
+     * will not reuse this bit as an output with the field being zero on
+     * input=2E
+     */
+    uint32_t pad;
+    /*
+     * IN - the index of the initial frame to be mapped=2E This parameter
+     *      is ignored if nr_frames is 0=2E  This value may be updated
+     *      over the course of the operation=2E
+     */
+    uint64_t frame;
+
+#define XENMEM_resource_ioreq_server_frame_bufioreq 0
+#define XENMEM_resource_ioreq_server_frame_ioreq(n) (1 + (n))
+
+    /*
+     * IN/OUT - If the tools domain is PV then, upon return, frame_list
+     *          will be populated with the MFNs of the resource=2E
+     *          If the tools domain is HVM then it is expected that, on
+     *          entry, frame_list will be populated with a list of GFNs
+     *          that will be mapped to the MFNs of the resource=2E
+     *          If -EIO is returned then the frame_list has only been
+     *          partially mapped and it is up to the caller to unmap all
+     *          the GFNs=2E
+     *          This parameter may be NULL if nr_frames is 0=2E  This
+     *          value may be updated over the course of the operation=2E
+     */
+    XEN_GUEST_HANDLE(xen_pfn_t) frame_list;
+};
+typedef struct xen_mem_acquire_resource xen_mem_acquire_resource_t;
+DEFINE_XEN_GUEST_HANDLE(xen_mem_acquire_resource_t);
+
 /*
  * XENMEM_get_vnumainfo used by guest to get
  * vNUMA topology from hypervisor=2E
@@ -646,7 +740,7 @@ struct xen_vnuma_topology_info {
 typedef struct xen_vnuma_topology_info xen_vnuma_topology_info_t;
 DEFINE_XEN_GUEST_HANDLE(xen_vnuma_topology_info_t);
=20
-/* Next available subop number is 28 */
+/* Next available subop number is 29 */
=20
 #endif /* __XEN_PUBLIC_MEMORY_H__ */
=20
diff --git a/include/xen/public/physdev=2Eh b/include/xen/public/physdev=
=2Eh
index 8c36c03=2E=2Ee622066 100644
--- a/include/xen/public/physdev=2Eh
+++ b/include/xen/public/physdev=2Eh
@@ -1,22 +1,5 @@
+/* SPDX-License-Identifier: MIT */
 /*
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
  * Copyright (c) 2006, Keir Fraser
  */
=20
@@ -104,6 +87,9 @@ DEFINE_XEN_GUEST_HANDLE(physdev_set_iopl_t);
 /*
  * Set the current VCPU's I/O-port permissions bitmap=2E
  * @arg =3D=3D pointer to physdev_set_iobitmap structure=2E
+ *
+ * When @nr_ports is non-zero, Xen, like real CPUs and the TSS IOPB, alwa=
ys
+ * reads 2 bytes from @bitmap, which might be one byte beyond @nr_ports=
=2E
  */
 #define PHYSDEVOP_set_iobitmap           7
 struct physdev_set_iobitmap {
@@ -148,7 +134,7 @@ struct physdev_irq {
 };
 typedef struct physdev_irq physdev_irq_t;
 DEFINE_XEN_GUEST_HANDLE(physdev_irq_t);
-=20
+
 #define MAP_PIRQ_TYPE_MSI               0x0
 #define MAP_PIRQ_TYPE_GSI               0x1
 #define MAP_PIRQ_TYPE_UNKNOWN           0x2
@@ -192,7 +178,7 @@ struct physdev_manage_pci {
     /* IN */
     uint8_t bus;
     uint8_t devfn;
-};=20
+};
=20
 typedef struct physdev_manage_pci physdev_manage_pci_t;
 DEFINE_XEN_GUEST_HANDLE(physdev_manage_pci_t);
@@ -211,8 +197,8 @@ struct physdev_manage_pci_ext {
     /* IN */
     uint8_t bus;
     uint8_t devfn;
-    unsigned is_extfn;
-    unsigned is_virtfn;
+    uint32_t is_extfn;
+    uint32_t is_virtfn;
     struct {
         uint8_t bus;
         uint8_t devfn;
@@ -229,11 +215,11 @@ DEFINE_XEN_GUEST_HANDLE(physdev_manage_pci_ext_t);
 struct physdev_op {
     uint32_t cmd;
     union {
-        struct physdev_irq_status_query      irq_status_query;
-        struct physdev_set_iopl              set_iopl;
-        struct physdev_set_iobitmap          set_iobitmap;
-        struct physdev_apic                  apic_op;
-        struct physdev_irq                   irq_op;
+        physdev_irq_status_query_t irq_status_query;
+        physdev_set_iopl_t         set_iopl;
+        physdev_set_iobitmap_t     set_iobitmap;
+        physdev_apic_t             apic_op;
+        physdev_irq_t              irq_op;
     } u;
 };
 typedef struct physdev_op physdev_op_t;
@@ -258,7 +244,7 @@ DEFINE_XEN_GUEST_HANDLE(physdev_setup_gsi_t);
  * the hypercall returns a free pirq */
 #define PHYSDEVOP_get_free_pirq    23
 struct physdev_get_free_pirq {
-    /* IN */=20
+    /* IN */
     int type;
     /* OUT */
     uint32_t pirq;
@@ -300,11 +286,7 @@ struct physdev_pci_device_add {
      * First element ([0]) is PXM domain associated with the device (if
      * XEN_PCI_DEV_PXM is set)
      */
-#if defined(__STDC_VERSION__) && __STDC_VERSION__ >=3D 199901L
-    uint32_t optarr[];
-#elif defined(__GNUC__)
-    uint32_t optarr[0];
-#endif
+    uint32_t optarr[XEN_FLEX_ARRAY_DIM];
 };
 typedef struct physdev_pci_device_add physdev_pci_device_add_t;
 DEFINE_XEN_GUEST_HANDLE(physdev_pci_device_add_t);
@@ -317,6 +299,13 @@ DEFINE_XEN_GUEST_HANDLE(physdev_pci_device_add_t);
  */
 #define PHYSDEVOP_prepare_msix          30
 #define PHYSDEVOP_release_msix          31
+/*
+ * Notify the hypervisor that a PCI device has been reset, so that any
+ * internally cached state is regenerated=2E  Should be called after any
+ * device reset performed by the hardware domain=2E
+ */
+#define PHYSDEVOP_pci_device_reset      32
+
 struct physdev_pci_device {
     /* IN */
     uint16_t seg;
@@ -326,6 +315,16 @@ struct physdev_pci_device {
 typedef struct physdev_pci_device physdev_pci_device_t;
 DEFINE_XEN_GUEST_HANDLE(physdev_pci_device_t);
=20
+struct pci_device_reset {
+    physdev_pci_device_t dev;
+#define PCI_DEVICE_RESET_COLD 0x0
+#define PCI_DEVICE_RESET_WARM 0x1
+#define PCI_DEVICE_RESET_HOT  0x2
+#define PCI_DEVICE_RESET_FLR  0x3
+#define PCI_DEVICE_RESET_MASK 0x3
+    uint32_t flags;
+};
+
 #define PHYSDEVOP_DBGP_RESET_PREPARE    1
 #define PHYSDEVOP_DBGP_RESET_DONE       2
=20
@@ -338,7 +337,7 @@ struct physdev_dbgp_op {
     uint8_t op;
     uint8_t bus;
     union {
-        struct physdev_pci_device pci;
+        physdev_pci_device_t pci;
     } u;
 };
 typedef struct physdev_dbgp_op physdev_dbgp_op_t;
diff --git a/include/xen/public/sched=2Eh b/include/xen/public/sched=2Eh
index 2aafb9e=2E=2E3e34d0d 100644
--- a/include/xen/public/sched=2Eh
+++ b/include/xen/public/sched=2Eh
@@ -1,26 +1,9 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * sched=2Eh
  *
  * Scheduler state interactions
  *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
  * Copyright (c) 2005, Keir Fraser <keir@xensource=2Ecom>
  */
=20
diff --git a/include/xen/public/trace=2Eh b/include/xen/public/trace=2Eh
index 49472f3=2E=2E19b3551 100644
--- a/include/xen/public/trace=2Eh
+++ b/include/xen/public/trace=2Eh
@@ -1,23 +1,6 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * include/public/trace=2Eh
- *=20
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
  *
  * Mark Williamson, (C) 2004 Intel Research Cambridge
  * Copyright (C) 2005 Bin Ren
@@ -78,12 +61,13 @@
 /* #define XEN_SCHEDULER_SEDF 2 (Removed) */
 #define TRC_SCHED_ARINC653 3
 #define TRC_SCHED_RTDS     4
+#define TRC_SCHED_SNULL    5
=20
 /* Per-scheduler tracing */
 #define TRC_SCHED_CLASS_EVT(_c, _e) \
   ( ( TRC_SCHED_CLASS | \
       ((TRC_SCHED_##_c << TRC_SCHED_ID_SHIFT) & TRC_SCHED_ID_MASK) ) + \
-    (_e & TRC_SCHED_EVT_MASK) )
+    ((_e) & TRC_SCHED_EVT_MASK) )
=20
 /* Trace classes for DOM0 operations */
 #define TRC_DOM0_DOMOPS     0x00041000   /* Domains manipulations */
@@ -115,6 +99,7 @@
 #define TRC_SCHED_SWITCH_INFPREV (TRC_SCHED_VERBOSE + 14)
 #define TRC_SCHED_SWITCH_INFNEXT (TRC_SCHED_VERBOSE + 15)
 #define TRC_SCHED_SHUTDOWN_CODE  (TRC_SCHED_VERBOSE + 16)
+#define TRC_SCHED_SWITCH_INFCONT (TRC_SCHED_VERBOSE + 17)
=20
 #define TRC_DOM0_DOM_ADD         (TRC_DOM0_DOMOPS + 1)
 #define TRC_DOM0_DOM_REM         (TRC_DOM0_DOMOPS + 2)
@@ -172,7 +157,7 @@
  */
 #define TRC_PV_HYPERCALL_V2_ARG_32(i) (0x1 << (20 + 2*(i)))
 #define TRC_PV_HYPERCALL_V2_ARG_64(i) (0x2 << (20 + 2*(i)))
-#define TRC_PV_HYPERCALL_V2_ARG_MASK  (0xfff00000)
+#define TRC_PV_HYPERCALL_V2_ARG_MASK  0xfff00000U
=20
 #define TRC_SHADOW_NOT_SHADOW                 (TRC_SHADOW +  1)
 #define TRC_SHADOW_FAST_PROPAGATE             (TRC_SHADOW +  2)
@@ -193,8 +178,10 @@
 /* trace events per subclass */
 #define TRC_HVM_NESTEDFLAG      (0x400)
 #define TRC_HVM_VMENTRY         (TRC_HVM_ENTRYEXIT + 0x01)
-#define TRC_HVM_VMEXIT          (TRC_HVM_ENTRYEXIT + 0x02)
-#define TRC_HVM_VMEXIT64        (TRC_HVM_ENTRYEXIT + TRC_64_FLAG + 0x02)
+#define TRC_HVM_VMX_EXIT        (TRC_HVM_ENTRYEXIT + 0x02)
+#define TRC_HVM_VMX_EXIT64      (TRC_HVM_ENTRYEXIT + TRC_64_FLAG + 0x02)
+#define TRC_HVM_SVM_EXIT        (TRC_HVM_ENTRYEXIT + 0x03)
+#define TRC_HVM_SVM_EXIT64      (TRC_HVM_ENTRYEXIT + TRC_64_FLAG + 0x03)
 #define TRC_HVM_PF_XEN          (TRC_HVM_HANDLER + 0x01)
 #define TRC_HVM_PF_XEN64        (TRC_HVM_HANDLER + TRC_64_FLAG + 0x01)
 #define TRC_HVM_PF_INJECT       (TRC_HVM_HANDLER + 0x02)
@@ -233,6 +220,8 @@
 #define TRC_HVM_TRAP             (TRC_HVM_HANDLER + 0x23)
 #define TRC_HVM_TRAP_DEBUG       (TRC_HVM_HANDLER + 0x24)
 #define TRC_HVM_VLAPIC           (TRC_HVM_HANDLER + 0x25)
+#define TRC_HVM_XCR_READ64      (TRC_HVM_HANDLER + TRC_64_FLAG + 0x26)
+#define TRC_HVM_XCR_WRITE64     (TRC_HVM_HANDLER + TRC_64_FLAG + 0x27)
=20
 #define TRC_HVM_IOPORT_WRITE    (TRC_HVM_HANDLER + 0x216)
 #define TRC_HVM_IOMEM_WRITE     (TRC_HVM_HANDLER + 0x217)
diff --git a/include/xen/public/vcpu=2Eh b/include/xen/public/vcpu=2Eh
index 3623af9=2E=2E41af6c2 100644
--- a/include/xen/public/vcpu=2Eh
+++ b/include/xen/public/vcpu=2Eh
@@ -1,26 +1,9 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * vcpu=2Eh
  *
  * VCPU initialisation, query, and hotplug=2E
  *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
  * Copyright (c) 2005, Keir Fraser <keir@xensource=2Ecom>
  */
=20
@@ -31,7 +14,7 @@
=20
 /*
  * Prototype for this hypercall is:
- *  long vcpu_op(int cmd, unsigned int vcpuid, void *extra_args)
+ *  LONG_PTR vcpu_op(int cmd, unsigned int vcpuid, void *extra_args)
  * @cmd        =3D=3D VCPUOP_??? (VCPU operation)=2E
  * @vcpuid     =3D=3D VCPU to operate on=2E
  * @extra_args =3D=3D Operation-specific extra arguments (NULL if none)=
=2E
@@ -127,6 +110,8 @@ DEFINE_XEN_GUEST_HANDLE(vcpu_runstate_info_t);
  *     runstate=2Estate will always be RUNSTATE_running and
  *     runstate=2Estate_entry_time will indicate the system time at which=
 the
  *     VCPU was last scheduled to run=2E
+ *  3=2E New code wants to prefer VCPUOP_register_runstate_phys_area, and=
 only
+ *     fall back to the operation here for backwards compatibility=2E
  * @extra_arg =3D=3D pointer to vcpu_register_runstate_memory_area struct=
ure=2E
  */
 #define VCPUOP_register_runstate_memory_area 5
@@ -167,7 +152,10 @@ typedef struct vcpu_set_singleshot_timer vcpu_set_sin=
gleshot_timer_t;
 DEFINE_XEN_GUEST_HANDLE(vcpu_set_singleshot_timer_t);
=20
 /* Flags to VCPUOP_set_singleshot_timer=2E */
- /* Require the timeout to be in the future (return -ETIME if it's passed=
)=2E */
+ /*
+  * Request the timeout to be in the future (return -ETIME if it's passed=
)
+  * but can be ignored by the hypervisor=2E
+  */
 #define _VCPU_SSHOTTMR_future (0)
 #define VCPU_SSHOTTMR_future  (1U << _VCPU_SSHOTTMR_future)
=20
@@ -221,6 +209,9 @@ DEFINE_XEN_GUEST_HANDLE(vcpu_get_physid_t);
  * segment limit)=2E  It can then apply the normal algorithm to compute
  * system time from the tsc=2E
  *
+ * New code wants to prefer VCPUOP_register_vcpu_time_phys_area, and only
+ * fall back to the operation here for backwards compatibility=2E
+ *
  * @extra_arg =3D=3D pointer to vcpu_register_time_info_memory_area struc=
ture=2E
  */
 #define VCPUOP_register_vcpu_time_memory_area   13
@@ -235,6 +226,23 @@ struct vcpu_register_time_memory_area {
 typedef struct vcpu_register_time_memory_area vcpu_register_time_memory_a=
rea_t;
 DEFINE_XEN_GUEST_HANDLE(vcpu_register_time_memory_area_t);
=20
+/*
+ * Like the respective VCPUOP_register_*_memory_area, just using the "add=
r=2Ep"
+ * field of the supplied struct as a guest physical address (i=2Ee=2E in =
GFN space)=2E
+ * The respective area may not cross a page boundary=2E  Pass ~0 to unreg=
ister an
+ * area=2E  Note that as LONG_PTR as an area is registered by physical ad=
dress, the
+ * linear address based area will not be serviced (updated) by the hyperv=
isor=2E
+ *
+ * Note that the area registered via VCPUOP_register_runstate_memory_area=
 will
+ * be updated in the same manner as the one registered via virtual addres=
s PLUS
+ * VMASST_TYPE_runstate_update_flag engaged by the domain=2E
+ *
+ * XENFEAT_{runstate,vcpu_time}_phys_area feature bits signal the availab=
ility
+ * of these ops=2E
+ */
+#define VCPUOP_register_runstate_phys_area      14
+#define VCPUOP_register_vcpu_time_phys_area     15
+
 #endif /* __XEN_PUBLIC_VCPU_H__ */
=20
 /*
diff --git a/include/xen/public/version=2Eh b/include/xen/public/version=
=2Eh
index cb84565=2E=2E97c6219 100644
--- a/include/xen/public/version=2Eh
+++ b/include/xen/public/version=2Eh
@@ -1,25 +1,8 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * version=2Eh
- *=20
+ *
  * Xen version, type, and compile information=2E
- *=20
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
  *
  * Copyright (c) 2005, Nguyen Anh Quynh <aquynh@gmail=2Ecom>
  * Copyright (c) 2005, Keir Fraser <keir@xensource=2Ecom>
@@ -36,12 +19,20 @@
 /* arg =3D=3D NULL; returns major:minor (16:16)=2E */
 #define XENVER_version      0
=20
-/* arg =3D=3D xen_extraversion_t=2E */
+/*
+ * arg =3D=3D xen_extraversion_t=2E
+ *
+ * This API/ABI is broken=2E  Use XENVER_extraversion2 where possible=2E
+ */
 #define XENVER_extraversion 1
 typedef char xen_extraversion_t[16];
 #define XEN_EXTRAVERSION_LEN (sizeof(xen_extraversion_t))
=20
-/* arg =3D=3D xen_compile_info_t=2E */
+/*
+ * arg =3D=3D xen_compile_info_t=2E
+ *
+ * This API/ABI is broken and truncates data=2E
+ */
 #define XENVER_compile_info 2
 struct xen_compile_info {
     char compiler[64];
@@ -51,14 +42,51 @@ struct xen_compile_info {
 };
 typedef struct xen_compile_info xen_compile_info_t;
=20
+/*
+ * arg =3D=3D xen_capabilities_info_t=2E
+ *
+ * This API/ABI is broken=2E  Use XENVER_capabilities2 where possible=2E
+ */
 #define XENVER_capabilities 3
 typedef char xen_capabilities_info_t[1024];
 #define XEN_CAPABILITIES_INFO_LEN (sizeof(xen_capabilities_info_t))
=20
+/*
+ * arg =3D=3D xen_changeset_info_t=2E
+ *
+ * This API/ABI is broken=2E  Use XENVER_changeset2 where possible=2E
+ */
 #define XENVER_changeset 4
 typedef char xen_changeset_info_t[64];
 #define XEN_CHANGESET_INFO_LEN (sizeof(xen_changeset_info_t))
=20
+/*
+ * This API is problematic=2E
+ *
+ * It is only applicable to guests which share pagetables with Xen (x86 P=
V
+ * guests), but unfortunately has leaked into other guest types and
+ * architectures with an expectation of never failing=2E
+ *
+ * It is intended to identify the virtual address split between guest ker=
nel
+ * and Xen=2E
+ *
+ * For 32bit PV guests, there is a split, and it is variable (between two
+ * fixed bounds), and this boundary is reported to guests=2E  The detail =
missing
+ * from the hypercall is that the second boundary is the 32bit architectu=
ral
+ * boundary at 4G=2E
+ *
+ * For 64bit PV guests, Xen lives at the bottom of the upper canonical ra=
nge=2E
+ * This hypercall happens to report the architectural boundary, not the o=
ne
+ * which would be necessary to make a variable split work=2E  As such, th=
is
+ * hypercall entirely useless for 64bit PV guests, and all inspected
+ * implementations at the time of writing were found to have compile time
+ * expectations about the split=2E
+ *
+ * For architectures where this hypercall is implemented, for backwards
+ * compatibility with the expectation of the hypercall never failing Xen =
will
+ * return 0 instead of failing with -ENOSYS in cases where the guest shou=
ld
+ * not be making the hypercall=2E
+ */
 #define XENVER_platform_parameters 5
 struct xen_platform_parameters {
     xen_ulong_t virt_start;
@@ -67,7 +95,7 @@ typedef struct xen_platform_parameters xen_platform_para=
meters_t;
=20
 #define XENVER_get_features 6
 struct xen_feature_info {
-    unsigned int submap_idx;    /* IN: which 32-bit submap to return */
+    uint32_t     submap_idx;    /* IN: which 32-bit submap to return */
     uint32_t     submap;        /* OUT: 32-bit submap */
 };
 typedef struct xen_feature_info xen_feature_info_t;
@@ -85,24 +113,65 @@ typedef struct xen_feature_info xen_feature_info_t;
  */
 #define XENVER_guest_handle 8
=20
+/*
+ * arg =3D=3D xen_commandline_t=2E
+ *
+ * This API/ABI is broken=2E  Use XENVER_commandline2 where possible=2E
+ */
 #define XENVER_commandline 9
 typedef char xen_commandline_t[1024];
=20
 /*
  * Return value is the number of bytes written, or XEN_Exx on error=2E
  * Calling with empty parameter returns the size of build_id=2E
+ *
+ * Note: structure only kept for backwards compatibility=2E  Xen operates=
 in
+ * terms of xen_varbuf_t=2E
  */
-#define XENVER_build_id 10
 struct xen_build_id {
         uint32_t        len; /* IN: size of buf[]=2E */
-#if defined(__STDC_VERSION__) && __STDC_VERSION__ >=3D 199901L
-        unsigned char   buf[];
-#elif defined(__GNUC__)
-        unsigned char   buf[1]; /* OUT: Variable length buffer with build=
_id=2E */
-#endif
+        unsigned char   buf[XEN_FLEX_ARRAY_DIM];
+                             /* OUT: Variable length buffer with build_id=
=2E */
 };
 typedef struct xen_build_id xen_build_id_t;
=20
+/*
+ * Container for an arbitrary variable length buffer=2E
+ */
+struct xen_varbuf {
+    uint32_t len;                          /* IN:  size of buf[] in bytes=
=2E */
+    unsigned char buf[XEN_FLEX_ARRAY_DIM]; /* OUT: requested data=2E     =
    */
+};
+typedef struct xen_varbuf xen_varbuf_t;
+
+/*
+ * arg =3D=3D xen_varbuf_t
+ *
+ * Equivalent to the original ops, but with a non-truncating API/ABI=2E
+ *
+ * These hypercalls can fail for a number of reasons=2E  All callers must=
 handle
+ * -XEN_xxx return values appropriately=2E
+ *
+ * Passing arg =3D=3D NULL is a request for size, which will be signalled=
 with a
+ * non-negative return value=2E  Note: a return size of 0 may be legitima=
te for
+ * the requested subop=2E
+ *
+ * Otherwise, the input xen_varbuf_t provides the size of the following
+ * buffer=2E  Xen will fill the buffer, and return the number of bytes wr=
itten
+ * (e=2Eg=2E if the input buffer was LONG_PTRer than necessary)=2E
+ *
+ * Some subops may return binary data=2E  Some subops may be expected to =
return
+ * textural data=2E  These are returned without a NUL terminator, and whi=
le the
+ * contents is expected to be ASCII/UTF-8, Xen makes no guarentees to thi=
s
+ * effect=2E  e=2Eg=2E Xen has no control over the formatting used for th=
e command
+ * line=2E
+ */
+#define XENVER_build_id      10
+#define XENVER_extraversion2 11
+#define XENVER_capabilities2 12
+#define XENVER_changeset2    13
+#define XENVER_commandline2  14
+
 #endif /* __XEN_PUBLIC_VERSION_H__ */
=20
 /*
diff --git a/include/xen/public/xen-compat=2Eh b/include/xen/public/xen-co=
mpat=2Eh
index dd8a5c0=2E=2E078b796 100644
--- a/include/xen/public/xen-compat=2Eh
+++ b/include/xen/public/xen-compat=2Eh
@@ -1,25 +1,8 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * xen-compat=2Eh
- *=20
- * Guest OS interface to Xen=2E  Compatibility layer=2E
- *=20
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
  *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
+ * Guest OS interface to Xen=2E  Compatibility layer=2E
  *
  * Copyright (c) 2006, Christian Limpach
  */
@@ -27,7 +10,7 @@
 #ifndef __XEN_PUBLIC_XEN_COMPAT_H__
 #define __XEN_PUBLIC_XEN_COMPAT_H__
=20
-#define __XEN_LATEST_INTERFACE_VERSION__ 0x00040800
+#define __XEN_LATEST_INTERFACE_VERSION__ 0x00041300
=20
 #if defined(__XEN__) || defined(__XEN_TOOLS__)
 /* Xen is built with matching headers and implements the latest interface=
=2E */
@@ -41,4 +24,6 @@
 #error "These header files do not support the requested interface version=
=2E"
 #endif
=20
+#define COMPAT_FLEX_ARRAY_DIM XEN_FLEX_ARRAY_DIM
+
 #endif /* __XEN_PUBLIC_XEN_COMPAT_H__ */
diff --git a/include/xen/public/xen=2Eh b/include/xen/public/xen=2Eh
index ceb48cf=2E=2E728bda2 100644
--- a/include/xen/public/xen=2Eh
+++ b/include/xen/public/xen=2Eh
@@ -1,25 +1,8 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * xen=2Eh
- *=20
+ *
  * Guest OS interface to Xen=2E
- *=20
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
  *
  * Copyright (c) 2004, K A Fraser
  */
@@ -33,11 +16,15 @@
 #include "arch-x86/xen=2Eh"
 #elif defined(__arm__) || defined (__aarch64__)
 #include "arch-arm=2Eh"
+#elif defined(__powerpc64__)
+#include "arch-ppc=2Eh"
+#elif defined(__riscv)
+#include "arch-riscv=2Eh"
 #else
 #error "Unsupported architecture"
 #endif
=20
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
 /* Guest handles for primitive C types=2E */
 DEFINE_XEN_GUEST_HANDLE(char);
 __DEFINE_XEN_GUEST_HANDLE(uchar, unsigned char);
@@ -53,6 +40,15 @@ DEFINE_XEN_GUEST_HANDLE(uint64_t);
 DEFINE_XEN_GUEST_HANDLE(xen_pfn_t);
 DEFINE_XEN_GUEST_HANDLE(xen_ulong_t);
=20
+/* Define a variable length array (depends on compiler)=2E */
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >=3D 199901L
+#define XEN_FLEX_ARRAY_DIM
+#elif defined(__GNUC__)
+#define XEN_FLEX_ARRAY_DIM  0
+#else
+#define XEN_FLEX_ARRAY_DIM  1 /* variable size */
+#endif
+
 /* Turn a plain number into a C unsigned (LONG_PTR (LONG_PTR)) constant=
=2E */
 #define __xen_mk_uint(x)  x ## U
 #define __xen_mk_ulong(x) x ## UL
@@ -110,7 +106,7 @@ DEFINE_XEN_GUEST_HANDLE(xen_ulong_t);
 #define __HYPERVISOR_nmi_op               28
 #define __HYPERVISOR_sched_op             29
 #define __HYPERVISOR_callback_op          30
-#define __HYPERVISOR_xenoprof_op          31
+#define __HYPERVISOR_xenoprof_op          31 /* Dropped in Xen 4=2E22 */
 #define __HYPERVISOR_event_channel_op     32
 #define __HYPERVISOR_physdev_op           33
 #define __HYPERVISOR_hvm_op               34
@@ -118,8 +114,10 @@ DEFINE_XEN_GUEST_HANDLE(xen_ulong_t);
 #define __HYPERVISOR_domctl               36
 #define __HYPERVISOR_kexec_op             37
 #define __HYPERVISOR_tmem_op              38
-#define __HYPERVISOR_xc_reserved_op       39 /* reserved for XenClient */
+#define __HYPERVISOR_argo_op              39
 #define __HYPERVISOR_xenpmu_op            40
+#define __HYPERVISOR_dm_op                41
+#define __HYPERVISOR_hypfs_op             42
=20
 /* Architecture-specific hypercall definitions=2E */
 #define __HYPERVISOR_arch_0               48
@@ -156,30 +154,39 @@ DEFINE_XEN_GUEST_HANDLE(xen_ulong_t);
 #define __HYPERVISOR_dom0_op __HYPERVISOR_platform_op
 #endif
=20
-/*=20
+/*
  * VIRTUAL INTERRUPTS
- *=20
+ *
  * Virtual interrupts that a guest OS may receive from Xen=2E
- *=20
- * In the side comments, 'V=2E' denotes a per-VCPU VIRQ while 'G=2E' deno=
tes a
- * global VIRQ=2E The former can be bound once per VCPU and cannot be re-=
bound=2E
- * The latter can be allocated only once per guest: they must initially b=
e
- * allocated to VCPU0 but can subsequently be re-bound=2E
+ *
+ * There are three types:
+ *
+ * 1=2E (V) Per-vcpu:
+ *    These can be bound once per vCPU, each using a different evtchn por=
t=2E
+ *    An evtchn for one vCPU cannot be rebound to a different vCPU=2E
+ *
+ * 2=2E (D) Per-domain:
+ *    These can be bound once per domain=2E  They must be bound on vCPU 0=
 first,
+ *    but can be rebound to other vCPUs afterwards=2E
+ *
+ * 3=2E (G) Global:
+ *    Like per-domain, but can only be bound to a single domain at a time=
=2E
+ *    The owning domain must unbind before a new domain can bind=2E
  */
 /* ` enum virq { */
 #define VIRQ_TIMER      0  /* V=2E Timebase update, and/or requested time=
out=2E  */
 #define VIRQ_DEBUG      1  /* V=2E Request guest to dump debug info=2E   =
        */
-#define VIRQ_CONSOLE    2  /* G=2E (DOM0) Bytes received on emergency con=
sole=2E */
-#define VIRQ_DOM_EXC    3  /* G=2E (DOM0) Exceptional event for some doma=
in=2E   */
-#define VIRQ_TBUF       4  /* G=2E (DOM0) Trace buffer has records availa=
ble=2E  */
-#define VIRQ_DEBUGGER   6  /* G=2E (DOM0) A domain has paused for debuggi=
ng=2E   */
+#define VIRQ_CONSOLE    2  /* G=2E Bytes received on emergency console=2E=
        */
+#define VIRQ_DOM_EXC    3  /* G=2E Exceptional event for some domain=2E  =
        */
+#define VIRQ_TBUF       4  /* G=2E Trace buffer has records available=2E =
        */
+#define VIRQ_DEBUGGER   6  /* G=2E A domain has paused for debugging=2E  =
        */
 #define VIRQ_XENOPROF   7  /* V=2E XenOprofile interrupt: new sample avai=
lable */
-#define VIRQ_CON_RING   8  /* G=2E (DOM0) Bytes received on console      =
      */
-#define VIRQ_PCPU_STATE 9  /* G=2E (DOM0) PCPU state changed             =
      */
-#define VIRQ_MEM_EVENT  10 /* G=2E (DOM0) A memory event has occured     =
      */
-#define VIRQ_XC_RESERVED 11 /* G=2E Reserved for XenClient               =
      */
-#define VIRQ_ENOMEM     12 /* G=2E (DOM0) Low on heap memory       */
-#define VIRQ_XENPMU     13 /* V=2E  PMC interrupt                        =
      */
+#define VIRQ_CON_RING   8  /* G=2E Bytes received on console             =
      */
+#define VIRQ_PCPU_STATE 9  /* G=2E PCPU state changed                    =
      */
+#define VIRQ_MEM_EVENT  10 /* G=2E A memory event has occurred           =
      */
+#define VIRQ_ARGO       11 /* D=2E Argo interdomain message notification =
      */
+#define VIRQ_ENOMEM     12 /* G=2E Low on heap memory                    =
      */
+#define VIRQ_XENPMU     13 /* V=2E PMC interrupt                         =
      */
=20
 /* Architecture-specific VIRQ definitions=2E */
 #define VIRQ_ARCH_0    16
@@ -210,7 +217,7 @@ DEFINE_XEN_GUEST_HANDLE(xen_ulong_t);
  *                     (x) encodes the PFD as follows:
  *                     x =3D=3D 0 =3D> PFD =3D=3D DOMID_SELF
  *                     x !=3D 0 =3D> PFD =3D=3D x - 1
- *=20
+ *
  * Sub-commands: ptr[1:0] specifies the appropriate MMU_* command=2E
  * -------------
  * ptr[1:0] =3D=3D MMU_NORMAL_PT_UPDATE:
@@ -256,17 +263,21 @@ DEFINE_XEN_GUEST_HANDLE(xen_ulong_t);
  * To deallocate the pages, the operations are the reverse of the steps
  * mentioned above=2E The argument is MMUEXT_UNPIN_TABLE for all levels a=
nd the
  * pagetable MUST not be in use (meaning that the cr3 is not set to it)=
=2E
- *=20
+ *
  * ptr[1:0] =3D=3D MMU_MACHPHYS_UPDATE:
  * Updates an entry in the machine->pseudo-physical mapping table=2E
  * ptr[:2]  -- Machine address within the frame whose mapping to modify=
=2E
  *             The frame must belong to the FD, if one is specified=2E
  * val      -- Value to write into the mapping entry=2E
- *=20
+ *
  * ptr[1:0] =3D=3D MMU_PT_UPDATE_PRESERVE_AD:
  * As MMU_NORMAL_PT_UPDATE above, but A/D bits currently in the PTE are O=
Red
  * with those in @val=2E
  *
+ * ptr[1:0] =3D=3D MMU_PT_UPDATE_NO_TRANSLATE:
+ * As MMU_NORMAL_PT_UPDATE above, but @val is not translated though FD
+ * page tables=2E
+ *
  * @val is usually the machine frame number along with some attributes=2E
  * The attributes by default follow the architecture defined bits=2E Mean=
ing that
  * if this is a X86_64 machine and four page table layout is used, the la=
yout
@@ -333,9 +344,11 @@ DEFINE_XEN_GUEST_HANDLE(xen_ulong_t);
  *
  * PAT (bit 7 on) --> PWT (bit 3 on) and clear bit 7=2E
  */
-#define MMU_NORMAL_PT_UPDATE      0 /* checked '*ptr =3D val'=2E ptr is M=
A=2E      */
-#define MMU_MACHPHYS_UPDATE       1 /* ptr =3D MA of frame to modify entr=
y for */
-#define MMU_PT_UPDATE_PRESERVE_AD 2 /* atomically: *ptr =3D val | (*ptr&(=
A|D)) */
+#define MMU_NORMAL_PT_UPDATE       0 /* checked '*ptr =3D val'=2E ptr is =
MA=2E      */
+#define MMU_MACHPHYS_UPDATE        1 /* ptr =3D MA of frame to modify ent=
ry for */
+#define MMU_PT_UPDATE_PRESERVE_AD  2 /* atomically: *ptr =3D val | (*ptr&=
(A|D)) */
+#define MMU_PT_UPDATE_NO_TRANSLATE 3 /* checked '*ptr =3D val'=2E ptr is =
MA=2E      */
+                                     /* val never translated=2E          =
       */
=20
 /*
  * MMU EXTENDED OPERATIONS
@@ -424,7 +437,7 @@ DEFINE_XEN_GUEST_HANDLE(xen_ulong_t);
 #define MMUEXT_UNMARK_SUPER     20
 /* ` } */
=20
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
 struct mmuext_op {
     unsigned int cmd; /* =3D> enum mmuext_cmd */
     union {
@@ -479,7 +492,28 @@ DEFINE_XEN_GUEST_HANDLE(mmuext_op_t);
 /* ` } */
=20
 /*
- * Commands to HYPERVISOR_console_io()=2E
+ * ` int
+ * ` HYPERVISOR_console_io(unsigned int cmd,
+ * `                       unsigned int count,
+ * `                       char buffer[]);
+ *
+ * @cmd: Command (see below)
+ * @count: Size of the buffer to read/write
+ * @buffer: Pointer in the guest memory
+ *
+ * List of commands:
+ *
+ *  * CONSOLEIO_write: Write the buffer to Xen console=2E
+ *      For the hardware domain, all the characters in the buffer will
+ *      be written=2E Characters will be printed directly to the console=
=2E
+ *      For all the other domains, only the printable characters will be
+ *      written=2E Characters may be buffered until a newline (i=2Ee '\n'=
) is
+ *      found=2E
+ *      @return 0 on success, otherwise return an error code=2E
+ *  * CONSOLEIO_read: Attempts to read up to @count characters from Xen
+ *      console=2E The maximum buffer size (i=2Ee=2E @count) supported is=
 2GB=2E
+ *      @return the number of characters read on success, otherwise retur=
n
+ *      an error code=2E
  */
 #define CONSOLEIO_write         0
 #define CONSOLEIO_read          1
@@ -549,16 +583,21 @@ DEFINE_XEN_GUEST_HANDLE(mmuext_op_t);
  * is useful to ensure that no mappings to the OS's own heap are accident=
ally
  * installed=2E (e=2Eg=2E, in Linux this could cause havoc as reference c=
ounts
  * aren't adjusted on the I/O-mapping code path)=2E
- * This only makes sense in MMUEXT_SET_FOREIGNDOM, but in that context ca=
n
- * be specified by any calling domain=2E
+ * This only makes sense as HYPERVISOR_mmu_update()'s and
+ * HYPERVISOR_update_va_mapping_otherdomain()'s "foreigndom" argument=2E =
For
+ * HYPERVISOR_mmu_update() context it can be specified by any calling dom=
ain,
+ * otherwise it's only permitted if the caller is privileged=2E
  */
 #define DOMID_IO             xen_mk_uint(0x7FF1)
=20
 /*
  * DOMID_XEN is used to allow privileged domains to map restricted parts =
of
  * Xen's heap space (e=2Eg=2E, the machine_to_phys table)=2E
- * This only makes sense in MMUEXT_SET_FOREIGNDOM, and is only permitted =
if
- * the caller is privileged=2E
+ * This only makes sense as
+ * - HYPERVISOR_mmu_update()'s, HYPERVISOR_mmuext_op()'s, or
+ *   HYPERVISOR_update_va_mapping_otherdomain()'s "foreigndom" argument,
+ * - with XENMAPSPACE_gmfn_foreign,
+ * and is only permitted if the caller is privileged=2E
  */
 #define DOMID_XEN            xen_mk_uint(0x7FF2)
=20
@@ -569,10 +608,20 @@ DEFINE_XEN_GUEST_HANDLE(mmuext_op_t);
 /* DOMID_INVALID is used to identify pages with unknown owner=2E */
 #define DOMID_INVALID        xen_mk_uint(0x7FF4)
=20
+/*
+ * DOMID_ANY is used to signal no specific domain ID requested=2E
+ * Handler should pick a valid ID, or handle it as a wildcard value
+ * depending on the context=2E
+ */
+#define DOMID_ANY            xen_mk_uint(0x7FF5)
+
 /* Idle domain=2E */
 #define DOMID_IDLE           xen_mk_uint(0x7FFF)
=20
-#ifndef __ASSEMBLY__
+/* Mask for valid domain id values */
+#define DOMID_MASK           xen_mk_uint(0x7FFF)
+
+#ifndef __ASSEMBLER__
=20
 typedef uint16_t domid_t;
=20
@@ -590,7 +639,7 @@ DEFINE_XEN_GUEST_HANDLE(mmu_update_t);
 /*
  * ` enum neg_errnoval
  * ` HYPERVISOR_multicall(multicall_entry_t call_list[],
- * `                      uint32_t nr_calls);
+ * `                      ULONG_PTR nr_calls);
  *
  * NB=2E The fields are logically the natural register size for this
  * architecture=2E In cases where xen_ulong_t is larger than this then
@@ -598,7 +647,11 @@ DEFINE_XEN_GUEST_HANDLE(mmu_update_t);
  */
 struct multicall_entry {
     xen_ulong_t op, result;
+#ifndef __XEN__
     xen_ulong_t args[6];
+#else /* Only 5 arguments are supported in reality=2E */
+    xen_ulong_t args[5], unused;
+#endif
 };
 typedef struct multicall_entry multicall_entry_t;
 DEFINE_XEN_GUEST_HANDLE(multicall_entry_t);
@@ -649,7 +702,7 @@ typedef struct vcpu_time_info vcpu_time_info_t;
 struct vcpu_info {
     /*
      * 'evtchn_upcall_pending' is written non-zero by Xen to indicate
-     * a pending notification for a particular VCPU=2E It is then cleared=
=20
+     * a pending notification for a particular VCPU=2E It is then cleared
      * by the guest OS /before/ checking for pending work, thus avoiding
      * a set-and-check race=2E Note that the mask is only accessed by Xen
      * on the CPU that is currently hosting the VCPU=2E This means that t=
he
@@ -680,7 +733,7 @@ struct vcpu_info {
 #endif /* XEN_HAVE_PV_UPCALL_MASK */
     xen_ulong_t evtchn_pending_sel;
     struct arch_vcpu_info arch;
-    struct vcpu_time_info time;
+    vcpu_time_info_t time;
 }; /* 64 bytes (x86) */
 #ifndef __XEN__
 typedef struct vcpu_info vcpu_info_t;
@@ -712,7 +765,7 @@ struct shared_info {
      *  3=2E Virtual interrupts ('events')=2E A domain can bind an event-=
channel
      *     port to a virtual interrupt source, such as the virtual-timer
      *     device or the emergency console=2E
-     *=20
+     *
      * Event channels are addressed by a "port index"=2E Each channel is
      * associated with two bits of information:
      *  1=2E PENDING -- notifies the domain that there is a pending notif=
ication
@@ -723,7 +776,7 @@ struct shared_info {
      *     becomes pending while the channel is masked then the 'edge' is=
 lost
      *     (i=2Ee=2E, when the channel is unmasked, the guest must manual=
ly handle
      *     pending notifications as no upcall will be scheduled by Xen)=
=2E
-     *=20
+     *
      * To expedite scanning of pending notifications, any 0->1 pending
      * transition on an unmasked channel causes a corresponding bit in a
      * per-vcpu selector word to be set=2E Each bit in the selector cover=
s a
@@ -733,12 +786,17 @@ struct shared_info {
     xen_ulong_t evtchn_mask[sizeof(xen_ulong_t) * 8];
=20
     /*
-     * Wallclock time: updated only by control software=2E Guests should =
base
-     * their gettimeofday() syscall on this wallclock-base value=2E
+     * Wallclock time: updated by control software or RTC emulation=2E
+     * Guests should base their gettimeofday() syscall on this
+     * wallclock-base value=2E
+     * The values of wc_sec and wc_nsec are offsets from the Unix epoch
+     * adjusted by the domain's 'time offset' (in seconds) as set either
+     * by XEN_DOMCTL_settimeoffset, or adjusted via a guest write to the
+     * emulated RTC=2E
      */
     uint32_t wc_version;      /* Version counter: see vcpu_time_info_t=2E=
 */
-    uint32_t wc_sec;          /* Secs  00:00:00 UTC, Jan 1, 1970=2E  */
-    uint32_t wc_nsec;         /* Nsecs 00:00:00 UTC, Jan 1, 1970=2E  */
+    uint32_t wc_sec;
+    uint32_t wc_nsec;
 #if !defined(__i386__)
     uint32_t wc_sec_hi;
 # define xen_wc_sec_hi wc_sec_hi
@@ -764,7 +822,7 @@ typedef struct shared_info shared_info_t;
  *         (may be omitted)
  *      c=2E list of allocated page frames [mfn_list, nr_pages]
  *         (unless relocated due to XEN_ELFNOTE_INIT_P2M)
- *      d=2E start_info_t structure        [register ESI (x86)]
+ *      d=2E start_info_t structure        [register rSI (x86)]
  *         in case of dom0 this page contains the console info, too
  *      e=2E unless dom0: xenstore ring page
  *      f=2E unless dom0: console ring page
@@ -910,6 +968,11 @@ typedef struct dom0_vga_console_info {
             uint32_t gbl_caps;
             /* Mode attributes (offset 0x0, VESA command 0x4f01)=2E */
             uint16_t mode_attrs;
+            uint16_t pad;
+#endif
+#if __XEN_INTERFACE_VERSION__ >=3D 0x00040d00
+            /* high 32 bits of lfb_base */
+            uint32_t ext_lfb_base;
 #endif
         } vesa_lfb;
     } u;
@@ -924,7 +987,38 @@ __DEFINE_XEN_GUEST_HANDLE(uint16, uint16_t);
 __DEFINE_XEN_GUEST_HANDLE(uint32, uint32_t);
 __DEFINE_XEN_GUEST_HANDLE(uint64, uint64_t);
=20
-#endif /* !__ASSEMBLY__ */
+typedef struct {
+    uint8_t a[16];
+} xen_uuid_t;
+
+/*
+ * XEN_DEFINE_UUID(0x00112233, 0x4455, 0x6677, 0x8899,
+ *                 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff)
+ * will construct UUID 00112233-4455-6677-8899-aabbccddeeff presented as
+ * {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88,
+ * 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff};
+ *
+ * NB: This is compatible with Linux kernel and with libuuid, but it is n=
ot
+ * compatible with Microsoft, as they use mixed-endian encoding (some
+ * components are little-endian, some are big-endian)=2E
+ */
+#define XEN_DEFINE_UUID_(a, b, c, d, e1, e2, e3, e4, e5, e6)            \
+    {{((a) >> 24) & 0xFF, ((a) >> 16) & 0xFF,                           \
+      ((a) >>  8) & 0xFF, ((a) >>  0) & 0xFF,                           \
+      ((b) >>  8) & 0xFF, ((b) >>  0) & 0xFF,                           \
+      ((c) >>  8) & 0xFF, ((c) >>  0) & 0xFF,                           \
+      ((d) >>  8) & 0xFF, ((d) >>  0) & 0xFF,                           \
+                e1, e2, e3, e4, e5, e6}}
+
+#if defined(__STDC_VERSION__) ? __STDC_VERSION__ >=3D 199901L : defined(_=
_GNUC__)
+#define XEN_DEFINE_UUID(a, b, c, d, e1, e2, e3, e4, e5, e6)             \
+    ((xen_uuid_t)XEN_DEFINE_UUID_(a, b, c, d, e1, e2, e3, e4, e5, e6))
+#else
+#define XEN_DEFINE_UUID(a, b, c, d, e1, e2, e3, e4, e5, e6)             \
+    XEN_DEFINE_UUID_(a, b, c, d, e1, e2, e3, e4, e5, e6)
+#endif /* __STDC_VERSION__ / __GNUC__ */
+
+#endif /* !__ASSEMBLER__ */
=20
 /* Default definitions for macros used by domctl/sysctl=2E */
 #if defined(__XEN__) || defined(__XEN_TOOLS__)
@@ -939,11 +1033,12 @@ __DEFINE_XEN_GUEST_HANDLE(uint64, uint64_t);
 #define XEN_GUEST_HANDLE_64(name) XEN_GUEST_HANDLE(name)
 #endif
=20
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
 struct xenctl_bitmap {
     XEN_GUEST_HANDLE_64(uint8) bitmap;
     uint32_t nr_bits;
 };
+typedef struct xenctl_bitmap xenctl_bitmap_t;
 #endif
=20
 #endif /* defined(__XEN__) || defined(__XEN_TOOLS__) */
diff --git a/include/xen/xen/errno=2Eh b/include/xen/xen/errno=2Eh
index 69b28dd=2E=2Edb9ef7f 100644
--- a/include/xen/xen/errno=2Eh
+++ b/include/xen/xen/errno=2Eh
@@ -1,18 +1,18 @@
 #ifndef __XEN_ERRNO_H__
 #define __XEN_ERRNO_H__
=20
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
=20
-#define XEN_ERRNO(name, value) name =3D value,
+#define XEN_ERRNO(name, value) name =3D (value),
 enum {
 #include <public/errno=2Eh>
 };
=20
-#else /* !__ASSEMBLY__ */
+#else /* !__ASSEMBLER__ */
=20
 #define XEN_ERRNO(name, value) =2Eequ name, value
 #include <public/errno=2Eh>
=20
-#endif /* __ASSEMBLY__ */
+#endif /* __ASSEMBLER__ */
=20
 #endif /*  __XEN_ERRNO_H__ */
--=20
2=2E55=2E0=2Ewindows=2E3



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.24c.b5b99c2fb7c4e4cf.1a13feec9ba.1282e3f712c7b844=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 15 14:19:45 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 15 Oct 2026 14:19:45 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1450688.1666131 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHMJ7-0004x4-Ei; Thu, 15 Oct 2026 14:19:45 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1450688.1666131; Thu, 15 Oct 2026 14:19:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHMJ7-0004wx-BJ; Thu, 15 Oct 2026 14:19:45 +0000
Received: by outflank-mailman (input) for mailman id 1450688;
 Thu, 15 Oct 2026 14:19:43 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13feecf430008425@swg.vates.tech>)
 id 1xHMJ5-0004uI-Ho
 for win-pv-devel@lists.xenproject.org; Thu, 15 Oct 2026 14:19:43 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xHMJ4-008GHL-UO
 for win-pv-devel@lists.xenproject.org; Thu, 15 Oct 2026 16:19:42 +0200
Received: from [10.42.69.2] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13feecf430008425@swg.vates.tech>)
 id 6ad0e0ee-bab6-0a2a0a5309dd-0a2a4502be3c-34
 for <win-pv-devel@lists.xenproject.org>; Thu, 15 Oct 2026 16:19:42 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13feecf430008425@swg.vates.tech>)
 id 6ad0e0f9-6ca4-0a2a45020019-b9ff1c2392fd-4
 for <win-pv-devel@lists.xenproject.org>; Thu, 15 Oct 2026 16:19:42 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a13feecf430008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 15 Oct 2026 14:19:37 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 25E8382B33;
 Thu, 15 Oct 2026 16:19:37 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=57nYos1O3bgcwexqw5Q3Nn4y+Fuup2U01puL4NQF6PY=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=VJ+1IsGPoh7bNzj0KTRKl5EBI81/cOyKLA0zFWFljd4k70wswBnUiCl136ZowUJRAwzsK8EaB
 jcVtFM8F3eUVLOUy34IHs6L2O51OPnzdaftQPRUS4feUNyFtrA7jmZbmte1/g3n6w2SupezQ/+1
 Zjx0/SBvsmGCwyeqBjBDD8b7Av1T/lHWgLKZA1mvBCQG8aus7Jv6WC6Y+gV89COqaPKNGd7D2o6
 FbRTXOaYcXI15YkS31U3bLtIzS52qVGC9da7no++6VJH7K9/tQzOK+YXxiaZcdL+KYfIJM8qyrR
 Jhpl9HBet5RJnASgE1dtIy3DUqBn6H/ZBx/RFq9ppslQ==
X-Zone-Loop: 8040f9c4c1b64a65fc2ff602ed21eb1cef8c5117d5ea
x-campaign-type: default
x-transaction-id: baa578b6-612c-4de8-9030-9dffdac05d31
x-swg-uid: 01-5b3dd9a5-7e5e-43cf-95e1-7a80958fcc26
X-Mailer: Sweego
Message-ID:
 <1792073977.8631fc262581453bbf619ec5b2062170.1a13feecf430008425@vates.tech>
x-swg-bid: 1792073977.8631fc262581453bbf619ec5b2062170.1a13feecf430008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [XENCONS PATCH 2/2] Remove the duplicate definition of DOMID_INVALID
Date: Thu, 15 Oct 2026 16:19:25 +0200
In-Reply-To: <20261015141933.1533-1-ngoc-tu.dinh@vates.tech>
References: <1792073912.8631fc262581453bbf619ec5b2062170.1a13fedd1870008425@vates.tech>
 <20261015141933.1533-1-ngoc-tu.dinh@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.24f.5eb924e127a09ff.1a13feecda2.6a5716d45d5a03cd=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792073977250
X-purgate-ID: tlsNG-720697/1792073982-F3CBA2AC-591D3F84/0/0
X-purgate-type: clean
X-purgate-size: 870

---=Part.24f.5eb924e127a09ff.1a13feecda2.6a5716d45d5a03cd=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Xen headers now include them=2E

Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 src/xencons/frontend=2Ec | 1 -
 1 file changed, 1 deletion(-)

diff --git a/src/xencons/frontend=2Ec b/src/xencons/frontend=2Ec
index 24845c5=2E=2E47ee672 100644
--- a/src/xencons/frontend=2Ec
+++ b/src/xencons/frontend=2Ec
@@ -52,7 +52,6 @@
 #include "util=2Eh"
=20
 #define FRONTEND_POOL 'TNRF'
-#define DOMID_INVALID (0x7FFFU)
=20
 typedef enum _FRONTEND_STATE {
     FRONTEND_UNKNOWN,
--=20
2=2E55=2E0=2Ewindows=2E3



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.24f.5eb924e127a09ff.1a13feecda2.6a5716d45d5a03cd=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 15 14:19:45 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 15 Oct 2026 14:19:45 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1450689.1666138 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHMJ7-0004xM-Kk; Thu, 15 Oct 2026 14:19:45 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1450689.1666138; Thu, 15 Oct 2026 14:19:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHMJ7-0004x8-Cz; Thu, 15 Oct 2026 14:19:45 +0000
Received: by outflank-mailman (input) for mailman id 1450689;
 Thu, 15 Oct 2026 14:19:44 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13feed0400008425@swg.vates.tech>)
 id 1xHMJ5-0004uf-Vp
 for win-pv-devel@lists.xenproject.org; Thu, 15 Oct 2026 14:19:44 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xHMJ5-008GHL-CT
 for win-pv-devel@lists.xenproject.org; Thu, 15 Oct 2026 16:19:43 +0200
Received: from [10.42.69.2] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13feed0400008425@swg.vates.tech>)
 id 6ad0e0ee-bab6-0a2a0a5309dd-0a2a4502be3c-38
 for <win-pv-devel@lists.xenproject.org>; Thu, 15 Oct 2026 16:19:43 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13feed0400008425@swg.vates.tech>)
 id 6ad0e0f9-6ca4-0a2a45020019-b9ff1c2392fd-5
 for <win-pv-devel@lists.xenproject.org>; Thu, 15 Oct 2026 16:19:43 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a13feed0400008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 15 Oct 2026 14:19:37 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 60B8082BD2;
 Thu, 15 Oct 2026 16:19:37 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=0OONDX6pyg56a2h2qyRuRM+ffk2AeQDJ8aaU3HdNbU0=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=Oer2vTQn9iIrF/JNgaTAfBHfMrhMAxlhyb0abkErHXWgC2WEy0WYNWQThe1YHj6wmxUaUNL+O
 nObDImGGjAqjGATT49CXDu/5SmNYyz/UonjK5FzATURSUDpvOk6j4/7ViYFPWpz2blKV1M9HPm/
 SbhyVDn5j3wINqJ/5ZE0Ro5FMBFzlhqiLlkKqo/4N8c2lKUUh7tlZvLsnc1ffubM5xePA26ku21
 ZfwhHqJPVszvU4FvRyCKi3KQ8DaOR/pnwSxB0Yw6VGjxrPHqNBHSpF4c4EhB6UFgOdNa7pumyPz
 bRUMhKFZtlv701yCeTSCJf2yeRguFGKd3YJWHEurl3VA==
X-Zone-Loop: e705b4ff5d0c8aac0d4bbd21f0df79c73c21f632ce43
x-campaign-type: default
x-transaction-id: 74c6ae59-af10-4ffe-af05-73f383b6bcdd
x-swg-uid: 01-df194655-fbb9-471a-aad7-7d347bb10e6b
X-Mailer: Sweego
Message-ID:
 <1792073977.8631fc262581453bbf619ec5b2062170.1a13feed0400008425@vates.tech>
x-swg-bid: 1792073977.8631fc262581453bbf619ec5b2062170.1a13feed0400008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [XENVBD PATCH 1/2] Update Xen headers to RELEASE-4.22.0
Date: Thu, 15 Oct 2026 16:19:26 +0200
In-Reply-To: <20261015141933.1533-1-ngoc-tu.dinh@vates.tech>
References: <1792073912.8631fc262581453bbf619ec5b2062170.1a13fedd1870008425@vates.tech>
 <20261015141933.1533-1-ngoc-tu.dinh@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.250.c0bbf5c41d3afc07.1a13feece9e.4f141ff545cf80a4=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792073977503
X-purgate-ID: tlsNG-720697/1792073983-F20A810C-C300F1B7/0/0
X-purgate-type: clean
X-purgate-size: 82245

---=Part.250.c0bbf5c41d3afc07.1a13feece9e.4f141ff545cf80a4=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 include/xen/arch-x86/xen-x86_32=2Eh |  36 +++----
 include/xen/arch-x86/xen-x86_64=2Eh |  49 ++++-----
 include/xen/arch-x86/xen=2Eh        |  92 +++++++++++------
 include/xen/event_channel=2Eh       |  52 ++++------
 include/xen/grant_table=2Eh         |  37 ++-----
 include/xen/hvm/hvm_op=2Eh          |  97 ++++++++++++++----
 include/xen/hvm/params=2Eh          |  88 +++++++++-------
 include/xen/io/blkif=2Eh            |   4 +-
 include/xen/io/xs_wire=2Eh          |  55 +++++-----
 include/xen/memory=2Eh              | 138 +++++++++++++++----------
 include/xen/physdev=2Eh             |  67 ++++++------
 include/xen/sched=2Eh               |  19 +---
 include/xen/trace=2Eh               |  29 ++----
 include/xen/xen-compat=2Eh          |  25 +----
 include/xen/xen=2Eh                 | 164 ++++++++++++++++++++----------
 15 files changed, 517 insertions(+), 435 deletions(-)

diff --git a/include/xen/arch-x86/xen-x86_32=2Eh b/include/xen/arch-x86/xe=
n-x86_32=2Eh
index 7df4b21=2E=2E4ee19cc 100644
--- a/include/xen/arch-x86/xen-x86_32=2Eh
+++ b/include/xen/arch-x86/xen-x86_32=2Eh
@@ -1,25 +1,8 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * xen-x86_32=2Eh
- *=20
- * Guest OS interface to x86 32-bit Xen=2E
- *=20
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
  *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
+ * Guest OS interface to x86 32-bit Xen=2E
  *
  * Copyright (c) 2004-2007, K A Fraser
  */
@@ -29,7 +12,7 @@
=20
 /*
  * Hypercall interface:
- *  Input:  %ebx, %ecx, %edx, %esi, %edi, %ebp (arguments 1-6)
+ *  Input:  %ebx, %ecx, %edx, %esi, %edi (arguments 1-5)
  *  Output: %eax
  * Access is via hypercall page (set up by guest loader or via a Xen MSR)=
:
  *  call hypercall_page + hypercall-number * 32
@@ -107,7 +90,7 @@
 #define XEN_GUEST_HANDLE_64(name) __XEN_GUEST_HANDLE_64(name)
 #endif
=20
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
=20
 #if defined(XEN_GENERATING_COMPAT_HEADERS)
 /* nothing */
@@ -131,6 +114,10 @@
 #define __DECL_REG_LO16(name) uint32_t e ## name
 #endif
=20
+#ifdef __XEN__
+#define cpu_user_regs guest_user_regs
+#endif
+
 struct cpu_user_regs {
     __DECL_REG_LO8(b);
     __DECL_REG_LO8(c);
@@ -153,8 +140,13 @@ struct cpu_user_regs {
     uint16_t fs, _pad4;
     uint16_t gs, _pad5;
 };
+
+#ifdef __XEN__
+#undef cpu_user_regs
+#else
 typedef struct cpu_user_regs cpu_user_regs_t;
 DEFINE_XEN_GUEST_HANDLE(cpu_user_regs_t);
+#endif
=20
 #undef __DECL_REG_LO8
 #undef __DECL_REG_LO16
@@ -179,7 +171,7 @@ struct xen_callback {
 };
 typedef struct xen_callback xen_callback_t;
=20
-#endif /* !__ASSEMBLY__ */
+#endif /* !__ASSEMBLER__ */
=20
 #endif /* __XEN_PUBLIC_ARCH_X86_XEN_X86_32_H__ */
=20
diff --git a/include/xen/arch-x86/xen-x86_64=2Eh b/include/xen/arch-x86/xe=
n-x86_64=2Eh
index 728ca6b=2E=2E4ab9a99 100644
--- a/include/xen/arch-x86/xen-x86_64=2Eh
+++ b/include/xen/arch-x86/xen-x86_64=2Eh
@@ -1,25 +1,8 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * xen-x86_64=2Eh
- *=20
- * Guest OS interface to x86 64-bit Xen=2E
- *=20
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
  *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
+ * Guest OS interface to x86 64-bit Xen=2E
  *
  * Copyright (c) 2004-2006, K A Fraser
  */
@@ -29,7 +12,7 @@
=20
 /*
  * Hypercall interface:
- *  Input:  %rdi, %rsi, %rdx, %r10, %r8, %r9 (arguments 1-6)
+ *  Input:  %rdi, %rsi, %rdx, %r10, %r8 (arguments 1-5)
  *  Output: %rax
  * Access is via hypercall page (set up by guest loader or via a Xen MSR)=
:
  *  call hypercall_page + hypercall-number * 32
@@ -44,11 +27,11 @@
  */
=20
 #define FLAT_RING3_CS32 0xe023  /* GDT index 260 */
-#define FLAT_RING3_CS64 0xe033  /* GDT index 261 */
-#define FLAT_RING3_DS32 0xe02b  /* GDT index 262 */
+#define FLAT_RING3_CS64 0xe033  /* GDT index 262 */
+#define FLAT_RING3_DS32 0xe02b  /* GDT index 261 */
 #define FLAT_RING3_DS64 0x0000  /* NULL selector */
-#define FLAT_RING3_SS32 0xe02b  /* GDT index 262 */
-#define FLAT_RING3_SS64 0xe02b  /* GDT index 262 */
+#define FLAT_RING3_SS32 0xe02b  /* GDT index 261 */
+#define FLAT_RING3_SS64 0xe02b  /* GDT index 261 */
=20
 #define FLAT_KERNEL_DS64 FLAT_RING3_DS64
 #define FLAT_KERNEL_DS32 FLAT_RING3_DS32
@@ -120,9 +103,8 @@
 /* Guest exited in SYSCALL context? Return to guest with SYSRET? */
 #define _VGCF_in_syscall 8
 #define VGCF_in_syscall  (1<<_VGCF_in_syscall)
-#define VGCF_IN_SYSCALL  VGCF_in_syscall
=20
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
=20
 struct iret_context {
     /* Top of stack (%rsp at point of hypercall)=2E */
@@ -176,6 +158,10 @@ struct iret_context {
 #define __DECL_REG_HI(num)    uint64_t r ## num
 #endif
=20
+#ifdef __XEN__
+#define cpu_user_regs guest_user_regs
+#endif
+
 struct cpu_user_regs {
     __DECL_REG_HI(15);
     __DECL_REG_HI(14);
@@ -203,11 +189,16 @@ struct cpu_user_regs {
     uint16_t ss, _pad2[3];
     uint16_t es, _pad3[3];
     uint16_t ds, _pad4[3];
-    uint16_t fs, _pad5[3]; /* Non-nul =3D> takes precedence over fs_base=
=2E      */
-    uint16_t gs, _pad6[3]; /* Non-nul =3D> takes precedence over gs_base_=
user=2E */
+    uint16_t fs, _pad5[3];
+    uint16_t gs, _pad6[3];
 };
+
+#ifdef __XEN__
+#undef cpu_user_regs
+#else
 typedef struct cpu_user_regs cpu_user_regs_t;
 DEFINE_XEN_GUEST_HANDLE(cpu_user_regs_t);
+#endif
=20
 #undef __DECL_REG
 #undef __DECL_REG_LOHI
@@ -226,7 +217,7 @@ typedef struct arch_vcpu_info arch_vcpu_info_t;
=20
 typedef ULONG_PTR xen_callback_t;
=20
-#endif /* !__ASSEMBLY__ */
+#endif /* !__ASSEMBLER__ */
=20
 #endif /* __XEN_PUBLIC_ARCH_X86_XEN_X86_64_H__ */
=20
diff --git a/include/xen/arch-x86/xen=2Eh b/include/xen/arch-x86/xen=2Eh
index f66c3e1=2E=2E1ec1a20 100644
--- a/include/xen/arch-x86/xen=2Eh
+++ b/include/xen/arch-x86/xen=2Eh
@@ -1,31 +1,12 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * arch-x86/xen=2Eh
- *=20
- * Guest OS interface to x86 Xen=2E
- *=20
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
  *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
+ * Guest OS interface to x86 Xen=2E
  *
  * Copyright (c) 2004-2006, K A Fraser
  */
=20
-#include "=2E=2E/xen=2Eh"
-
 #ifndef __XEN_PUBLIC_ARCH_X86_XEN_H__
 #define __XEN_PUBLIC_ARCH_X86_XEN_H__
=20
@@ -53,7 +34,7 @@
 #define __XEN_GUEST_HANDLE(name)        __guest_handle_ ## name
 #define XEN_GUEST_HANDLE(name)          __XEN_GUEST_HANDLE(name)
 #define XEN_GUEST_HANDLE_PARAM(name)    XEN_GUEST_HANDLE(name)
-#define set_xen_guest_handle_raw(hnd, val)  do { (hnd)=2Ep =3D val; } whi=
le (0)
+#define set_xen_guest_handle_raw(hnd, val)  do { (hnd)=2Ep =3D (val); } w=
hile (0)
 #define set_xen_guest_handle(hnd, val) set_xen_guest_handle_raw(hnd, val)
=20
 #if defined(__i386__)
@@ -72,7 +53,7 @@ __DeFiNe__ __DECL_REG_LO16(name) e ## name
 #include "xen-x86_64=2Eh"
 #endif
=20
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
 typedef ULONG_PTR xen_pfn_t;
 #define PRI_xen_pfn "lx"
 #define PRIu_xen_pfn "lu"
@@ -116,7 +97,7 @@ typedef ULONG_PTR xen_pfn_t;
 /* Maximum number of virtual CPUs in legacy multi-processor guests=2E */
 #define XEN_LEGACY_MAX_VCPUS 32
=20
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
=20
 typedef ULONG_PTR xen_ulong_t;
 #define PRI_xen_ulong "lx"
@@ -143,6 +124,12 @@ typedef ULONG_PTR xen_ulong_t;
  *  Level =3D=3D 1: Kernel may enter
  *  Level =3D=3D 2: Kernel may enter
  *  Level =3D=3D 3: Everyone may enter
+ *
+ * Note: For compatibility with kernels not setting up exception handlers
+ *       early enough, Xen will avoid trying to inject #GP (and hence cra=
sh
+ *       the domain) when an RDMSR would require this, but no handler was
+ *       set yet=2E The precise conditions are implementation specific, a=
nd
+ *       new code may not rely on such behavior anyway=2E
  */
 #define TI_GET_DPL(_ti)      ((_ti)->flags & 3)
 #define TI_GET_IF(_ti)       ((_ti)->flags & 4)
@@ -173,8 +160,6 @@ typedef uint64_t tsc_timestamp_t; /* RDTSC timestamp *=
/
 struct vcpu_guest_context {
     /* FPU registers come first so they can be aligned for FXSAVE/FXRSTOR=
=2E */
     struct { char x[512]; } fpu_ctxt;       /* User-level FPU registers  =
   */
-#define VGCF_I387_VALID                (1<<0)
-#define VGCF_IN_KERNEL                 (1<<2)
 #define _VGCF_i387_valid               0
 #define VGCF_i387_valid                (1<<_VGCF_i387_valid)
 #define _VGCF_in_kernel                2
@@ -186,7 +171,18 @@ struct vcpu_guest_context {
 #define _VGCF_online                   5
 #define VGCF_online                    (1<<_VGCF_online)
     ULONG_PTR flags;                    /* VGCF_* flags                 *=
/
+
+    /*
+     * Outside of Xen, regs type stays named cpu_user_regs for backwards
+     * compatibility=2E  Inside Xen, the type called cpu_user_regs is dif=
ferent,
+     * and the public API type is renamed to guest_user_regs=2E
+     */
+#ifdef __XEN__
+    struct guest_user_regs user_regs;       /* User-level CPU registers  =
   */
+#else
     struct cpu_user_regs user_regs;         /* User-level CPU registers  =
   */
+#endif
+
     struct trap_info trap_ctxt[256];        /* Virtual IDT               =
   */
     ULONG_PTR ldt_base, ldt_ents;       /* LDT (linear address, # ents) *=
/
     ULONG_PTR gdt_frames[16], gdt_ents; /* GDT (machine frames, # ents) *=
/
@@ -304,17 +300,40 @@ struct xen_arch_domainconfig {
                                      XEN_X86_EMU_PIT | XEN_X86_EMU_USE_PI=
RQ |\
                                      XEN_X86_EMU_VPCI)
     uint32_t emulation_flags;
+
+/*
+ * Select whether to use a relaxed behavior for accesses to MSRs not expl=
icitly
+ * handled by Xen instead of injecting a #GP to the guest=2E Note this op=
tion
+ * doesn't allow the guest to read or write to the underlying MSR=2E
+ */
+#define XEN_X86_MSR_RELAXED (1u << 0)
+    uint32_t misc_flags;
 };
=20
-/* Location of online VCPU bitmap=2E */
-#define XEN_ACPI_CPU_MAP             0xaf00
-#define XEN_ACPI_CPU_MAP_LEN         ((HVM_MAX_VCPUS + 7) / 8)
+/* Max  XEN_X86_* constant=2E Used for ABI checking=2E */
+#define XEN_X86_MISC_FLAGS_MAX XEN_X86_MSR_RELAXED
=20
-/* GPE0 bit set during CPU hotplug */
-#define XEN_ACPI_GPE0_CPUHP_BIT      2
 #endif
=20
-#endif /* !__ASSEMBLY__ */
+/*
+ * Representations of architectural CPUID and MSR information=2E  Used as=
 the
+ * serialised version of Xen's internal representation=2E
+ */
+typedef struct xen_cpuid_leaf {
+#define XEN_CPUID_NO_SUBLEAF 0xffffffffu
+    uint32_t leaf, subleaf;
+    uint32_t a, b, c, d;
+} xen_cpuid_leaf_t;
+DEFINE_XEN_GUEST_HANDLE(xen_cpuid_leaf_t);
+
+typedef struct xen_msr_entry {
+    uint32_t idx;
+    uint32_t flags; /* Reserved MBZ=2E */
+    uint64_t val;
+} xen_msr_entry_t;
+DEFINE_XEN_GUEST_HANDLE(xen_msr_entry_t);
+
+#endif /* !__ASSEMBLER__ */
=20
 /*
  * ` enum neg_errnoval
@@ -338,7 +357,7 @@ struct xen_arch_domainconfig {
  * Prefix forces emulation of some non-trapping instructions=2E
  * Currently only CPUID=2E
  */
-#ifdef __ASSEMBLY__
+#ifdef __ASSEMBLER__
 #define XEN_EMULATE_PREFIX =2Ebyte 0x0f,0x0b,0x78,0x65,0x6e ;
 #define XEN_CPUID          XEN_EMULATE_PREFIX cpuid
 #else
@@ -346,6 +365,13 @@ struct xen_arch_domainconfig {
 #define XEN_CPUID          XEN_EMULATE_PREFIX "cpuid"
 #endif
=20
+/*
+ * Debug console IO port, also called "port E9 hack"=2E Each character wr=
itten
+ * to this IO port will be printed on the hypervisor console, subject to =
log
+ * level restrictions=2E
+ */
+#define XEN_HVM_DEBUGCONS_IOPORT 0xe9
+
 #endif /* __XEN_PUBLIC_ARCH_X86_XEN_H__ */
=20
 /*
diff --git a/include/xen/event_channel=2Eh b/include/xen/event_channel=2Eh
index 44c549d=2E=2Ec5548d2 100644
--- a/include/xen/event_channel=2Eh
+++ b/include/xen/event_channel=2Eh
@@ -1,26 +1,9 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * event_channel=2Eh
  *
  * Event channels between domains=2E
  *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
  * Copyright (c) 2003-2004, K A Fraser=2E
  */
=20
@@ -74,6 +57,9 @@
 #define EVTCHNOP_init_control    11
 #define EVTCHNOP_expand_array    12
 #define EVTCHNOP_set_priority    13
+#ifdef __XEN__
+#define EVTCHNOP_reset_cont      14
+#endif
 /* ` } */
=20
 typedef uint32_t evtchn_port_t;
@@ -128,10 +114,10 @@ typedef struct evtchn_bind_interdomain evtchn_bind_i=
nterdomain_t;
  * EVTCHNOP_bind_virq: Bind a local event channel to VIRQ <irq> on specif=
ied
  * vcpu=2E
  * NOTES:
- *  1=2E Virtual IRQs are classified as per-vcpu or global=2E See the VIR=
Q list
- *     in xen=2Eh for the classification of each VIRQ=2E
- *  2=2E Global VIRQs must be allocated on VCPU0 but can subsequently be
- *     re-bound via EVTCHNOP_bind_vcpu=2E
+ *  1=2E Virtual IRQs are classified as per-vcpu, per-domain or global=2E=
 See the
+ *     VIRQ list in xen=2Eh for the classification of each VIRQ=2E
+ *  2=2E Per-domain and global VIRQs must be allocated on vCPU0 but can
+ *     subsequently be re-bound via EVTCHNOP_bind_vcpu=2E
  *  3=2E Per-vcpu VIRQs may be bound to at most one event channel per vcp=
u=2E
  *     The allocated event channel is bound to the specified vcpu and the
  *     binding cannot be changed=2E
@@ -307,7 +293,7 @@ typedef struct evtchn_expand_array evtchn_expand_array=
_t;
  */
 struct evtchn_set_priority {
     /* IN parameters=2E */
-    uint32_t port;
+    evtchn_port_t port;
     uint32_t priority;
 };
 typedef struct evtchn_set_priority evtchn_set_priority_t;
@@ -321,16 +307,16 @@ typedef struct evtchn_set_priority evtchn_set_priori=
ty_t;
 struct evtchn_op {
     uint32_t cmd; /* enum event_channel_op */
     union {
-        struct evtchn_alloc_unbound    alloc_unbound;
-        struct evtchn_bind_interdomain bind_interdomain;
-        struct evtchn_bind_virq        bind_virq;
-        struct evtchn_bind_pirq        bind_pirq;
-        struct evtchn_bind_ipi         bind_ipi;
-        struct evtchn_close            close;
-        struct evtchn_send             send;
-        struct evtchn_status           status;
-        struct evtchn_bind_vcpu        bind_vcpu;
-        struct evtchn_unmask           unmask;
+        evtchn_alloc_unbound_t    alloc_unbound;
+        evtchn_bind_interdomain_t bind_interdomain;
+        evtchn_bind_virq_t        bind_virq;
+        evtchn_bind_pirq_t        bind_pirq;
+        evtchn_bind_ipi_t         bind_ipi;
+        evtchn_close_t            close;
+        evtchn_send_t             send;
+        evtchn_status_t           status;
+        evtchn_bind_vcpu_t        bind_vcpu;
+        evtchn_unmask_t           unmask;
     } u;
 };
 typedef struct evtchn_op evtchn_op_t;
diff --git a/include/xen/grant_table=2Eh b/include/xen/grant_table=2Eh
index 32fa106=2E=2Ecdde816 100644
--- a/include/xen/grant_table=2Eh
+++ b/include/xen/grant_table=2Eh
@@ -1,27 +1,10 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * grant_table=2Eh
  *
  * Interface for granting foreign access to page frames, and receiving
  * page-ownership transfers=2E
  *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
  * Copyright (c) 2004, K A Fraser
  */
=20
@@ -121,8 +104,9 @@ typedef uint32_t grant_ref_t;
  */
=20
 /*
- * Version 1 of the grant table entry structure is maintained purely
- * for backwards compatibility=2E  New guests should use version 2=2E
+ * Version 1 of the grant table entry structure is maintained largely for
+ * backwards compatibility=2E  New guests are recommended to support usin=
g
+ * version 2 to overcome version 1 limitations, but to default to version=
 1=2E
  */
 #if __XEN_INTERFACE_VERSION__ < 0x0003020a
 #define grant_entry_v1 grant_entry
@@ -166,11 +150,13 @@ typedef struct grant_entry_v1 grant_entry_v1_t;
 #define GTF_type_mask       (3U<<0)
=20
 /*
- * Subflags for GTF_permit_access=2E
+ * Subflags for GTF_permit_access and GTF_transitive=2E
  *  GTF_readonly: Restrict @domid to read-only mappings and accesses=2E [=
GST]
  *  GTF_reading: Grant entry is currently mapped for reading by @domid=2E=
 [XEN]
  *  GTF_writing: Grant entry is currently mapped for writing by @domid=2E=
 [XEN]
- *  GTF_PAT, GTF_PWT, GTF_PCD: (x86) cache attribute flags for the grant =
[GST]
+ * Further subflags for GTF_permit_access only=2E
+ *  GTF_PAT, GTF_PWT, GTF_PCD: (x86) cache attribute flags to be used for
+ *                             mappings of the grant [GST]
  *  GTF_sub_page: Grant access to only a subrange of the page=2E  @domid
  *                will only be allowed to copy from the grant, and not
  *                map it=2E [GST]
@@ -626,9 +612,6 @@ DEFINE_XEN_GUEST_HANDLE(gnttab_cache_flush_t);
 #define _GNTMAP_contains_pte    (4)
 #define GNTMAP_contains_pte     (1<<_GNTMAP_contains_pte)
=20
-#define _GNTMAP_can_fail        (5)
-#define GNTMAP_can_fail         (1<<_GNTMAP_can_fail)
-
 /*
  * Bits to be placed in guest kernel available PTE bits (architecture
  * dependent; only supported when XENFEAT_gnttab_map_avail_bits is set)=
=2E
@@ -653,6 +636,7 @@ DEFINE_XEN_GUEST_HANDLE(gnttab_cache_flush_t);
 #define GNTST_bad_copy_arg    (-10) /* copy arguments cross page boundary=
=2E   */
 #define GNTST_address_too_big (-11) /* transfer page address too large=2E=
      */
 #define GNTST_eagain          (-12) /* Operation not done; try again=2E  =
      */
+#define GNTST_no_space        (-13) /* Out of space (handles etc)=2E     =
      */
 /* ` } */
=20
 #define GNTTABOP_error_msgs {                   \
@@ -668,7 +652,8 @@ DEFINE_XEN_GUEST_HANDLE(gnttab_cache_flush_t);
     "bad page",                                 \
     "copy arguments cross page boundary",       \
     "page address size too large",              \
-    "operation not done; try again"             \
+    "operation not done; try again",            \
+    "out of space",                             \
 }
=20
 #endif /* __XEN_PUBLIC_GRANT_TABLE_H__ */
diff --git a/include/xen/hvm/hvm_op=2Eh b/include/xen/hvm/hvm_op=2Eh
index bbba99e=2E=2Ee22adf0 100644
--- a/include/xen/hvm/hvm_op=2Eh
+++ b/include/xen/hvm/hvm_op=2Eh
@@ -1,22 +1,5 @@
+/* SPDX-License-Identifier: MIT */
 /*
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
  * Copyright (c) 2007, Keir Fraser
  */
=20
@@ -32,12 +15,31 @@
 #define HVMOP_get_param           1
 struct xen_hvm_param {
     domid_t  domid;    /* IN */
+    uint16_t pad;
     uint32_t index;    /* IN */
     uint64_t value;    /* IN/OUT */
 };
 typedef struct xen_hvm_param xen_hvm_param_t;
 DEFINE_XEN_GUEST_HANDLE(xen_hvm_param_t);
=20
+struct xen_hvm_altp2m_suppress_ve {
+    uint16_t view;
+    uint8_t suppress_ve; /* Boolean type=2E */
+    uint8_t pad1;
+    uint32_t pad2;
+    uint64_t gfn;
+};
+
+struct xen_hvm_altp2m_suppress_ve_multi {
+    uint16_t view;
+    uint8_t suppress_ve; /* Boolean type=2E */
+    uint8_t pad1;
+    int32_t first_error; /* Should be set to 0=2E */
+    uint64_t first_gfn; /* Value may be updated=2E */
+    uint64_t last_gfn;
+    uint64_t first_error_gfn; /* Gfn of the first error=2E */
+};
+
 #if __XEN_INTERFACE_VERSION__ < 0x00040900
=20
 /* Set the logical level of one of a domain's PCI INTx wires=2E */
@@ -224,27 +226,45 @@ struct xen_hvm_altp2m_vcpu_enable_notify {
 typedef struct xen_hvm_altp2m_vcpu_enable_notify xen_hvm_altp2m_vcpu_enab=
le_notify_t;
 DEFINE_XEN_GUEST_HANDLE(xen_hvm_altp2m_vcpu_enable_notify_t);
=20
+struct xen_hvm_altp2m_vcpu_disable_notify {
+    uint32_t vcpu_id;
+};
+typedef struct xen_hvm_altp2m_vcpu_disable_notify xen_hvm_altp2m_vcpu_dis=
able_notify_t;
+DEFINE_XEN_GUEST_HANDLE(xen_hvm_altp2m_vcpu_disable_notify_t);
+
 struct xen_hvm_altp2m_view {
     /* IN/OUT variable */
     uint16_t view;
-    /* Create view only: default access type
-     * NOTE: currently ignored */
     uint16_t hvmmem_default_access; /* xenmem_access_t */
 };
 typedef struct xen_hvm_altp2m_view xen_hvm_altp2m_view_t;
 DEFINE_XEN_GUEST_HANDLE(xen_hvm_altp2m_view_t);
=20
+#if __XEN_INTERFACE_VERSION__ < 0x00040a00
 struct xen_hvm_altp2m_set_mem_access {
     /* view */
     uint16_t view;
     /* Memory type */
-    uint16_t hvmmem_access; /* xenmem_access_t */
+    uint16_t access; /* xenmem_access_t */
     uint32_t pad;
     /* gfn */
     uint64_t gfn;
 };
 typedef struct xen_hvm_altp2m_set_mem_access xen_hvm_altp2m_set_mem_acces=
s_t;
 DEFINE_XEN_GUEST_HANDLE(xen_hvm_altp2m_set_mem_access_t);
+#endif /* __XEN_INTERFACE_VERSION__ < 0x00040a00 */
+
+struct xen_hvm_altp2m_mem_access {
+    /* view */
+    uint16_t view;
+    /* Memory type */
+    uint16_t access; /* xenmem_access_t */
+    uint32_t pad;
+    /* gfn */
+    uint64_t gfn;
+};
+typedef struct xen_hvm_altp2m_mem_access xen_hvm_altp2m_mem_access_t;
+DEFINE_XEN_GUEST_HANDLE(xen_hvm_altp2m_mem_access_t);
=20
 struct xen_hvm_altp2m_set_mem_access_multi {
     /* view */
@@ -276,13 +296,24 @@ struct xen_hvm_altp2m_change_gfn {
 typedef struct xen_hvm_altp2m_change_gfn xen_hvm_altp2m_change_gfn_t;
 DEFINE_XEN_GUEST_HANDLE(xen_hvm_altp2m_change_gfn_t);
=20
+struct xen_hvm_altp2m_get_vcpu_p2m_idx {
+    uint32_t vcpu_id;
+    uint16_t altp2m_idx;
+};
+
+struct xen_hvm_altp2m_set_visibility {
+    uint16_t altp2m_idx;
+    uint8_t visible;
+    uint8_t pad;
+};
+
 struct xen_hvm_altp2m_op {
     uint32_t version;   /* HVMOP_ALTP2M_INTERFACE_VERSION */
     uint32_t cmd;
 /* Get/set the altp2m state for a domain */
 #define HVMOP_altp2m_get_domain_state     1
 #define HVMOP_altp2m_set_domain_state     2
-/* Set the current VCPU to receive altp2m event notifications */
+/* Set a given VCPU to receive altp2m event notifications */
 #define HVMOP_altp2m_vcpu_enable_notify   3
 /* Create a new view */
 #define HVMOP_altp2m_create_p2m           4
@@ -296,6 +327,20 @@ struct xen_hvm_altp2m_op {
 #define HVMOP_altp2m_change_gfn           8
 /* Set access for an array of pages */
 #define HVMOP_altp2m_set_mem_access_multi 9
+/* Set the "Suppress #VE" bit on a page */
+#define HVMOP_altp2m_set_suppress_ve      10
+/* Get the "Suppress #VE" bit of a page */
+#define HVMOP_altp2m_get_suppress_ve      11
+/* Get the access of a page of memory from a certain view */
+#define HVMOP_altp2m_get_mem_access       12
+/* Disable altp2m event notifications for a given VCPU */
+#define HVMOP_altp2m_vcpu_disable_notify  13
+/* Get the active vcpu p2m index */
+#define HVMOP_altp2m_get_p2m_idx          14
+/* Set the "Supress #VE" bit for a range of pages */
+#define HVMOP_altp2m_set_suppress_ve_multi 15
+/* Set visibility for a given altp2m view */
+#define HVMOP_altp2m_set_visibility       16
     domid_t domain;
     uint16_t pad1;
     uint32_t pad2;
@@ -303,9 +348,17 @@ struct xen_hvm_altp2m_op {
         struct xen_hvm_altp2m_domain_state         domain_state;
         struct xen_hvm_altp2m_vcpu_enable_notify   enable_notify;
         struct xen_hvm_altp2m_view                 view;
+#if __XEN_INTERFACE_VERSION__ < 0x00040a00
         struct xen_hvm_altp2m_set_mem_access       set_mem_access;
+#endif /* __XEN_INTERFACE_VERSION__ < 0x00040a00 */
+        struct xen_hvm_altp2m_mem_access           mem_access;
         struct xen_hvm_altp2m_change_gfn           change_gfn;
         struct xen_hvm_altp2m_set_mem_access_multi set_mem_access_multi;
+        struct xen_hvm_altp2m_suppress_ve          suppress_ve;
+        struct xen_hvm_altp2m_suppress_ve_multi    suppress_ve_multi;
+        struct xen_hvm_altp2m_vcpu_disable_notify  disable_notify;
+        struct xen_hvm_altp2m_get_vcpu_p2m_idx     get_vcpu_p2m_idx;
+        struct xen_hvm_altp2m_set_visibility       set_visibility;
         uint8_t pad[64];
     } u;
 };
diff --git a/include/xen/hvm/params=2Eh b/include/xen/hvm/params=2Eh
index 2ec2e7c=2E=2E99c40b4 100644
--- a/include/xen/hvm/params=2Eh
+++ b/include/xen/hvm/params=2Eh
@@ -1,22 +1,5 @@
+/* SPDX-License-Identifier: MIT */
 /*
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
  * Copyright (c) 2007, Keir Fraser
  */
=20
@@ -25,6 +8,22 @@
=20
 #include "hvm_op=2Eh"
=20
+/* These parameters are deprecated and their meaning is undefined=2E */
+#if defined(__XEN__) || defined(__XEN_TOOLS__)
+
+#define HVM_PARAM_PAE_ENABLED                4
+#define HVM_PARAM_DM_DOMAIN                 13
+#define HVM_PARAM_MEMORY_EVENT_CR0          20
+#define HVM_PARAM_MEMORY_EVENT_CR3          21
+#define HVM_PARAM_MEMORY_EVENT_CR4          22
+#define HVM_PARAM_MEMORY_EVENT_INT3         23
+#define HVM_PARAM_NESTEDHVM                 24
+#define HVM_PARAM_MEMORY_EVENT_SINGLE_STEP  25
+#define HVM_PARAM_BUFIOREQ_EVTCHN           26
+#define HVM_PARAM_MEMORY_EVENT_MSR          30
+
+#endif /* defined(__XEN__) || defined(__XEN_TOOLS__) */
+
 /*
  * Parameter space for HVMOP_{set,get}_param=2E
  */
@@ -78,12 +77,9 @@
 #define HVM_PARAM_STORE_PFN    1
 #define HVM_PARAM_STORE_EVTCHN 2
=20
-#define HVM_PARAM_PAE_ENABLED  4
-
 #define HVM_PARAM_IOREQ_PFN    5
=20
 #define HVM_PARAM_BUFIOREQ_PFN 6
-#define HVM_PARAM_BUFIOREQ_EVTCHN 26
=20
 #if defined(__i386__) || defined(__x86_64__)
=20
@@ -139,6 +135,30 @@
 #define _HVMPV_crash_ctl 6
 #define HVMPV_crash_ctl (1 << _HVMPV_crash_ctl)
=20
+/* Enable SYNIC MSRs */
+#define _HVMPV_synic 7
+#define HVMPV_synic (1 << _HVMPV_synic)
+
+/* Enable STIMER MSRs */
+#define _HVMPV_stimer 8
+#define HVMPV_stimer (1 << _HVMPV_stimer)
+
+/* Use Synthetic Cluster IPI Hypercall */
+#define _HVMPV_hcall_ipi 9
+#define HVMPV_hcall_ipi (1 << _HVMPV_hcall_ipi)
+
+/* Enable ExProcessorMasks */
+#define _HVMPV_ex_processor_masks 10
+#define HVMPV_ex_processor_masks (1 << _HVMPV_ex_processor_masks)
+
+/* Allow more than 64 VPs */
+#define _HVMPV_no_vp_limit 11
+#define HVMPV_no_vp_limit (1 << _HVMPV_no_vp_limit)
+
+/* Enable vCPU hotplug */
+#define _HVMPV_cpu_hotplug 12
+#define HVMPV_cpu_hotplug (1 << _HVMPV_cpu_hotplug)
+
 #define HVMPV_feature_mask \
         (HVMPV_base_freq | \
          HVMPV_no_freq | \
@@ -146,7 +166,13 @@
          HVMPV_reference_tsc | \
          HVMPV_hcall_remote_tlb_flush | \
          HVMPV_apic_assist | \
-         HVMPV_crash_ctl)
+         HVMPV_crash_ctl | \
+         HVMPV_synic | \
+         HVMPV_stimer | \
+         HVMPV_hcall_ipi | \
+         HVMPV_ex_processor_masks | \
+         HVMPV_no_vp_limit | \
+         HVMPV_cpu_hotplug)
=20
 #endif
=20
@@ -181,9 +207,6 @@
 /* Identity-map page directory used by Intel EPT when CR0=2EPG=3D0=2E */
 #define HVM_PARAM_IDENT_PT     12
=20
-/* Device Model domain, defaults to 0=2E */
-#define HVM_PARAM_DM_DOMAIN    13
-
 /* ACPI S state: currently support S0 and S3 on x86=2E */
 #define HVM_PARAM_ACPI_S_STATE 14
=20
@@ -208,17 +231,6 @@
  */
 #define HVM_PARAM_ACPI_IOPORTS_LOCATION 19
=20
-/* Deprecated */
-#define HVM_PARAM_MEMORY_EVENT_CR0          20
-#define HVM_PARAM_MEMORY_EVENT_CR3          21
-#define HVM_PARAM_MEMORY_EVENT_CR4          22
-#define HVM_PARAM_MEMORY_EVENT_INT3         23
-#define HVM_PARAM_MEMORY_EVENT_SINGLE_STEP  25
-#define HVM_PARAM_MEMORY_EVENT_MSR          30
-
-/* Boolean: Enable nestedhvm (hvm only) */
-#define HVM_PARAM_NESTEDHVM    24
-
 /* Params for the mem event rings */
 #define HVM_PARAM_PAGING_RING_PFN   27
 #define HVM_PARAM_MONITOR_RING_PFN  28
@@ -234,8 +246,8 @@
 #define HVM_PARAM_VM_GENERATION_ID_ADDR 34
=20
 /*
- * Set mode for altp2m:
- *  disabled: don't activate altp2m (default)
+ * Get mode for altp2m:
+ *  disabled: altp2m not active (default)
  *  mixed: allow access to all altp2m ops for both in-guest and external =
tools
  *  external: allow access to external privileged tools only
  *  limited: guest only has limited access (ie=2E control VMFUNC and #VE)
diff --git a/include/xen/io/blkif=2Eh b/include/xen/io/blkif=2Eh
index 8407453=2E=2E8ee1aa3 100644
--- a/include/xen/io/blkif=2Eh
+++ b/include/xen/io/blkif=2Eh
@@ -571,7 +571,7 @@
  */
 #define BLKIF_OP_RESERVED_1        4
 /*
- * Indicate to the backend device that a region of storage is no longer i=
n
+ * Indicate to the backend device that a region of storage is no LONG_PTR=
er in
  * use, and may be discarded at any time without impact to the client=2E =
 If
  * the BLKIF_DISCARD_SECURE flag is set on the request, all copies of the
  * discarded region on the device must be rendered unrecoverable before t=
he
@@ -599,7 +599,7 @@
  * present, the frontend might use blkif_request_indirect structs in orde=
r to
  * issue requests with more than BLKIF_MAX_SEGMENTS_PER_REQUEST (11)=2E T=
he
  * maximum number of indirect segments is fixed by the backend, but the
- * frontend can issue requests with any number of indirect segments as lo=
ng as
+ * frontend can issue requests with any number of indirect segments as LO=
NG_PTR as
  * it's less than the number provided by the backend=2E The indirect_gref=
s field
  * in blkif_request_indirect should be filled by the frontend with the
  * grant references of the pages that are holding the indirect segments=
=2E
diff --git a/include/xen/io/xs_wire=2Eh b/include/xen/io/xs_wire=2Eh
index 4dd6632=2E=2Efce212e 100644
--- a/include/xen/io/xs_wire=2Eh
+++ b/include/xen/io/xs_wire=2Eh
@@ -1,25 +1,8 @@
+/* SPDX-License-Identifier: MIT */
 /*
  * Details of the "wire" protocol between Xen Store Daemon and client
  * library or guest kernel=2E
  *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
  * Copyright (C) 2005 Rusty Russell IBM Corporation
  */
=20
@@ -52,16 +35,16 @@ enum xsd_sockmsg_type
     /* XS_RESTRICT has been removed */
     XS_RESET_WATCHES =3D XS_SET_TARGET + 2,
     XS_DIRECTORY_PART,
+    XS_GET_FEATURE,
+    XS_SET_FEATURE,
+    XS_GET_QUOTA,
+    XS_SET_QUOTA,
=20
     XS_TYPE_COUNT,      /* Number of valid types=2E */
=20
     XS_INVALID =3D 0xffff /* Guaranteed to remain an invalid type */
 };
=20
-#define XS_WRITE_NONE "NONE"
-#define XS_WRITE_CREATE "CREATE"
-#define XS_WRITE_CREATE_EXCL "CREATE|EXCL"
-
 /* We hand errors as strings, for portability=2E */
 struct xsd_errors
 {
@@ -71,11 +54,12 @@ struct xsd_errors
 #ifdef EINVAL
 #define XSD_ERROR(x) { x, #x }
 /* LINTED: static unused */
-static struct xsd_errors xsd_errors[]
+static const struct xsd_errors xsd_errors[]
 #if defined(__GNUC__)
 __attribute__((unused))
 #endif
     =3D {
+    /* /!\ New errors should be added at the end of the array=2E */
     XSD_ERROR(EINVAL),
     XSD_ERROR(EACCES),
     XSD_ERROR(EEXIST),
@@ -90,7 +74,8 @@ __attribute__((unused))
     XSD_ERROR(EBUSY),
     XSD_ERROR(EAGAIN),
     XSD_ERROR(EISCONN),
-    XSD_ERROR(E2BIG)
+    XSD_ERROR(E2BIG),
+    XSD_ERROR(EPERM),
 };
 #endif
=20
@@ -124,6 +109,8 @@ struct xenstore_domain_interface {
     XENSTORE_RING_IDX rsp_cons, rsp_prod;
     uint32_t server_features; /* Bitmap of features supported by the serv=
er */
     uint32_t connection;
+    uint32_t error;
+    uint32_t evtchn_port;
 };
=20
 /* Violating this is very bad=2E  See docs/misc/xenstore=2Etxt=2E */
@@ -135,10 +122,28 @@ struct xenstore_domain_interface {
=20
 /* The ability to reconnect a ring */
 #define XENSTORE_SERVER_FEATURE_RECONNECTION 1
+/* The presence of the "error" field in the ring page */
+#define XENSTORE_SERVER_FEATURE_ERROR        2
+/* The XS_WATCH command can be used with a <depth> parameter */
+#define XENSTORE_SERVER_FEATURE_WATCHDEPTH   4
+/* The capability to use DOMID_ANY for node permissions */
+#define XENSTORE_SERVER_FEATURE_DOMID_ANY    8
=20
 /* Valid values for the connection field */
 #define XENSTORE_CONNECTED 0 /* the steady-state */
-#define XENSTORE_RECONNECT 1 /* guest has initiated a reconnect */
+#define XENSTORE_RECONNECT 1 /* reconnect in progress */
+
+/* Valid values for the error field */
+#define XENSTORE_ERROR_NONE    0 /* No error */
+#define XENSTORE_ERROR_COMM    1 /* Communication problem */
+#define XENSTORE_ERROR_RINGIDX 2 /* Invalid ring index */
+#define XENSTORE_ERROR_PROTO   3 /* Protocol violation (payload too LONG_=
PTR) */
+
+/*
+ * The evtchn_port field is the domain's event channel for xenstored to s=
ignal=2E
+ * It is filled in by Xen for dom0less/Hyperlaunch domains=2E  It is only=
 used
+ * when non-zero=2E  Otherwise the event channel from XS_INTRODUCE is use=
d=2E
+ */
=20
 #endif /* _XS_WIRE_H */
=20
diff --git a/include/xen/memory=2Eh b/include/xen/memory=2Eh
index bf2f81f=2E=2Ebd9fc37 100644
--- a/include/xen/memory=2Eh
+++ b/include/xen/memory=2Eh
@@ -1,25 +1,8 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * memory=2Eh
- *=20
- * Memory reservation and information=2E
- *=20
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
  *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
+ * Memory reservation and information=2E
  *
  * Copyright (c) 2005, Keir Fraser <keir@xensource=2Ecom>
  */
@@ -41,9 +24,9 @@
=20
 #if __XEN_INTERFACE_VERSION__ >=3D 0x00030209
 /*
- * Maximum # bits addressable by the user of the allocated region (e=2Eg=
=2E, I/O=20
- * devices often have a 32-bit limitation even in 64-bit systems)=2E If z=
ero=20
- * then the user has no addressing restriction=2E This field is not used =
by=20
+ * Maximum # bits addressable by the user of the allocated region (e=2Eg=
=2E, I/O
+ * devices often have a 32-bit limitation even in 64-bit systems)=2E If z=
ero
+ * then the user has no addressing restriction=2E This field is not used =
by
  * XENMEM_decrease_reservation=2E
  */
 #define XENMEMF_address_bits(x)     (x)
@@ -117,7 +100,7 @@ struct xen_memory_exchange {
      * [IN/OUT] Details of new memory extents=2E
      * We require that:
      *  1=2E @in=2Edomid =3D=3D @out=2Edomid
-     *  2=2E @in=2Enr_extents  << @in=2Eextent_order =3D=3D=20
+     *  2=2E @in=2Enr_extents  << @in=2Eextent_order =3D=3D
      *     @out=2Enr_extents << @out=2Eextent_order
      *  3=2E @in=2Eextent_start and @out=2Eextent_start lists must not ov=
erlap
      *  4=2E @out=2Eextent_start lists GPFN bases to be populated
@@ -148,16 +131,23 @@ DEFINE_XEN_GUEST_HANDLE(xen_memory_exchange_t);
  */
 #define XENMEM_maximum_ram_page     2
=20
+struct xen_memory_domain {
+    /* [IN] Domain information is being queried for=2E */
+    domid_t domid;
+};
+
 /*
  * Returns the current or maximum memory reservation, in pages, of the
  * specified domain (may be DOMID_SELF)=2E Returns -ve errcode on failure=
=2E
- * arg =3D=3D addr of domid_t=2E
+ * arg =3D=3D addr of struct xen_memory_domain=2E
  */
 #define XENMEM_current_reservation  3
 #define XENMEM_maximum_reservation  4
=20
 /*
- * Returns the maximum GPFN in use by the guest, or -ve errcode on failur=
e=2E
+ * Returns the maximum GFN in use by the specified domain (may be DOMID_S=
ELF)=2E
+ * Returns -ve errcode on failure=2E
+ * arg =3D=3D addr of struct xen_memory_domain=2E
  */
 #define XENMEM_maximum_gpfn         14
=20
@@ -231,7 +221,7 @@ DEFINE_XEN_GUEST_HANDLE(xen_machphys_mapping_t);
=20
 /*
  * Sets the GPFN at which a particular page appears in the specified gues=
t's
- * pseudophysical address space=2E
+ * physical address space (translated guests only)=2E
  * arg =3D=3D addr of xen_add_to_physmap_t=2E
  */
 #define XENMEM_add_to_physmap      7
@@ -244,7 +234,7 @@ struct xen_add_to_physmap {
=20
     unsigned int space; /* =3D> enum phys_map_space */
=20
-#define XENMAPIDX_grant_table_status 0x80000000
+#define XENMAPIDX_grant_table_status 0x80000000U
=20
     /* Index into space being mapped=2E */
     xen_ulong_t idx;
@@ -298,7 +288,7 @@ DEFINE_XEN_GUEST_HANDLE(xen_add_to_physmap_range_t);
=20
 /*
  * Unmaps the page appearing at a particular GPFN from the specified gues=
t's
- * pseudophysical address space=2E
+ * physical address space (translated guests only)=2E
  * arg =3D=3D addr of xen_remove_from_physmap_t=2E
  */
 #define XENMEM_remove_from_physmap      15
@@ -382,7 +372,7 @@ typedef struct xen_pod_target xen_pod_target_t;
=20
 /*
  * Get the number of MFNs saved through memory sharing=2E
- * The call never fails=2E=20
+ * The call never fails=2E
  */
 #define XENMEM_get_sharing_freed_pages    18
 #define XENMEM_get_sharing_shared_pages   19
@@ -396,10 +386,10 @@ struct xen_mem_paging_op {
     uint8_t     op;         /* XENMEM_paging_op_* */
     domid_t     domain;
=20
-    /* PAGING_PREP IN: buffer to immediately fill page in */
-    uint64_aligned_t    buffer;
-    /* Other OPs */
-    uint64_aligned_t    gfn;           /* IN:  gfn of page being operated=
 on */
+    /* IN: (XENMEM_paging_op_prep) buffer to immediately fill page from *=
/
+    XEN_GUEST_HANDLE_64(const_uint8) buffer;
+    /* IN:  gfn of page being operated on */
+    uint64_aligned_t    gfn;
 };
 typedef struct xen_mem_paging_op xen_mem_paging_op_t;
 DEFINE_XEN_GUEST_HANDLE(xen_mem_paging_op_t);
@@ -436,6 +426,15 @@ typedef enum {
      * pausing the vcpu
      */
     XENMEM_access_n2rwx,
+
+    /*
+     * Same as XENMEM_access_r, but on processors with
+     * the TERTIARY_EXEC_EPT_PAGING_WRITE support,
+     * CPU-initiated page-table walks can still
+     * write to it (e=2Eg=2E, update A/D bits)
+     */
+    XENMEM_access_r_pw,
+
     /* Take the domain default */
     XENMEM_access_default
 } xenmem_access_t;
@@ -482,18 +481,20 @@ DEFINE_XEN_GUEST_HANDLE(xen_mem_access_op_t);
 #define XENMEM_sharing_op_add_physmap       6
 #define XENMEM_sharing_op_audit             7
 #define XENMEM_sharing_op_range_share       8
+#define XENMEM_sharing_op_fork              9
+#define XENMEM_sharing_op_fork_reset        10
=20
 #define XENMEM_SHARING_OP_S_HANDLE_INVALID  (-10)
 #define XENMEM_SHARING_OP_C_HANDLE_INVALID  (-9)
=20
 /* The following allows sharing of grant refs=2E This is useful
  * for sharing utilities sitting as "filters" in IO backends
- * (e=2Eg=2E memshr + blktap(2))=2E The IO backend is only exposed=20
+ * (e=2Eg=2E memshr + blktap(2))=2E The IO backend is only exposed
  * to grant references, and this allows sharing of the grefs */
 #define XENMEM_SHARING_OP_FIELD_IS_GREF_FLAG   (xen_mk_ullong(1) << 62)
=20
 #define XENMEM_SHARING_OP_FIELD_MAKE_GREF(field, val)  \
-    (field) =3D (XENMEM_SHARING_OP_FIELD_IS_GREF_FLAG | val)
+    (field) =3D (XENMEM_SHARING_OP_FIELD_IS_GREF_FLAG | (val))
 #define XENMEM_SHARING_OP_FIELD_IS_GREF(field)         \
     ((field) & XENMEM_SHARING_OP_FIELD_IS_GREF_FLAG)
 #define XENMEM_SHARING_OP_FIELD_GET_GREF(field)        \
@@ -532,6 +533,17 @@ struct xen_mem_sharing_op {
                 uint32_t gref;     /* IN: gref to debug         */
             } u;
         } debug;
+        struct mem_sharing_op_fork {      /* OP_FORK{,_RESET} */
+            domid_t parent_domain;        /* IN: parent's domain id */
+/* Only makes sense for short-lived forks */
+#define XENMEM_FORK_WITH_IOMMU_ALLOWED (1u << 0)
+/* Only makes sense for short-lived forks */
+#define XENMEM_FORK_BLOCK_INTERRUPTS   (1u << 1)
+#define XENMEM_FORK_RESET_STATE        (1u << 2)
+#define XENMEM_FORK_RESET_MEMORY       (1u << 3)
+            uint16_t flags;               /* IN: optional settings */
+            uint32_t pad;                 /* Must be set to 0 */
+        } fork;
     } u;
 };
 typedef struct xen_mem_sharing_op xen_mem_sharing_op_t;
@@ -553,8 +565,8 @@ DEFINE_XEN_GUEST_HANDLE(xen_mem_sharing_op_t);
  *
  * Note that a valid claim may be staked even after memory has been
  * allocated for a domain=2E  In this case, the claim is not incremental,
- * i=2Ee=2E if the domain's tot_pages is 3, and a claim is staked for 10,
- * only 7 additional pages are claimed=2E
+ * i=2Ee=2E if the domain's total page count is 3, and a claim is staked
+ * for 10, only 7 additional pages are claimed=2E
  *
  * Caller must be privileged or the hypercall fails=2E
  */
@@ -593,12 +605,14 @@ struct xen_reserved_device_memory_map {
     XEN_GUEST_HANDLE(xen_reserved_device_memory_t) buffer;
     /* IN */
     union {
-        struct physdev_pci_device pci;
+        physdev_pci_device_t pci;
     } dev;
 };
 typedef struct xen_reserved_device_memory_map xen_reserved_device_memory_=
map_t;
 DEFINE_XEN_GUEST_HANDLE(xen_reserved_device_memory_map_t);
=20
+#endif /* defined(__XEN__) || defined(__XEN_TOOLS__) */
+
 /*
  * Get the pages for a particular guest resource, so that they can be
  * mapped directly by a tools domain=2E
@@ -611,36 +625,51 @@ struct xen_mem_acquire_resource {
     uint16_t type;
=20
 #define XENMEM_resource_ioreq_server 0
+#define XENMEM_resource_grant_table 1
+#define XENMEM_resource_vmtrace_buf 2
=20
     /*
      * IN - a type-specific resource identifier, which must be zero
      *      unless stated otherwise=2E
      *
      * type =3D=3D XENMEM_resource_ioreq_server -> id =3D=3D ioreq server=
 id
+     * type =3D=3D XENMEM_resource_grant_table -> id defined below
      */
     uint32_t id;
+
+#define XENMEM_resource_grant_table_id_shared 0
+#define XENMEM_resource_grant_table_id_status 1
+
     /*
-     * IN/OUT - As an IN parameter number of frames of the resource
-     *          to be mapped=2E However, if the specified value is 0 and
-     *          frame_list is NULL then this field will be set to the
-     *          maximum value supported by the implementation on return=
=2E
+     * IN/OUT
+     *
+     * As an IN parameter number of frames of the resource to be mapped=
=2E
+     * This value may be updated over the course of the operation=2E
+     *
+     * When frame_list is NULL and nr_frames is 0, this is interpreted as=
 a
+     * request for the size of the resource, which shall be returned in t=
he
+     * nr_frames field=2E
+     *
+     * The size of a resource will never be zero, but a nonzero result do=
esn't
+     * guarantee that a subsequent mapping request will be successful=2E =
 There
+     * are further type/id specific constraints which may change between =
the
+     * two calls=2E
      */
     uint32_t nr_frames;
     /*
-     * OUT - Must be zero on entry=2E On return this may contain a bitwis=
e
-     *       OR of the following values=2E
+     * Padding field, must be zero on input=2E
+     * In a previous version this was an output field with the lowest bit
+     * named XENMEM_rsrc_acq_caller_owned=2E Future versions of this inte=
rface
+     * will not reuse this bit as an output with the field being zero on
+     * input=2E
      */
-    uint32_t flags;
-
-    /* The resource pages have been assigned to the calling domain */
-#define _XENMEM_rsrc_acq_caller_owned 0
-#define XENMEM_rsrc_acq_caller_owned (1u << _XENMEM_rsrc_acq_caller_owned=
)
-
+    uint32_t pad;
     /*
      * IN - the index of the initial frame to be mapped=2E This parameter
-     *      is ignored if nr_frames is 0=2E
+     *      is ignored if nr_frames is 0=2E  This value may be updated
+     *      over the course of the operation=2E
      */
-    uint64_aligned_t frame;
+    uint64_t frame;
=20
 #define XENMEM_resource_ioreq_server_frame_bufioreq 0
 #define XENMEM_resource_ioreq_server_frame_ioreq(n) (1 + (n))
@@ -654,15 +683,14 @@ struct xen_mem_acquire_resource {
      *          If -EIO is returned then the frame_list has only been
      *          partially mapped and it is up to the caller to unmap all
      *          the GFNs=2E
-     *          This parameter may be NULL if nr_frames is 0=2E
+     *          This parameter may be NULL if nr_frames is 0=2E  This
+     *          value may be updated over the course of the operation=2E
      */
     XEN_GUEST_HANDLE(xen_pfn_t) frame_list;
 };
 typedef struct xen_mem_acquire_resource xen_mem_acquire_resource_t;
 DEFINE_XEN_GUEST_HANDLE(xen_mem_acquire_resource_t);
=20
-#endif /* defined(__XEN__) || defined(__XEN_TOOLS__) */
-
 /*
  * XENMEM_get_vnumainfo used by guest to get
  * vNUMA topology from hypervisor=2E
diff --git a/include/xen/physdev=2Eh b/include/xen/physdev=2Eh
index 8c36c03=2E=2Ee622066 100644
--- a/include/xen/physdev=2Eh
+++ b/include/xen/physdev=2Eh
@@ -1,22 +1,5 @@
+/* SPDX-License-Identifier: MIT */
 /*
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
  * Copyright (c) 2006, Keir Fraser
  */
=20
@@ -104,6 +87,9 @@ DEFINE_XEN_GUEST_HANDLE(physdev_set_iopl_t);
 /*
  * Set the current VCPU's I/O-port permissions bitmap=2E
  * @arg =3D=3D pointer to physdev_set_iobitmap structure=2E
+ *
+ * When @nr_ports is non-zero, Xen, like real CPUs and the TSS IOPB, alwa=
ys
+ * reads 2 bytes from @bitmap, which might be one byte beyond @nr_ports=
=2E
  */
 #define PHYSDEVOP_set_iobitmap           7
 struct physdev_set_iobitmap {
@@ -148,7 +134,7 @@ struct physdev_irq {
 };
 typedef struct physdev_irq physdev_irq_t;
 DEFINE_XEN_GUEST_HANDLE(physdev_irq_t);
-=20
+
 #define MAP_PIRQ_TYPE_MSI               0x0
 #define MAP_PIRQ_TYPE_GSI               0x1
 #define MAP_PIRQ_TYPE_UNKNOWN           0x2
@@ -192,7 +178,7 @@ struct physdev_manage_pci {
     /* IN */
     uint8_t bus;
     uint8_t devfn;
-};=20
+};
=20
 typedef struct physdev_manage_pci physdev_manage_pci_t;
 DEFINE_XEN_GUEST_HANDLE(physdev_manage_pci_t);
@@ -211,8 +197,8 @@ struct physdev_manage_pci_ext {
     /* IN */
     uint8_t bus;
     uint8_t devfn;
-    unsigned is_extfn;
-    unsigned is_virtfn;
+    uint32_t is_extfn;
+    uint32_t is_virtfn;
     struct {
         uint8_t bus;
         uint8_t devfn;
@@ -229,11 +215,11 @@ DEFINE_XEN_GUEST_HANDLE(physdev_manage_pci_ext_t);
 struct physdev_op {
     uint32_t cmd;
     union {
-        struct physdev_irq_status_query      irq_status_query;
-        struct physdev_set_iopl              set_iopl;
-        struct physdev_set_iobitmap          set_iobitmap;
-        struct physdev_apic                  apic_op;
-        struct physdev_irq                   irq_op;
+        physdev_irq_status_query_t irq_status_query;
+        physdev_set_iopl_t         set_iopl;
+        physdev_set_iobitmap_t     set_iobitmap;
+        physdev_apic_t             apic_op;
+        physdev_irq_t              irq_op;
     } u;
 };
 typedef struct physdev_op physdev_op_t;
@@ -258,7 +244,7 @@ DEFINE_XEN_GUEST_HANDLE(physdev_setup_gsi_t);
  * the hypercall returns a free pirq */
 #define PHYSDEVOP_get_free_pirq    23
 struct physdev_get_free_pirq {
-    /* IN */=20
+    /* IN */
     int type;
     /* OUT */
     uint32_t pirq;
@@ -300,11 +286,7 @@ struct physdev_pci_device_add {
      * First element ([0]) is PXM domain associated with the device (if
      * XEN_PCI_DEV_PXM is set)
      */
-#if defined(__STDC_VERSION__) && __STDC_VERSION__ >=3D 199901L
-    uint32_t optarr[];
-#elif defined(__GNUC__)
-    uint32_t optarr[0];
-#endif
+    uint32_t optarr[XEN_FLEX_ARRAY_DIM];
 };
 typedef struct physdev_pci_device_add physdev_pci_device_add_t;
 DEFINE_XEN_GUEST_HANDLE(physdev_pci_device_add_t);
@@ -317,6 +299,13 @@ DEFINE_XEN_GUEST_HANDLE(physdev_pci_device_add_t);
  */
 #define PHYSDEVOP_prepare_msix          30
 #define PHYSDEVOP_release_msix          31
+/*
+ * Notify the hypervisor that a PCI device has been reset, so that any
+ * internally cached state is regenerated=2E  Should be called after any
+ * device reset performed by the hardware domain=2E
+ */
+#define PHYSDEVOP_pci_device_reset      32
+
 struct physdev_pci_device {
     /* IN */
     uint16_t seg;
@@ -326,6 +315,16 @@ struct physdev_pci_device {
 typedef struct physdev_pci_device physdev_pci_device_t;
 DEFINE_XEN_GUEST_HANDLE(physdev_pci_device_t);
=20
+struct pci_device_reset {
+    physdev_pci_device_t dev;
+#define PCI_DEVICE_RESET_COLD 0x0
+#define PCI_DEVICE_RESET_WARM 0x1
+#define PCI_DEVICE_RESET_HOT  0x2
+#define PCI_DEVICE_RESET_FLR  0x3
+#define PCI_DEVICE_RESET_MASK 0x3
+    uint32_t flags;
+};
+
 #define PHYSDEVOP_DBGP_RESET_PREPARE    1
 #define PHYSDEVOP_DBGP_RESET_DONE       2
=20
@@ -338,7 +337,7 @@ struct physdev_dbgp_op {
     uint8_t op;
     uint8_t bus;
     union {
-        struct physdev_pci_device pci;
+        physdev_pci_device_t pci;
     } u;
 };
 typedef struct physdev_dbgp_op physdev_dbgp_op_t;
diff --git a/include/xen/sched=2Eh b/include/xen/sched=2Eh
index 2aafb9e=2E=2E3e34d0d 100644
--- a/include/xen/sched=2Eh
+++ b/include/xen/sched=2Eh
@@ -1,26 +1,9 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * sched=2Eh
  *
  * Scheduler state interactions
  *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
  * Copyright (c) 2005, Keir Fraser <keir@xensource=2Ecom>
  */
=20
diff --git a/include/xen/trace=2Eh b/include/xen/trace=2Eh
index 67e5209=2E=2E19b3551 100644
--- a/include/xen/trace=2Eh
+++ b/include/xen/trace=2Eh
@@ -1,23 +1,6 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * include/public/trace=2Eh
- *=20
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
  *
  * Mark Williamson, (C) 2004 Intel Research Cambridge
  * Copyright (C) 2005 Bin Ren
@@ -84,7 +67,7 @@
 #define TRC_SCHED_CLASS_EVT(_c, _e) \
   ( ( TRC_SCHED_CLASS | \
       ((TRC_SCHED_##_c << TRC_SCHED_ID_SHIFT) & TRC_SCHED_ID_MASK) ) + \
-    (_e & TRC_SCHED_EVT_MASK) )
+    ((_e) & TRC_SCHED_EVT_MASK) )
=20
 /* Trace classes for DOM0 operations */
 #define TRC_DOM0_DOMOPS     0x00041000   /* Domains manipulations */
@@ -174,7 +157,7 @@
  */
 #define TRC_PV_HYPERCALL_V2_ARG_32(i) (0x1 << (20 + 2*(i)))
 #define TRC_PV_HYPERCALL_V2_ARG_64(i) (0x2 << (20 + 2*(i)))
-#define TRC_PV_HYPERCALL_V2_ARG_MASK  (0xfff00000)
+#define TRC_PV_HYPERCALL_V2_ARG_MASK  0xfff00000U
=20
 #define TRC_SHADOW_NOT_SHADOW                 (TRC_SHADOW +  1)
 #define TRC_SHADOW_FAST_PROPAGATE             (TRC_SHADOW +  2)
@@ -195,8 +178,10 @@
 /* trace events per subclass */
 #define TRC_HVM_NESTEDFLAG      (0x400)
 #define TRC_HVM_VMENTRY         (TRC_HVM_ENTRYEXIT + 0x01)
-#define TRC_HVM_VMEXIT          (TRC_HVM_ENTRYEXIT + 0x02)
-#define TRC_HVM_VMEXIT64        (TRC_HVM_ENTRYEXIT + TRC_64_FLAG + 0x02)
+#define TRC_HVM_VMX_EXIT        (TRC_HVM_ENTRYEXIT + 0x02)
+#define TRC_HVM_VMX_EXIT64      (TRC_HVM_ENTRYEXIT + TRC_64_FLAG + 0x02)
+#define TRC_HVM_SVM_EXIT        (TRC_HVM_ENTRYEXIT + 0x03)
+#define TRC_HVM_SVM_EXIT64      (TRC_HVM_ENTRYEXIT + TRC_64_FLAG + 0x03)
 #define TRC_HVM_PF_XEN          (TRC_HVM_HANDLER + 0x01)
 #define TRC_HVM_PF_XEN64        (TRC_HVM_HANDLER + TRC_64_FLAG + 0x01)
 #define TRC_HVM_PF_INJECT       (TRC_HVM_HANDLER + 0x02)
diff --git a/include/xen/xen-compat=2Eh b/include/xen/xen-compat=2Eh
index b673653=2E=2E078b796 100644
--- a/include/xen/xen-compat=2Eh
+++ b/include/xen/xen-compat=2Eh
@@ -1,25 +1,8 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * xen-compat=2Eh
- *=20
- * Guest OS interface to Xen=2E  Compatibility layer=2E
- *=20
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
  *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
+ * Guest OS interface to Xen=2E  Compatibility layer=2E
  *
  * Copyright (c) 2006, Christian Limpach
  */
@@ -27,7 +10,7 @@
 #ifndef __XEN_PUBLIC_XEN_COMPAT_H__
 #define __XEN_PUBLIC_XEN_COMPAT_H__
=20
-#define __XEN_LATEST_INTERFACE_VERSION__ 0x00040900
+#define __XEN_LATEST_INTERFACE_VERSION__ 0x00041300
=20
 #if defined(__XEN__) || defined(__XEN_TOOLS__)
 /* Xen is built with matching headers and implements the latest interface=
=2E */
@@ -41,4 +24,6 @@
 #error "These header files do not support the requested interface version=
=2E"
 #endif
=20
+#define COMPAT_FLEX_ARRAY_DIM XEN_FLEX_ARRAY_DIM
+
 #endif /* __XEN_PUBLIC_XEN_COMPAT_H__ */
diff --git a/include/xen/xen=2Eh b/include/xen/xen=2Eh
index 8a238de=2E=2E728bda2 100644
--- a/include/xen/xen=2Eh
+++ b/include/xen/xen=2Eh
@@ -1,25 +1,8 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * xen=2Eh
- *=20
+ *
  * Guest OS interface to Xen=2E
- *=20
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
  *
  * Copyright (c) 2004, K A Fraser
  */
@@ -33,11 +16,15 @@
 #include "arch-x86/xen=2Eh"
 #elif defined(__arm__) || defined (__aarch64__)
 #include "arch-arm=2Eh"
+#elif defined(__powerpc64__)
+#include "arch-ppc=2Eh"
+#elif defined(__riscv)
+#include "arch-riscv=2Eh"
 #else
 #error "Unsupported architecture"
 #endif
=20
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
 /* Guest handles for primitive C types=2E */
 DEFINE_XEN_GUEST_HANDLE(char);
 __DEFINE_XEN_GUEST_HANDLE(uchar, unsigned char);
@@ -53,6 +40,15 @@ DEFINE_XEN_GUEST_HANDLE(uint64_t);
 DEFINE_XEN_GUEST_HANDLE(xen_pfn_t);
 DEFINE_XEN_GUEST_HANDLE(xen_ulong_t);
=20
+/* Define a variable length array (depends on compiler)=2E */
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >=3D 199901L
+#define XEN_FLEX_ARRAY_DIM
+#elif defined(__GNUC__)
+#define XEN_FLEX_ARRAY_DIM  0
+#else
+#define XEN_FLEX_ARRAY_DIM  1 /* variable size */
+#endif
+
 /* Turn a plain number into a C unsigned (LONG_PTR (LONG_PTR)) constant=
=2E */
 #define __xen_mk_uint(x)  x ## U
 #define __xen_mk_ulong(x) x ## UL
@@ -110,7 +106,7 @@ DEFINE_XEN_GUEST_HANDLE(xen_ulong_t);
 #define __HYPERVISOR_nmi_op               28
 #define __HYPERVISOR_sched_op             29
 #define __HYPERVISOR_callback_op          30
-#define __HYPERVISOR_xenoprof_op          31
+#define __HYPERVISOR_xenoprof_op          31 /* Dropped in Xen 4=2E22 */
 #define __HYPERVISOR_event_channel_op     32
 #define __HYPERVISOR_physdev_op           33
 #define __HYPERVISOR_hvm_op               34
@@ -118,9 +114,10 @@ DEFINE_XEN_GUEST_HANDLE(xen_ulong_t);
 #define __HYPERVISOR_domctl               36
 #define __HYPERVISOR_kexec_op             37
 #define __HYPERVISOR_tmem_op              38
-#define __HYPERVISOR_xc_reserved_op       39 /* reserved for XenClient */
+#define __HYPERVISOR_argo_op              39
 #define __HYPERVISOR_xenpmu_op            40
 #define __HYPERVISOR_dm_op                41
+#define __HYPERVISOR_hypfs_op             42
=20
 /* Architecture-specific hypercall definitions=2E */
 #define __HYPERVISOR_arch_0               48
@@ -157,30 +154,39 @@ DEFINE_XEN_GUEST_HANDLE(xen_ulong_t);
 #define __HYPERVISOR_dom0_op __HYPERVISOR_platform_op
 #endif
=20
-/*=20
+/*
  * VIRTUAL INTERRUPTS
- *=20
+ *
  * Virtual interrupts that a guest OS may receive from Xen=2E
- *=20
- * In the side comments, 'V=2E' denotes a per-VCPU VIRQ while 'G=2E' deno=
tes a
- * global VIRQ=2E The former can be bound once per VCPU and cannot be re-=
bound=2E
- * The latter can be allocated only once per guest: they must initially b=
e
- * allocated to VCPU0 but can subsequently be re-bound=2E
+ *
+ * There are three types:
+ *
+ * 1=2E (V) Per-vcpu:
+ *    These can be bound once per vCPU, each using a different evtchn por=
t=2E
+ *    An evtchn for one vCPU cannot be rebound to a different vCPU=2E
+ *
+ * 2=2E (D) Per-domain:
+ *    These can be bound once per domain=2E  They must be bound on vCPU 0=
 first,
+ *    but can be rebound to other vCPUs afterwards=2E
+ *
+ * 3=2E (G) Global:
+ *    Like per-domain, but can only be bound to a single domain at a time=
=2E
+ *    The owning domain must unbind before a new domain can bind=2E
  */
 /* ` enum virq { */
 #define VIRQ_TIMER      0  /* V=2E Timebase update, and/or requested time=
out=2E  */
 #define VIRQ_DEBUG      1  /* V=2E Request guest to dump debug info=2E   =
        */
-#define VIRQ_CONSOLE    2  /* G=2E (DOM0) Bytes received on emergency con=
sole=2E */
-#define VIRQ_DOM_EXC    3  /* G=2E (DOM0) Exceptional event for some doma=
in=2E   */
-#define VIRQ_TBUF       4  /* G=2E (DOM0) Trace buffer has records availa=
ble=2E  */
-#define VIRQ_DEBUGGER   6  /* G=2E (DOM0) A domain has paused for debuggi=
ng=2E   */
+#define VIRQ_CONSOLE    2  /* G=2E Bytes received on emergency console=2E=
        */
+#define VIRQ_DOM_EXC    3  /* G=2E Exceptional event for some domain=2E  =
        */
+#define VIRQ_TBUF       4  /* G=2E Trace buffer has records available=2E =
        */
+#define VIRQ_DEBUGGER   6  /* G=2E A domain has paused for debugging=2E  =
        */
 #define VIRQ_XENOPROF   7  /* V=2E XenOprofile interrupt: new sample avai=
lable */
-#define VIRQ_CON_RING   8  /* G=2E (DOM0) Bytes received on console      =
      */
-#define VIRQ_PCPU_STATE 9  /* G=2E (DOM0) PCPU state changed             =
      */
-#define VIRQ_MEM_EVENT  10 /* G=2E (DOM0) A memory event has occured     =
      */
-#define VIRQ_XC_RESERVED 11 /* G=2E Reserved for XenClient               =
      */
-#define VIRQ_ENOMEM     12 /* G=2E (DOM0) Low on heap memory       */
-#define VIRQ_XENPMU     13 /* V=2E  PMC interrupt                        =
      */
+#define VIRQ_CON_RING   8  /* G=2E Bytes received on console             =
      */
+#define VIRQ_PCPU_STATE 9  /* G=2E PCPU state changed                    =
      */
+#define VIRQ_MEM_EVENT  10 /* G=2E A memory event has occurred           =
      */
+#define VIRQ_ARGO       11 /* D=2E Argo interdomain message notification =
      */
+#define VIRQ_ENOMEM     12 /* G=2E Low on heap memory                    =
      */
+#define VIRQ_XENPMU     13 /* V=2E PMC interrupt                         =
      */
=20
 /* Architecture-specific VIRQ definitions=2E */
 #define VIRQ_ARCH_0    16
@@ -211,7 +217,7 @@ DEFINE_XEN_GUEST_HANDLE(xen_ulong_t);
  *                     (x) encodes the PFD as follows:
  *                     x =3D=3D 0 =3D> PFD =3D=3D DOMID_SELF
  *                     x !=3D 0 =3D> PFD =3D=3D x - 1
- *=20
+ *
  * Sub-commands: ptr[1:0] specifies the appropriate MMU_* command=2E
  * -------------
  * ptr[1:0] =3D=3D MMU_NORMAL_PT_UPDATE:
@@ -257,13 +263,13 @@ DEFINE_XEN_GUEST_HANDLE(xen_ulong_t);
  * To deallocate the pages, the operations are the reverse of the steps
  * mentioned above=2E The argument is MMUEXT_UNPIN_TABLE for all levels a=
nd the
  * pagetable MUST not be in use (meaning that the cr3 is not set to it)=
=2E
- *=20
+ *
  * ptr[1:0] =3D=3D MMU_MACHPHYS_UPDATE:
  * Updates an entry in the machine->pseudo-physical mapping table=2E
  * ptr[:2]  -- Machine address within the frame whose mapping to modify=
=2E
  *             The frame must belong to the FD, if one is specified=2E
  * val      -- Value to write into the mapping entry=2E
- *=20
+ *
  * ptr[1:0] =3D=3D MMU_PT_UPDATE_PRESERVE_AD:
  * As MMU_NORMAL_PT_UPDATE above, but A/D bits currently in the PTE are O=
Red
  * with those in @val=2E
@@ -431,7 +437,7 @@ DEFINE_XEN_GUEST_HANDLE(xen_ulong_t);
 #define MMUEXT_UNMARK_SUPER     20
 /* ` } */
=20
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
 struct mmuext_op {
     unsigned int cmd; /* =3D> enum mmuext_cmd */
     union {
@@ -486,7 +492,28 @@ DEFINE_XEN_GUEST_HANDLE(mmuext_op_t);
 /* ` } */
=20
 /*
- * Commands to HYPERVISOR_console_io()=2E
+ * ` int
+ * ` HYPERVISOR_console_io(unsigned int cmd,
+ * `                       unsigned int count,
+ * `                       char buffer[]);
+ *
+ * @cmd: Command (see below)
+ * @count: Size of the buffer to read/write
+ * @buffer: Pointer in the guest memory
+ *
+ * List of commands:
+ *
+ *  * CONSOLEIO_write: Write the buffer to Xen console=2E
+ *      For the hardware domain, all the characters in the buffer will
+ *      be written=2E Characters will be printed directly to the console=
=2E
+ *      For all the other domains, only the printable characters will be
+ *      written=2E Characters may be buffered until a newline (i=2Ee '\n'=
) is
+ *      found=2E
+ *      @return 0 on success, otherwise return an error code=2E
+ *  * CONSOLEIO_read: Attempts to read up to @count characters from Xen
+ *      console=2E The maximum buffer size (i=2Ee=2E @count) supported is=
 2GB=2E
+ *      @return the number of characters read on success, otherwise retur=
n
+ *      an error code=2E
  */
 #define CONSOLEIO_write         0
 #define CONSOLEIO_read          1
@@ -581,10 +608,20 @@ DEFINE_XEN_GUEST_HANDLE(mmuext_op_t);
 /* DOMID_INVALID is used to identify pages with unknown owner=2E */
 #define DOMID_INVALID        xen_mk_uint(0x7FF4)
=20
+/*
+ * DOMID_ANY is used to signal no specific domain ID requested=2E
+ * Handler should pick a valid ID, or handle it as a wildcard value
+ * depending on the context=2E
+ */
+#define DOMID_ANY            xen_mk_uint(0x7FF5)
+
 /* Idle domain=2E */
 #define DOMID_IDLE           xen_mk_uint(0x7FFF)
=20
-#ifndef __ASSEMBLY__
+/* Mask for valid domain id values */
+#define DOMID_MASK           xen_mk_uint(0x7FFF)
+
+#ifndef __ASSEMBLER__
=20
 typedef uint16_t domid_t;
=20
@@ -602,7 +639,7 @@ DEFINE_XEN_GUEST_HANDLE(mmu_update_t);
 /*
  * ` enum neg_errnoval
  * ` HYPERVISOR_multicall(multicall_entry_t call_list[],
- * `                      uint32_t nr_calls);
+ * `                      ULONG_PTR nr_calls);
  *
  * NB=2E The fields are logically the natural register size for this
  * architecture=2E In cases where xen_ulong_t is larger than this then
@@ -610,7 +647,11 @@ DEFINE_XEN_GUEST_HANDLE(mmu_update_t);
  */
 struct multicall_entry {
     xen_ulong_t op, result;
+#ifndef __XEN__
     xen_ulong_t args[6];
+#else /* Only 5 arguments are supported in reality=2E */
+    xen_ulong_t args[5], unused;
+#endif
 };
 typedef struct multicall_entry multicall_entry_t;
 DEFINE_XEN_GUEST_HANDLE(multicall_entry_t);
@@ -661,7 +702,7 @@ typedef struct vcpu_time_info vcpu_time_info_t;
 struct vcpu_info {
     /*
      * 'evtchn_upcall_pending' is written non-zero by Xen to indicate
-     * a pending notification for a particular VCPU=2E It is then cleared=
=20
+     * a pending notification for a particular VCPU=2E It is then cleared
      * by the guest OS /before/ checking for pending work, thus avoiding
      * a set-and-check race=2E Note that the mask is only accessed by Xen
      * on the CPU that is currently hosting the VCPU=2E This means that t=
he
@@ -692,7 +733,7 @@ struct vcpu_info {
 #endif /* XEN_HAVE_PV_UPCALL_MASK */
     xen_ulong_t evtchn_pending_sel;
     struct arch_vcpu_info arch;
-    struct vcpu_time_info time;
+    vcpu_time_info_t time;
 }; /* 64 bytes (x86) */
 #ifndef __XEN__
 typedef struct vcpu_info vcpu_info_t;
@@ -724,7 +765,7 @@ struct shared_info {
      *  3=2E Virtual interrupts ('events')=2E A domain can bind an event-=
channel
      *     port to a virtual interrupt source, such as the virtual-timer
      *     device or the emergency console=2E
-     *=20
+     *
      * Event channels are addressed by a "port index"=2E Each channel is
      * associated with two bits of information:
      *  1=2E PENDING -- notifies the domain that there is a pending notif=
ication
@@ -735,7 +776,7 @@ struct shared_info {
      *     becomes pending while the channel is masked then the 'edge' is=
 lost
      *     (i=2Ee=2E, when the channel is unmasked, the guest must manual=
ly handle
      *     pending notifications as no upcall will be scheduled by Xen)=
=2E
-     *=20
+     *
      * To expedite scanning of pending notifications, any 0->1 pending
      * transition on an unmasked channel causes a corresponding bit in a
      * per-vcpu selector word to be set=2E Each bit in the selector cover=
s a
@@ -745,12 +786,17 @@ struct shared_info {
     xen_ulong_t evtchn_mask[sizeof(xen_ulong_t) * 8];
=20
     /*
-     * Wallclock time: updated only by control software=2E Guests should =
base
-     * their gettimeofday() syscall on this wallclock-base value=2E
+     * Wallclock time: updated by control software or RTC emulation=2E
+     * Guests should base their gettimeofday() syscall on this
+     * wallclock-base value=2E
+     * The values of wc_sec and wc_nsec are offsets from the Unix epoch
+     * adjusted by the domain's 'time offset' (in seconds) as set either
+     * by XEN_DOMCTL_settimeoffset, or adjusted via a guest write to the
+     * emulated RTC=2E
      */
     uint32_t wc_version;      /* Version counter: see vcpu_time_info_t=2E=
 */
-    uint32_t wc_sec;          /* Secs  00:00:00 UTC, Jan 1, 1970=2E  */
-    uint32_t wc_nsec;         /* Nsecs 00:00:00 UTC, Jan 1, 1970=2E  */
+    uint32_t wc_sec;
+    uint32_t wc_nsec;
 #if !defined(__i386__)
     uint32_t wc_sec_hi;
 # define xen_wc_sec_hi wc_sec_hi
@@ -922,6 +968,11 @@ typedef struct dom0_vga_console_info {
             uint32_t gbl_caps;
             /* Mode attributes (offset 0x0, VESA command 0x4f01)=2E */
             uint16_t mode_attrs;
+            uint16_t pad;
+#endif
+#if __XEN_INTERFACE_VERSION__ >=3D 0x00040d00
+            /* high 32 bits of lfb_base */
+            uint32_t ext_lfb_base;
 #endif
         } vesa_lfb;
     } u;
@@ -967,7 +1018,7 @@ typedef struct {
     XEN_DEFINE_UUID_(a, b, c, d, e1, e2, e3, e4, e5, e6)
 #endif /* __STDC_VERSION__ / __GNUC__ */
=20
-#endif /* !__ASSEMBLY__ */
+#endif /* !__ASSEMBLER__ */
=20
 /* Default definitions for macros used by domctl/sysctl=2E */
 #if defined(__XEN__) || defined(__XEN_TOOLS__)
@@ -982,11 +1033,12 @@ typedef struct {
 #define XEN_GUEST_HANDLE_64(name) XEN_GUEST_HANDLE(name)
 #endif
=20
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
 struct xenctl_bitmap {
     XEN_GUEST_HANDLE_64(uint8) bitmap;
     uint32_t nr_bits;
 };
+typedef struct xenctl_bitmap xenctl_bitmap_t;
 #endif
=20
 #endif /* defined(__XEN__) || defined(__XEN_TOOLS__) */
--=20
2=2E55=2E0=2Ewindows=2E3



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.250.c0bbf5c41d3afc07.1a13feece9e.4f141ff545cf80a4=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 15 14:19:45 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 15 Oct 2026 14:19:45 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1450690.1666139 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHMJ7-0004xz-LE; Thu, 15 Oct 2026 14:19:45 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1450690.1666139; Thu, 15 Oct 2026 14:19:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHMJ7-0004xQ-FP; Thu, 15 Oct 2026 14:19:45 +0000
Received: by outflank-mailman (input) for mailman id 1450690;
 Thu, 15 Oct 2026 14:19:44 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13feed1080008425@swg.vates.tech>)
 id 1xHMJ6-0004ur-GE
 for win-pv-devel@lists.xenproject.org; Thu, 15 Oct 2026 14:19:44 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xHMJ5-008GHL-Sv
 for win-pv-devel@lists.xenproject.org; Thu, 15 Oct 2026 16:19:43 +0200
Received: from [10.42.69.9] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13feed1080008425@swg.vates.tech>)
 id 6ad0e0f4-bab6-0a2a0a5309dd-0a2a4509d6d8-34
 for <win-pv-devel@lists.xenproject.org>; Thu, 15 Oct 2026 16:19:43 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-bad1c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13feed1080008425@swg.vates.tech>)
 id 6ad0e0ff-be1a-0a2a45090019-b9ff1c12b177-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 15 Oct 2026 16:19:43 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a13feed1080008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 15 Oct 2026 14:19:38 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 9F81F82B93;
 Thu, 15 Oct 2026 16:19:37 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=AgUDFoL1hjJ7TztijuYWMBnbWrRDAvrbHYFTBXvqZ1A=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=J4WWtS6ShGMPPND+p9dM8QMLl+BjvIywgEplB2Tesn5E/P5Jdb40uWh5Plyj9fdDugzRDqmZ7
 jiaLF7hi5Sg886JXVZvwO0Jv2//NEqqG5BcCGF9GrA4gvq9hi80AkpOWFOF5iFkomerc0Ap4BVt
 mxIcE7fZKMxUvWTWy7bzrsxi0LsoKO0cMCDpm6m+Ry+maq/IEnSh+aBAU4eiRjtWHpZP/GrZ635
 nEDzvSk8ZJon/NuR+VJblWBMW2gD4Kws08UEGu0keca8BAXrY6Nw4Fumiai7EC3+DWg2mo/clfi
 lIOKIWcQdALsNOdiwb/hA+p1PRYPU8kZuRQkeWPJQ4mg==
X-Zone-Loop: 214dc34b87cbc0d35364204c72a352e452f437c8c875
x-campaign-type: default
x-transaction-id: e3d48109-7a92-4f46-b675-addfd7cb3981
x-swg-uid: 01-fdb75476-2034-466f-be29-f3b861d4857b
X-Mailer: Sweego
Message-ID:
 <1792073978.8631fc262581453bbf619ec5b2062170.1a13feed1080008425@vates.tech>
x-swg-bid: 1792073978.8631fc262581453bbf619ec5b2062170.1a13feed1080008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [XENVBD PATCH 2/2] xsd_errors structs are now const
Date: Thu, 15 Oct 2026 16:19:27 +0200
In-Reply-To: <20261015141933.1533-1-ngoc-tu.dinh@vates.tech>
References: <1792073912.8631fc262581453bbf619ec5b2062170.1a13fedd1870008425@vates.tech>
 <20261015141933.1533-1-ngoc-tu.dinh@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.251.45e567671f6f5c85.1a13feecf6a.e7302a288873027e=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792073977706
X-purgate-ID: tlsNG-bad1c0/1792073983-BF0DD034-8B658094/0/0
X-purgate-type: clean
X-purgate-size: 1629

---=Part.251.45e567671f6f5c85.1a13feecf6a.e7302a288873027e=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Fix the pointer type in __StoreCheckResponse=2E

Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 src/xencrsh/store=2Ec | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/xencrsh/store=2Ec b/src/xencrsh/store=2Ec
index cc7cf8b=2E=2Ef118646 100644
--- a/src/xencrsh/store=2Ec
+++ b/src/xencrsh/store=2Ec
@@ -549,10 +549,10 @@ __StoreCheckResponse(
         for (Index =3D 0;
              Index < sizeof (xsd_errors) / sizeof (xsd_errors[0]);
              Index++) {
-            struct xsd_errors   *Entry =3D &xsd_errors[Index];
-            PCHAR               Error =3D Response->Segment[RESPONSE_PAYL=
OAD_SEGMENT]=2EData;
-            ULONG               Length =3D Response->Segment[RESPONSE_PAY=
LOAD_SEGMENT]=2ELength;
-           =20
+            const struct xsd_errors *Entry =3D &xsd_errors[Index];
+            PCHAR                   Error =3D Response->Segment[RESPONSE_=
PAYLOAD_SEGMENT]=2EData;
+            ULONG                   Length =3D Response->Segment[RESPONSE=
_PAYLOAD_SEGMENT]=2ELength;
+
             if (strncmp(Error, Entry->errstring, Length) =3D=3D 0) {
                 LogTrace("%s\n", Error);
                 ERRNO_TO_STATUS(Entry->errnum, status);
--=20
2=2E55=2E0=2Ewindows=2E3



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.251.45e567671f6f5c85.1a13feecf6a.e7302a288873027e=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 15 14:19:46 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 15 Oct 2026 14:19:46 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1450691.1666144 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHMJ8-00052B-Ma; Thu, 15 Oct 2026 14:19:46 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1450691.1666144; Thu, 15 Oct 2026 14:19:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHMJ8-00051z-Ia; Thu, 15 Oct 2026 14:19:46 +0000
Received: by outflank-mailman (input) for mailman id 1450691;
 Thu, 15 Oct 2026 14:19:44 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13feed3780008425@swg.vates.tech>)
 id 1xHMJ6-0004um-AF
 for win-pv-devel@lists.xenproject.org; Thu, 15 Oct 2026 14:19:44 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xHMJ5-00HDRC-Mv
 for win-pv-devel@lists.xenproject.org; Thu, 15 Oct 2026 16:19:43 +0200
Received: from [10.42.69.8] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13feed3780008425@swg.vates.tech>)
 id 6ad0e0f3-2eae-0a2a0a5409dd-0a2a4508d0bc-32
 for <win-pv-devel@lists.xenproject.org>; Thu, 15 Oct 2026 16:19:43 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-c1860d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13feed3780008425@swg.vates.tech>)
 id 6ad0e0f9-f659-0a2a45080019-b9ff1c2293c9-4
 for <win-pv-devel@lists.xenproject.org>; Thu, 15 Oct 2026 16:19:43 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a13feed3780008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 15 Oct 2026 14:19:38 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 1F11282BD2;
 Thu, 15 Oct 2026 16:19:38 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=CLNtyUiXVZiW4IDG2nCL6mSwo/ywY601v+bZ0+hFPFU=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=FYBeDo/UWyj1b3eTaUaUsU3lyp2HgYJBiaw/KRVuJQqiDe8zXAUQdLHGag9E1oFkjjtYfuw8m
 x2ZUwHW9OncZcocUQh0KEFs9BUArCh/DPftqsufN4P9SoFi4t2nIkvOJDd+/BBkZSUcSSTrepF2
 qK5w+TQ7S7LWNF/cBVGanqwcsnXq8UWtzz5GBOaCqPnPFjzGCcmHk9MWW3igZWzsVJp5M8E8WYQ
 EBXi7IN+aQCGyFTjQz3Sn4snfBl98uFWbXPAoNmetnmtuZ0BYXBTGMptQF1AJhE1Z1iCCb2AzSd
 EW9Y6FiWl3dbwA3XyPOQP5AbJRfoiZD7pW0ocmBaU9fQ==
X-Zone-Loop: 8ef038594f464e211074ba68973028e1b1af5d9e854f
x-campaign-type: default
x-transaction-id: b68fb911-7074-4930-8e87-e50470f92259
x-swg-uid: 01-3c120024-7108-4604-918f-df2b4476a0dc
X-Mailer: Sweego
Message-ID:
 <1792073978.8631fc262581453bbf619ec5b2062170.1a13feed3780008425@vates.tech>
x-swg-bid: 1792073978.8631fc262581453bbf619ec5b2062170.1a13feed3780008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [XENVKBD PATCH 1/2] Update Xen headers to RELEASE-4.22.0
Date: Thu, 15 Oct 2026 16:19:29 +0200
In-Reply-To: <20261015141933.1533-1-ngoc-tu.dinh@vates.tech>
References: <1792073912.8631fc262581453bbf619ec5b2062170.1a13fedd1870008425@vates.tech>
 <20261015141933.1533-1-ngoc-tu.dinh@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.253.b209b2e1dd85db4b.1a13feed17a.c37389a496f40aba=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792073978234
X-purgate-ID: tlsNG-c1860d/1792073983-CE743BDB-8DC3FB9B/0/0
X-purgate-type: clean
X-purgate-size: 86948

---=Part.253.b209b2e1dd85db4b.1a13feed17a.c37389a496f40aba=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 include/xen/public/arch-x86/xen-x86_32=2Eh |  79 ++++---
 include/xen/public/arch-x86/xen-x86_64=2Eh | 124 +++++++----
 include/xen/public/arch-x86/xen=2Eh        | 117 +++++++---
 include/xen/public/errno=2Eh               |  16 +-
 include/xen/public/grant_table=2Eh         |  57 ++---
 include/xen/public/io/kbdif=2Eh            |  85 ++++----
 include/xen/public/io/ring=2Eh             | 266 ++++++++++++++++++----
 include/xen/public/io/xenbus=2Eh           |  19 +-
 include/xen/public/trace=2Eh               |  33 +--
 include/xen/public/xen-compat=2Eh          |  23 +-
 include/xen/public/xen=2Eh                 | 267 ++++++++++++++---------
 include/xen/xen/errno=2Eh                  |   8 +-
 12 files changed, 692 insertions(+), 402 deletions(-)

diff --git a/include/xen/public/arch-x86/xen-x86_32=2Eh b/include/xen/publ=
ic/arch-x86/xen-x86_32=2Eh
index d23340b=2E=2E4ee19cc 100644
--- a/include/xen/public/arch-x86/xen-x86_32=2Eh
+++ b/include/xen/public/arch-x86/xen-x86_32=2Eh
@@ -1,26 +1,9 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * xen-x86_32=2Eh
  *
  * Guest OS interface to x86 32-bit Xen=2E
  *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
  * Copyright (c) 2004-2007, K A Fraser
  */
=20
@@ -29,7 +12,7 @@
=20
 /*
  * Hypercall interface:
- *  Input:  %ebx, %ecx, %edx, %esi, %edi, %ebp (arguments 1-6)
+ *  Input:  %ebx, %ecx, %edx, %esi, %edi (arguments 1-5)
  *  Output: %eax
  * Access is via hypercall page (set up by guest loader or via a Xen MSR)=
:
  *  call hypercall_page + hypercall-number * 32
@@ -107,32 +90,66 @@
 #define XEN_GUEST_HANDLE_64(name) __XEN_GUEST_HANDLE_64(name)
 #endif
=20
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
+
+#if defined(XEN_GENERATING_COMPAT_HEADERS)
+/* nothing */
+#elif defined(__XEN__) || defined(__XEN_TOOLS__)
+/* Anonymous unions include all permissible names (e=2Eg=2E, al/ah/ax/eax=
)=2E */
+#define __DECL_REG_LO8(which) union { \
+    uint32_t e ## which ## x; \
+    uint16_t which ## x; \
+    struct { \
+        uint8_t which ## l; \
+        uint8_t which ## h; \
+    }; \
+}
+#define __DECL_REG_LO16(name) union { \
+    uint32_t e ## name, _e ## name; \
+    uint16_t name; \
+}
+#else
+/* Other sources must always use the proper 32-bit name (e=2Eg=2E, eax)=
=2E */
+#define __DECL_REG_LO8(which) uint32_t e ## which ## x
+#define __DECL_REG_LO16(name) uint32_t e ## name
+#endif
+
+#ifdef __XEN__
+#define cpu_user_regs guest_user_regs
+#endif
=20
 struct cpu_user_regs {
-    uint32_t ebx;
-    uint32_t ecx;
-    uint32_t edx;
-    uint32_t esi;
-    uint32_t edi;
-    uint32_t ebp;
-    uint32_t eax;
+    __DECL_REG_LO8(b);
+    __DECL_REG_LO8(c);
+    __DECL_REG_LO8(d);
+    __DECL_REG_LO16(si);
+    __DECL_REG_LO16(di);
+    __DECL_REG_LO16(bp);
+    __DECL_REG_LO8(a);
     uint16_t error_code;    /* private */
     uint16_t entry_vector;  /* private */
-    uint32_t eip;
+    __DECL_REG_LO16(ip);
     uint16_t cs;
     uint8_t  saved_upcall_mask;
     uint8_t  _pad0;
-    uint32_t eflags;        /* eflags=2EIF =3D=3D !saved_upcall_mask */
-    uint32_t esp;
+    __DECL_REG_LO16(flags); /* eflags=2EIF =3D=3D !saved_upcall_mask */
+    __DECL_REG_LO16(sp);
     uint16_t ss, _pad1;
     uint16_t es, _pad2;
     uint16_t ds, _pad3;
     uint16_t fs, _pad4;
     uint16_t gs, _pad5;
 };
+
+#ifdef __XEN__
+#undef cpu_user_regs
+#else
 typedef struct cpu_user_regs cpu_user_regs_t;
 DEFINE_XEN_GUEST_HANDLE(cpu_user_regs_t);
+#endif
+
+#undef __DECL_REG_LO8
+#undef __DECL_REG_LO16
=20
 /*
  * Page-directory addresses above 4GB do not fit into architectural %cr3=
=2E
@@ -154,7 +171,7 @@ struct xen_callback {
 };
 typedef struct xen_callback xen_callback_t;
=20
-#endif /* !__ASSEMBLY__ */
+#endif /* !__ASSEMBLER__ */
=20
 #endif /* __XEN_PUBLIC_ARCH_X86_XEN_X86_32_H__ */
=20
diff --git a/include/xen/public/arch-x86/xen-x86_64=2Eh b/include/xen/publ=
ic/arch-x86/xen-x86_64=2Eh
index 2f53f69=2E=2E4ab9a99 100644
--- a/include/xen/public/arch-x86/xen-x86_64=2Eh
+++ b/include/xen/public/arch-x86/xen-x86_64=2Eh
@@ -1,26 +1,9 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * xen-x86_64=2Eh
  *
  * Guest OS interface to x86 64-bit Xen=2E
  *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
  * Copyright (c) 2004-2006, K A Fraser
  */
=20
@@ -29,7 +12,7 @@
=20
 /*
  * Hypercall interface:
- *  Input:  %rdi, %rsi, %rdx, %r10, %r8, %r9 (arguments 1-6)
+ *  Input:  %rdi, %rsi, %rdx, %r10, %r8 (arguments 1-5)
  *  Output: %rax
  * Access is via hypercall page (set up by guest loader or via a Xen MSR)=
:
  *  call hypercall_page + hypercall-number * 32
@@ -44,11 +27,11 @@
  */
=20
 #define FLAT_RING3_CS32 0xe023  /* GDT index 260 */
-#define FLAT_RING3_CS64 0xe033  /* GDT index 261 */
-#define FLAT_RING3_DS32 0xe02b  /* GDT index 262 */
+#define FLAT_RING3_CS64 0xe033  /* GDT index 262 */
+#define FLAT_RING3_DS32 0xe02b  /* GDT index 261 */
 #define FLAT_RING3_DS64 0x0000  /* NULL selector */
-#define FLAT_RING3_SS32 0xe02b  /* GDT index 262 */
-#define FLAT_RING3_SS64 0xe02b  /* GDT index 262 */
+#define FLAT_RING3_SS32 0xe02b  /* GDT index 261 */
+#define FLAT_RING3_SS64 0xe02b  /* GDT index 261 */
=20
 #define FLAT_KERNEL_DS64 FLAT_RING3_DS64
 #define FLAT_KERNEL_DS32 FLAT_RING3_DS32
@@ -120,9 +103,8 @@
 /* Guest exited in SYSCALL context? Return to guest with SYSRET? */
 #define _VGCF_in_syscall 8
 #define VGCF_in_syscall  (1<<_VGCF_in_syscall)
-#define VGCF_IN_SYSCALL  VGCF_in_syscall
=20
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
=20
 struct iret_context {
     /* Top of stack (%rsp at point of hypercall)=2E */
@@ -130,7 +112,35 @@ struct iret_context {
     /* Bottom of iret stack frame=2E */
 };
=20
-#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
+#if defined(__XEN__) || defined(__XEN_TOOLS__)
+/* Anonymous unions include all permissible names (e=2Eg=2E, al/ah/ax/eax=
/rax)=2E */
+#define __DECL_REG_LOHI(which) union { \
+    uint64_t r ## which ## x; \
+    uint32_t e ## which ## x; \
+    uint16_t which ## x; \
+    struct { \
+        uint8_t which ## l; \
+        uint8_t which ## h; \
+    }; \
+}
+#define __DECL_REG_LO8(name) union { \
+    uint64_t r ## name; \
+    uint32_t e ## name; \
+    uint16_t name; \
+    uint8_t name ## l; \
+}
+#define __DECL_REG_LO16(name) union { \
+    uint64_t r ## name; \
+    uint32_t e ## name; \
+    uint16_t name; \
+}
+#define __DECL_REG_HI(num) union { \
+    uint64_t r ## num; \
+    uint32_t r ## num ## d; \
+    uint16_t r ## num ## w; \
+    uint8_t r ## num ## b; \
+}
+#elif defined(__GNUC__) && !defined(__STRICT_ANSI__)
 /* Anonymous union includes both 32- and 64-bit names (e=2Eg=2E, eax/rax)=
=2E */
 #define __DECL_REG(name) union { \
     uint64_t r ## name, e ## name; \
@@ -141,40 +151,60 @@ struct iret_context {
 #define __DECL_REG(name) uint64_t r ## name
 #endif
=20
+#ifndef __DECL_REG_LOHI
+#define __DECL_REG_LOHI(name) __DECL_REG(name ## x)
+#define __DECL_REG_LO8        __DECL_REG
+#define __DECL_REG_LO16       __DECL_REG
+#define __DECL_REG_HI(num)    uint64_t r ## num
+#endif
+
+#ifdef __XEN__
+#define cpu_user_regs guest_user_regs
+#endif
+
 struct cpu_user_regs {
-    uint64_t r15;
-    uint64_t r14;
-    uint64_t r13;
-    uint64_t r12;
-    __DECL_REG(bp);
-    __DECL_REG(bx);
-    uint64_t r11;
-    uint64_t r10;
-    uint64_t r9;
-    uint64_t r8;
-    __DECL_REG(ax);
-    __DECL_REG(cx);
-    __DECL_REG(dx);
-    __DECL_REG(si);
-    __DECL_REG(di);
+    __DECL_REG_HI(15);
+    __DECL_REG_HI(14);
+    __DECL_REG_HI(13);
+    __DECL_REG_HI(12);
+    __DECL_REG_LO8(bp);
+    __DECL_REG_LOHI(b);
+    __DECL_REG_HI(11);
+    __DECL_REG_HI(10);
+    __DECL_REG_HI(9);
+    __DECL_REG_HI(8);
+    __DECL_REG_LOHI(a);
+    __DECL_REG_LOHI(c);
+    __DECL_REG_LOHI(d);
+    __DECL_REG_LO8(si);
+    __DECL_REG_LO8(di);
     uint32_t error_code;    /* private */
     uint32_t entry_vector;  /* private */
-    __DECL_REG(ip);
+    __DECL_REG_LO16(ip);
     uint16_t cs, _pad0[1];
     uint8_t  saved_upcall_mask;
     uint8_t  _pad1[3];
-    __DECL_REG(flags);      /* rflags=2EIF =3D=3D !saved_upcall_mask */
-    __DECL_REG(sp);
+    __DECL_REG_LO16(flags); /* rflags=2EIF =3D=3D !saved_upcall_mask */
+    __DECL_REG_LO8(sp);
     uint16_t ss, _pad2[3];
     uint16_t es, _pad3[3];
     uint16_t ds, _pad4[3];
-    uint16_t fs, _pad5[3]; /* Non-zero =3D> takes precedence over fs_base=
=2E     */
-    uint16_t gs, _pad6[3]; /* Non-zero =3D> takes precedence over gs_base=
_usr=2E */
+    uint16_t fs, _pad5[3];
+    uint16_t gs, _pad6[3];
 };
+
+#ifdef __XEN__
+#undef cpu_user_regs
+#else
 typedef struct cpu_user_regs cpu_user_regs_t;
 DEFINE_XEN_GUEST_HANDLE(cpu_user_regs_t);
+#endif
=20
 #undef __DECL_REG
+#undef __DECL_REG_LOHI
+#undef __DECL_REG_LO8
+#undef __DECL_REG_LO16
+#undef __DECL_REG_HI
=20
 #define xen_pfn_to_cr3(pfn) ((ULONG_PTR)(pfn) << 12)
 #define xen_cr3_to_pfn(cr3) ((ULONG_PTR)(cr3) >> 12)
@@ -187,7 +217,7 @@ typedef struct arch_vcpu_info arch_vcpu_info_t;
=20
 typedef ULONG_PTR xen_callback_t;
=20
-#endif /* !__ASSEMBLY__ */
+#endif /* !__ASSEMBLER__ */
=20
 #endif /* __XEN_PUBLIC_ARCH_X86_XEN_X86_64_H__ */
=20
diff --git a/include/xen/public/arch-x86/xen=2Eh b/include/xen/public/arch=
-x86/xen=2Eh
index 05db77f=2E=2E1ec1a20 100644
--- a/include/xen/public/arch-x86/xen=2Eh
+++ b/include/xen/public/arch-x86/xen=2Eh
@@ -1,31 +1,12 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * arch-x86/xen=2Eh
  *
  * Guest OS interface to x86 Xen=2E
  *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
  * Copyright (c) 2004-2006, K A Fraser
  */
=20
-#include "=2E=2E/xen=2Eh"
-
 #ifndef __XEN_PUBLIC_ARCH_X86_XEN_H__
 #define __XEN_PUBLIC_ARCH_X86_XEN_H__
=20
@@ -53,18 +34,29 @@
 #define __XEN_GUEST_HANDLE(name)        __guest_handle_ ## name
 #define XEN_GUEST_HANDLE(name)          __XEN_GUEST_HANDLE(name)
 #define XEN_GUEST_HANDLE_PARAM(name)    XEN_GUEST_HANDLE(name)
-#define set_xen_guest_handle_raw(hnd, val)  do { (hnd)=2Ep =3D val; } whi=
le (0)
+#define set_xen_guest_handle_raw(hnd, val)  do { (hnd)=2Ep =3D (val); } w=
hile (0)
 #define set_xen_guest_handle(hnd, val) set_xen_guest_handle_raw(hnd, val)
=20
 #if defined(__i386__)
+# ifdef __XEN__
+__DeFiNe__ __DECL_REG_LO8(which) uint32_t e ## which ## x
+__DeFiNe__ __DECL_REG_LO16(name) union { uint32_t e ## name; }
+# endif
 #include "xen-x86_32=2Eh"
+# ifdef __XEN__
+__UnDeF__ __DECL_REG_LO8
+__UnDeF__ __DECL_REG_LO16
+__DeFiNe__ __DECL_REG_LO8(which) e ## which ## x
+__DeFiNe__ __DECL_REG_LO16(name) e ## name
+# endif
 #elif defined(__x86_64__)
 #include "xen-x86_64=2Eh"
 #endif
=20
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
 typedef ULONG_PTR xen_pfn_t;
 #define PRI_xen_pfn "lx"
+#define PRIu_xen_pfn "lu"
 #endif
=20
 #define XEN_HAVE_PV_GUEST_ENTRY 1
@@ -105,7 +97,7 @@ typedef ULONG_PTR xen_pfn_t;
 /* Maximum number of virtual CPUs in legacy multi-processor guests=2E */
 #define XEN_LEGACY_MAX_VCPUS 32
=20
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
=20
 typedef ULONG_PTR xen_ulong_t;
 #define PRI_xen_ulong "lx"
@@ -132,6 +124,12 @@ typedef ULONG_PTR xen_ulong_t;
  *  Level =3D=3D 1: Kernel may enter
  *  Level =3D=3D 2: Kernel may enter
  *  Level =3D=3D 3: Everyone may enter
+ *
+ * Note: For compatibility with kernels not setting up exception handlers
+ *       early enough, Xen will avoid trying to inject #GP (and hence cra=
sh
+ *       the domain) when an RDMSR would require this, but no handler was
+ *       set yet=2E The precise conditions are implementation specific, a=
nd
+ *       new code may not rely on such behavior anyway=2E
  */
 #define TI_GET_DPL(_ti)      ((_ti)->flags & 3)
 #define TI_GET_IF(_ti)       ((_ti)->flags & 4)
@@ -152,20 +150,16 @@ typedef uint64_t tsc_timestamp_t; /* RDTSC timestamp=
 */
  * The following is all CPU context=2E Note that the fpu_ctxt block is fi=
lled
  * in by FXSAVE if the CPU has feature FXSR; otherwise FSAVE is used=2E
  *
- * Also note that when calling DOMCTL_setvcpucontext and VCPU_initialise
- * for HVM and PVH guests, not all information in this structure is updat=
ed:
- *
- * - For HVM guests, the structures read include: fpu_ctxt (if
- * VGCT_I387_VALID is set), flags, user_regs, debugreg[*]
+ * Also note that when calling DOMCTL_setvcpucontext for HVM guests, not =
all
+ * information in this structure is updated, the fields read include: fpu=
_ctxt
+ * (if VGCT_I387_VALID is set), flags, user_regs and debugreg[*]=2E
  *
- * - PVH guests are the same as HVM guests, but additionally use ctrlreg[=
3] to
- * set cr3=2E All other fields not used should be set to 0=2E
+ * Note: VCPUOP_initialise for HVM guests is non-symetric with
+ * DOMCTL_setvcpucontext, and uses struct vcpu_hvm_context from hvm/hvm_v=
cpu=2Eh
  */
 struct vcpu_guest_context {
     /* FPU registers come first so they can be aligned for FXSAVE/FXRSTOR=
=2E */
     struct { char x[512]; } fpu_ctxt;       /* User-level FPU registers  =
   */
-#define VGCF_I387_VALID                (1<<0)
-#define VGCF_IN_KERNEL                 (1<<2)
 #define _VGCF_i387_valid               0
 #define VGCF_i387_valid                (1<<_VGCF_i387_valid)
 #define _VGCF_in_kernel                2
@@ -177,7 +171,18 @@ struct vcpu_guest_context {
 #define _VGCF_online                   5
 #define VGCF_online                    (1<<_VGCF_online)
     ULONG_PTR flags;                    /* VGCF_* flags                 *=
/
+
+    /*
+     * Outside of Xen, regs type stays named cpu_user_regs for backwards
+     * compatibility=2E  Inside Xen, the type called cpu_user_regs is dif=
ferent,
+     * and the public API type is renamed to guest_user_regs=2E
+     */
+#ifdef __XEN__
+    struct guest_user_regs user_regs;       /* User-level CPU registers  =
   */
+#else
     struct cpu_user_regs user_regs;         /* User-level CPU registers  =
   */
+#endif
+
     struct trap_info trap_ctxt[256];        /* Virtual IDT               =
   */
     ULONG_PTR ldt_base, ldt_ents;       /* LDT (linear address, # ents) *=
/
     ULONG_PTR gdt_frames[16], gdt_ents; /* GDT (machine frames, # ents) *=
/
@@ -283,17 +288,52 @@ struct xen_arch_domainconfig {
 #define XEN_X86_EMU_IOMMU           (1U<<_XEN_X86_EMU_IOMMU)
 #define _XEN_X86_EMU_PIT            8
 #define XEN_X86_EMU_PIT             (1U<<_XEN_X86_EMU_PIT)
+#define _XEN_X86_EMU_USE_PIRQ       9
+#define XEN_X86_EMU_USE_PIRQ        (1U<<_XEN_X86_EMU_USE_PIRQ)
+#define _XEN_X86_EMU_VPCI           10
+#define XEN_X86_EMU_VPCI            (1U<<_XEN_X86_EMU_VPCI)
=20
 #define XEN_X86_EMU_ALL             (XEN_X86_EMU_LAPIC | XEN_X86_EMU_HPET=
 |  \
                                      XEN_X86_EMU_PM | XEN_X86_EMU_RTC |  =
    \
                                      XEN_X86_EMU_IOAPIC | XEN_X86_EMU_PIC=
 |  \
                                      XEN_X86_EMU_VGA | XEN_X86_EMU_IOMMU =
|   \
-                                     XEN_X86_EMU_PIT)
+                                     XEN_X86_EMU_PIT | XEN_X86_EMU_USE_PI=
RQ |\
+                                     XEN_X86_EMU_VPCI)
     uint32_t emulation_flags;
+
+/*
+ * Select whether to use a relaxed behavior for accesses to MSRs not expl=
icitly
+ * handled by Xen instead of injecting a #GP to the guest=2E Note this op=
tion
+ * doesn't allow the guest to read or write to the underlying MSR=2E
+ */
+#define XEN_X86_MSR_RELAXED (1u << 0)
+    uint32_t misc_flags;
 };
+
+/* Max  XEN_X86_* constant=2E Used for ABI checking=2E */
+#define XEN_X86_MISC_FLAGS_MAX XEN_X86_MSR_RELAXED
+
 #endif
=20
-#endif /* !__ASSEMBLY__ */
+/*
+ * Representations of architectural CPUID and MSR information=2E  Used as=
 the
+ * serialised version of Xen's internal representation=2E
+ */
+typedef struct xen_cpuid_leaf {
+#define XEN_CPUID_NO_SUBLEAF 0xffffffffu
+    uint32_t leaf, subleaf;
+    uint32_t a, b, c, d;
+} xen_cpuid_leaf_t;
+DEFINE_XEN_GUEST_HANDLE(xen_cpuid_leaf_t);
+
+typedef struct xen_msr_entry {
+    uint32_t idx;
+    uint32_t flags; /* Reserved MBZ=2E */
+    uint64_t val;
+} xen_msr_entry_t;
+DEFINE_XEN_GUEST_HANDLE(xen_msr_entry_t);
+
+#endif /* !__ASSEMBLER__ */
=20
 /*
  * ` enum neg_errnoval
@@ -317,7 +357,7 @@ struct xen_arch_domainconfig {
  * Prefix forces emulation of some non-trapping instructions=2E
  * Currently only CPUID=2E
  */
-#ifdef __ASSEMBLY__
+#ifdef __ASSEMBLER__
 #define XEN_EMULATE_PREFIX =2Ebyte 0x0f,0x0b,0x78,0x65,0x6e ;
 #define XEN_CPUID          XEN_EMULATE_PREFIX cpuid
 #else
@@ -325,6 +365,13 @@ struct xen_arch_domainconfig {
 #define XEN_CPUID          XEN_EMULATE_PREFIX "cpuid"
 #endif
=20
+/*
+ * Debug console IO port, also called "port E9 hack"=2E Each character wr=
itten
+ * to this IO port will be printed on the hypervisor console, subject to =
log
+ * level restrictions=2E
+ */
+#define XEN_HVM_DEBUGCONS_IOPORT 0xe9
+
 #endif /* __XEN_PUBLIC_ARCH_X86_XEN_H__ */
=20
 /*
diff --git a/include/xen/public/errno=2Eh b/include/xen/public/errno=2Eh
index e440237=2E=2Edf6aa53 100644
--- a/include/xen/public/errno=2Eh
+++ b/include/xen/public/errno=2Eh
@@ -1,3 +1,5 @@
+/* SPDX-License-Identifier: MIT */
+
 /*
  * There are two expected ways of including this header=2E
  *
@@ -15,6 +17,7 @@
  * will unilaterally #undef XEN_ERRNO()=2E
  */
=20
+/* SAF-8-safe inclusion procedure left to caller */
 #ifndef XEN_ERRNO
=20
 /*
@@ -27,16 +30,16 @@
=20
 #define XEN_ERRNO_DEFAULT_INCLUDE
=20
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
=20
-#define XEN_ERRNO(name, value) XEN_##name =3D value,
+#define XEN_ERRNO(name, value) XEN_##name =3D (value),
 enum xen_errno {
=20
 #elif __XEN_INTERFACE_VERSION__ < 0x00040700
=20
 #define XEN_ERRNO(name, value) =2Eequ XEN_##name, value
=20
-#endif /* __ASSEMBLY__ */
+#endif /* __ASSEMBLER__ */
=20
 #endif /* __XEN_PUBLIC_ERRNO_H__ */
 #endif /* !XEN_ERRNO */
@@ -78,6 +81,7 @@ XEN_ERRNO(EBUSY,	16)	/* Device or resource busy */
 XEN_ERRNO(EEXIST,	17)	/* File exists */
 XEN_ERRNO(EXDEV,	18)	/* Cross-device link */
 XEN_ERRNO(ENODEV,	19)	/* No such device */
+XEN_ERRNO(ENOTDIR,	20)	/* Not a directory */
 XEN_ERRNO(EISDIR,	21)	/* Is a directory */
 XEN_ERRNO(EINVAL,	22)	/* Invalid argument */
 XEN_ERRNO(ENFILE,	23)	/* File table overflow */
@@ -91,8 +95,8 @@ XEN_ERRNO(EDEADLK,	35)	/* Resource deadlock would occur =
*/
 XEN_ERRNO(EDEADLOCK,	35)	/* Resource deadlock would occur=2E Aliases EDEA=
DLK */
 XEN_ERRNO(ENAMETOOLONG,	36)	/* File name too LONG_PTR */
 XEN_ERRNO(ENOLCK,	37)	/* No record locks available */
-XEN_ERRNO(ENOTEMPTY,	39)	/* Directory not empty */
 XEN_ERRNO(ENOSYS,	38)	/* Function not implemented */
+XEN_ERRNO(ENOTEMPTY,	39)	/* Directory not empty */
 XEN_ERRNO(ENODATA,	61)	/* No data available */
 XEN_ERRNO(ETIME,	62)	/* Timer expired */
 XEN_ERRNO(EBADMSG,	74)	/* Not a data message */
@@ -102,6 +106,7 @@ XEN_ERRNO(EILSEQ,	84)	/* Illegal byte sequence */
 XEN_ERRNO(ERESTART,	85)	/* Interrupted system call should be restarted */
 #endif
 XEN_ERRNO(ENOTSOCK,	88)	/* Socket operation on non-socket */
+XEN_ERRNO(EMSGSIZE,	90)	/* Message too large=2E */
 XEN_ERRNO(EOPNOTSUPP,	95)	/* Operation not supported on transport endpoin=
t */
 XEN_ERRNO(EADDRINUSE,	98)	/* Address already in use */
 XEN_ERRNO(EADDRNOTAVAIL, 99)	/* Cannot assign requested address */
@@ -109,6 +114,7 @@ XEN_ERRNO(ENOBUFS,	105)	/* No buffer space available *=
/
 XEN_ERRNO(EISCONN,	106)	/* Transport endpoint is already connected */
 XEN_ERRNO(ENOTCONN,	107)	/* Transport endpoint is not connected */
 XEN_ERRNO(ETIMEDOUT,	110)	/* Connection timed out */
+XEN_ERRNO(ECONNREFUSED,	111)	/* Connection refused */
=20
 #undef XEN_ERRNO
 #endif /* XEN_ERRNO */
@@ -117,7 +123,7 @@ XEN_ERRNO(ETIMEDOUT,	110)	/* Connection timed out */
 /* Clean up from a default include=2E  Close the enum (for C)=2E */
 #ifdef XEN_ERRNO_DEFAULT_INCLUDE
 #undef XEN_ERRNO_DEFAULT_INCLUDE
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
 };
 #endif
=20
diff --git a/include/xen/public/grant_table=2Eh b/include/xen/public/grant=
_table=2Eh
index b68ffdd=2E=2Ecdde816 100644
--- a/include/xen/public/grant_table=2Eh
+++ b/include/xen/public/grant_table=2Eh
@@ -1,27 +1,10 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * grant_table=2Eh
  *
  * Interface for granting foreign access to page frames, and receiving
  * page-ownership transfers=2E
  *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
  * Copyright (c) 2004, K A Fraser
  */
=20
@@ -121,8 +104,9 @@ typedef uint32_t grant_ref_t;
  */
=20
 /*
- * Version 1 of the grant table entry structure is maintained purely
- * for backwards compatibility=2E  New guests should use version 2=2E
+ * Version 1 of the grant table entry structure is maintained largely for
+ * backwards compatibility=2E  New guests are recommended to support usin=
g
+ * version 2 to overcome version 1 limitations, but to default to version=
 1=2E
  */
 #if __XEN_INTERFACE_VERSION__ < 0x0003020a
 #define grant_entry_v1 grant_entry
@@ -166,11 +150,13 @@ typedef struct grant_entry_v1 grant_entry_v1_t;
 #define GTF_type_mask       (3U<<0)
=20
 /*
- * Subflags for GTF_permit_access=2E
+ * Subflags for GTF_permit_access and GTF_transitive=2E
  *  GTF_readonly: Restrict @domid to read-only mappings and accesses=2E [=
GST]
  *  GTF_reading: Grant entry is currently mapped for reading by @domid=2E=
 [XEN]
  *  GTF_writing: Grant entry is currently mapped for writing by @domid=2E=
 [XEN]
- *  GTF_PAT, GTF_PWT, GTF_PCD: (x86) cache attribute flags for the grant =
[GST]
+ * Further subflags for GTF_permit_access only=2E
+ *  GTF_PAT, GTF_PWT, GTF_PCD: (x86) cache attribute flags to be used for
+ *                             mappings of the grant [GST]
  *  GTF_sub_page: Grant access to only a subrange of the page=2E  @domid
  *                will only be allowed to copy from the grant, and not
  *                map it=2E [GST]
@@ -411,12 +397,13 @@ typedef struct gnttab_dump_table gnttab_dump_table_t=
;
 DEFINE_XEN_GUEST_HANDLE(gnttab_dump_table_t);
=20
 /*
- * GNTTABOP_transfer_grant_ref: Transfer <frame> to a foreign domain=2E T=
he
- * foreign domain has previously registered its interest in the transfer =
via
- * <domid, ref>=2E
+ * GNTTABOP_transfer: Transfer <frame> to a foreign domain=2E The foreign=
 domain
+ * has previously registered its interest in the transfer via <domid, ref=
>=2E
  *
  * Note that, even if the transfer fails, the specified page no LONG_PTRe=
r belongs
  * to the calling domain *unless* the error is GNTST_bad_page=2E
+ *
+ * Note further that only PV guests can use this operation=2E
  */
 struct gnttab_transfer {
     /* IN parameters=2E */
@@ -514,10 +501,9 @@ DEFINE_XEN_GUEST_HANDLE(gnttab_unmap_and_replace_t);
 #if __XEN_INTERFACE_VERSION__ >=3D 0x0003020a
 /*
  * GNTTABOP_set_version: Request a particular version of the grant
- * table shared table structure=2E  This operation can only be performed
- * once in any given domain=2E  It must be performed before any grants
- * are activated; otherwise, the domain will be stuck with version 1=2E
- * The only defined versions are 1 and 2=2E
+ * table shared table structure=2E  This operation may be used to toggle
+ * between different versions, but must be performed while no grants
+ * are active=2E  The only defined versions are 1 and 2=2E
  */
 struct gnttab_set_version {
     /* IN/OUT parameters */
@@ -588,9 +574,9 @@ struct gnttab_cache_flush {
     } a;
     uint16_t offset; /* offset from start of grant */
     uint16_t length; /* size within the grant */
-#define GNTTAB_CACHE_CLEAN          (1<<0)
-#define GNTTAB_CACHE_INVAL          (1<<1)
-#define GNTTAB_CACHE_SOURCE_GREF    (1<<31)
+#define GNTTAB_CACHE_CLEAN          (1u<<0)
+#define GNTTAB_CACHE_INVAL          (1u<<1)
+#define GNTTAB_CACHE_SOURCE_GREF    (1u<<31)
     uint32_t op;
 };
 typedef struct gnttab_cache_flush gnttab_cache_flush_t;
@@ -626,9 +612,6 @@ DEFINE_XEN_GUEST_HANDLE(gnttab_cache_flush_t);
 #define _GNTMAP_contains_pte    (4)
 #define GNTMAP_contains_pte     (1<<_GNTMAP_contains_pte)
=20
-#define _GNTMAP_can_fail        (5)
-#define GNTMAP_can_fail         (1<<_GNTMAP_can_fail)
-
 /*
  * Bits to be placed in guest kernel available PTE bits (architecture
  * dependent; only supported when XENFEAT_gnttab_map_avail_bits is set)=
=2E
@@ -653,6 +636,7 @@ DEFINE_XEN_GUEST_HANDLE(gnttab_cache_flush_t);
 #define GNTST_bad_copy_arg    (-10) /* copy arguments cross page boundary=
=2E   */
 #define GNTST_address_too_big (-11) /* transfer page address too large=2E=
      */
 #define GNTST_eagain          (-12) /* Operation not done; try again=2E  =
      */
+#define GNTST_no_space        (-13) /* Out of space (handles etc)=2E     =
      */
 /* ` } */
=20
 #define GNTTABOP_error_msgs {                   \
@@ -668,7 +652,8 @@ DEFINE_XEN_GUEST_HANDLE(gnttab_cache_flush_t);
     "bad page",                                 \
     "copy arguments cross page boundary",       \
     "page address size too large",              \
-    "operation not done; try again"             \
+    "operation not done; try again",            \
+    "out of space",                             \
 }
=20
 #endif /* __XEN_PUBLIC_GRANT_TABLE_H__ */
diff --git a/include/xen/public/io/kbdif=2Eh b/include/xen/public/io/kbdif=
=2Eh
index 3ce54e9=2E=2E89ea4e6 100644
--- a/include/xen/public/io/kbdif=2Eh
+++ b/include/xen/public/io/kbdif=2Eh
@@ -1,24 +1,7 @@
+/* SPDX-License-Identifier: MIT */
 /*
  * kbdif=2Eh -- Xen virtual keyboard/mouse
  *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
  * Copyright (C) 2005 Anthony Liguori <aliguori@us=2Eibm=2Ecom>
  * Copyright (C) 2006 Red Hat, Inc=2E, Markus Armbruster <armbru@redhat=
=2Ecom>
  */
@@ -51,6 +34,18 @@
  * corresponding entries in XenStore and puts 1 as the value of the entry=
=2E
  * If a feature is not supported then 0 must be set or feature entry omit=
ted=2E
  *
+ * feature-disable-keyboard
+ *      Values:         <uint>
+ *
+ *      If there is no need to expose a virtual keyboard device by the
+ *      frontend then this must be set to 1=2E
+ *
+ * feature-disable-pointer
+ *      Values:         <uint>
+ *
+ *      If there is no need to expose a virtual pointer device by the
+ *      frontend then this must be set to 1=2E
+ *
  * feature-abs-pointer
  *      Values:         <uint>
  *
@@ -70,6 +65,15 @@
  *      for pointer devices should set this to 1=2E Raw (unscaled) values=
 have
  *      a range of [0, 0x7fff]=2E
  *
+ *-----------------------  Device Instance Parameters -------------------=
-----
+ *
+ * unique-id
+ *      Values:         <string>
+ *
+ *      After device instance initialization it is assigned a unique ID,
+ *      so every instance of the frontend can be identified by the backen=
d
+ *      by this ID=2E This can be UUID or such=2E
+ *
  *------------------------- Pointer Device Parameters -------------------=
-----
  *
  * width
@@ -84,6 +88,25 @@
  *      Maximum Y coordinate (height) to be used by the frontend
  *      while reporting input events, pixels, [0; UINT32_MAX]=2E
  *
+ *----------------------- Multi-touch Device Parameters -----------------=
-----
+ *
+ * multi-touch-num-contacts
+ *      Values:         <uint>
+ *
+ *      Number of simultaneous touches reported=2E
+ *
+ * multi-touch-width
+ *      Values:         <uint>
+ *
+ *      Width of the touch area to be used by the frontend
+ *      while reporting input events, pixels, [0; UINT32_MAX]=2E
+ *
+ * multi-touch-height
+ *      Values:         <uint>
+ *
+ *      Height of the touch area to be used by the frontend
+ *      while reporting input events, pixels, [0; UINT32_MAX]=2E
+ *
  ************************************************************************=
*****
  *                            Frontend XenBus Nodes
  ************************************************************************=
*****
@@ -131,25 +154,6 @@
  *
  *      OBSOLETE, not recommended for use=2E
  *      PFN of the shared page=2E
- *
- *----------------------- Multi-touch Device Parameters -----------------=
------
- *
- * multi-touch-num-contacts
- *      Values:         <uint>
- *
- *      Number of simultaneous touches reported=2E
- *
- * multi-touch-width
- *      Values:         <uint>
- *
- *      Width of the touch area to be used by the frontend
- *      while reporting input events, pixels, [0; UINT32_MAX]=2E
- *
- * multi-touch-height
- *      Values:         <uint>
- *
- *      Height of the touch area to be used by the frontend
- *      while reporting input events, pixels, [0; UINT32_MAX]=2E
  */
=20
 /*
@@ -177,9 +181,13 @@
=20
 #define XENKBD_DRIVER_NAME             "vkbd"
=20
+#define XENKBD_FIELD_FEAT_DSBL_KEYBRD  "feature-disable-keyboard"
+#define XENKBD_FIELD_FEAT_DSBL_POINTER "feature-disable-pointer"
 #define XENKBD_FIELD_FEAT_ABS_POINTER  "feature-abs-pointer"
+#define XENKBD_FIELD_FEAT_RAW_POINTER  "feature-raw-pointer"
 #define XENKBD_FIELD_FEAT_MTOUCH       "feature-multi-touch"
 #define XENKBD_FIELD_REQ_ABS_POINTER   "request-abs-pointer"
+#define XENKBD_FIELD_REQ_RAW_POINTER   "request-raw-pointer"
 #define XENKBD_FIELD_REQ_MTOUCH        "request-multi-touch"
 #define XENKBD_FIELD_RING_GREF         "page-gref"
 #define XENKBD_FIELD_EVT_CHANNEL       "event-channel"
@@ -188,6 +196,7 @@
 #define XENKBD_FIELD_MT_WIDTH          "multi-touch-width"
 #define XENKBD_FIELD_MT_HEIGHT         "multi-touch-height"
 #define XENKBD_FIELD_MT_NUM_CONTACTS   "multi-touch-num-contacts"
+#define XENKBD_FIELD_UNIQUE_ID         "unique-id"
=20
 /* OBSOLETE, not recommended for use */
 #define XENKBD_FIELD_RING_REF          "page-ref"
@@ -409,7 +418,7 @@ struct xenkbd_position
  *
  * Multi-touch shape event - touch point's shape has changed its shape=2E
  * Shape is approximated by an ellipse through the major and minor axis
- * lengths: major is the longer diameter of the ellipse and minor is the
+ * lengths: major is the LONG_PTRer diameter of the ellipse and minor is =
the
  * shorter one=2E Center of the ellipse is reported via
  * XENKBD_MT_EV_DOWN/XENKBD_MT_EV_MOTION events=2E
  *         0                1                 2               3        oc=
tet
diff --git a/include/xen/public/io/ring=2Eh b/include/xen/public/io/ring=
=2Eh
index 1d29cc0=2E=2Eb4cea93 100644
--- a/include/xen/public/io/ring=2Eh
+++ b/include/xen/public/io/ring=2Eh
@@ -1,34 +1,40 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * ring=2Eh
  *
  * Shared producer-consumer ring macros=2E
  *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
  * Tim Deegan and Andrew Warfield November 2004=2E
  */
=20
 #ifndef __XEN_PUBLIC_IO_RING_H__
 #define __XEN_PUBLIC_IO_RING_H__
=20
+/*
+ * When #include'ing this header, you need to provide the following
+ * declaration upfront:
+ * - standard integers types (uint8_t, uint16_t, etc)
+ * They are provided by stdint=2Eh of the standard headers=2E
+ *
+ * In addition, if you intend to use the FLEX macros, you also need to
+ * provide the following, before invoking the FLEX macros:
+ * - size_t
+ * - memcpy
+ * - grant_ref_t
+ * These declarations are provided by string=2Eh of the standard headers,
+ * and grant_table=2Eh from the Xen public headers=2E
+ */
+
+#include "=2E=2E/xen=2Eh"
 #include "=2E=2E/xen-compat=2Eh"
=20
+/* Some PV I/O interfaces need a compatibility variant=2E */
+#if __XEN_INTERFACE_VERSION__ < 0x00041300
+#define XENPV_FLEX_ARRAY_DIM  1 /* variable size */
+#else
+#define XENPV_FLEX_ARRAY_DIM  XEN_FLEX_ARRAY_DIM
+#endif
+
 #if __XEN_INTERFACE_VERSION__ < 0x00030208
 #define xen_mb()  mb()
 #define xen_rmb() rmb()
@@ -38,11 +44,11 @@
 typedef unsigned int RING_IDX;
=20
 /* Round a 32-bit unsigned constant down to the nearest power of two=2E *=
/
-#define __RD2(_x)  (((_x) & 0x00000002) ? 0x2                  : ((_x) & =
0x1))
-#define __RD4(_x)  (((_x) & 0x0000000c) ? __RD2((_x)>>2)<<2    : __RD2(_x=
))
-#define __RD8(_x)  (((_x) & 0x000000f0) ? __RD4((_x)>>4)<<4    : __RD4(_x=
))
-#define __RD16(_x) (((_x) & 0x0000ff00) ? __RD8((_x)>>8)<<8    : __RD8(_x=
))
-#define __RD32(_x) (((_x) & 0xffff0000) ? __RD16((_x)>>16)<<16 : __RD16(_=
x))
+#define __RD2(x)  (((x) & 0x00000002U) ? 0x2                     : ((x) &=
 0x1))
+#define __RD4(x)  (((x) & 0x0000000cU) ? __RD2((x) >> 2) << 2    : __RD2(=
x))
+#define __RD8(x)  (((x) & 0x000000f0U) ? __RD4((x) >> 4) << 4    : __RD4(=
x))
+#define __RD16(x) (((x) & 0x0000ff00U) ? __RD8((x) >> 8) << 8    : __RD8(=
x))
+#define __RD32(x) (((x) & 0xffff0000U) ? __RD16((x) >> 16) << 16 : __RD16=
(x))
=20
 /*
  * Calculate size of a shared ring, given the total available space for t=
he
@@ -80,9 +86,8 @@ typedef unsigned int RING_IDX;
  * of the shared memory area (PAGE_SIZE, for instance)=2E To initialise
  * the front half:
  *
- *     mytag_front_ring_t front_ring;
- *     SHARED_RING_INIT((mytag_sring_t *)shared_page);
- *     FRONT_RING_INIT(&front_ring, (mytag_sring_t *)shared_page, PAGE_SI=
ZE);
+ *     mytag_front_ring_t ring;
+ *     XEN_FRONT_RING_INIT(&ring, (mytag_sring_t *)shared_page, PAGE_SIZE=
);
  *
  * Initializing the back follows similarly (note that only the front
  * initializes the shared ring):
@@ -113,7 +118,7 @@ struct __name##_sring {                               =
                  \
         uint8_t pvt_pad[4];                                             \
     } pvt;                                                              \
     uint8_t __pad[44];                                                  \
-    union __name##_sring_entry ring[1]; /* variable-length */           \
+    union __name##_sring_entry ring[XENPV_FLEX_ARRAY_DIM];              \
 };                                                                      \
                                                                         \
 /* "Front" end's private variables */                                   \
@@ -160,20 +165,29 @@ typedef struct __name##_back_ring __name##_back_ring=
_t
     (void)memset((_s)->__pad, 0, sizeof((_s)->__pad));                  \
 } while(0)
=20
-#define FRONT_RING_INIT(_r, _s, __size) do {                            \
-    (_r)->req_prod_pvt =3D 0;                                            =
 \
-    (_r)->rsp_cons =3D 0;                                                =
 \
+#define FRONT_RING_ATTACH(_r, _s, _i, __size) do {                      \
+    (_r)->req_prod_pvt =3D (_i);                                         =
 \
+    (_r)->rsp_cons =3D (_i);                                             =
 \
     (_r)->nr_ents =3D __RING_SIZE(_s, __size);                           =
 \
     (_r)->sring =3D (_s);                                                =
 \
 } while (0)
=20
-#define BACK_RING_INIT(_r, _s, __size) do {                             \
-    (_r)->rsp_prod_pvt =3D 0;                                            =
 \
-    (_r)->req_cons =3D 0;                                                =
 \
+#define FRONT_RING_INIT(_r, _s, __size) FRONT_RING_ATTACH(_r, _s, 0, __si=
ze)
+
+#define XEN_FRONT_RING_INIT(r, s, size) do {                            \
+    SHARED_RING_INIT(s);                                                \
+    FRONT_RING_INIT(r, s, size);                                        \
+} while (0)
+
+#define BACK_RING_ATTACH(_r, _s, _i, __size) do {                       \
+    (_r)->rsp_prod_pvt =3D (_i);                                         =
 \
+    (_r)->req_cons =3D (_i);                                             =
 \
     (_r)->nr_ents =3D __RING_SIZE(_s, __size);                           =
 \
     (_r)->sring =3D (_s);                                                =
 \
 } while (0)
=20
+#define BACK_RING_INIT(_r, _s, __size) BACK_RING_ATTACH(_r, _s, 0, __size=
)
+
 /* How big is this ring? */
 #define RING_SIZE(_r)                                                   \
     ((_r)->nr_ents)
@@ -189,11 +203,11 @@ typedef struct __name##_back_ring __name##_back_ring=
_t
     (RING_FREE_REQUESTS(_r) =3D=3D 0)
=20
 /* Test if there are outstanding messages to be processed on a ring=2E */
-#define RING_HAS_UNCONSUMED_RESPONSES(_r)                               \
+#define XEN_RING_NR_UNCONSUMED_RESPONSES(_r)                            \
     ((_r)->sring->rsp_prod - (_r)->rsp_cons)
=20
 #ifdef __GNUC__
-#define RING_HAS_UNCONSUMED_REQUESTS(_r) ({                             \
+#define XEN_RING_NR_UNCONSUMED_REQUESTS(_r) ({                          \
     unsigned int req =3D (_r)->sring->req_prod - (_r)->req_cons;         =
 \
     unsigned int rsp =3D RING_SIZE(_r) -                                 =
 \
         ((_r)->req_cons - (_r)->rsp_prod_pvt);                          \
@@ -201,33 +215,50 @@ typedef struct __name##_back_ring __name##_back_ring=
_t
 })
 #else
 /* Same as above, but without the nice GCC ({ =2E=2E=2E }) syntax=2E */
-#define RING_HAS_UNCONSUMED_REQUESTS(_r)                                \
+#define XEN_RING_NR_UNCONSUMED_REQUESTS(_r)                             \
     ((((_r)->sring->req_prod - (_r)->req_cons) <                        \
       (RING_SIZE(_r) - ((_r)->req_cons - (_r)->rsp_prod_pvt))) ?        \
      ((_r)->sring->req_prod - (_r)->req_cons) :                         \
      (RING_SIZE(_r) - ((_r)->req_cons - (_r)->rsp_prod_pvt)))
 #endif
=20
+#ifdef XEN_RING_HAS_UNCONSUMED_IS_BOOL
+/*
+ * These variants should only be used in case no caller is abusing them f=
or
+ * obtaining the number of unconsumed responses/requests=2E
+ */
+#define RING_HAS_UNCONSUMED_RESPONSES(_r) \
+    (!!XEN_RING_NR_UNCONSUMED_RESPONSES(_r))
+#define RING_HAS_UNCONSUMED_REQUESTS(_r)  \
+    (!!XEN_RING_NR_UNCONSUMED_REQUESTS(_r))
+#else
+#define RING_HAS_UNCONSUMED_RESPONSES(_r) XEN_RING_NR_UNCONSUMED_RESPONSE=
S(_r)
+#define RING_HAS_UNCONSUMED_REQUESTS(_r)  XEN_RING_NR_UNCONSUMED_REQUESTS=
(_r)
+#endif
+
 /* Direct access to individual ring elements, by index=2E */
 #define RING_GET_REQUEST(_r, _idx)                                      \
     (&((_r)->sring->ring[((_idx) & (RING_SIZE(_r) - 1))]=2Ereq))
=20
+#define RING_GET_RESPONSE(_r, _idx)                                     \
+    (&((_r)->sring->ring[((_idx) & (RING_SIZE(_r) - 1))]=2Ersp))
+
 /*
- * Get a local copy of a request=2E
+ * Get a local copy of a request/response=2E
  *
- * Use this in preference to RING_GET_REQUEST() so all processing is
+ * Use this in preference to RING_GET_{REQUEST,RESPONSE}() so all process=
ing is
  * done on a local copy that cannot be modified by the other end=2E
  *
  * Note that https://gcc=2Egnu=2Eorg/bugzilla/show_bug=2Ecgi?id=3D58145 m=
ay cause this
- * to be ineffective where _req is a struct which consists of only bitfie=
lds=2E
+ * to be ineffective where dest is a struct which consists of only bitfie=
lds=2E
  */
-#define RING_COPY_REQUEST(_r, _idx, _req) do {				\
-	/* Use volatile to force the copy into _req=2E */			\
-	*(_req) =3D *(volatile typeof(_req))RING_GET_REQUEST(_r, _idx);	\
+#define RING_COPY_(type, r, idx, dest) do {				\
+	/* Use volatile to force the copy into dest=2E */			\
+	*(dest) =3D *(volatile __typeof__(dest))RING_GET_##type(r, idx);	\
 } while (0)
=20
-#define RING_GET_RESPONSE(_r, _idx)                                     \
-    (&((_r)->sring->ring[((_idx) & (RING_SIZE(_r) - 1))]=2Ersp))
+#define RING_COPY_REQUEST(r, idx, req)  RING_COPY_(REQUEST, r, idx, req)
+#define RING_COPY_RESPONSE(r, idx, rsp) RING_COPY_(RESPONSE, r, idx, rsp)
=20
 /* Loop termination condition: Would the specified index overflow the rin=
g? */
 #define RING_REQUEST_CONS_OVERFLOW(_r, _cons)                           \
@@ -237,6 +268,10 @@ typedef struct __name##_back_ring __name##_back_ring_=
t
 #define RING_REQUEST_PROD_OVERFLOW(_r, _prod)                           \
     (((_prod) - (_r)->rsp_prod_pvt) > RING_SIZE(_r))
=20
+/* Ill-behaved backend determination: Can there be this many responses? *=
/
+#define RING_RESPONSE_PROD_OVERFLOW(_r, _prod)                          \
+    (((_prod) - (_r)->rsp_cons) > RING_SIZE(_r))
+
 #define RING_PUSH_REQUESTS(_r) do {                                     \
     xen_wmb(); /* back sees requests /before/ updated producer index */ \
     (_r)->sring->req_prod =3D (_r)->req_prod_pvt;                        =
 \
@@ -313,6 +348,149 @@ typedef struct __name##_back_ring __name##_back_ring=
_t
     (_work_to_do) =3D RING_HAS_UNCONSUMED_RESPONSES(_r);                 =
 \
 } while (0)
=20
+
+/*
+ * DEFINE_XEN_FLEX_RING_AND_INTF defines two monodirectional rings and
+ * functions to check if there is data on the ring, and to read and
+ * write to them=2E
+ *
+ * DEFINE_XEN_FLEX_RING is similar to DEFINE_XEN_FLEX_RING_AND_INTF, but
+ * does not define the indexes page=2E As different protocols can have
+ * extensions to the basic format, this macro allow them to define their
+ * own struct=2E
+ *
+ * XEN_FLEX_RING_SIZE
+ *   Convenience macro to calculate the size of one of the two rings
+ *   from the overall order=2E
+ *
+ * $NAME_mask
+ *   Function to apply the size mask to an index, to reduce the index
+ *   within the range [0-size]=2E
+ *
+ * $NAME_read_packet
+ *   Function to read data from the ring=2E The amount of data to read is
+ *   specified by the "size" argument=2E
+ *
+ * $NAME_write_packet
+ *   Function to write data to the ring=2E The amount of data to write is
+ *   specified by the "size" argument=2E
+ *
+ * $NAME_get_ring_ptr
+ *   Convenience function that returns a pointer to read/write to the
+ *   ring at the right location=2E
+ *
+ * $NAME_data_intf
+ *   Indexes page, shared between frontend and backend=2E It also
+ *   contains the array of grant refs=2E
+ *
+ * $NAME_queued
+ *   Function to calculate how many bytes are currently on the ring,
+ *   ready to be read=2E It can also be used to calculate how much free
+ *   space is currently on the ring (XEN_FLEX_RING_SIZE() -
+ *   $NAME_queued())=2E
+ */
+
+#ifndef XEN_PAGE_SHIFT
+/* The PAGE_SIZE for ring protocols and hypercall interfaces is always
+ * 4K, regardless of the architecture, and page granularity chosen by
+ * operating systems=2E
+ */
+#define XEN_PAGE_SHIFT 12
+#endif
+#define XEN_FLEX_RING_SIZE(order)                                        =
     \
+    (1UL << ((order) + XEN_PAGE_SHIFT - 1))
+
+#define DEFINE_XEN_FLEX_RING(name)                                       =
     \
+static inline RING_IDX name##_mask(RING_IDX idx, RING_IDX ring_size)     =
     \
+{                                                                        =
     \
+    return idx & (ring_size - 1);                                        =
     \
+}                                                                        =
     \
+                                                                         =
     \
+static inline unsigned char *name##_get_ring_ptr(unsigned char *buf,     =
     \
+                                                 RING_IDX idx,           =
     \
+                                                 RING_IDX ring_size)     =
     \
+{                                                                        =
     \
+    return buf + name##_mask(idx, ring_size);                            =
     \
+}                                                                        =
     \
+                                                                         =
     \
+static inline void name##_read_packet(void *opaque,                      =
     \
+                                      const unsigned char *buf,          =
     \
+                                      size_t size,                       =
     \
+                                      RING_IDX masked_prod,              =
     \
+                                      RING_IDX *masked_cons,             =
     \
+                                      RING_IDX ring_size)                =
     \
+{                                                                        =
     \
+    if (*masked_cons < masked_prod ||                                    =
     \
+        size <=3D ring_size - *masked_cons) {                            =
       \
+        memcpy(opaque, buf + *masked_cons, size);                        =
     \
+    } else {                                                             =
     \
+        memcpy(opaque, buf + *masked_cons, ring_size - *masked_cons);    =
     \
+        memcpy((unsigned char *)opaque + ring_size - *masked_cons, buf,  =
     \
+               size - (ring_size - *masked_cons));                       =
     \
+    }                                                                    =
     \
+    *masked_cons =3D name##_mask(*masked_cons + size, ring_size);        =
       \
+}                                                                        =
     \
+                                                                         =
     \
+static inline void name##_write_packet(unsigned char *buf,               =
     \
+                                       const void *opaque,               =
     \
+                                       size_t size,                      =
     \
+                                       RING_IDX *masked_prod,            =
     \
+                                       RING_IDX masked_cons,             =
     \
+                                       RING_IDX ring_size)               =
     \
+{                                                                        =
     \
+    if (*masked_prod < masked_cons ||                                    =
     \
+        size <=3D ring_size - *masked_prod) {                            =
       \
+        memcpy(buf + *masked_prod, opaque, size);                        =
     \
+    } else {                                                             =
     \
+        memcpy(buf + *masked_prod, opaque, ring_size - *masked_prod);    =
     \
+        memcpy(buf, (unsigned char *)opaque + (ring_size - *masked_prod),=
     \
+               size - (ring_size - *masked_prod));                       =
     \
+    }                                                                    =
     \
+    *masked_prod =3D name##_mask(*masked_prod + size, ring_size);        =
       \
+}                                                                        =
     \
+                                                                         =
     \
+static inline RING_IDX name##_queued(RING_IDX prod,                      =
     \
+                                     RING_IDX cons,                      =
     \
+                                     RING_IDX ring_size)                 =
     \
+{                                                                        =
     \
+    RING_IDX size;                                                       =
     \
+                                                                         =
     \
+    if (prod =3D=3D cons)                                                =
         \
+        return 0;                                                        =
     \
+                                                                         =
     \
+    prod =3D name##_mask(prod, ring_size);                               =
       \
+    cons =3D name##_mask(cons, ring_size);                               =
       \
+                                                                         =
     \
+    if (prod =3D=3D cons)                                                =
         \
+        return ring_size;                                                =
     \
+                                                                         =
     \
+    if (prod > cons)                                                     =
     \
+        size =3D prod - cons;                                            =
       \
+    else                                                                 =
     \
+        size =3D ring_size - (cons - prod);                              =
       \
+    return size;                                                         =
     \
+}                                                                        =
     \
+                                                                         =
     \
+struct name##_data {                                                     =
     \
+    unsigned char *in; /* half of the allocation */                      =
     \
+    unsigned char *out; /* half of the allocation */                     =
     \
+}
+
+#define DEFINE_XEN_FLEX_RING_AND_INTF(name)                              =
     \
+struct name##_data_intf {                                                =
     \
+    RING_IDX in_cons, in_prod;                                           =
     \
+                                                                         =
     \
+    uint8_t pad1[56];                                                    =
     \
+                                                                         =
     \
+    RING_IDX out_cons, out_prod;                                         =
     \
+                                                                         =
     \
+    uint8_t pad2[56];                                                    =
     \
+                                                                         =
     \
+    RING_IDX ring_order;                                                 =
     \
+    grant_ref_t ref[XEN_FLEX_ARRAY_DIM];                                 =
     \
+};                                                                       =
     \
+DEFINE_XEN_FLEX_RING(name)
+
 #endif /* __XEN_PUBLIC_IO_RING_H__ */
=20
 /*
diff --git a/include/xen/public/io/xenbus=2Eh b/include/xen/public/io/xenb=
us=2Eh
index 927f9db=2E=2E9cd0cd7 100644
--- a/include/xen/public/io/xenbus=2Eh
+++ b/include/xen/public/io/xenbus=2Eh
@@ -1,26 +1,9 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
*****
  * xenbus=2Eh
  *
  * Xenbus protocol details=2E
  *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
  * Copyright (C) 2005 XenSource Ltd=2E
  */
=20
diff --git a/include/xen/public/trace=2Eh b/include/xen/public/trace=2Eh
index 95b00e8=2E=2E19b3551 100644
--- a/include/xen/public/trace=2Eh
+++ b/include/xen/public/trace=2Eh
@@ -1,24 +1,7 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * include/public/trace=2Eh
  *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
  * Mark Williamson, (C) 2004 Intel Research Cambridge
  * Copyright (C) 2005 Bin Ren
  */
@@ -78,12 +61,13 @@
 /* #define XEN_SCHEDULER_SEDF 2 (Removed) */
 #define TRC_SCHED_ARINC653 3
 #define TRC_SCHED_RTDS     4
+#define TRC_SCHED_SNULL    5
=20
 /* Per-scheduler tracing */
 #define TRC_SCHED_CLASS_EVT(_c, _e) \
   ( ( TRC_SCHED_CLASS | \
       ((TRC_SCHED_##_c << TRC_SCHED_ID_SHIFT) & TRC_SCHED_ID_MASK) ) + \
-    (_e & TRC_SCHED_EVT_MASK) )
+    ((_e) & TRC_SCHED_EVT_MASK) )
=20
 /* Trace classes for DOM0 operations */
 #define TRC_DOM0_DOMOPS     0x00041000   /* Domains manipulations */
@@ -115,6 +99,7 @@
 #define TRC_SCHED_SWITCH_INFPREV (TRC_SCHED_VERBOSE + 14)
 #define TRC_SCHED_SWITCH_INFNEXT (TRC_SCHED_VERBOSE + 15)
 #define TRC_SCHED_SHUTDOWN_CODE  (TRC_SCHED_VERBOSE + 16)
+#define TRC_SCHED_SWITCH_INFCONT (TRC_SCHED_VERBOSE + 17)
=20
 #define TRC_DOM0_DOM_ADD         (TRC_DOM0_DOMOPS + 1)
 #define TRC_DOM0_DOM_REM         (TRC_DOM0_DOMOPS + 2)
@@ -172,7 +157,7 @@
  */
 #define TRC_PV_HYPERCALL_V2_ARG_32(i) (0x1 << (20 + 2*(i)))
 #define TRC_PV_HYPERCALL_V2_ARG_64(i) (0x2 << (20 + 2*(i)))
-#define TRC_PV_HYPERCALL_V2_ARG_MASK  (0xfff00000)
+#define TRC_PV_HYPERCALL_V2_ARG_MASK  0xfff00000U
=20
 #define TRC_SHADOW_NOT_SHADOW                 (TRC_SHADOW +  1)
 #define TRC_SHADOW_FAST_PROPAGATE             (TRC_SHADOW +  2)
@@ -193,8 +178,10 @@
 /* trace events per subclass */
 #define TRC_HVM_NESTEDFLAG      (0x400)
 #define TRC_HVM_VMENTRY         (TRC_HVM_ENTRYEXIT + 0x01)
-#define TRC_HVM_VMEXIT          (TRC_HVM_ENTRYEXIT + 0x02)
-#define TRC_HVM_VMEXIT64        (TRC_HVM_ENTRYEXIT + TRC_64_FLAG + 0x02)
+#define TRC_HVM_VMX_EXIT        (TRC_HVM_ENTRYEXIT + 0x02)
+#define TRC_HVM_VMX_EXIT64      (TRC_HVM_ENTRYEXIT + TRC_64_FLAG + 0x02)
+#define TRC_HVM_SVM_EXIT        (TRC_HVM_ENTRYEXIT + 0x03)
+#define TRC_HVM_SVM_EXIT64      (TRC_HVM_ENTRYEXIT + TRC_64_FLAG + 0x03)
 #define TRC_HVM_PF_XEN          (TRC_HVM_HANDLER + 0x01)
 #define TRC_HVM_PF_XEN64        (TRC_HVM_HANDLER + TRC_64_FLAG + 0x01)
 #define TRC_HVM_PF_INJECT       (TRC_HVM_HANDLER + 0x02)
@@ -233,6 +220,8 @@
 #define TRC_HVM_TRAP             (TRC_HVM_HANDLER + 0x23)
 #define TRC_HVM_TRAP_DEBUG       (TRC_HVM_HANDLER + 0x24)
 #define TRC_HVM_VLAPIC           (TRC_HVM_HANDLER + 0x25)
+#define TRC_HVM_XCR_READ64      (TRC_HVM_HANDLER + TRC_64_FLAG + 0x26)
+#define TRC_HVM_XCR_WRITE64     (TRC_HVM_HANDLER + TRC_64_FLAG + 0x27)
=20
 #define TRC_HVM_IOPORT_WRITE    (TRC_HVM_HANDLER + 0x216)
 #define TRC_HVM_IOMEM_WRITE     (TRC_HVM_HANDLER + 0x217)
diff --git a/include/xen/public/xen-compat=2Eh b/include/xen/public/xen-co=
mpat=2Eh
index 2eea0e2=2E=2E078b796 100644
--- a/include/xen/public/xen-compat=2Eh
+++ b/include/xen/public/xen-compat=2Eh
@@ -1,33 +1,16 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * xen-compat=2Eh
  *
  * Guest OS interface to Xen=2E  Compatibility layer=2E
  *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
  * Copyright (c) 2006, Christian Limpach
  */
=20
 #ifndef __XEN_PUBLIC_XEN_COMPAT_H__
 #define __XEN_PUBLIC_XEN_COMPAT_H__
=20
-#define __XEN_LATEST_INTERFACE_VERSION__ 0x00040700
+#define __XEN_LATEST_INTERFACE_VERSION__ 0x00041300
=20
 #if defined(__XEN__) || defined(__XEN_TOOLS__)
 /* Xen is built with matching headers and implements the latest interface=
=2E */
@@ -41,4 +24,6 @@
 #error "These header files do not support the requested interface version=
=2E"
 #endif
=20
+#define COMPAT_FLEX_ARRAY_DIM XEN_FLEX_ARRAY_DIM
+
 #endif /* __XEN_PUBLIC_XEN_COMPAT_H__ */
diff --git a/include/xen/public/xen=2Eh b/include/xen/public/xen=2Eh
index 2057b52=2E=2E728bda2 100644
--- a/include/xen/public/xen=2Eh
+++ b/include/xen/public/xen=2Eh
@@ -1,26 +1,9 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * xen=2Eh
  *
  * Guest OS interface to Xen=2E
  *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
  * Copyright (c) 2004, K A Fraser
  */
=20
@@ -33,11 +16,15 @@
 #include "arch-x86/xen=2Eh"
 #elif defined(__arm__) || defined (__aarch64__)
 #include "arch-arm=2Eh"
+#elif defined(__powerpc64__)
+#include "arch-ppc=2Eh"
+#elif defined(__riscv)
+#include "arch-riscv=2Eh"
 #else
 #error "Unsupported architecture"
 #endif
=20
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
 /* Guest handles for primitive C types=2E */
 DEFINE_XEN_GUEST_HANDLE(char);
 __DEFINE_XEN_GUEST_HANDLE(uchar, unsigned char);
@@ -53,17 +40,31 @@ DEFINE_XEN_GUEST_HANDLE(uint64_t);
 DEFINE_XEN_GUEST_HANDLE(xen_pfn_t);
 DEFINE_XEN_GUEST_HANDLE(xen_ulong_t);
=20
-/* Turn a plain number into a C unsigned (LONG_PTR) constant=2E */
+/* Define a variable length array (depends on compiler)=2E */
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >=3D 199901L
+#define XEN_FLEX_ARRAY_DIM
+#elif defined(__GNUC__)
+#define XEN_FLEX_ARRAY_DIM  0
+#else
+#define XEN_FLEX_ARRAY_DIM  1 /* variable size */
+#endif
+
+/* Turn a plain number into a C unsigned (LONG_PTR (LONG_PTR)) constant=
=2E */
 #define __xen_mk_uint(x)  x ## U
 #define __xen_mk_ulong(x) x ## UL
+#ifndef __xen_mk_ullong
+# define __xen_mk_ullong(x) x ## ULL
+#endif
 #define xen_mk_uint(x)    __xen_mk_uint(x)
 #define xen_mk_ulong(x)   __xen_mk_ulong(x)
+#define xen_mk_ullong(x)  __xen_mk_ullong(x)
=20
 #else
=20
 /* In assembly code we cannot use C numeric constant suffixes=2E */
-#define xen_mk_uint(x)  x
-#define xen_mk_ulong(x) x
+#define xen_mk_uint(x)   x
+#define xen_mk_ulong(x)  x
+#define xen_mk_ullong(x) x
=20
 #endif
=20
@@ -105,7 +106,7 @@ DEFINE_XEN_GUEST_HANDLE(xen_ulong_t);
 #define __HYPERVISOR_nmi_op               28
 #define __HYPERVISOR_sched_op             29
 #define __HYPERVISOR_callback_op          30
-#define __HYPERVISOR_xenoprof_op          31
+#define __HYPERVISOR_xenoprof_op          31 /* Dropped in Xen 4=2E22 */
 #define __HYPERVISOR_event_channel_op     32
 #define __HYPERVISOR_physdev_op           33
 #define __HYPERVISOR_hvm_op               34
@@ -113,8 +114,10 @@ DEFINE_XEN_GUEST_HANDLE(xen_ulong_t);
 #define __HYPERVISOR_domctl               36
 #define __HYPERVISOR_kexec_op             37
 #define __HYPERVISOR_tmem_op              38
-#define __HYPERVISOR_xc_reserved_op       39 /* reserved for XenClient */
+#define __HYPERVISOR_argo_op              39
 #define __HYPERVISOR_xenpmu_op            40
+#define __HYPERVISOR_dm_op                41
+#define __HYPERVISOR_hypfs_op             42
=20
 /* Architecture-specific hypercall definitions=2E */
 #define __HYPERVISOR_arch_0               48
@@ -156,25 +159,34 @@ DEFINE_XEN_GUEST_HANDLE(xen_ulong_t);
  *
  * Virtual interrupts that a guest OS may receive from Xen=2E
  *
- * In the side comments, 'V=2E' denotes a per-VCPU VIRQ while 'G=2E' deno=
tes a
- * global VIRQ=2E The former can be bound once per VCPU and cannot be re-=
bound=2E
- * The latter can be allocated only once per guest: they must initially b=
e
- * allocated to VCPU0 but can subsequently be re-bound=2E
+ * There are three types:
+ *
+ * 1=2E (V) Per-vcpu:
+ *    These can be bound once per vCPU, each using a different evtchn por=
t=2E
+ *    An evtchn for one vCPU cannot be rebound to a different vCPU=2E
+ *
+ * 2=2E (D) Per-domain:
+ *    These can be bound once per domain=2E  They must be bound on vCPU 0=
 first,
+ *    but can be rebound to other vCPUs afterwards=2E
+ *
+ * 3=2E (G) Global:
+ *    Like per-domain, but can only be bound to a single domain at a time=
=2E
+ *    The owning domain must unbind before a new domain can bind=2E
  */
 /* ` enum virq { */
 #define VIRQ_TIMER      0  /* V=2E Timebase update, and/or requested time=
out=2E  */
 #define VIRQ_DEBUG      1  /* V=2E Request guest to dump debug info=2E   =
        */
-#define VIRQ_CONSOLE    2  /* G=2E (DOM0) Bytes received on emergency con=
sole=2E */
-#define VIRQ_DOM_EXC    3  /* G=2E (DOM0) Exceptional event for some doma=
in=2E   */
-#define VIRQ_TBUF       4  /* G=2E (DOM0) Trace buffer has records availa=
ble=2E  */
-#define VIRQ_DEBUGGER   6  /* G=2E (DOM0) A domain has paused for debuggi=
ng=2E   */
+#define VIRQ_CONSOLE    2  /* G=2E Bytes received on emergency console=2E=
        */
+#define VIRQ_DOM_EXC    3  /* G=2E Exceptional event for some domain=2E  =
        */
+#define VIRQ_TBUF       4  /* G=2E Trace buffer has records available=2E =
        */
+#define VIRQ_DEBUGGER   6  /* G=2E A domain has paused for debugging=2E  =
        */
 #define VIRQ_XENOPROF   7  /* V=2E XenOprofile interrupt: new sample avai=
lable */
-#define VIRQ_CON_RING   8  /* G=2E (DOM0) Bytes received on console      =
      */
-#define VIRQ_PCPU_STATE 9  /* G=2E (DOM0) PCPU state changed             =
      */
-#define VIRQ_MEM_EVENT  10 /* G=2E (DOM0) A memory event has occured     =
      */
-#define VIRQ_XC_RESERVED 11 /* G=2E Reserved for XenClient               =
      */
-#define VIRQ_ENOMEM     12 /* G=2E (DOM0) Low on heap memory       */
-#define VIRQ_XENPMU     13 /* V=2E  PMC interrupt                        =
      */
+#define VIRQ_CON_RING   8  /* G=2E Bytes received on console             =
      */
+#define VIRQ_PCPU_STATE 9  /* G=2E PCPU state changed                    =
      */
+#define VIRQ_MEM_EVENT  10 /* G=2E A memory event has occurred           =
      */
+#define VIRQ_ARGO       11 /* D=2E Argo interdomain message notification =
      */
+#define VIRQ_ENOMEM     12 /* G=2E Low on heap memory                    =
      */
+#define VIRQ_XENPMU     13 /* V=2E PMC interrupt                         =
      */
=20
 /* Architecture-specific VIRQ definitions=2E */
 #define VIRQ_ARCH_0    16
@@ -262,6 +274,10 @@ DEFINE_XEN_GUEST_HANDLE(xen_ulong_t);
  * As MMU_NORMAL_PT_UPDATE above, but A/D bits currently in the PTE are O=
Red
  * with those in @val=2E
  *
+ * ptr[1:0] =3D=3D MMU_PT_UPDATE_NO_TRANSLATE:
+ * As MMU_NORMAL_PT_UPDATE above, but @val is not translated though FD
+ * page tables=2E
+ *
  * @val is usually the machine frame number along with some attributes=2E
  * The attributes by default follow the architecture defined bits=2E Mean=
ing that
  * if this is a X86_64 machine and four page table layout is used, the la=
yout
@@ -328,9 +344,11 @@ DEFINE_XEN_GUEST_HANDLE(xen_ulong_t);
  *
  * PAT (bit 7 on) --> PWT (bit 3 on) and clear bit 7=2E
  */
-#define MMU_NORMAL_PT_UPDATE      0 /* checked '*ptr =3D val'=2E ptr is M=
A=2E      */
-#define MMU_MACHPHYS_UPDATE       1 /* ptr =3D MA of frame to modify entr=
y for */
-#define MMU_PT_UPDATE_PRESERVE_AD 2 /* atomically: *ptr =3D val | (*ptr&(=
A|D)) */
+#define MMU_NORMAL_PT_UPDATE       0 /* checked '*ptr =3D val'=2E ptr is =
MA=2E      */
+#define MMU_MACHPHYS_UPDATE        1 /* ptr =3D MA of frame to modify ent=
ry for */
+#define MMU_PT_UPDATE_PRESERVE_AD  2 /* atomically: *ptr =3D val | (*ptr&=
(A|D)) */
+#define MMU_PT_UPDATE_NO_TRANSLATE 3 /* checked '*ptr =3D val'=2E ptr is =
MA=2E      */
+                                     /* val never translated=2E          =
       */
=20
 /*
  * MMU EXTENDED OPERATIONS
@@ -419,7 +437,7 @@ DEFINE_XEN_GUEST_HANDLE(xen_ulong_t);
 #define MMUEXT_UNMARK_SUPER     20
 /* ` } */
=20
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
 struct mmuext_op {
     unsigned int cmd; /* =3D> enum mmuext_cmd */
     union {
@@ -474,7 +492,28 @@ DEFINE_XEN_GUEST_HANDLE(mmuext_op_t);
 /* ` } */
=20
 /*
- * Commands to HYPERVISOR_console_io()=2E
+ * ` int
+ * ` HYPERVISOR_console_io(unsigned int cmd,
+ * `                       unsigned int count,
+ * `                       char buffer[]);
+ *
+ * @cmd: Command (see below)
+ * @count: Size of the buffer to read/write
+ * @buffer: Pointer in the guest memory
+ *
+ * List of commands:
+ *
+ *  * CONSOLEIO_write: Write the buffer to Xen console=2E
+ *      For the hardware domain, all the characters in the buffer will
+ *      be written=2E Characters will be printed directly to the console=
=2E
+ *      For all the other domains, only the printable characters will be
+ *      written=2E Characters may be buffered until a newline (i=2Ee '\n'=
) is
+ *      found=2E
+ *      @return 0 on success, otherwise return an error code=2E
+ *  * CONSOLEIO_read: Attempts to read up to @count characters from Xen
+ *      console=2E The maximum buffer size (i=2Ee=2E @count) supported is=
 2GB=2E
+ *      @return the number of characters read on success, otherwise retur=
n
+ *      an error code=2E
  */
 #define CONSOLEIO_write         0
 #define CONSOLEIO_read          1
@@ -509,6 +548,13 @@ DEFINE_XEN_GUEST_HANDLE(mmuext_op_t);
  */
 #define VMASST_TYPE_architectural_iopl   4
=20
+/*
+ * All guests: activate update indicator in vcpu_runstate_info
+ * Enable setting the XEN_RUNSTATE_UPDATE flag in guest memory mapped
+ * vcpu_runstate_info during updates of the runstate information=2E
+ */
+#define VMASST_TYPE_runstate_update_flag 5
+
 /*
  * x86/64 guests: strictly hide M2P from user mode=2E
  * This allows the guest to control respective hypervisor behavior:
@@ -537,16 +583,21 @@ DEFINE_XEN_GUEST_HANDLE(mmuext_op_t);
  * is useful to ensure that no mappings to the OS's own heap are accident=
ally
  * installed=2E (e=2Eg=2E, in Linux this could cause havoc as reference c=
ounts
  * aren't adjusted on the I/O-mapping code path)=2E
- * This only makes sense in MMUEXT_SET_FOREIGNDOM, but in that context ca=
n
- * be specified by any calling domain=2E
+ * This only makes sense as HYPERVISOR_mmu_update()'s and
+ * HYPERVISOR_update_va_mapping_otherdomain()'s "foreigndom" argument=2E =
For
+ * HYPERVISOR_mmu_update() context it can be specified by any calling dom=
ain,
+ * otherwise it's only permitted if the caller is privileged=2E
  */
 #define DOMID_IO             xen_mk_uint(0x7FF1)
=20
 /*
  * DOMID_XEN is used to allow privileged domains to map restricted parts =
of
  * Xen's heap space (e=2Eg=2E, the machine_to_phys table)=2E
- * This only makes sense in MMUEXT_SET_FOREIGNDOM, and is only permitted =
if
- * the caller is privileged=2E
+ * This only makes sense as
+ * - HYPERVISOR_mmu_update()'s, HYPERVISOR_mmuext_op()'s, or
+ *   HYPERVISOR_update_va_mapping_otherdomain()'s "foreigndom" argument,
+ * - with XENMAPSPACE_gmfn_foreign,
+ * and is only permitted if the caller is privileged=2E
  */
 #define DOMID_XEN            xen_mk_uint(0x7FF2)
=20
@@ -557,10 +608,20 @@ DEFINE_XEN_GUEST_HANDLE(mmuext_op_t);
 /* DOMID_INVALID is used to identify pages with unknown owner=2E */
 #define DOMID_INVALID        xen_mk_uint(0x7FF4)
=20
+/*
+ * DOMID_ANY is used to signal no specific domain ID requested=2E
+ * Handler should pick a valid ID, or handle it as a wildcard value
+ * depending on the context=2E
+ */
+#define DOMID_ANY            xen_mk_uint(0x7FF5)
+
 /* Idle domain=2E */
 #define DOMID_IDLE           xen_mk_uint(0x7FFF)
=20
-#ifndef __ASSEMBLY__
+/* Mask for valid domain id values */
+#define DOMID_MASK           xen_mk_uint(0x7FFF)
+
+#ifndef __ASSEMBLER__
=20
 typedef uint16_t domid_t;
=20
@@ -578,7 +639,7 @@ DEFINE_XEN_GUEST_HANDLE(mmu_update_t);
 /*
  * ` enum neg_errnoval
  * ` HYPERVISOR_multicall(multicall_entry_t call_list[],
- * `                      uint32_t nr_calls);
+ * `                      ULONG_PTR nr_calls);
  *
  * NB=2E The fields are logically the natural register size for this
  * architecture=2E In cases where xen_ulong_t is larger than this then
@@ -586,7 +647,11 @@ DEFINE_XEN_GUEST_HANDLE(mmu_update_t);
  */
 struct multicall_entry {
     xen_ulong_t op, result;
+#ifndef __XEN__
     xen_ulong_t args[6];
+#else /* Only 5 arguments are supported in reality=2E */
+    xen_ulong_t args[5], unused;
+#endif
 };
 typedef struct multicall_entry multicall_entry_t;
 DEFINE_XEN_GUEST_HANDLE(multicall_entry_t);
@@ -668,7 +733,7 @@ struct vcpu_info {
 #endif /* XEN_HAVE_PV_UPCALL_MASK */
     xen_ulong_t evtchn_pending_sel;
     struct arch_vcpu_info arch;
-    struct vcpu_time_info time;
+    vcpu_time_info_t time;
 }; /* 64 bytes (x86) */
 #ifndef __XEN__
 typedef struct vcpu_info vcpu_info_t;
@@ -721,12 +786,17 @@ struct shared_info {
     xen_ulong_t evtchn_mask[sizeof(xen_ulong_t) * 8];
=20
     /*
-     * Wallclock time: updated only by control software=2E Guests should =
base
-     * their gettimeofday() syscall on this wallclock-base value=2E
+     * Wallclock time: updated by control software or RTC emulation=2E
+     * Guests should base their gettimeofday() syscall on this
+     * wallclock-base value=2E
+     * The values of wc_sec and wc_nsec are offsets from the Unix epoch
+     * adjusted by the domain's 'time offset' (in seconds) as set either
+     * by XEN_DOMCTL_settimeoffset, or adjusted via a guest write to the
+     * emulated RTC=2E
      */
     uint32_t wc_version;      /* Version counter: see vcpu_time_info_t=2E=
 */
-    uint32_t wc_sec;          /* Secs  00:00:00 UTC, Jan 1, 1970=2E  */
-    uint32_t wc_nsec;         /* Nsecs 00:00:00 UTC, Jan 1, 1970=2E  */
+    uint32_t wc_sec;
+    uint32_t wc_nsec;
 #if !defined(__i386__)
     uint32_t wc_sec_hi;
 # define xen_wc_sec_hi wc_sec_hi
@@ -752,7 +822,7 @@ typedef struct shared_info shared_info_t;
  *         (may be omitted)
  *      c=2E list of allocated page frames [mfn_list, nr_pages]
  *         (unless relocated due to XEN_ELFNOTE_INIT_P2M)
- *      d=2E start_info_t structure        [register ESI (x86)]
+ *      d=2E start_info_t structure        [register rSI (x86)]
  *         in case of dom0 this page contains the console info, too
  *      e=2E unless dom0: xenstore ring page
  *      f=2E unless dom0: console ring page
@@ -813,52 +883,6 @@ struct start_info {
 };
 typedef struct start_info start_info_t;
=20
-/*
- * Start of day structure passed to PVH guests in %ebx=2E
- *
- * NOTE: nothing will be loaded at physical address 0, so a 0 value in an=
y
- * of the address fields should be treated as not present=2E
- *
- *  0 +----------------+
- *    | magic          | Contains the magic value XEN_HVM_START_MAGIC_VAL=
UE
- *    |                | ("xEn3" with the 0x80 bit of the "E" set)=2E
- *  4 +----------------+
- *    | version        | Version of this structure=2E Current version is =
0=2E New
- *    |                | versions are guaranteed to be backwards-compatib=
le=2E
- *  8 +----------------+
- *    | flags          | SIF_xxx flags=2E
- * 12 +----------------+
- *    | nr_modules     | Number of modules passed to the kernel=2E
- * 16 +----------------+
- *    | modlist_paddr  | Physical address of an array of modules
- *    |                | (layout of the structure below)=2E
- * 24 +----------------+
- *    | cmdline_paddr  | Physical address of the command line,
- *    |                | a zero-terminated ASCII string=2E
- * 32 +----------------+
- *    | rsdp_paddr     | Physical address of the RSDP ACPI data structure=
=2E
- * 40 +----------------+
- *
- * The layout of each entry in the module structure is the following:
- *
- *  0 +----------------+
- *    | paddr          | Physical address of the module=2E
- *  8 +----------------+
- *    | size           | Size of the module in bytes=2E
- * 16 +----------------+
- *    | cmdline_paddr  | Physical address of the command line,
- *    |                | a zero-terminated ASCII string=2E
- * 24 +----------------+
- *    | reserved       |
- * 32 +----------------+
- *
- * The address and sizes are always a 64bit little endian unsigned intege=
r=2E
- *
- * NB: Xen on x86 will always try to place all the data below the 4GiB
- * boundary=2E
- */
-#define XEN_HVM_START_MAGIC_VALUE 0x336ec578
-
 /* New console union for dom0 introduced in 0x00030203=2E */
 #if __XEN_INTERFACE_VERSION__ < 0x00030203
 #define console_mfn    console=2EdomU=2Emfn
@@ -944,6 +968,11 @@ typedef struct dom0_vga_console_info {
             uint32_t gbl_caps;
             /* Mode attributes (offset 0x0, VESA command 0x4f01)=2E */
             uint16_t mode_attrs;
+            uint16_t pad;
+#endif
+#if __XEN_INTERFACE_VERSION__ >=3D 0x00040d00
+            /* high 32 bits of lfb_base */
+            uint32_t ext_lfb_base;
 #endif
         } vesa_lfb;
     } u;
@@ -958,7 +987,38 @@ __DEFINE_XEN_GUEST_HANDLE(uint16, uint16_t);
 __DEFINE_XEN_GUEST_HANDLE(uint32, uint32_t);
 __DEFINE_XEN_GUEST_HANDLE(uint64, uint64_t);
=20
-#endif /* !__ASSEMBLY__ */
+typedef struct {
+    uint8_t a[16];
+} xen_uuid_t;
+
+/*
+ * XEN_DEFINE_UUID(0x00112233, 0x4455, 0x6677, 0x8899,
+ *                 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff)
+ * will construct UUID 00112233-4455-6677-8899-aabbccddeeff presented as
+ * {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88,
+ * 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff};
+ *
+ * NB: This is compatible with Linux kernel and with libuuid, but it is n=
ot
+ * compatible with Microsoft, as they use mixed-endian encoding (some
+ * components are little-endian, some are big-endian)=2E
+ */
+#define XEN_DEFINE_UUID_(a, b, c, d, e1, e2, e3, e4, e5, e6)            \
+    {{((a) >> 24) & 0xFF, ((a) >> 16) & 0xFF,                           \
+      ((a) >>  8) & 0xFF, ((a) >>  0) & 0xFF,                           \
+      ((b) >>  8) & 0xFF, ((b) >>  0) & 0xFF,                           \
+      ((c) >>  8) & 0xFF, ((c) >>  0) & 0xFF,                           \
+      ((d) >>  8) & 0xFF, ((d) >>  0) & 0xFF,                           \
+                e1, e2, e3, e4, e5, e6}}
+
+#if defined(__STDC_VERSION__) ? __STDC_VERSION__ >=3D 199901L : defined(_=
_GNUC__)
+#define XEN_DEFINE_UUID(a, b, c, d, e1, e2, e3, e4, e5, e6)             \
+    ((xen_uuid_t)XEN_DEFINE_UUID_(a, b, c, d, e1, e2, e3, e4, e5, e6))
+#else
+#define XEN_DEFINE_UUID(a, b, c, d, e1, e2, e3, e4, e5, e6)             \
+    XEN_DEFINE_UUID_(a, b, c, d, e1, e2, e3, e4, e5, e6)
+#endif /* __STDC_VERSION__ / __GNUC__ */
+
+#endif /* !__ASSEMBLER__ */
=20
 /* Default definitions for macros used by domctl/sysctl=2E */
 #if defined(__XEN__) || defined(__XEN_TOOLS__)
@@ -973,11 +1033,12 @@ __DEFINE_XEN_GUEST_HANDLE(uint64, uint64_t);
 #define XEN_GUEST_HANDLE_64(name) XEN_GUEST_HANDLE(name)
 #endif
=20
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
 struct xenctl_bitmap {
     XEN_GUEST_HANDLE_64(uint8) bitmap;
     uint32_t nr_bits;
 };
+typedef struct xenctl_bitmap xenctl_bitmap_t;
 #endif
=20
 #endif /* defined(__XEN__) || defined(__XEN_TOOLS__) */
diff --git a/include/xen/xen/errno=2Eh b/include/xen/xen/errno=2Eh
index 69b28dd=2E=2Edb9ef7f 100644
--- a/include/xen/xen/errno=2Eh
+++ b/include/xen/xen/errno=2Eh
@@ -1,18 +1,18 @@
 #ifndef __XEN_ERRNO_H__
 #define __XEN_ERRNO_H__
=20
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
=20
-#define XEN_ERRNO(name, value) name =3D value,
+#define XEN_ERRNO(name, value) name =3D (value),
 enum {
 #include <public/errno=2Eh>
 };
=20
-#else /* !__ASSEMBLY__ */
+#else /* !__ASSEMBLER__ */
=20
 #define XEN_ERRNO(name, value) =2Eequ name, value
 #include <public/errno=2Eh>
=20
-#endif /* __ASSEMBLY__ */
+#endif /* __ASSEMBLER__ */
=20
 #endif /*  __XEN_ERRNO_H__ */
--=20
2=2E55=2E0=2Ewindows=2E3



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.253.b209b2e1dd85db4b.1a13feed17a.c37389a496f40aba=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 15 14:19:50 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 15 Oct 2026 14:19:50 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1450692.1666148 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHMJC-0005BV-Ps; Thu, 15 Oct 2026 14:19:50 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1450692.1666148; Thu, 15 Oct 2026 14:19:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHMJC-0005BO-MR; Thu, 15 Oct 2026 14:19:50 +0000
Received: by outflank-mailman (input) for mailman id 1450692;
 Thu, 15 Oct 2026 14:19:49 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13feed21d0008425@swg.vates.tech>)
 id 1xHMJA-00056q-LZ
 for win-pv-devel@lists.xenproject.org; Thu, 15 Oct 2026 14:19:48 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xHMJA-00FKw2-1y
 for win-pv-devel@lists.xenproject.org; Thu, 15 Oct 2026 16:19:48 +0200
Received: from [10.42.69.4] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13feed21d0008425@swg.vates.tech>)
 id 6ad0e0f2-8faa-0a2a0a5109dd-0a2a4504c220-26
 for <win-pv-devel@lists.xenproject.org>; Thu, 15 Oct 2026 16:19:48 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-ebf023.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13feed21d0008425@swg.vates.tech>)
 id 6ad0e0ff-b57f-0a2a45040019-b9ff1c23abaf-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 15 Oct 2026 16:19:43 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a13feed21d0008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 15 Oct 2026 14:19:38 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id D002F82B33;
 Thu, 15 Oct 2026 16:19:37 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=o1xMrquUs0AAXXDJ1t+WTBRZKumEoKLHc2h9sxS/Ub8=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=Z8BEtjFRtySva7xZAKiWnIM4j5yKyM+5dZGXILu+esZkTl/cOYBtfQ7oM69mgMR7hYfpsOTqG
 RMHHqkq8bq5c24rIJjPcyGncpUVy+Oen522bFB2bN9c2kIRxgQ8gdGIdn6uEk0J0CDYxmnmZphf
 nv1PF+lcWqC46h8Dmo379fD6OHVpF3BFvVVgynSYUzin5s/cTPIR/Oj4dq0VqPcUplrIIHeBPFY
 PLrSr0OzgLM3ORp4w6fi485MT8tMGqrAw/vmU9i5TmJViQboQgKj5k4QjPxYZvzhsm7CNjW3WQt
 j2u3Xk/PT4RnBXqJGrIR4dEFoQmFMO5ApOK4bdzeOCeQ==
X-Zone-Loop: b9b7d7f18ee19e42e5971ee38bbc32cd2aa0301d7218
x-campaign-type: default
x-transaction-id: 5be42b19-5db9-4eea-bf29-6503fd5b2eb4
x-swg-uid: 01-436d4ffd-e088-4b6b-9cdf-2ad6140736c4
X-Mailer: Sweego
Message-ID:
 <1792073978.8631fc262581453bbf619ec5b2062170.1a13feed21d0008425@vates.tech>
x-swg-bid: 1792073978.8631fc262581453bbf619ec5b2062170.1a13feed21d0008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [XENVIF PATCH] Update Xen headers to RELEASE-4.22.0
Date: Thu, 15 Oct 2026 16:19:28 +0200
In-Reply-To: <20261015141933.1533-1-ngoc-tu.dinh@vates.tech>
References: <1792073912.8631fc262581453bbf619ec5b2062170.1a13fedd1870008425@vates.tech>
 <20261015141933.1533-1-ngoc-tu.dinh@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.252.e44c3e55d53cbfb5.1a13feed078.60e9b4f9e4b22b86=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792073977977
X-purgate-ID: tlsNG-ebf023/1792073983-C1CD78F0-6E5D230D/0/0
X-purgate-type: clean
X-purgate-size: 90185

---=Part.252.e44c3e55d53cbfb5.1a13feed078.60e9b4f9e4b22b86=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 include/xen/public/arch-x86/xen-x86_32=2Eh |  79 ++++---
 include/xen/public/arch-x86/xen-x86_64=2Eh | 124 +++++++----
 include/xen/public/arch-x86/xen=2Eh        | 117 +++++++---
 include/xen/public/errno=2Eh               |  16 +-
 include/xen/public/grant_table=2Eh         |  57 ++---
 include/xen/public/io/netif=2Eh            | 176 +++++++++++++--
 include/xen/public/io/ring=2Eh             | 266 ++++++++++++++++++----
 include/xen/public/io/xenbus=2Eh           |  19 +-
 include/xen/public/trace=2Eh               |  33 +--
 include/xen/public/xen-compat=2Eh          |  23 +-
 include/xen/public/xen=2Eh                 | 267 ++++++++++++++---------
 include/xen/xen/errno=2Eh                  |   8 +-
 12 files changed, 802 insertions(+), 383 deletions(-)

diff --git a/include/xen/public/arch-x86/xen-x86_32=2Eh b/include/xen/publ=
ic/arch-x86/xen-x86_32=2Eh
index d23340b=2E=2E4ee19cc 100644
--- a/include/xen/public/arch-x86/xen-x86_32=2Eh
+++ b/include/xen/public/arch-x86/xen-x86_32=2Eh
@@ -1,26 +1,9 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * xen-x86_32=2Eh
  *
  * Guest OS interface to x86 32-bit Xen=2E
  *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
  * Copyright (c) 2004-2007, K A Fraser
  */
=20
@@ -29,7 +12,7 @@
=20
 /*
  * Hypercall interface:
- *  Input:  %ebx, %ecx, %edx, %esi, %edi, %ebp (arguments 1-6)
+ *  Input:  %ebx, %ecx, %edx, %esi, %edi (arguments 1-5)
  *  Output: %eax
  * Access is via hypercall page (set up by guest loader or via a Xen MSR)=
:
  *  call hypercall_page + hypercall-number * 32
@@ -107,32 +90,66 @@
 #define XEN_GUEST_HANDLE_64(name) __XEN_GUEST_HANDLE_64(name)
 #endif
=20
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
+
+#if defined(XEN_GENERATING_COMPAT_HEADERS)
+/* nothing */
+#elif defined(__XEN__) || defined(__XEN_TOOLS__)
+/* Anonymous unions include all permissible names (e=2Eg=2E, al/ah/ax/eax=
)=2E */
+#define __DECL_REG_LO8(which) union { \
+    uint32_t e ## which ## x; \
+    uint16_t which ## x; \
+    struct { \
+        uint8_t which ## l; \
+        uint8_t which ## h; \
+    }; \
+}
+#define __DECL_REG_LO16(name) union { \
+    uint32_t e ## name, _e ## name; \
+    uint16_t name; \
+}
+#else
+/* Other sources must always use the proper 32-bit name (e=2Eg=2E, eax)=
=2E */
+#define __DECL_REG_LO8(which) uint32_t e ## which ## x
+#define __DECL_REG_LO16(name) uint32_t e ## name
+#endif
+
+#ifdef __XEN__
+#define cpu_user_regs guest_user_regs
+#endif
=20
 struct cpu_user_regs {
-    uint32_t ebx;
-    uint32_t ecx;
-    uint32_t edx;
-    uint32_t esi;
-    uint32_t edi;
-    uint32_t ebp;
-    uint32_t eax;
+    __DECL_REG_LO8(b);
+    __DECL_REG_LO8(c);
+    __DECL_REG_LO8(d);
+    __DECL_REG_LO16(si);
+    __DECL_REG_LO16(di);
+    __DECL_REG_LO16(bp);
+    __DECL_REG_LO8(a);
     uint16_t error_code;    /* private */
     uint16_t entry_vector;  /* private */
-    uint32_t eip;
+    __DECL_REG_LO16(ip);
     uint16_t cs;
     uint8_t  saved_upcall_mask;
     uint8_t  _pad0;
-    uint32_t eflags;        /* eflags=2EIF =3D=3D !saved_upcall_mask */
-    uint32_t esp;
+    __DECL_REG_LO16(flags); /* eflags=2EIF =3D=3D !saved_upcall_mask */
+    __DECL_REG_LO16(sp);
     uint16_t ss, _pad1;
     uint16_t es, _pad2;
     uint16_t ds, _pad3;
     uint16_t fs, _pad4;
     uint16_t gs, _pad5;
 };
+
+#ifdef __XEN__
+#undef cpu_user_regs
+#else
 typedef struct cpu_user_regs cpu_user_regs_t;
 DEFINE_XEN_GUEST_HANDLE(cpu_user_regs_t);
+#endif
+
+#undef __DECL_REG_LO8
+#undef __DECL_REG_LO16
=20
 /*
  * Page-directory addresses above 4GB do not fit into architectural %cr3=
=2E
@@ -154,7 +171,7 @@ struct xen_callback {
 };
 typedef struct xen_callback xen_callback_t;
=20
-#endif /* !__ASSEMBLY__ */
+#endif /* !__ASSEMBLER__ */
=20
 #endif /* __XEN_PUBLIC_ARCH_X86_XEN_X86_32_H__ */
=20
diff --git a/include/xen/public/arch-x86/xen-x86_64=2Eh b/include/xen/publ=
ic/arch-x86/xen-x86_64=2Eh
index 2f53f69=2E=2E4ab9a99 100644
--- a/include/xen/public/arch-x86/xen-x86_64=2Eh
+++ b/include/xen/public/arch-x86/xen-x86_64=2Eh
@@ -1,26 +1,9 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * xen-x86_64=2Eh
  *
  * Guest OS interface to x86 64-bit Xen=2E
  *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
  * Copyright (c) 2004-2006, K A Fraser
  */
=20
@@ -29,7 +12,7 @@
=20
 /*
  * Hypercall interface:
- *  Input:  %rdi, %rsi, %rdx, %r10, %r8, %r9 (arguments 1-6)
+ *  Input:  %rdi, %rsi, %rdx, %r10, %r8 (arguments 1-5)
  *  Output: %rax
  * Access is via hypercall page (set up by guest loader or via a Xen MSR)=
:
  *  call hypercall_page + hypercall-number * 32
@@ -44,11 +27,11 @@
  */
=20
 #define FLAT_RING3_CS32 0xe023  /* GDT index 260 */
-#define FLAT_RING3_CS64 0xe033  /* GDT index 261 */
-#define FLAT_RING3_DS32 0xe02b  /* GDT index 262 */
+#define FLAT_RING3_CS64 0xe033  /* GDT index 262 */
+#define FLAT_RING3_DS32 0xe02b  /* GDT index 261 */
 #define FLAT_RING3_DS64 0x0000  /* NULL selector */
-#define FLAT_RING3_SS32 0xe02b  /* GDT index 262 */
-#define FLAT_RING3_SS64 0xe02b  /* GDT index 262 */
+#define FLAT_RING3_SS32 0xe02b  /* GDT index 261 */
+#define FLAT_RING3_SS64 0xe02b  /* GDT index 261 */
=20
 #define FLAT_KERNEL_DS64 FLAT_RING3_DS64
 #define FLAT_KERNEL_DS32 FLAT_RING3_DS32
@@ -120,9 +103,8 @@
 /* Guest exited in SYSCALL context? Return to guest with SYSRET? */
 #define _VGCF_in_syscall 8
 #define VGCF_in_syscall  (1<<_VGCF_in_syscall)
-#define VGCF_IN_SYSCALL  VGCF_in_syscall
=20
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
=20
 struct iret_context {
     /* Top of stack (%rsp at point of hypercall)=2E */
@@ -130,7 +112,35 @@ struct iret_context {
     /* Bottom of iret stack frame=2E */
 };
=20
-#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
+#if defined(__XEN__) || defined(__XEN_TOOLS__)
+/* Anonymous unions include all permissible names (e=2Eg=2E, al/ah/ax/eax=
/rax)=2E */
+#define __DECL_REG_LOHI(which) union { \
+    uint64_t r ## which ## x; \
+    uint32_t e ## which ## x; \
+    uint16_t which ## x; \
+    struct { \
+        uint8_t which ## l; \
+        uint8_t which ## h; \
+    }; \
+}
+#define __DECL_REG_LO8(name) union { \
+    uint64_t r ## name; \
+    uint32_t e ## name; \
+    uint16_t name; \
+    uint8_t name ## l; \
+}
+#define __DECL_REG_LO16(name) union { \
+    uint64_t r ## name; \
+    uint32_t e ## name; \
+    uint16_t name; \
+}
+#define __DECL_REG_HI(num) union { \
+    uint64_t r ## num; \
+    uint32_t r ## num ## d; \
+    uint16_t r ## num ## w; \
+    uint8_t r ## num ## b; \
+}
+#elif defined(__GNUC__) && !defined(__STRICT_ANSI__)
 /* Anonymous union includes both 32- and 64-bit names (e=2Eg=2E, eax/rax)=
=2E */
 #define __DECL_REG(name) union { \
     uint64_t r ## name, e ## name; \
@@ -141,40 +151,60 @@ struct iret_context {
 #define __DECL_REG(name) uint64_t r ## name
 #endif
=20
+#ifndef __DECL_REG_LOHI
+#define __DECL_REG_LOHI(name) __DECL_REG(name ## x)
+#define __DECL_REG_LO8        __DECL_REG
+#define __DECL_REG_LO16       __DECL_REG
+#define __DECL_REG_HI(num)    uint64_t r ## num
+#endif
+
+#ifdef __XEN__
+#define cpu_user_regs guest_user_regs
+#endif
+
 struct cpu_user_regs {
-    uint64_t r15;
-    uint64_t r14;
-    uint64_t r13;
-    uint64_t r12;
-    __DECL_REG(bp);
-    __DECL_REG(bx);
-    uint64_t r11;
-    uint64_t r10;
-    uint64_t r9;
-    uint64_t r8;
-    __DECL_REG(ax);
-    __DECL_REG(cx);
-    __DECL_REG(dx);
-    __DECL_REG(si);
-    __DECL_REG(di);
+    __DECL_REG_HI(15);
+    __DECL_REG_HI(14);
+    __DECL_REG_HI(13);
+    __DECL_REG_HI(12);
+    __DECL_REG_LO8(bp);
+    __DECL_REG_LOHI(b);
+    __DECL_REG_HI(11);
+    __DECL_REG_HI(10);
+    __DECL_REG_HI(9);
+    __DECL_REG_HI(8);
+    __DECL_REG_LOHI(a);
+    __DECL_REG_LOHI(c);
+    __DECL_REG_LOHI(d);
+    __DECL_REG_LO8(si);
+    __DECL_REG_LO8(di);
     uint32_t error_code;    /* private */
     uint32_t entry_vector;  /* private */
-    __DECL_REG(ip);
+    __DECL_REG_LO16(ip);
     uint16_t cs, _pad0[1];
     uint8_t  saved_upcall_mask;
     uint8_t  _pad1[3];
-    __DECL_REG(flags);      /* rflags=2EIF =3D=3D !saved_upcall_mask */
-    __DECL_REG(sp);
+    __DECL_REG_LO16(flags); /* rflags=2EIF =3D=3D !saved_upcall_mask */
+    __DECL_REG_LO8(sp);
     uint16_t ss, _pad2[3];
     uint16_t es, _pad3[3];
     uint16_t ds, _pad4[3];
-    uint16_t fs, _pad5[3]; /* Non-zero =3D> takes precedence over fs_base=
=2E     */
-    uint16_t gs, _pad6[3]; /* Non-zero =3D> takes precedence over gs_base=
_usr=2E */
+    uint16_t fs, _pad5[3];
+    uint16_t gs, _pad6[3];
 };
+
+#ifdef __XEN__
+#undef cpu_user_regs
+#else
 typedef struct cpu_user_regs cpu_user_regs_t;
 DEFINE_XEN_GUEST_HANDLE(cpu_user_regs_t);
+#endif
=20
 #undef __DECL_REG
+#undef __DECL_REG_LOHI
+#undef __DECL_REG_LO8
+#undef __DECL_REG_LO16
+#undef __DECL_REG_HI
=20
 #define xen_pfn_to_cr3(pfn) ((ULONG_PTR)(pfn) << 12)
 #define xen_cr3_to_pfn(cr3) ((ULONG_PTR)(cr3) >> 12)
@@ -187,7 +217,7 @@ typedef struct arch_vcpu_info arch_vcpu_info_t;
=20
 typedef ULONG_PTR xen_callback_t;
=20
-#endif /* !__ASSEMBLY__ */
+#endif /* !__ASSEMBLER__ */
=20
 #endif /* __XEN_PUBLIC_ARCH_X86_XEN_X86_64_H__ */
=20
diff --git a/include/xen/public/arch-x86/xen=2Eh b/include/xen/public/arch=
-x86/xen=2Eh
index 05db77f=2E=2E1ec1a20 100644
--- a/include/xen/public/arch-x86/xen=2Eh
+++ b/include/xen/public/arch-x86/xen=2Eh
@@ -1,31 +1,12 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * arch-x86/xen=2Eh
  *
  * Guest OS interface to x86 Xen=2E
  *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
  * Copyright (c) 2004-2006, K A Fraser
  */
=20
-#include "=2E=2E/xen=2Eh"
-
 #ifndef __XEN_PUBLIC_ARCH_X86_XEN_H__
 #define __XEN_PUBLIC_ARCH_X86_XEN_H__
=20
@@ -53,18 +34,29 @@
 #define __XEN_GUEST_HANDLE(name)        __guest_handle_ ## name
 #define XEN_GUEST_HANDLE(name)          __XEN_GUEST_HANDLE(name)
 #define XEN_GUEST_HANDLE_PARAM(name)    XEN_GUEST_HANDLE(name)
-#define set_xen_guest_handle_raw(hnd, val)  do { (hnd)=2Ep =3D val; } whi=
le (0)
+#define set_xen_guest_handle_raw(hnd, val)  do { (hnd)=2Ep =3D (val); } w=
hile (0)
 #define set_xen_guest_handle(hnd, val) set_xen_guest_handle_raw(hnd, val)
=20
 #if defined(__i386__)
+# ifdef __XEN__
+__DeFiNe__ __DECL_REG_LO8(which) uint32_t e ## which ## x
+__DeFiNe__ __DECL_REG_LO16(name) union { uint32_t e ## name; }
+# endif
 #include "xen-x86_32=2Eh"
+# ifdef __XEN__
+__UnDeF__ __DECL_REG_LO8
+__UnDeF__ __DECL_REG_LO16
+__DeFiNe__ __DECL_REG_LO8(which) e ## which ## x
+__DeFiNe__ __DECL_REG_LO16(name) e ## name
+# endif
 #elif defined(__x86_64__)
 #include "xen-x86_64=2Eh"
 #endif
=20
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
 typedef ULONG_PTR xen_pfn_t;
 #define PRI_xen_pfn "lx"
+#define PRIu_xen_pfn "lu"
 #endif
=20
 #define XEN_HAVE_PV_GUEST_ENTRY 1
@@ -105,7 +97,7 @@ typedef ULONG_PTR xen_pfn_t;
 /* Maximum number of virtual CPUs in legacy multi-processor guests=2E */
 #define XEN_LEGACY_MAX_VCPUS 32
=20
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
=20
 typedef ULONG_PTR xen_ulong_t;
 #define PRI_xen_ulong "lx"
@@ -132,6 +124,12 @@ typedef ULONG_PTR xen_ulong_t;
  *  Level =3D=3D 1: Kernel may enter
  *  Level =3D=3D 2: Kernel may enter
  *  Level =3D=3D 3: Everyone may enter
+ *
+ * Note: For compatibility with kernels not setting up exception handlers
+ *       early enough, Xen will avoid trying to inject #GP (and hence cra=
sh
+ *       the domain) when an RDMSR would require this, but no handler was
+ *       set yet=2E The precise conditions are implementation specific, a=
nd
+ *       new code may not rely on such behavior anyway=2E
  */
 #define TI_GET_DPL(_ti)      ((_ti)->flags & 3)
 #define TI_GET_IF(_ti)       ((_ti)->flags & 4)
@@ -152,20 +150,16 @@ typedef uint64_t tsc_timestamp_t; /* RDTSC timestamp=
 */
  * The following is all CPU context=2E Note that the fpu_ctxt block is fi=
lled
  * in by FXSAVE if the CPU has feature FXSR; otherwise FSAVE is used=2E
  *
- * Also note that when calling DOMCTL_setvcpucontext and VCPU_initialise
- * for HVM and PVH guests, not all information in this structure is updat=
ed:
- *
- * - For HVM guests, the structures read include: fpu_ctxt (if
- * VGCT_I387_VALID is set), flags, user_regs, debugreg[*]
+ * Also note that when calling DOMCTL_setvcpucontext for HVM guests, not =
all
+ * information in this structure is updated, the fields read include: fpu=
_ctxt
+ * (if VGCT_I387_VALID is set), flags, user_regs and debugreg[*]=2E
  *
- * - PVH guests are the same as HVM guests, but additionally use ctrlreg[=
3] to
- * set cr3=2E All other fields not used should be set to 0=2E
+ * Note: VCPUOP_initialise for HVM guests is non-symetric with
+ * DOMCTL_setvcpucontext, and uses struct vcpu_hvm_context from hvm/hvm_v=
cpu=2Eh
  */
 struct vcpu_guest_context {
     /* FPU registers come first so they can be aligned for FXSAVE/FXRSTOR=
=2E */
     struct { char x[512]; } fpu_ctxt;       /* User-level FPU registers  =
   */
-#define VGCF_I387_VALID                (1<<0)
-#define VGCF_IN_KERNEL                 (1<<2)
 #define _VGCF_i387_valid               0
 #define VGCF_i387_valid                (1<<_VGCF_i387_valid)
 #define _VGCF_in_kernel                2
@@ -177,7 +171,18 @@ struct vcpu_guest_context {
 #define _VGCF_online                   5
 #define VGCF_online                    (1<<_VGCF_online)
     ULONG_PTR flags;                    /* VGCF_* flags                 *=
/
+
+    /*
+     * Outside of Xen, regs type stays named cpu_user_regs for backwards
+     * compatibility=2E  Inside Xen, the type called cpu_user_regs is dif=
ferent,
+     * and the public API type is renamed to guest_user_regs=2E
+     */
+#ifdef __XEN__
+    struct guest_user_regs user_regs;       /* User-level CPU registers  =
   */
+#else
     struct cpu_user_regs user_regs;         /* User-level CPU registers  =
   */
+#endif
+
     struct trap_info trap_ctxt[256];        /* Virtual IDT               =
   */
     ULONG_PTR ldt_base, ldt_ents;       /* LDT (linear address, # ents) *=
/
     ULONG_PTR gdt_frames[16], gdt_ents; /* GDT (machine frames, # ents) *=
/
@@ -283,17 +288,52 @@ struct xen_arch_domainconfig {
 #define XEN_X86_EMU_IOMMU           (1U<<_XEN_X86_EMU_IOMMU)
 #define _XEN_X86_EMU_PIT            8
 #define XEN_X86_EMU_PIT             (1U<<_XEN_X86_EMU_PIT)
+#define _XEN_X86_EMU_USE_PIRQ       9
+#define XEN_X86_EMU_USE_PIRQ        (1U<<_XEN_X86_EMU_USE_PIRQ)
+#define _XEN_X86_EMU_VPCI           10
+#define XEN_X86_EMU_VPCI            (1U<<_XEN_X86_EMU_VPCI)
=20
 #define XEN_X86_EMU_ALL             (XEN_X86_EMU_LAPIC | XEN_X86_EMU_HPET=
 |  \
                                      XEN_X86_EMU_PM | XEN_X86_EMU_RTC |  =
    \
                                      XEN_X86_EMU_IOAPIC | XEN_X86_EMU_PIC=
 |  \
                                      XEN_X86_EMU_VGA | XEN_X86_EMU_IOMMU =
|   \
-                                     XEN_X86_EMU_PIT)
+                                     XEN_X86_EMU_PIT | XEN_X86_EMU_USE_PI=
RQ |\
+                                     XEN_X86_EMU_VPCI)
     uint32_t emulation_flags;
+
+/*
+ * Select whether to use a relaxed behavior for accesses to MSRs not expl=
icitly
+ * handled by Xen instead of injecting a #GP to the guest=2E Note this op=
tion
+ * doesn't allow the guest to read or write to the underlying MSR=2E
+ */
+#define XEN_X86_MSR_RELAXED (1u << 0)
+    uint32_t misc_flags;
 };
+
+/* Max  XEN_X86_* constant=2E Used for ABI checking=2E */
+#define XEN_X86_MISC_FLAGS_MAX XEN_X86_MSR_RELAXED
+
 #endif
=20
-#endif /* !__ASSEMBLY__ */
+/*
+ * Representations of architectural CPUID and MSR information=2E  Used as=
 the
+ * serialised version of Xen's internal representation=2E
+ */
+typedef struct xen_cpuid_leaf {
+#define XEN_CPUID_NO_SUBLEAF 0xffffffffu
+    uint32_t leaf, subleaf;
+    uint32_t a, b, c, d;
+} xen_cpuid_leaf_t;
+DEFINE_XEN_GUEST_HANDLE(xen_cpuid_leaf_t);
+
+typedef struct xen_msr_entry {
+    uint32_t idx;
+    uint32_t flags; /* Reserved MBZ=2E */
+    uint64_t val;
+} xen_msr_entry_t;
+DEFINE_XEN_GUEST_HANDLE(xen_msr_entry_t);
+
+#endif /* !__ASSEMBLER__ */
=20
 /*
  * ` enum neg_errnoval
@@ -317,7 +357,7 @@ struct xen_arch_domainconfig {
  * Prefix forces emulation of some non-trapping instructions=2E
  * Currently only CPUID=2E
  */
-#ifdef __ASSEMBLY__
+#ifdef __ASSEMBLER__
 #define XEN_EMULATE_PREFIX =2Ebyte 0x0f,0x0b,0x78,0x65,0x6e ;
 #define XEN_CPUID          XEN_EMULATE_PREFIX cpuid
 #else
@@ -325,6 +365,13 @@ struct xen_arch_domainconfig {
 #define XEN_CPUID          XEN_EMULATE_PREFIX "cpuid"
 #endif
=20
+/*
+ * Debug console IO port, also called "port E9 hack"=2E Each character wr=
itten
+ * to this IO port will be printed on the hypervisor console, subject to =
log
+ * level restrictions=2E
+ */
+#define XEN_HVM_DEBUGCONS_IOPORT 0xe9
+
 #endif /* __XEN_PUBLIC_ARCH_X86_XEN_H__ */
=20
 /*
diff --git a/include/xen/public/errno=2Eh b/include/xen/public/errno=2Eh
index e440237=2E=2Edf6aa53 100644
--- a/include/xen/public/errno=2Eh
+++ b/include/xen/public/errno=2Eh
@@ -1,3 +1,5 @@
+/* SPDX-License-Identifier: MIT */
+
 /*
  * There are two expected ways of including this header=2E
  *
@@ -15,6 +17,7 @@
  * will unilaterally #undef XEN_ERRNO()=2E
  */
=20
+/* SAF-8-safe inclusion procedure left to caller */
 #ifndef XEN_ERRNO
=20
 /*
@@ -27,16 +30,16 @@
=20
 #define XEN_ERRNO_DEFAULT_INCLUDE
=20
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
=20
-#define XEN_ERRNO(name, value) XEN_##name =3D value,
+#define XEN_ERRNO(name, value) XEN_##name =3D (value),
 enum xen_errno {
=20
 #elif __XEN_INTERFACE_VERSION__ < 0x00040700
=20
 #define XEN_ERRNO(name, value) =2Eequ XEN_##name, value
=20
-#endif /* __ASSEMBLY__ */
+#endif /* __ASSEMBLER__ */
=20
 #endif /* __XEN_PUBLIC_ERRNO_H__ */
 #endif /* !XEN_ERRNO */
@@ -78,6 +81,7 @@ XEN_ERRNO(EBUSY,	16)	/* Device or resource busy */
 XEN_ERRNO(EEXIST,	17)	/* File exists */
 XEN_ERRNO(EXDEV,	18)	/* Cross-device link */
 XEN_ERRNO(ENODEV,	19)	/* No such device */
+XEN_ERRNO(ENOTDIR,	20)	/* Not a directory */
 XEN_ERRNO(EISDIR,	21)	/* Is a directory */
 XEN_ERRNO(EINVAL,	22)	/* Invalid argument */
 XEN_ERRNO(ENFILE,	23)	/* File table overflow */
@@ -91,8 +95,8 @@ XEN_ERRNO(EDEADLK,	35)	/* Resource deadlock would occur =
*/
 XEN_ERRNO(EDEADLOCK,	35)	/* Resource deadlock would occur=2E Aliases EDEA=
DLK */
 XEN_ERRNO(ENAMETOOLONG,	36)	/* File name too LONG_PTR */
 XEN_ERRNO(ENOLCK,	37)	/* No record locks available */
-XEN_ERRNO(ENOTEMPTY,	39)	/* Directory not empty */
 XEN_ERRNO(ENOSYS,	38)	/* Function not implemented */
+XEN_ERRNO(ENOTEMPTY,	39)	/* Directory not empty */
 XEN_ERRNO(ENODATA,	61)	/* No data available */
 XEN_ERRNO(ETIME,	62)	/* Timer expired */
 XEN_ERRNO(EBADMSG,	74)	/* Not a data message */
@@ -102,6 +106,7 @@ XEN_ERRNO(EILSEQ,	84)	/* Illegal byte sequence */
 XEN_ERRNO(ERESTART,	85)	/* Interrupted system call should be restarted */
 #endif
 XEN_ERRNO(ENOTSOCK,	88)	/* Socket operation on non-socket */
+XEN_ERRNO(EMSGSIZE,	90)	/* Message too large=2E */
 XEN_ERRNO(EOPNOTSUPP,	95)	/* Operation not supported on transport endpoin=
t */
 XEN_ERRNO(EADDRINUSE,	98)	/* Address already in use */
 XEN_ERRNO(EADDRNOTAVAIL, 99)	/* Cannot assign requested address */
@@ -109,6 +114,7 @@ XEN_ERRNO(ENOBUFS,	105)	/* No buffer space available *=
/
 XEN_ERRNO(EISCONN,	106)	/* Transport endpoint is already connected */
 XEN_ERRNO(ENOTCONN,	107)	/* Transport endpoint is not connected */
 XEN_ERRNO(ETIMEDOUT,	110)	/* Connection timed out */
+XEN_ERRNO(ECONNREFUSED,	111)	/* Connection refused */
=20
 #undef XEN_ERRNO
 #endif /* XEN_ERRNO */
@@ -117,7 +123,7 @@ XEN_ERRNO(ETIMEDOUT,	110)	/* Connection timed out */
 /* Clean up from a default include=2E  Close the enum (for C)=2E */
 #ifdef XEN_ERRNO_DEFAULT_INCLUDE
 #undef XEN_ERRNO_DEFAULT_INCLUDE
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
 };
 #endif
=20
diff --git a/include/xen/public/grant_table=2Eh b/include/xen/public/grant=
_table=2Eh
index b68ffdd=2E=2Ecdde816 100644
--- a/include/xen/public/grant_table=2Eh
+++ b/include/xen/public/grant_table=2Eh
@@ -1,27 +1,10 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * grant_table=2Eh
  *
  * Interface for granting foreign access to page frames, and receiving
  * page-ownership transfers=2E
  *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
  * Copyright (c) 2004, K A Fraser
  */
=20
@@ -121,8 +104,9 @@ typedef uint32_t grant_ref_t;
  */
=20
 /*
- * Version 1 of the grant table entry structure is maintained purely
- * for backwards compatibility=2E  New guests should use version 2=2E
+ * Version 1 of the grant table entry structure is maintained largely for
+ * backwards compatibility=2E  New guests are recommended to support usin=
g
+ * version 2 to overcome version 1 limitations, but to default to version=
 1=2E
  */
 #if __XEN_INTERFACE_VERSION__ < 0x0003020a
 #define grant_entry_v1 grant_entry
@@ -166,11 +150,13 @@ typedef struct grant_entry_v1 grant_entry_v1_t;
 #define GTF_type_mask       (3U<<0)
=20
 /*
- * Subflags for GTF_permit_access=2E
+ * Subflags for GTF_permit_access and GTF_transitive=2E
  *  GTF_readonly: Restrict @domid to read-only mappings and accesses=2E [=
GST]
  *  GTF_reading: Grant entry is currently mapped for reading by @domid=2E=
 [XEN]
  *  GTF_writing: Grant entry is currently mapped for writing by @domid=2E=
 [XEN]
- *  GTF_PAT, GTF_PWT, GTF_PCD: (x86) cache attribute flags for the grant =
[GST]
+ * Further subflags for GTF_permit_access only=2E
+ *  GTF_PAT, GTF_PWT, GTF_PCD: (x86) cache attribute flags to be used for
+ *                             mappings of the grant [GST]
  *  GTF_sub_page: Grant access to only a subrange of the page=2E  @domid
  *                will only be allowed to copy from the grant, and not
  *                map it=2E [GST]
@@ -411,12 +397,13 @@ typedef struct gnttab_dump_table gnttab_dump_table_t=
;
 DEFINE_XEN_GUEST_HANDLE(gnttab_dump_table_t);
=20
 /*
- * GNTTABOP_transfer_grant_ref: Transfer <frame> to a foreign domain=2E T=
he
- * foreign domain has previously registered its interest in the transfer =
via
- * <domid, ref>=2E
+ * GNTTABOP_transfer: Transfer <frame> to a foreign domain=2E The foreign=
 domain
+ * has previously registered its interest in the transfer via <domid, ref=
>=2E
  *
  * Note that, even if the transfer fails, the specified page no LONG_PTRe=
r belongs
  * to the calling domain *unless* the error is GNTST_bad_page=2E
+ *
+ * Note further that only PV guests can use this operation=2E
  */
 struct gnttab_transfer {
     /* IN parameters=2E */
@@ -514,10 +501,9 @@ DEFINE_XEN_GUEST_HANDLE(gnttab_unmap_and_replace_t);
 #if __XEN_INTERFACE_VERSION__ >=3D 0x0003020a
 /*
  * GNTTABOP_set_version: Request a particular version of the grant
- * table shared table structure=2E  This operation can only be performed
- * once in any given domain=2E  It must be performed before any grants
- * are activated; otherwise, the domain will be stuck with version 1=2E
- * The only defined versions are 1 and 2=2E
+ * table shared table structure=2E  This operation may be used to toggle
+ * between different versions, but must be performed while no grants
+ * are active=2E  The only defined versions are 1 and 2=2E
  */
 struct gnttab_set_version {
     /* IN/OUT parameters */
@@ -588,9 +574,9 @@ struct gnttab_cache_flush {
     } a;
     uint16_t offset; /* offset from start of grant */
     uint16_t length; /* size within the grant */
-#define GNTTAB_CACHE_CLEAN          (1<<0)
-#define GNTTAB_CACHE_INVAL          (1<<1)
-#define GNTTAB_CACHE_SOURCE_GREF    (1<<31)
+#define GNTTAB_CACHE_CLEAN          (1u<<0)
+#define GNTTAB_CACHE_INVAL          (1u<<1)
+#define GNTTAB_CACHE_SOURCE_GREF    (1u<<31)
     uint32_t op;
 };
 typedef struct gnttab_cache_flush gnttab_cache_flush_t;
@@ -626,9 +612,6 @@ DEFINE_XEN_GUEST_HANDLE(gnttab_cache_flush_t);
 #define _GNTMAP_contains_pte    (4)
 #define GNTMAP_contains_pte     (1<<_GNTMAP_contains_pte)
=20
-#define _GNTMAP_can_fail        (5)
-#define GNTMAP_can_fail         (1<<_GNTMAP_can_fail)
-
 /*
  * Bits to be placed in guest kernel available PTE bits (architecture
  * dependent; only supported when XENFEAT_gnttab_map_avail_bits is set)=
=2E
@@ -653,6 +636,7 @@ DEFINE_XEN_GUEST_HANDLE(gnttab_cache_flush_t);
 #define GNTST_bad_copy_arg    (-10) /* copy arguments cross page boundary=
=2E   */
 #define GNTST_address_too_big (-11) /* transfer page address too large=2E=
      */
 #define GNTST_eagain          (-12) /* Operation not done; try again=2E  =
      */
+#define GNTST_no_space        (-13) /* Out of space (handles etc)=2E     =
      */
 /* ` } */
=20
 #define GNTTABOP_error_msgs {                   \
@@ -668,7 +652,8 @@ DEFINE_XEN_GUEST_HANDLE(gnttab_cache_flush_t);
     "bad page",                                 \
     "copy arguments cross page boundary",       \
     "page address size too large",              \
-    "operation not done; try again"             \
+    "operation not done; try again",            \
+    "out of space",                             \
 }
=20
 #endif /* __XEN_PUBLIC_GRANT_TABLE_H__ */
diff --git a/include/xen/public/io/netif=2Eh b/include/xen/public/io/netif=
=2Eh
index e47efb8=2E=2Ee3b30f2 100644
--- a/include/xen/public/io/netif=2Eh
+++ b/include/xen/public/io/netif=2Eh
@@ -1,26 +1,9 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * netif=2Eh
  *
  * Unified network-device I/O interface for Xen guest OSes=2E
  *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
  * Copyright (c) 2003-2004, Keir Fraser
  */
=20
@@ -160,6 +143,12 @@
  * be applied if it is set=2E
  */
=20
+/*
+ * The setting of "trusted" node to "0" in the frontend path signals that=
 the
+ * frontend should not trust the backend, and should deploy whatever meas=
ures
+ * available to protect from a malicious backend on the other end=2E
+ */
+
 /*
  * Control ring
  * =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
@@ -171,7 +160,7 @@
  * The ability of the backend to use a control ring is advertised by
  * setting:
  *
- * /local/domain/X/backend/<domid>/<vif>/feature-ctrl-ring =3D "1"
+ * /local/domain/X/backend/vif/<domid>/<vif>/feature-ctrl-ring =3D "1"
  *
  * The frontend provides a control ring to the backend by setting:
  *
@@ -190,6 +179,32 @@
  * order as requests=2E
  */
=20
+/*
+ * Link state
+ * =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
+ *
+ * The backend can advertise its current link (carrier) state to the
+ * frontend using the /local/domain/X/backend/vif/<domid>/<vif>/carrier
+ * node=2E If this node is not present, then the frontend should assume t=
hat
+ * the link is up (for compatibility with backends that do not implement
+ * this feature)=2E If this node is present, then a value of "0" should b=
e
+ * interpreted by the frontend as the link being down (no carrier) and a
+ * value of "1" should be interpreted as the link being up (carrier
+ * present)=2E
+ */
+
+/*
+ * MTU
+ * =3D=3D=3D
+ *
+ * The toolstack may set a value of MTU for the frontend by setting the
+ * /local/domain/<domid>/device/vif/<vif>/mtu node with the MTU value in
+ * octets=2E If this node is absent the frontend should assume an MTU val=
ue
+ * of 1500 octets=2E A frontend is also at liberty to ignore this value s=
o
+ * it is only suitable for informing the frontend that a packet payload
+ * >1500 octets is permitted=2E
+ */
+
 /*
  * Hash types
  * =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
@@ -353,6 +368,9 @@ struct xen_netif_ctrl_request {
 #define XEN_NETIF_CTRL_TYPE_SET_HASH_MAPPING_SIZE 5
 #define XEN_NETIF_CTRL_TYPE_SET_HASH_MAPPING      6
 #define XEN_NETIF_CTRL_TYPE_SET_HASH_ALGORITHM    7
+#define XEN_NETIF_CTRL_TYPE_GET_GREF_MAPPING_SIZE 8
+#define XEN_NETIF_CTRL_TYPE_ADD_GREF_MAPPING      9
+#define XEN_NETIF_CTRL_TYPE_DEL_GREF_MAPPING     10
=20
     uint32_t data[3];
 };
@@ -390,6 +408,44 @@ struct xen_netif_ctrl_response {
     uint32_t data;
 };
=20
+/*
+ * Static Grants (struct xen_netif_gref)
+ * =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
+ *
+ * A frontend may provide a fixed set of grant references to be mapped on
+ * the backend=2E The message of type XEN_NETIF_CTRL_TYPE_ADD_GREF_MAPPIN=
G
+ * prior its usage in the command ring allows for creation of these mappi=
ngs=2E
+ * The backend will maintain a fixed amount of these mappings=2E
+ *
+ * XEN_NETIF_CTRL_TYPE_GET_GREF_MAPPING_SIZE lets a frontend query how ma=
ny
+ * of these mappings can be kept=2E
+ *
+ * Each entry in the XEN_NETIF_CTRL_TYPE_{ADD,DEL}_GREF_MAPPING input tab=
le has
+ * the following format:
+ *
+ *    0     1     2     3     4     5     6     7  octet
+ * +-----+-----+-----+-----+-----+-----+-----+-----+
+ * | grant ref             |  flags    |  status   |
+ * +-----+-----+-----+-----+-----+-----+-----+-----+
+ *
+ * grant ref: grant reference (IN)
+ * flags: flags describing the control operation (IN)
+ * status: XEN_NETIF_CTRL_STATUS_* (OUT)
+ *
+ * 'status' is an output parameter which does not require to be set to ze=
ro
+ * prior to its usage in the corresponding control messages=2E
+ */
+
+struct xen_netif_gref {
+       grant_ref_t ref;
+       uint16_t flags;
+
+#define _XEN_NETIF_CTRLF_GREF_readonly    0
+#define XEN_NETIF_CTRLF_GREF_readonly    (1U<<_XEN_NETIF_CTRLF_GREF_reado=
nly)
+
+       uint16_t status;
+};
+
 /*
  * Control messages
  * =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
@@ -609,6 +665,88 @@ struct xen_netif_ctrl_response {
  *       invalidate any table data outside that range=2E
  *       The grant reference may be read-only and must remain valid until
  *       the response has been processed=2E
+ *
+ * XEN_NETIF_CTRL_TYPE_GET_GREF_MAPPING_SIZE
+ * -----------------------------------------
+ *
+ * This is sent by the frontend to fetch the number of grefs that can be =
kept
+ * mapped in the backend=2E
+ *
+ * Request:
+ *
+ *  type    =3D XEN_NETIF_CTRL_TYPE_GET_GREF_MAPPING_SIZE
+ *  data[0] =3D queue index (assumed 0 for single queue)
+ *  data[1] =3D 0
+ *  data[2] =3D 0
+ *
+ * Response:
+ *
+ *  status =3D XEN_NETIF_CTRL_STATUS_NOT_SUPPORTED     - Operation not
+ *                                                     supported
+ *           XEN_NETIF_CTRL_STATUS_INVALID_PARAMETER - The queue index is
+ *                                                     out of range
+ *           XEN_NETIF_CTRL_STATUS_SUCCESS           - Operation successf=
ul
+ *  data   =3D maximum number of entries allowed in the gref mapping tabl=
e
+ *           (if operation was successful) or zero if it is not supported=
=2E
+ *
+ * XEN_NETIF_CTRL_TYPE_ADD_GREF_MAPPING
+ * ------------------------------------
+ *
+ * This is sent by the frontend for backend to map a list of grant
+ * references=2E
+ *
+ * Request:
+ *
+ *  type    =3D XEN_NETIF_CTRL_TYPE_ADD_GREF_MAPPING
+ *  data[0] =3D queue index
+ *  data[1] =3D grant reference of page containing the mapping list
+ *            (r/w and assumed to start at beginning of page)
+ *  data[2] =3D size of list in entries
+ *
+ * Response:
+ *
+ *  status =3D XEN_NETIF_CTRL_STATUS_NOT_SUPPORTED     - Operation not
+ *                                                     supported
+ *           XEN_NETIF_CTRL_STATUS_INVALID_PARAMETER - Operation failed
+ *           XEN_NETIF_CTRL_STATUS_SUCCESS           - Operation successf=
ul
+ *
+ * NOTE: Each entry in the input table has the format outlined
+ *       in struct xen_netif_gref=2E
+ *       Contrary to XEN_NETIF_CTRL_TYPE_DEL_GREF_MAPPING, the struct
+ *       xen_netif_gref 'status' field is not used and therefore the resp=
onse
+ *       'status' determines the success of this operation=2E In case of
+ *       failure none of grants mappings get added in the backend=2E
+ *
+ * XEN_NETIF_CTRL_TYPE_DEL_GREF_MAPPING
+ * ------------------------------------
+ *
+ * This is sent by the frontend for backend to unmap a list of grant
+ * references=2E
+ *
+ * Request:
+ *
+ *  type    =3D XEN_NETIF_CTRL_TYPE_DEL_GREF_MAPPING
+ *  data[0] =3D queue index
+ *  data[1] =3D grant reference of page containing the mapping list
+ *            (r/w and assumed to start at beginning of page)
+ *  data[2] =3D size of list in entries
+ *
+ * Response:
+ *
+ *  status =3D XEN_NETIF_CTRL_STATUS_NOT_SUPPORTED     - Operation not
+ *                                                     supported
+ *           XEN_NETIF_CTRL_STATUS_INVALID_PARAMETER - Operation failed
+ *           XEN_NETIF_CTRL_STATUS_SUCCESS           - Operation successf=
ul
+ *  data   =3D number of entries that were unmapped
+ *
+ * NOTE: Each entry in the input table has the format outlined in struct
+ *       xen_netif_gref=2E
+ *       The struct xen_netif_gref 'status' field determines if the entry
+ *       was successfully removed=2E
+ *       The entries used are only the ones representing grant references=
 that
+ *       were previously the subject of a XEN_NETIF_CTRL_TYPE_ADD_GREF_MA=
PPING
+ *       operation=2E Any other entries will have their status set to
+ *       XEN_NETIF_CTRL_STATUS_INVALID_PARAMETER upon completion=2E
  */
=20
 DEFINE_RING_TYPES(xen_netif_ctrl,
diff --git a/include/xen/public/io/ring=2Eh b/include/xen/public/io/ring=
=2Eh
index 1d29cc0=2E=2Eb4cea93 100644
--- a/include/xen/public/io/ring=2Eh
+++ b/include/xen/public/io/ring=2Eh
@@ -1,34 +1,40 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * ring=2Eh
  *
  * Shared producer-consumer ring macros=2E
  *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
  * Tim Deegan and Andrew Warfield November 2004=2E
  */
=20
 #ifndef __XEN_PUBLIC_IO_RING_H__
 #define __XEN_PUBLIC_IO_RING_H__
=20
+/*
+ * When #include'ing this header, you need to provide the following
+ * declaration upfront:
+ * - standard integers types (uint8_t, uint16_t, etc)
+ * They are provided by stdint=2Eh of the standard headers=2E
+ *
+ * In addition, if you intend to use the FLEX macros, you also need to
+ * provide the following, before invoking the FLEX macros:
+ * - size_t
+ * - memcpy
+ * - grant_ref_t
+ * These declarations are provided by string=2Eh of the standard headers,
+ * and grant_table=2Eh from the Xen public headers=2E
+ */
+
+#include "=2E=2E/xen=2Eh"
 #include "=2E=2E/xen-compat=2Eh"
=20
+/* Some PV I/O interfaces need a compatibility variant=2E */
+#if __XEN_INTERFACE_VERSION__ < 0x00041300
+#define XENPV_FLEX_ARRAY_DIM  1 /* variable size */
+#else
+#define XENPV_FLEX_ARRAY_DIM  XEN_FLEX_ARRAY_DIM
+#endif
+
 #if __XEN_INTERFACE_VERSION__ < 0x00030208
 #define xen_mb()  mb()
 #define xen_rmb() rmb()
@@ -38,11 +44,11 @@
 typedef unsigned int RING_IDX;
=20
 /* Round a 32-bit unsigned constant down to the nearest power of two=2E *=
/
-#define __RD2(_x)  (((_x) & 0x00000002) ? 0x2                  : ((_x) & =
0x1))
-#define __RD4(_x)  (((_x) & 0x0000000c) ? __RD2((_x)>>2)<<2    : __RD2(_x=
))
-#define __RD8(_x)  (((_x) & 0x000000f0) ? __RD4((_x)>>4)<<4    : __RD4(_x=
))
-#define __RD16(_x) (((_x) & 0x0000ff00) ? __RD8((_x)>>8)<<8    : __RD8(_x=
))
-#define __RD32(_x) (((_x) & 0xffff0000) ? __RD16((_x)>>16)<<16 : __RD16(_=
x))
+#define __RD2(x)  (((x) & 0x00000002U) ? 0x2                     : ((x) &=
 0x1))
+#define __RD4(x)  (((x) & 0x0000000cU) ? __RD2((x) >> 2) << 2    : __RD2(=
x))
+#define __RD8(x)  (((x) & 0x000000f0U) ? __RD4((x) >> 4) << 4    : __RD4(=
x))
+#define __RD16(x) (((x) & 0x0000ff00U) ? __RD8((x) >> 8) << 8    : __RD8(=
x))
+#define __RD32(x) (((x) & 0xffff0000U) ? __RD16((x) >> 16) << 16 : __RD16=
(x))
=20
 /*
  * Calculate size of a shared ring, given the total available space for t=
he
@@ -80,9 +86,8 @@ typedef unsigned int RING_IDX;
  * of the shared memory area (PAGE_SIZE, for instance)=2E To initialise
  * the front half:
  *
- *     mytag_front_ring_t front_ring;
- *     SHARED_RING_INIT((mytag_sring_t *)shared_page);
- *     FRONT_RING_INIT(&front_ring, (mytag_sring_t *)shared_page, PAGE_SI=
ZE);
+ *     mytag_front_ring_t ring;
+ *     XEN_FRONT_RING_INIT(&ring, (mytag_sring_t *)shared_page, PAGE_SIZE=
);
  *
  * Initializing the back follows similarly (note that only the front
  * initializes the shared ring):
@@ -113,7 +118,7 @@ struct __name##_sring {                               =
                  \
         uint8_t pvt_pad[4];                                             \
     } pvt;                                                              \
     uint8_t __pad[44];                                                  \
-    union __name##_sring_entry ring[1]; /* variable-length */           \
+    union __name##_sring_entry ring[XENPV_FLEX_ARRAY_DIM];              \
 };                                                                      \
                                                                         \
 /* "Front" end's private variables */                                   \
@@ -160,20 +165,29 @@ typedef struct __name##_back_ring __name##_back_ring=
_t
     (void)memset((_s)->__pad, 0, sizeof((_s)->__pad));                  \
 } while(0)
=20
-#define FRONT_RING_INIT(_r, _s, __size) do {                            \
-    (_r)->req_prod_pvt =3D 0;                                            =
 \
-    (_r)->rsp_cons =3D 0;                                                =
 \
+#define FRONT_RING_ATTACH(_r, _s, _i, __size) do {                      \
+    (_r)->req_prod_pvt =3D (_i);                                         =
 \
+    (_r)->rsp_cons =3D (_i);                                             =
 \
     (_r)->nr_ents =3D __RING_SIZE(_s, __size);                           =
 \
     (_r)->sring =3D (_s);                                                =
 \
 } while (0)
=20
-#define BACK_RING_INIT(_r, _s, __size) do {                             \
-    (_r)->rsp_prod_pvt =3D 0;                                            =
 \
-    (_r)->req_cons =3D 0;                                                =
 \
+#define FRONT_RING_INIT(_r, _s, __size) FRONT_RING_ATTACH(_r, _s, 0, __si=
ze)
+
+#define XEN_FRONT_RING_INIT(r, s, size) do {                            \
+    SHARED_RING_INIT(s);                                                \
+    FRONT_RING_INIT(r, s, size);                                        \
+} while (0)
+
+#define BACK_RING_ATTACH(_r, _s, _i, __size) do {                       \
+    (_r)->rsp_prod_pvt =3D (_i);                                         =
 \
+    (_r)->req_cons =3D (_i);                                             =
 \
     (_r)->nr_ents =3D __RING_SIZE(_s, __size);                           =
 \
     (_r)->sring =3D (_s);                                                =
 \
 } while (0)
=20
+#define BACK_RING_INIT(_r, _s, __size) BACK_RING_ATTACH(_r, _s, 0, __size=
)
+
 /* How big is this ring? */
 #define RING_SIZE(_r)                                                   \
     ((_r)->nr_ents)
@@ -189,11 +203,11 @@ typedef struct __name##_back_ring __name##_back_ring=
_t
     (RING_FREE_REQUESTS(_r) =3D=3D 0)
=20
 /* Test if there are outstanding messages to be processed on a ring=2E */
-#define RING_HAS_UNCONSUMED_RESPONSES(_r)                               \
+#define XEN_RING_NR_UNCONSUMED_RESPONSES(_r)                            \
     ((_r)->sring->rsp_prod - (_r)->rsp_cons)
=20
 #ifdef __GNUC__
-#define RING_HAS_UNCONSUMED_REQUESTS(_r) ({                             \
+#define XEN_RING_NR_UNCONSUMED_REQUESTS(_r) ({                          \
     unsigned int req =3D (_r)->sring->req_prod - (_r)->req_cons;         =
 \
     unsigned int rsp =3D RING_SIZE(_r) -                                 =
 \
         ((_r)->req_cons - (_r)->rsp_prod_pvt);                          \
@@ -201,33 +215,50 @@ typedef struct __name##_back_ring __name##_back_ring=
_t
 })
 #else
 /* Same as above, but without the nice GCC ({ =2E=2E=2E }) syntax=2E */
-#define RING_HAS_UNCONSUMED_REQUESTS(_r)                                \
+#define XEN_RING_NR_UNCONSUMED_REQUESTS(_r)                             \
     ((((_r)->sring->req_prod - (_r)->req_cons) <                        \
       (RING_SIZE(_r) - ((_r)->req_cons - (_r)->rsp_prod_pvt))) ?        \
      ((_r)->sring->req_prod - (_r)->req_cons) :                         \
      (RING_SIZE(_r) - ((_r)->req_cons - (_r)->rsp_prod_pvt)))
 #endif
=20
+#ifdef XEN_RING_HAS_UNCONSUMED_IS_BOOL
+/*
+ * These variants should only be used in case no caller is abusing them f=
or
+ * obtaining the number of unconsumed responses/requests=2E
+ */
+#define RING_HAS_UNCONSUMED_RESPONSES(_r) \
+    (!!XEN_RING_NR_UNCONSUMED_RESPONSES(_r))
+#define RING_HAS_UNCONSUMED_REQUESTS(_r)  \
+    (!!XEN_RING_NR_UNCONSUMED_REQUESTS(_r))
+#else
+#define RING_HAS_UNCONSUMED_RESPONSES(_r) XEN_RING_NR_UNCONSUMED_RESPONSE=
S(_r)
+#define RING_HAS_UNCONSUMED_REQUESTS(_r)  XEN_RING_NR_UNCONSUMED_REQUESTS=
(_r)
+#endif
+
 /* Direct access to individual ring elements, by index=2E */
 #define RING_GET_REQUEST(_r, _idx)                                      \
     (&((_r)->sring->ring[((_idx) & (RING_SIZE(_r) - 1))]=2Ereq))
=20
+#define RING_GET_RESPONSE(_r, _idx)                                     \
+    (&((_r)->sring->ring[((_idx) & (RING_SIZE(_r) - 1))]=2Ersp))
+
 /*
- * Get a local copy of a request=2E
+ * Get a local copy of a request/response=2E
  *
- * Use this in preference to RING_GET_REQUEST() so all processing is
+ * Use this in preference to RING_GET_{REQUEST,RESPONSE}() so all process=
ing is
  * done on a local copy that cannot be modified by the other end=2E
  *
  * Note that https://gcc=2Egnu=2Eorg/bugzilla/show_bug=2Ecgi?id=3D58145 m=
ay cause this
- * to be ineffective where _req is a struct which consists of only bitfie=
lds=2E
+ * to be ineffective where dest is a struct which consists of only bitfie=
lds=2E
  */
-#define RING_COPY_REQUEST(_r, _idx, _req) do {				\
-	/* Use volatile to force the copy into _req=2E */			\
-	*(_req) =3D *(volatile typeof(_req))RING_GET_REQUEST(_r, _idx);	\
+#define RING_COPY_(type, r, idx, dest) do {				\
+	/* Use volatile to force the copy into dest=2E */			\
+	*(dest) =3D *(volatile __typeof__(dest))RING_GET_##type(r, idx);	\
 } while (0)
=20
-#define RING_GET_RESPONSE(_r, _idx)                                     \
-    (&((_r)->sring->ring[((_idx) & (RING_SIZE(_r) - 1))]=2Ersp))
+#define RING_COPY_REQUEST(r, idx, req)  RING_COPY_(REQUEST, r, idx, req)
+#define RING_COPY_RESPONSE(r, idx, rsp) RING_COPY_(RESPONSE, r, idx, rsp)
=20
 /* Loop termination condition: Would the specified index overflow the rin=
g? */
 #define RING_REQUEST_CONS_OVERFLOW(_r, _cons)                           \
@@ -237,6 +268,10 @@ typedef struct __name##_back_ring __name##_back_ring_=
t
 #define RING_REQUEST_PROD_OVERFLOW(_r, _prod)                           \
     (((_prod) - (_r)->rsp_prod_pvt) > RING_SIZE(_r))
=20
+/* Ill-behaved backend determination: Can there be this many responses? *=
/
+#define RING_RESPONSE_PROD_OVERFLOW(_r, _prod)                          \
+    (((_prod) - (_r)->rsp_cons) > RING_SIZE(_r))
+
 #define RING_PUSH_REQUESTS(_r) do {                                     \
     xen_wmb(); /* back sees requests /before/ updated producer index */ \
     (_r)->sring->req_prod =3D (_r)->req_prod_pvt;                        =
 \
@@ -313,6 +348,149 @@ typedef struct __name##_back_ring __name##_back_ring=
_t
     (_work_to_do) =3D RING_HAS_UNCONSUMED_RESPONSES(_r);                 =
 \
 } while (0)
=20
+
+/*
+ * DEFINE_XEN_FLEX_RING_AND_INTF defines two monodirectional rings and
+ * functions to check if there is data on the ring, and to read and
+ * write to them=2E
+ *
+ * DEFINE_XEN_FLEX_RING is similar to DEFINE_XEN_FLEX_RING_AND_INTF, but
+ * does not define the indexes page=2E As different protocols can have
+ * extensions to the basic format, this macro allow them to define their
+ * own struct=2E
+ *
+ * XEN_FLEX_RING_SIZE
+ *   Convenience macro to calculate the size of one of the two rings
+ *   from the overall order=2E
+ *
+ * $NAME_mask
+ *   Function to apply the size mask to an index, to reduce the index
+ *   within the range [0-size]=2E
+ *
+ * $NAME_read_packet
+ *   Function to read data from the ring=2E The amount of data to read is
+ *   specified by the "size" argument=2E
+ *
+ * $NAME_write_packet
+ *   Function to write data to the ring=2E The amount of data to write is
+ *   specified by the "size" argument=2E
+ *
+ * $NAME_get_ring_ptr
+ *   Convenience function that returns a pointer to read/write to the
+ *   ring at the right location=2E
+ *
+ * $NAME_data_intf
+ *   Indexes page, shared between frontend and backend=2E It also
+ *   contains the array of grant refs=2E
+ *
+ * $NAME_queued
+ *   Function to calculate how many bytes are currently on the ring,
+ *   ready to be read=2E It can also be used to calculate how much free
+ *   space is currently on the ring (XEN_FLEX_RING_SIZE() -
+ *   $NAME_queued())=2E
+ */
+
+#ifndef XEN_PAGE_SHIFT
+/* The PAGE_SIZE for ring protocols and hypercall interfaces is always
+ * 4K, regardless of the architecture, and page granularity chosen by
+ * operating systems=2E
+ */
+#define XEN_PAGE_SHIFT 12
+#endif
+#define XEN_FLEX_RING_SIZE(order)                                        =
     \
+    (1UL << ((order) + XEN_PAGE_SHIFT - 1))
+
+#define DEFINE_XEN_FLEX_RING(name)                                       =
     \
+static inline RING_IDX name##_mask(RING_IDX idx, RING_IDX ring_size)     =
     \
+{                                                                        =
     \
+    return idx & (ring_size - 1);                                        =
     \
+}                                                                        =
     \
+                                                                         =
     \
+static inline unsigned char *name##_get_ring_ptr(unsigned char *buf,     =
     \
+                                                 RING_IDX idx,           =
     \
+                                                 RING_IDX ring_size)     =
     \
+{                                                                        =
     \
+    return buf + name##_mask(idx, ring_size);                            =
     \
+}                                                                        =
     \
+                                                                         =
     \
+static inline void name##_read_packet(void *opaque,                      =
     \
+                                      const unsigned char *buf,          =
     \
+                                      size_t size,                       =
     \
+                                      RING_IDX masked_prod,              =
     \
+                                      RING_IDX *masked_cons,             =
     \
+                                      RING_IDX ring_size)                =
     \
+{                                                                        =
     \
+    if (*masked_cons < masked_prod ||                                    =
     \
+        size <=3D ring_size - *masked_cons) {                            =
       \
+        memcpy(opaque, buf + *masked_cons, size);                        =
     \
+    } else {                                                             =
     \
+        memcpy(opaque, buf + *masked_cons, ring_size - *masked_cons);    =
     \
+        memcpy((unsigned char *)opaque + ring_size - *masked_cons, buf,  =
     \
+               size - (ring_size - *masked_cons));                       =
     \
+    }                                                                    =
     \
+    *masked_cons =3D name##_mask(*masked_cons + size, ring_size);        =
       \
+}                                                                        =
     \
+                                                                         =
     \
+static inline void name##_write_packet(unsigned char *buf,               =
     \
+                                       const void *opaque,               =
     \
+                                       size_t size,                      =
     \
+                                       RING_IDX *masked_prod,            =
     \
+                                       RING_IDX masked_cons,             =
     \
+                                       RING_IDX ring_size)               =
     \
+{                                                                        =
     \
+    if (*masked_prod < masked_cons ||                                    =
     \
+        size <=3D ring_size - *masked_prod) {                            =
       \
+        memcpy(buf + *masked_prod, opaque, size);                        =
     \
+    } else {                                                             =
     \
+        memcpy(buf + *masked_prod, opaque, ring_size - *masked_prod);    =
     \
+        memcpy(buf, (unsigned char *)opaque + (ring_size - *masked_prod),=
     \
+               size - (ring_size - *masked_prod));                       =
     \
+    }                                                                    =
     \
+    *masked_prod =3D name##_mask(*masked_prod + size, ring_size);        =
       \
+}                                                                        =
     \
+                                                                         =
     \
+static inline RING_IDX name##_queued(RING_IDX prod,                      =
     \
+                                     RING_IDX cons,                      =
     \
+                                     RING_IDX ring_size)                 =
     \
+{                                                                        =
     \
+    RING_IDX size;                                                       =
     \
+                                                                         =
     \
+    if (prod =3D=3D cons)                                                =
         \
+        return 0;                                                        =
     \
+                                                                         =
     \
+    prod =3D name##_mask(prod, ring_size);                               =
       \
+    cons =3D name##_mask(cons, ring_size);                               =
       \
+                                                                         =
     \
+    if (prod =3D=3D cons)                                                =
         \
+        return ring_size;                                                =
     \
+                                                                         =
     \
+    if (prod > cons)                                                     =
     \
+        size =3D prod - cons;                                            =
       \
+    else                                                                 =
     \
+        size =3D ring_size - (cons - prod);                              =
       \
+    return size;                                                         =
     \
+}                                                                        =
     \
+                                                                         =
     \
+struct name##_data {                                                     =
     \
+    unsigned char *in; /* half of the allocation */                      =
     \
+    unsigned char *out; /* half of the allocation */                     =
     \
+}
+
+#define DEFINE_XEN_FLEX_RING_AND_INTF(name)                              =
     \
+struct name##_data_intf {                                                =
     \
+    RING_IDX in_cons, in_prod;                                           =
     \
+                                                                         =
     \
+    uint8_t pad1[56];                                                    =
     \
+                                                                         =
     \
+    RING_IDX out_cons, out_prod;                                         =
     \
+                                                                         =
     \
+    uint8_t pad2[56];                                                    =
     \
+                                                                         =
     \
+    RING_IDX ring_order;                                                 =
     \
+    grant_ref_t ref[XEN_FLEX_ARRAY_DIM];                                 =
     \
+};                                                                       =
     \
+DEFINE_XEN_FLEX_RING(name)
+
 #endif /* __XEN_PUBLIC_IO_RING_H__ */
=20
 /*
diff --git a/include/xen/public/io/xenbus=2Eh b/include/xen/public/io/xenb=
us=2Eh
index 927f9db=2E=2E9cd0cd7 100644
--- a/include/xen/public/io/xenbus=2Eh
+++ b/include/xen/public/io/xenbus=2Eh
@@ -1,26 +1,9 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
*****
  * xenbus=2Eh
  *
  * Xenbus protocol details=2E
  *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
  * Copyright (C) 2005 XenSource Ltd=2E
  */
=20
diff --git a/include/xen/public/trace=2Eh b/include/xen/public/trace=2Eh
index 95b00e8=2E=2E19b3551 100644
--- a/include/xen/public/trace=2Eh
+++ b/include/xen/public/trace=2Eh
@@ -1,24 +1,7 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * include/public/trace=2Eh
  *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
  * Mark Williamson, (C) 2004 Intel Research Cambridge
  * Copyright (C) 2005 Bin Ren
  */
@@ -78,12 +61,13 @@
 /* #define XEN_SCHEDULER_SEDF 2 (Removed) */
 #define TRC_SCHED_ARINC653 3
 #define TRC_SCHED_RTDS     4
+#define TRC_SCHED_SNULL    5
=20
 /* Per-scheduler tracing */
 #define TRC_SCHED_CLASS_EVT(_c, _e) \
   ( ( TRC_SCHED_CLASS | \
       ((TRC_SCHED_##_c << TRC_SCHED_ID_SHIFT) & TRC_SCHED_ID_MASK) ) + \
-    (_e & TRC_SCHED_EVT_MASK) )
+    ((_e) & TRC_SCHED_EVT_MASK) )
=20
 /* Trace classes for DOM0 operations */
 #define TRC_DOM0_DOMOPS     0x00041000   /* Domains manipulations */
@@ -115,6 +99,7 @@
 #define TRC_SCHED_SWITCH_INFPREV (TRC_SCHED_VERBOSE + 14)
 #define TRC_SCHED_SWITCH_INFNEXT (TRC_SCHED_VERBOSE + 15)
 #define TRC_SCHED_SHUTDOWN_CODE  (TRC_SCHED_VERBOSE + 16)
+#define TRC_SCHED_SWITCH_INFCONT (TRC_SCHED_VERBOSE + 17)
=20
 #define TRC_DOM0_DOM_ADD         (TRC_DOM0_DOMOPS + 1)
 #define TRC_DOM0_DOM_REM         (TRC_DOM0_DOMOPS + 2)
@@ -172,7 +157,7 @@
  */
 #define TRC_PV_HYPERCALL_V2_ARG_32(i) (0x1 << (20 + 2*(i)))
 #define TRC_PV_HYPERCALL_V2_ARG_64(i) (0x2 << (20 + 2*(i)))
-#define TRC_PV_HYPERCALL_V2_ARG_MASK  (0xfff00000)
+#define TRC_PV_HYPERCALL_V2_ARG_MASK  0xfff00000U
=20
 #define TRC_SHADOW_NOT_SHADOW                 (TRC_SHADOW +  1)
 #define TRC_SHADOW_FAST_PROPAGATE             (TRC_SHADOW +  2)
@@ -193,8 +178,10 @@
 /* trace events per subclass */
 #define TRC_HVM_NESTEDFLAG      (0x400)
 #define TRC_HVM_VMENTRY         (TRC_HVM_ENTRYEXIT + 0x01)
-#define TRC_HVM_VMEXIT          (TRC_HVM_ENTRYEXIT + 0x02)
-#define TRC_HVM_VMEXIT64        (TRC_HVM_ENTRYEXIT + TRC_64_FLAG + 0x02)
+#define TRC_HVM_VMX_EXIT        (TRC_HVM_ENTRYEXIT + 0x02)
+#define TRC_HVM_VMX_EXIT64      (TRC_HVM_ENTRYEXIT + TRC_64_FLAG + 0x02)
+#define TRC_HVM_SVM_EXIT        (TRC_HVM_ENTRYEXIT + 0x03)
+#define TRC_HVM_SVM_EXIT64      (TRC_HVM_ENTRYEXIT + TRC_64_FLAG + 0x03)
 #define TRC_HVM_PF_XEN          (TRC_HVM_HANDLER + 0x01)
 #define TRC_HVM_PF_XEN64        (TRC_HVM_HANDLER + TRC_64_FLAG + 0x01)
 #define TRC_HVM_PF_INJECT       (TRC_HVM_HANDLER + 0x02)
@@ -233,6 +220,8 @@
 #define TRC_HVM_TRAP             (TRC_HVM_HANDLER + 0x23)
 #define TRC_HVM_TRAP_DEBUG       (TRC_HVM_HANDLER + 0x24)
 #define TRC_HVM_VLAPIC           (TRC_HVM_HANDLER + 0x25)
+#define TRC_HVM_XCR_READ64      (TRC_HVM_HANDLER + TRC_64_FLAG + 0x26)
+#define TRC_HVM_XCR_WRITE64     (TRC_HVM_HANDLER + TRC_64_FLAG + 0x27)
=20
 #define TRC_HVM_IOPORT_WRITE    (TRC_HVM_HANDLER + 0x216)
 #define TRC_HVM_IOMEM_WRITE     (TRC_HVM_HANDLER + 0x217)
diff --git a/include/xen/public/xen-compat=2Eh b/include/xen/public/xen-co=
mpat=2Eh
index 2eea0e2=2E=2E078b796 100644
--- a/include/xen/public/xen-compat=2Eh
+++ b/include/xen/public/xen-compat=2Eh
@@ -1,33 +1,16 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * xen-compat=2Eh
  *
  * Guest OS interface to Xen=2E  Compatibility layer=2E
  *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
  * Copyright (c) 2006, Christian Limpach
  */
=20
 #ifndef __XEN_PUBLIC_XEN_COMPAT_H__
 #define __XEN_PUBLIC_XEN_COMPAT_H__
=20
-#define __XEN_LATEST_INTERFACE_VERSION__ 0x00040700
+#define __XEN_LATEST_INTERFACE_VERSION__ 0x00041300
=20
 #if defined(__XEN__) || defined(__XEN_TOOLS__)
 /* Xen is built with matching headers and implements the latest interface=
=2E */
@@ -41,4 +24,6 @@
 #error "These header files do not support the requested interface version=
=2E"
 #endif
=20
+#define COMPAT_FLEX_ARRAY_DIM XEN_FLEX_ARRAY_DIM
+
 #endif /* __XEN_PUBLIC_XEN_COMPAT_H__ */
diff --git a/include/xen/public/xen=2Eh b/include/xen/public/xen=2Eh
index 2057b52=2E=2E728bda2 100644
--- a/include/xen/public/xen=2Eh
+++ b/include/xen/public/xen=2Eh
@@ -1,26 +1,9 @@
+/* SPDX-License-Identifier: MIT */
 /************************************************************************=
******
  * xen=2Eh
  *
  * Guest OS interface to Xen=2E
  *
- * Permission is hereby granted, free of charge, to any person obtaining =
a copy
- * of this software and associated documentation files (the "Software"), =
to
- * deal in the Software without restriction, including without limitation=
 the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, a=
nd/or
- * sell copies of the Software, and to permit persons to whom the Softwar=
e is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be include=
d in
- * all copies or substantial portions of the Software=2E
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES=
S OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILIT=
Y,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT=2E IN NO EVENT SH=
ALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISIN=
G
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE=2E
- *
  * Copyright (c) 2004, K A Fraser
  */
=20
@@ -33,11 +16,15 @@
 #include "arch-x86/xen=2Eh"
 #elif defined(__arm__) || defined (__aarch64__)
 #include "arch-arm=2Eh"
+#elif defined(__powerpc64__)
+#include "arch-ppc=2Eh"
+#elif defined(__riscv)
+#include "arch-riscv=2Eh"
 #else
 #error "Unsupported architecture"
 #endif
=20
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
 /* Guest handles for primitive C types=2E */
 DEFINE_XEN_GUEST_HANDLE(char);
 __DEFINE_XEN_GUEST_HANDLE(uchar, unsigned char);
@@ -53,17 +40,31 @@ DEFINE_XEN_GUEST_HANDLE(uint64_t);
 DEFINE_XEN_GUEST_HANDLE(xen_pfn_t);
 DEFINE_XEN_GUEST_HANDLE(xen_ulong_t);
=20
-/* Turn a plain number into a C unsigned (LONG_PTR) constant=2E */
+/* Define a variable length array (depends on compiler)=2E */
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >=3D 199901L
+#define XEN_FLEX_ARRAY_DIM
+#elif defined(__GNUC__)
+#define XEN_FLEX_ARRAY_DIM  0
+#else
+#define XEN_FLEX_ARRAY_DIM  1 /* variable size */
+#endif
+
+/* Turn a plain number into a C unsigned (LONG_PTR (LONG_PTR)) constant=
=2E */
 #define __xen_mk_uint(x)  x ## U
 #define __xen_mk_ulong(x) x ## UL
+#ifndef __xen_mk_ullong
+# define __xen_mk_ullong(x) x ## ULL
+#endif
 #define xen_mk_uint(x)    __xen_mk_uint(x)
 #define xen_mk_ulong(x)   __xen_mk_ulong(x)
+#define xen_mk_ullong(x)  __xen_mk_ullong(x)
=20
 #else
=20
 /* In assembly code we cannot use C numeric constant suffixes=2E */
-#define xen_mk_uint(x)  x
-#define xen_mk_ulong(x) x
+#define xen_mk_uint(x)   x
+#define xen_mk_ulong(x)  x
+#define xen_mk_ullong(x) x
=20
 #endif
=20
@@ -105,7 +106,7 @@ DEFINE_XEN_GUEST_HANDLE(xen_ulong_t);
 #define __HYPERVISOR_nmi_op               28
 #define __HYPERVISOR_sched_op             29
 #define __HYPERVISOR_callback_op          30
-#define __HYPERVISOR_xenoprof_op          31
+#define __HYPERVISOR_xenoprof_op          31 /* Dropped in Xen 4=2E22 */
 #define __HYPERVISOR_event_channel_op     32
 #define __HYPERVISOR_physdev_op           33
 #define __HYPERVISOR_hvm_op               34
@@ -113,8 +114,10 @@ DEFINE_XEN_GUEST_HANDLE(xen_ulong_t);
 #define __HYPERVISOR_domctl               36
 #define __HYPERVISOR_kexec_op             37
 #define __HYPERVISOR_tmem_op              38
-#define __HYPERVISOR_xc_reserved_op       39 /* reserved for XenClient */
+#define __HYPERVISOR_argo_op              39
 #define __HYPERVISOR_xenpmu_op            40
+#define __HYPERVISOR_dm_op                41
+#define __HYPERVISOR_hypfs_op             42
=20
 /* Architecture-specific hypercall definitions=2E */
 #define __HYPERVISOR_arch_0               48
@@ -156,25 +159,34 @@ DEFINE_XEN_GUEST_HANDLE(xen_ulong_t);
  *
  * Virtual interrupts that a guest OS may receive from Xen=2E
  *
- * In the side comments, 'V=2E' denotes a per-VCPU VIRQ while 'G=2E' deno=
tes a
- * global VIRQ=2E The former can be bound once per VCPU and cannot be re-=
bound=2E
- * The latter can be allocated only once per guest: they must initially b=
e
- * allocated to VCPU0 but can subsequently be re-bound=2E
+ * There are three types:
+ *
+ * 1=2E (V) Per-vcpu:
+ *    These can be bound once per vCPU, each using a different evtchn por=
t=2E
+ *    An evtchn for one vCPU cannot be rebound to a different vCPU=2E
+ *
+ * 2=2E (D) Per-domain:
+ *    These can be bound once per domain=2E  They must be bound on vCPU 0=
 first,
+ *    but can be rebound to other vCPUs afterwards=2E
+ *
+ * 3=2E (G) Global:
+ *    Like per-domain, but can only be bound to a single domain at a time=
=2E
+ *    The owning domain must unbind before a new domain can bind=2E
  */
 /* ` enum virq { */
 #define VIRQ_TIMER      0  /* V=2E Timebase update, and/or requested time=
out=2E  */
 #define VIRQ_DEBUG      1  /* V=2E Request guest to dump debug info=2E   =
        */
-#define VIRQ_CONSOLE    2  /* G=2E (DOM0) Bytes received on emergency con=
sole=2E */
-#define VIRQ_DOM_EXC    3  /* G=2E (DOM0) Exceptional event for some doma=
in=2E   */
-#define VIRQ_TBUF       4  /* G=2E (DOM0) Trace buffer has records availa=
ble=2E  */
-#define VIRQ_DEBUGGER   6  /* G=2E (DOM0) A domain has paused for debuggi=
ng=2E   */
+#define VIRQ_CONSOLE    2  /* G=2E Bytes received on emergency console=2E=
        */
+#define VIRQ_DOM_EXC    3  /* G=2E Exceptional event for some domain=2E  =
        */
+#define VIRQ_TBUF       4  /* G=2E Trace buffer has records available=2E =
        */
+#define VIRQ_DEBUGGER   6  /* G=2E A domain has paused for debugging=2E  =
        */
 #define VIRQ_XENOPROF   7  /* V=2E XenOprofile interrupt: new sample avai=
lable */
-#define VIRQ_CON_RING   8  /* G=2E (DOM0) Bytes received on console      =
      */
-#define VIRQ_PCPU_STATE 9  /* G=2E (DOM0) PCPU state changed             =
      */
-#define VIRQ_MEM_EVENT  10 /* G=2E (DOM0) A memory event has occured     =
      */
-#define VIRQ_XC_RESERVED 11 /* G=2E Reserved for XenClient               =
      */
-#define VIRQ_ENOMEM     12 /* G=2E (DOM0) Low on heap memory       */
-#define VIRQ_XENPMU     13 /* V=2E  PMC interrupt                        =
      */
+#define VIRQ_CON_RING   8  /* G=2E Bytes received on console             =
      */
+#define VIRQ_PCPU_STATE 9  /* G=2E PCPU state changed                    =
      */
+#define VIRQ_MEM_EVENT  10 /* G=2E A memory event has occurred           =
      */
+#define VIRQ_ARGO       11 /* D=2E Argo interdomain message notification =
      */
+#define VIRQ_ENOMEM     12 /* G=2E Low on heap memory                    =
      */
+#define VIRQ_XENPMU     13 /* V=2E PMC interrupt                         =
      */
=20
 /* Architecture-specific VIRQ definitions=2E */
 #define VIRQ_ARCH_0    16
@@ -262,6 +274,10 @@ DEFINE_XEN_GUEST_HANDLE(xen_ulong_t);
  * As MMU_NORMAL_PT_UPDATE above, but A/D bits currently in the PTE are O=
Red
  * with those in @val=2E
  *
+ * ptr[1:0] =3D=3D MMU_PT_UPDATE_NO_TRANSLATE:
+ * As MMU_NORMAL_PT_UPDATE above, but @val is not translated though FD
+ * page tables=2E
+ *
  * @val is usually the machine frame number along with some attributes=2E
  * The attributes by default follow the architecture defined bits=2E Mean=
ing that
  * if this is a X86_64 machine and four page table layout is used, the la=
yout
@@ -328,9 +344,11 @@ DEFINE_XEN_GUEST_HANDLE(xen_ulong_t);
  *
  * PAT (bit 7 on) --> PWT (bit 3 on) and clear bit 7=2E
  */
-#define MMU_NORMAL_PT_UPDATE      0 /* checked '*ptr =3D val'=2E ptr is M=
A=2E      */
-#define MMU_MACHPHYS_UPDATE       1 /* ptr =3D MA of frame to modify entr=
y for */
-#define MMU_PT_UPDATE_PRESERVE_AD 2 /* atomically: *ptr =3D val | (*ptr&(=
A|D)) */
+#define MMU_NORMAL_PT_UPDATE       0 /* checked '*ptr =3D val'=2E ptr is =
MA=2E      */
+#define MMU_MACHPHYS_UPDATE        1 /* ptr =3D MA of frame to modify ent=
ry for */
+#define MMU_PT_UPDATE_PRESERVE_AD  2 /* atomically: *ptr =3D val | (*ptr&=
(A|D)) */
+#define MMU_PT_UPDATE_NO_TRANSLATE 3 /* checked '*ptr =3D val'=2E ptr is =
MA=2E      */
+                                     /* val never translated=2E          =
       */
=20
 /*
  * MMU EXTENDED OPERATIONS
@@ -419,7 +437,7 @@ DEFINE_XEN_GUEST_HANDLE(xen_ulong_t);
 #define MMUEXT_UNMARK_SUPER     20
 /* ` } */
=20
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
 struct mmuext_op {
     unsigned int cmd; /* =3D> enum mmuext_cmd */
     union {
@@ -474,7 +492,28 @@ DEFINE_XEN_GUEST_HANDLE(mmuext_op_t);
 /* ` } */
=20
 /*
- * Commands to HYPERVISOR_console_io()=2E
+ * ` int
+ * ` HYPERVISOR_console_io(unsigned int cmd,
+ * `                       unsigned int count,
+ * `                       char buffer[]);
+ *
+ * @cmd: Command (see below)
+ * @count: Size of the buffer to read/write
+ * @buffer: Pointer in the guest memory
+ *
+ * List of commands:
+ *
+ *  * CONSOLEIO_write: Write the buffer to Xen console=2E
+ *      For the hardware domain, all the characters in the buffer will
+ *      be written=2E Characters will be printed directly to the console=
=2E
+ *      For all the other domains, only the printable characters will be
+ *      written=2E Characters may be buffered until a newline (i=2Ee '\n'=
) is
+ *      found=2E
+ *      @return 0 on success, otherwise return an error code=2E
+ *  * CONSOLEIO_read: Attempts to read up to @count characters from Xen
+ *      console=2E The maximum buffer size (i=2Ee=2E @count) supported is=
 2GB=2E
+ *      @return the number of characters read on success, otherwise retur=
n
+ *      an error code=2E
  */
 #define CONSOLEIO_write         0
 #define CONSOLEIO_read          1
@@ -509,6 +548,13 @@ DEFINE_XEN_GUEST_HANDLE(mmuext_op_t);
  */
 #define VMASST_TYPE_architectural_iopl   4
=20
+/*
+ * All guests: activate update indicator in vcpu_runstate_info
+ * Enable setting the XEN_RUNSTATE_UPDATE flag in guest memory mapped
+ * vcpu_runstate_info during updates of the runstate information=2E
+ */
+#define VMASST_TYPE_runstate_update_flag 5
+
 /*
  * x86/64 guests: strictly hide M2P from user mode=2E
  * This allows the guest to control respective hypervisor behavior:
@@ -537,16 +583,21 @@ DEFINE_XEN_GUEST_HANDLE(mmuext_op_t);
  * is useful to ensure that no mappings to the OS's own heap are accident=
ally
  * installed=2E (e=2Eg=2E, in Linux this could cause havoc as reference c=
ounts
  * aren't adjusted on the I/O-mapping code path)=2E
- * This only makes sense in MMUEXT_SET_FOREIGNDOM, but in that context ca=
n
- * be specified by any calling domain=2E
+ * This only makes sense as HYPERVISOR_mmu_update()'s and
+ * HYPERVISOR_update_va_mapping_otherdomain()'s "foreigndom" argument=2E =
For
+ * HYPERVISOR_mmu_update() context it can be specified by any calling dom=
ain,
+ * otherwise it's only permitted if the caller is privileged=2E
  */
 #define DOMID_IO             xen_mk_uint(0x7FF1)
=20
 /*
  * DOMID_XEN is used to allow privileged domains to map restricted parts =
of
  * Xen's heap space (e=2Eg=2E, the machine_to_phys table)=2E
- * This only makes sense in MMUEXT_SET_FOREIGNDOM, and is only permitted =
if
- * the caller is privileged=2E
+ * This only makes sense as
+ * - HYPERVISOR_mmu_update()'s, HYPERVISOR_mmuext_op()'s, or
+ *   HYPERVISOR_update_va_mapping_otherdomain()'s "foreigndom" argument,
+ * - with XENMAPSPACE_gmfn_foreign,
+ * and is only permitted if the caller is privileged=2E
  */
 #define DOMID_XEN            xen_mk_uint(0x7FF2)
=20
@@ -557,10 +608,20 @@ DEFINE_XEN_GUEST_HANDLE(mmuext_op_t);
 /* DOMID_INVALID is used to identify pages with unknown owner=2E */
 #define DOMID_INVALID        xen_mk_uint(0x7FF4)
=20
+/*
+ * DOMID_ANY is used to signal no specific domain ID requested=2E
+ * Handler should pick a valid ID, or handle it as a wildcard value
+ * depending on the context=2E
+ */
+#define DOMID_ANY            xen_mk_uint(0x7FF5)
+
 /* Idle domain=2E */
 #define DOMID_IDLE           xen_mk_uint(0x7FFF)
=20
-#ifndef __ASSEMBLY__
+/* Mask for valid domain id values */
+#define DOMID_MASK           xen_mk_uint(0x7FFF)
+
+#ifndef __ASSEMBLER__
=20
 typedef uint16_t domid_t;
=20
@@ -578,7 +639,7 @@ DEFINE_XEN_GUEST_HANDLE(mmu_update_t);
 /*
  * ` enum neg_errnoval
  * ` HYPERVISOR_multicall(multicall_entry_t call_list[],
- * `                      uint32_t nr_calls);
+ * `                      ULONG_PTR nr_calls);
  *
  * NB=2E The fields are logically the natural register size for this
  * architecture=2E In cases where xen_ulong_t is larger than this then
@@ -586,7 +647,11 @@ DEFINE_XEN_GUEST_HANDLE(mmu_update_t);
  */
 struct multicall_entry {
     xen_ulong_t op, result;
+#ifndef __XEN__
     xen_ulong_t args[6];
+#else /* Only 5 arguments are supported in reality=2E */
+    xen_ulong_t args[5], unused;
+#endif
 };
 typedef struct multicall_entry multicall_entry_t;
 DEFINE_XEN_GUEST_HANDLE(multicall_entry_t);
@@ -668,7 +733,7 @@ struct vcpu_info {
 #endif /* XEN_HAVE_PV_UPCALL_MASK */
     xen_ulong_t evtchn_pending_sel;
     struct arch_vcpu_info arch;
-    struct vcpu_time_info time;
+    vcpu_time_info_t time;
 }; /* 64 bytes (x86) */
 #ifndef __XEN__
 typedef struct vcpu_info vcpu_info_t;
@@ -721,12 +786,17 @@ struct shared_info {
     xen_ulong_t evtchn_mask[sizeof(xen_ulong_t) * 8];
=20
     /*
-     * Wallclock time: updated only by control software=2E Guests should =
base
-     * their gettimeofday() syscall on this wallclock-base value=2E
+     * Wallclock time: updated by control software or RTC emulation=2E
+     * Guests should base their gettimeofday() syscall on this
+     * wallclock-base value=2E
+     * The values of wc_sec and wc_nsec are offsets from the Unix epoch
+     * adjusted by the domain's 'time offset' (in seconds) as set either
+     * by XEN_DOMCTL_settimeoffset, or adjusted via a guest write to the
+     * emulated RTC=2E
      */
     uint32_t wc_version;      /* Version counter: see vcpu_time_info_t=2E=
 */
-    uint32_t wc_sec;          /* Secs  00:00:00 UTC, Jan 1, 1970=2E  */
-    uint32_t wc_nsec;         /* Nsecs 00:00:00 UTC, Jan 1, 1970=2E  */
+    uint32_t wc_sec;
+    uint32_t wc_nsec;
 #if !defined(__i386__)
     uint32_t wc_sec_hi;
 # define xen_wc_sec_hi wc_sec_hi
@@ -752,7 +822,7 @@ typedef struct shared_info shared_info_t;
  *         (may be omitted)
  *      c=2E list of allocated page frames [mfn_list, nr_pages]
  *         (unless relocated due to XEN_ELFNOTE_INIT_P2M)
- *      d=2E start_info_t structure        [register ESI (x86)]
+ *      d=2E start_info_t structure        [register rSI (x86)]
  *         in case of dom0 this page contains the console info, too
  *      e=2E unless dom0: xenstore ring page
  *      f=2E unless dom0: console ring page
@@ -813,52 +883,6 @@ struct start_info {
 };
 typedef struct start_info start_info_t;
=20
-/*
- * Start of day structure passed to PVH guests in %ebx=2E
- *
- * NOTE: nothing will be loaded at physical address 0, so a 0 value in an=
y
- * of the address fields should be treated as not present=2E
- *
- *  0 +----------------+
- *    | magic          | Contains the magic value XEN_HVM_START_MAGIC_VAL=
UE
- *    |                | ("xEn3" with the 0x80 bit of the "E" set)=2E
- *  4 +----------------+
- *    | version        | Version of this structure=2E Current version is =
0=2E New
- *    |                | versions are guaranteed to be backwards-compatib=
le=2E
- *  8 +----------------+
- *    | flags          | SIF_xxx flags=2E
- * 12 +----------------+
- *    | nr_modules     | Number of modules passed to the kernel=2E
- * 16 +----------------+
- *    | modlist_paddr  | Physical address of an array of modules
- *    |                | (layout of the structure below)=2E
- * 24 +----------------+
- *    | cmdline_paddr  | Physical address of the command line,
- *    |                | a zero-terminated ASCII string=2E
- * 32 +----------------+
- *    | rsdp_paddr     | Physical address of the RSDP ACPI data structure=
=2E
- * 40 +----------------+
- *
- * The layout of each entry in the module structure is the following:
- *
- *  0 +----------------+
- *    | paddr          | Physical address of the module=2E
- *  8 +----------------+
- *    | size           | Size of the module in bytes=2E
- * 16 +----------------+
- *    | cmdline_paddr  | Physical address of the command line,
- *    |                | a zero-terminated ASCII string=2E
- * 24 +----------------+
- *    | reserved       |
- * 32 +----------------+
- *
- * The address and sizes are always a 64bit little endian unsigned intege=
r=2E
- *
- * NB: Xen on x86 will always try to place all the data below the 4GiB
- * boundary=2E
- */
-#define XEN_HVM_START_MAGIC_VALUE 0x336ec578
-
 /* New console union for dom0 introduced in 0x00030203=2E */
 #if __XEN_INTERFACE_VERSION__ < 0x00030203
 #define console_mfn    console=2EdomU=2Emfn
@@ -944,6 +968,11 @@ typedef struct dom0_vga_console_info {
             uint32_t gbl_caps;
             /* Mode attributes (offset 0x0, VESA command 0x4f01)=2E */
             uint16_t mode_attrs;
+            uint16_t pad;
+#endif
+#if __XEN_INTERFACE_VERSION__ >=3D 0x00040d00
+            /* high 32 bits of lfb_base */
+            uint32_t ext_lfb_base;
 #endif
         } vesa_lfb;
     } u;
@@ -958,7 +987,38 @@ __DEFINE_XEN_GUEST_HANDLE(uint16, uint16_t);
 __DEFINE_XEN_GUEST_HANDLE(uint32, uint32_t);
 __DEFINE_XEN_GUEST_HANDLE(uint64, uint64_t);
=20
-#endif /* !__ASSEMBLY__ */
+typedef struct {
+    uint8_t a[16];
+} xen_uuid_t;
+
+/*
+ * XEN_DEFINE_UUID(0x00112233, 0x4455, 0x6677, 0x8899,
+ *                 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff)
+ * will construct UUID 00112233-4455-6677-8899-aabbccddeeff presented as
+ * {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88,
+ * 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff};
+ *
+ * NB: This is compatible with Linux kernel and with libuuid, but it is n=
ot
+ * compatible with Microsoft, as they use mixed-endian encoding (some
+ * components are little-endian, some are big-endian)=2E
+ */
+#define XEN_DEFINE_UUID_(a, b, c, d, e1, e2, e3, e4, e5, e6)            \
+    {{((a) >> 24) & 0xFF, ((a) >> 16) & 0xFF,                           \
+      ((a) >>  8) & 0xFF, ((a) >>  0) & 0xFF,                           \
+      ((b) >>  8) & 0xFF, ((b) >>  0) & 0xFF,                           \
+      ((c) >>  8) & 0xFF, ((c) >>  0) & 0xFF,                           \
+      ((d) >>  8) & 0xFF, ((d) >>  0) & 0xFF,                           \
+                e1, e2, e3, e4, e5, e6}}
+
+#if defined(__STDC_VERSION__) ? __STDC_VERSION__ >=3D 199901L : defined(_=
_GNUC__)
+#define XEN_DEFINE_UUID(a, b, c, d, e1, e2, e3, e4, e5, e6)             \
+    ((xen_uuid_t)XEN_DEFINE_UUID_(a, b, c, d, e1, e2, e3, e4, e5, e6))
+#else
+#define XEN_DEFINE_UUID(a, b, c, d, e1, e2, e3, e4, e5, e6)             \
+    XEN_DEFINE_UUID_(a, b, c, d, e1, e2, e3, e4, e5, e6)
+#endif /* __STDC_VERSION__ / __GNUC__ */
+
+#endif /* !__ASSEMBLER__ */
=20
 /* Default definitions for macros used by domctl/sysctl=2E */
 #if defined(__XEN__) || defined(__XEN_TOOLS__)
@@ -973,11 +1033,12 @@ __DEFINE_XEN_GUEST_HANDLE(uint64, uint64_t);
 #define XEN_GUEST_HANDLE_64(name) XEN_GUEST_HANDLE(name)
 #endif
=20
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
 struct xenctl_bitmap {
     XEN_GUEST_HANDLE_64(uint8) bitmap;
     uint32_t nr_bits;
 };
+typedef struct xenctl_bitmap xenctl_bitmap_t;
 #endif
=20
 #endif /* defined(__XEN__) || defined(__XEN_TOOLS__) */
diff --git a/include/xen/xen/errno=2Eh b/include/xen/xen/errno=2Eh
index 69b28dd=2E=2Edb9ef7f 100644
--- a/include/xen/xen/errno=2Eh
+++ b/include/xen/xen/errno=2Eh
@@ -1,18 +1,18 @@
 #ifndef __XEN_ERRNO_H__
 #define __XEN_ERRNO_H__
=20
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
=20
-#define XEN_ERRNO(name, value) name =3D value,
+#define XEN_ERRNO(name, value) name =3D (value),
 enum {
 #include <public/errno=2Eh>
 };
=20
-#else /* !__ASSEMBLY__ */
+#else /* !__ASSEMBLER__ */
=20
 #define XEN_ERRNO(name, value) =2Eequ name, value
 #include <public/errno=2Eh>
=20
-#endif /* __ASSEMBLY__ */
+#endif /* __ASSEMBLER__ */
=20
 #endif /*  __XEN_ERRNO_H__ */
--=20
2=2E55=2E0=2Ewindows=2E3



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.252.e44c3e55d53cbfb5.1a13feed078.60e9b4f9e4b22b86=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 15 14:19:50 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 15 Oct 2026 14:19:50 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1450693.1666152 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHMJC-0005Bo-U5; Thu, 15 Oct 2026 14:19:50 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1450693.1666152; Thu, 15 Oct 2026 14:19:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHMJC-0005Bc-Ok; Thu, 15 Oct 2026 14:19:50 +0000
Received: by outflank-mailman (input) for mailman id 1450693;
 Thu, 15 Oct 2026 14:19:49 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13feed45b0008425@swg.vates.tech>)
 id 1xHMJB-00058G-0S
 for win-pv-devel@lists.xenproject.org; Thu, 15 Oct 2026 14:19:49 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xHMJA-00FKw2-Bh
 for win-pv-devel@lists.xenproject.org; Thu, 15 Oct 2026 16:19:48 +0200
Received: from [10.42.69.4] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13feed45b0008425@swg.vates.tech>)
 id 6ad0e0f2-8faa-0a2a0a5109dd-0a2a4504c220-30
 for <win-pv-devel@lists.xenproject.org>; Thu, 15 Oct 2026 16:19:48 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-ebf023.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a13feed45b0008425@swg.vates.tech>)
 id 6ad0e0ff-b57f-0a2a45040019-b9ff1c22a28b-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 15 Oct 2026 16:19:43 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a13feed45b0008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 15 Oct 2026 14:19:38 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 728D682C8D;
 Thu, 15 Oct 2026 16:19:38 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=VAPmzkV0QqEknf/KwO34FuQRI9HfiomqNN1mZ+LhjGU=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=l0s4F5Qqes3EB+tGFjyf7MK9e/ft/9mzY1hU79bqfrLECYC6BkVfnjCJ7DoE21RwG4KI4h/HD
 vIhhtdZrUD92vdIVKIDVhbr2xqWYcswkIpSkmyjrWGdxPTkGrn94xzR00Jav38MtruL/aKcUYsA
 nNqwHb3scKwW9mD6D8ScU3uEN2YKZmKKxj1WMlBOhF49dmAY10frskvVdG2U00Zo+M6SuYe3vV7
 BgrXpbTasNEopMXf1anXMhRp3Riv33v+R8R2XGO5LOkaKjaSvjV1PkFbCDJDVNf4bEIuavXlGqk
 NHKvgeRDEx+PZzxz7PWIdiZy5U8OIuV40KwXZXOwgVEw==
X-Zone-Loop: 54dde9e99fe6b7c8ee2df7a3b9b20952c147470bdf74
x-campaign-type: default
x-transaction-id: cf081360-0c4a-44e5-b426-7cdb01f640ac
x-swg-uid: 01-0ca04605-af06-43a0-84a0-b18dcc56ab7b
X-Mailer: Sweego
Message-ID:
 <1792073979.8631fc262581453bbf619ec5b2062170.1a13feed45b0008425@vates.tech>
x-swg-bid: 1792073979.8631fc262581453bbf619ec5b2062170.1a13feed45b0008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [XENVKBD PATCH 2/2] Remove the duplicate definition of DOMID_INVALID
Date: Thu, 15 Oct 2026 16:19:30 +0200
In-Reply-To: <20261015141933.1533-1-ngoc-tu.dinh@vates.tech>
References: <1792073912.8631fc262581453bbf619ec5b2062170.1a13fedd1870008425@vates.tech>
 <20261015141933.1533-1-ngoc-tu.dinh@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.254.f88238647b933db7.1a13feed2c3.e321db10e774eece=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792073978563
X-purgate-ID: tlsNG-ebf023/1792073983-C16D2B50-5E965C54/0/0
X-purgate-type: clean
X-purgate-size: 918

---=Part.254.f88238647b933db7.1a13feed2c3.e321db10e774eece=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Xen headers now include them=2E

Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 src/xenvkbd/frontend=2Ec | 2 --
 1 file changed, 2 deletions(-)

diff --git a/src/xenvkbd/frontend=2Ec b/src/xenvkbd/frontend=2Ec
index a1f16f8=2E=2E4b96423 100644
--- a/src/xenvkbd/frontend=2Ec
+++ b/src/xenvkbd/frontend=2Ec
@@ -48,8 +48,6 @@
 #include "assert=2Eh"
 #include "util=2Eh"
=20
-#define DOMID_INVALID   (0x7FF4U)
-
 struct _XENVKBD_FRONTEND {
     PXENVKBD_PDO                Pdo;
     PCHAR                       Path;
--=20
2=2E55=2E0=2Ewindows=2E3



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.254.f88238647b933db7.1a13feed2c3.e321db10e774eece=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 15 14:49:13 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 15 Oct 2026 14:49:13 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1450744.1666155 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHMlc-0002nT-RJ; Thu, 15 Oct 2026 14:49:12 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1450744.1666155; Thu, 15 Oct 2026 14:49:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHMlc-0002nM-Og; Thu, 15 Oct 2026 14:49:12 +0000
Received: by outflank-mailman (input) for mailman id 1450744;
 Thu, 15 Oct 2026 14:49:12 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <owen.smith@citrix.com>) id 1xHMlb-0002nG-St
 for win-pv-devel@lists.xenproject.org; Thu, 15 Oct 2026 14:49:12 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xHMlb-008Mtt-73
 for win-pv-devel@lists.xenproject.org; Thu, 15 Oct 2026 16:49:11 +0200
Received: from [10.42.69.12] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ad0e7e4-2eae-0a2a0a5409dd-0a2a450cc624-6
 for <win-pv-devel@lists.xenproject.org>; Thu, 15 Oct 2026 16:49:11 +0200
Received: from [40.93.201.64]
 (helo=CY3PR05CU001.outbound.protection.outlook.com)
 by tlsNG-d25034.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ad0e7e5-f479-0a2a450c0019-285dc940b01d-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 15 Oct 2026 16:49:10 +0200
Received: from SA6PR03MB7760.namprd03.prod.outlook.com (2603:10b6:806:43c::5)
 by IA1PR03MB8335.namprd03.prod.outlook.com (2603:10b6:208:5b1::7)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.522.14; Thu, 15 Oct
 2026 14:49:07 +0000
Received: from SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38]) by SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38%5]) with mapi id 15.21.0522.012; Thu, 15 Oct 2026
 14:49:07 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:x-ms-exchange-senderadcheck"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
 b=iIbwcxCXbYUGMxwvmUQmhmdqkP4sh7KCm0JFyWcckolyuPExBzGggzbDla3tNbvw64SJNJtfXXTyFgolmPlTJnxAIpVWVS0NUkeHZ5YJB+ZGOkhuety/Tq5ngujz8WvBdeb2P4Brw+cvYS4LRDO1I4XADgPB/xp4NwNFfR09I9/uL7tTuUaynF2ZgxW5J5fTdBQ0CVs99G7GQbZOieUNpojNfQ0oiq1UW6XDhnNeoKNBER6knKWJ1Jc+YtH7SqAzXd8zyY9B21vRc7aiK5bhQ83ZWKLgN/O6OIzOSq5Qf+YptPDQOIBdAukDLMX65zcwfvIZLhnvyOd+c2tfmgbZ8A==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector10001;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=4SM9eHClurMoMRA6hJv0sSlcQCmkC7Oc52Lzk7llyz0=;
 b=xFrzs6yrMl+BlC9lub6VUSlzFJJai+UQjQvJ4/UFXTI3twmxizQGD5iZMrvKE1dDKTXvZuZhAw6YNznDyjsCPkQWUNWaKKQFV6lGvCA0y5kVWx1Qd8FbHD7ZBUb1knJq0E+dwoHC0kptPANhMEARQUNeYeHPp3B1BfTPzaP81O3SshTSeS3MDeNxqWRKWFl8VRB0iCiiSp8K5TNUPHkTgva2UPZnBkjqxs9d9W6+7cx9xhdLBtll0b+qAb9Plrr7MvUa6DsSujIck5WbzhQV1DIHgjt9BPSHS488AiuDsuBUBQcypeGHBLQOAwYqJr8LpWj/fSYAAgTaeA9SVwlxUQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=4SM9eHClurMoMRA6hJv0sSlcQCmkC7Oc52Lzk7llyz0=;
 b=Rbql5GSzGcPBcBPGcLrtiqbosdTeRQkqzv4S3qHgptZGGDrmxO3KH7v0ZOv4f3V4ZUvq05SucaANFo3CbaMj18/QKZRSW82mGx9oIMxx8H+GMlZmcYh6tXjtT4piejdUuSCwAEQIMBxk8x5jICTqZ7/bXeJ+desO2TRuQaUbeVQ=
From: Owen Smith <owen.smith@citrix.com>
To: Tu Dinh <ngoc-tu.dinh@vates.tech>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Subject: Re: [PATCH v2] Add VIF interface V11
Thread-Topic: [PATCH v2] Add VIF interface V11
Thread-Index: AQHdXKdmwkEwrN5370eHhtPesbg0q7b+r0rO
Date: Thu, 15 Oct 2026 14:49:07 +0000
Message-ID:
 <SA6PR03MB77608C523F5848CD9ECE79BFFE9C2@SA6PR03MB7760.namprd03.prod.outlook.com>
References:
 <1792070155.8631fc262581453bbf619ec5b2062170.1a13fb47d080008425@vates.tech>
In-Reply-To:
 <1792070155.8631fc262581453bbf619ec5b2062170.1a13fb47d080008425@vates.tech>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
msip_labels:
authentication-results: mx.microsoft.com 1; dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=citrix.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: SA6PR03MB7760:EE_|IA1PR03MB8335:EE_
x-ms-office365-filtering-correlation-id: c590037c-ee93-44d3-d8a2-08df2acb771c
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam:
 BCL:0;ARA:13230040|23010399003|1800799024|376014|366016|6133799003|10067099003|22082099003|18002099003|3023799007|11063799006|261009221227099003|261009221727099003|261009223027099003|261009220027099003|261009223327099003|38070700021|56012099006;
x-microsoft-antispam-message-info:
 2DRqr3n6y7iCtdSUfr2Ojllh80/3mpLA+tZjTh03d/kQJNAgMX63U0A0ad+nce2wEr1yqntLyOk5/8ZvkzwVVcfyqp2WD+yuU7+s8QCNHcNJOFTwZ6JkJqIjge+o9yPzWITRhbwLtW0ty7xKeQ7LpZK3wileaMk9thOZbKFo/Dm2YUbxWhrlhfjwPE1YItna8zs0AKNIMYe2snwJJx9rzAnrsYQvVNLb84VY9c+BbvCLiez3kjmzEi4/vIA6eInSOXofLSw7DpVgQ54bmqXsvJ280OznvkbBQjnWlWdFVHDwRJRfpE3u/J/dxF065bqlZ/mEwwKdypturJre0KqjH4e03234tagXU/pHK2zxaz85WuB9BX+uC3lfiBengt8B+l6Wk6RGBB1f59Mj+lPVNtlRmzB2dmNJpcpa0HD5nJ7Kxyd3U4f8thX+MyJaUJ5V3Mad8yv/rsHz7kt/F4BE42WNrT16L2LbKbtdvnQIA+afiz+C+/8cD5OYcoYo4EvafjsJiqEaXVM9rql4jwXKZQ07LhSbu8Rym5Cv9RMAV5yIHK/2w0k3eemX6lDeT2DqEKeWWBsvKiH1tfvXgbLV6ntAa5vq1U685ERLFOJN6IQ7bBcj9bqXdcCtutBI7ERwCqZMgCCtHxNtPBxIE8KGcNbM6mJrgEWNFNNWvorgIFs=
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SA6PR03MB7760.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(1800799024)(376014)(366016)(6133799003)(10067099003)(22082099003)(18002099003)(3023799007)(11063799006)(261009221227099003)(261009221727099003)(261009223027099003)(261009220027099003)(261009223327099003)(38070700021)(56012099006);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?us-ascii?Q?z31BTChJv8owtsN4i7RR44RM5LPTA+cKiAwkhwUeHEmByUMl+99MZU3qY7W4?=
 =?us-ascii?Q?IBwqF+lF7sBbddmKjfd0MvLxan1ej5bnWaldavvGDhKT/1oueDcilcRnjXZN?=
 =?us-ascii?Q?burTFIV/Sec0SItZ1B4CsY33bkI5kDGKCil8Nbilo6m5dns2PBVoMO3WFAmS?=
 =?us-ascii?Q?7CjlUD4dcPeWk/3ejVRU4BDzyhJx+FyhMqGCCkouSNf74+7/yxT2XpnhqV6T?=
 =?us-ascii?Q?9spjeMD+jdYbDFxuZhn41EEIdbZ3xUwIeU5epjgfsZv2WJdEyWZ8LDRESOkM?=
 =?us-ascii?Q?Qq9zMvFPjy5H2ghXd00lIp61rCYfUlcM9KkYVdA+/5w+G8fx94afYBVktOvG?=
 =?us-ascii?Q?drR30qkllmWTVmERm6KCVrkkGkF3g/GRcEkEkMwd+81pYg14Y9o7tWbYcxyL?=
 =?us-ascii?Q?kFi0Bw45Hg3Y16ZcNPnEw6qF1+cjrwD61LW5jt+ZJzxsa4EcSgW04w4tSWIp?=
 =?us-ascii?Q?c34zTU3JHprX5adR3LF9C6wIA61jLhiHdda4EHZURVtO8SJMEHiUoBbOyF5x?=
 =?us-ascii?Q?aVse3J8v/DXT2DBLZrdQT/HddeyF4jHXLgyaX0DzXqMk61ZdMJZPmINdCfY7?=
 =?us-ascii?Q?ql7Tsh5U4WGk2I2SRrzvRqyL/W8xkQGkTUd7XeoxaqFbNjPt9hy6qHcku1zt?=
 =?us-ascii?Q?kozhsioT5cN/FKLP3fXYaF5mNw6nVIufhXVorFg691JbhzfBj1r+3F/EfelM?=
 =?us-ascii?Q?slMR+55lPrP+ZOnCYg4NgSLjLWNefpeYfSEdeFGe3CqERn8XHTQw2nwWDSNX?=
 =?us-ascii?Q?QuHA3H7qXYZNGlddm/cyxeyEaR2PcRgJsJHBscRVi3IZfT916Q2Tp0jafbip?=
 =?us-ascii?Q?2zW1ZCfSvDTtO8J3M2ppyixks7u42s317W8etOhsSWSjWBgZe7IlWWiHJarO?=
 =?us-ascii?Q?DKnIjP85GiZfTlLy3isMyl6jOKtt6qRx1kLRxw98CQNaVGW37gdjuLSJBr1j?=
 =?us-ascii?Q?OgbEywLpZ5K/H+MiAjCvk7QG2mfytv8YdgLd81I5ZZCaL1OvGP1Ms9O48EuK?=
 =?us-ascii?Q?kEm0N8Nx5sU7srZco+cBSTavfKDFlnO+gKF7Xp9znWhYD0YNI4omlBlDWJUO?=
 =?us-ascii?Q?MpyDLsNTZGXt1uoKcKDvSoczkHtmeeTvtgD7lOzi7JXMkffH6twpEEhv7+1U?=
 =?us-ascii?Q?usorjSYO4qDwkoS/FCSc3t40T0+4nUmn0MVVNGNp1H/1AnRssXz8qJSzmZ5n?=
 =?us-ascii?Q?LH704yx+gIBCJ4/WRqlRNI2RJxWFImoADo4U9d20CmXe5RVNGnEKQZg0cxT1?=
 =?us-ascii?Q?mOO6yNCYkneU3lw9eW6vU475Gdzel4mbiy3HjlzwX+IEgt5as3sbVeFdWbwo?=
 =?us-ascii?Q?H0zrSPP70lZyf8yI5nODGi+OetACA0rw6shATfPm1durWkD0WIzpqEkqW6Oq?=
 =?us-ascii?Q?MzDqaFtysEJSOpszrSI5u7lpS6uWui3XfFNQ15VFVhf6fuJQJPz5MEU/BMyr?=
 =?us-ascii?Q?n0nJ0KBuaM3fb3dxV1G4aiBq5OfcBXxHvtNPnWfoTyLEaqqDTEMcmsX42clZ?=
 =?us-ascii?Q?ppneAO/ywrpam+jOAmpS7DbXeu/edKXUWZbkl6rRI5BLmb2gwdKy7rDhzmEO?=
 =?us-ascii?Q?DRNQ1SRZST23pda5dqiwiAV7buIIdrtxlZCwVgevrZOJQJlATkSNxHnE+TOL?=
 =?us-ascii?Q?1JVrDKf/bnhfZLYDDT7xQCsAfdOV9/pa4GwwLmjNmaAncdwtee+K786Xd4dt?=
 =?us-ascii?Q?U8W4cFZgkYMHd7K2QbzLwAGQIiFLXyVipqURYaOOkENYvydn//pTiBhNoHg/?=
 =?us-ascii?Q?L1jYG/G+dQ=3D=3D?=
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-OriginatorOrg: citrix.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: SA6PR03MB7760.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: c590037c-ee93-44d3-d8a2-08df2acb771c
X-MS-Exchange-CrossTenant-originalarrivaltime: 15 Oct 2026 14:49:07.4812
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: 89tVryfx/K8TyxOCKKauhbON9lTdJc6nA1yQu4TmNVZVrwQRDikLnv832e4Le9Zw/UMs+ifvCujPbfsQ7zpsmw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR03MB8335
X-purgate-ID: tlsNG-d25034/1792075751-01AC4A5B-A89ABD51/0/0
X-purgate-type: clean
X-purgate-size: 10816


Reviewed-by: Owen Smith <owen.smith@citrix.com>

________________________________________
From: win-pv-devel <win-pv-devel-bounces@lists.xenproject.org> on behalf of=
 Tu Dinh <ngoc-tu.dinh@vates.tech>
Sent: 15 October 2026 2:15 PM
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh
Subject: [PATCH v2] Add VIF interface V11

This version makes Count optional, and adds a MaxCount output to
QueryRingCount that represents the maximum number of rings supported by
the current XenVif.

Signed-off-by: Tu Dinh <ngoc-tu.dinh@vates.tech>
---
v2: Make QueryRingCount take both parameters as _Out_opt_.
---
 include/revision.h      |  3 +-
 include/vif_interface.h | 61 ++++++++++++++++++++++++++++++++----
 src/xenvif/vif.c        | 68 ++++++++++++++++++++++++++++++++++++++---
 3 files changed, 121 insertions(+), 11 deletions(-)

diff --git a/include/revision.h b/include/revision.h
index d23639f..4e6a454 100644
--- a/include/revision.h
+++ b/include/revision.h
@@ -46,6 +46,7 @@
     DEFINE_REVISION(0x09000002,  2,  9,   2,  1,   1),  \
     DEFINE_REVISION(0x09000003,  2,  10,  2,  1,   1),  \
     DEFINE_REVISION(0x09000004,  2,  10,  2,  1,   2),  \
-    DEFINE_REVISION(0x09000005,  2,  10,  2,  1,   3)
+    DEFINE_REVISION(0x09000005,  2,  10,  2,  1,   3),  \
+    DEFINE_REVISION(0x09000006,  2,  11,  2,  1,   3)

 #endif  // _REVISION_H
diff --git a/include/vif_interface.h b/include/vif_interface.h
index cc2f626..3139b13 100644
--- a/include/vif_interface.h
+++ b/include/vif_interface.h
@@ -567,7 +567,7 @@ typedef NTSTATUS
     _Out_ PULONGLONG            Value
     );

-/*! \typedef XENVIF_VIF_QUERY_RING_COUNT
+/*! \typedef XENVIF_VIF_QUERY_RING_COUNT_V8
     \brief Query the number of shared rings between frontend
     and backend

@@ -575,11 +575,26 @@ typedef NTSTATUS
     \param Count Buffer to receive the count
 */
 typedef VOID
-(*XENVIF_VIF_QUERY_RING_COUNT)(
+(*XENVIF_VIF_QUERY_RING_COUNT_V8)(
     _In_ PINTERFACE Interface,
     _Out_ PULONG    Count
     );

+/*! \typedef XENVIF_VIF_QUERY_RING_COUNT
+    \brief Query the number of shared rings between frontend
+    and backend
+
+    \param Interface The interface header
+    \param Count Buffer to receive the count
+    \param MaxCount Buffer to receive the maximum possible ring count
+*/
+typedef VOID
+(*XENVIF_VIF_QUERY_RING_COUNT)(
+    _In_ PINTERFACE     Interface,
+    _Out_opt_ PULONG    Count,
+    _Out_opt_ PULONG    MaxCount
+    );
+
 /*! \typedef XENVIF_VIF_UPDATE_HASH_MAPPING
     \brief Update the mapping of hash to transmitter/receiver ring

@@ -900,7 +915,7 @@ struct _XENVIF_VIF_INTERFACE_V8 {
     XENVIF_VIF_ENABLE_V8                            EnableVersion8;
     XENVIF_VIF_DISABLE                              Disable;
     XENVIF_VIF_QUERY_STATISTIC                      QueryStatistic;
-    XENVIF_VIF_QUERY_RING_COUNT                     QueryRingCount;
+    XENVIF_VIF_QUERY_RING_COUNT_V8                  QueryRingCountVersion8=
;
     XENVIF_VIF_UPDATE_HASH_MAPPING                  UpdateHashMapping;
     XENVIF_VIF_RECEIVER_RETURN_PACKET               ReceiverReturnPacket;
     XENVIF_VIF_RECEIVER_SET_OFFLOAD_OPTIONS         ReceiverSetOffloadOpti=
ons;
@@ -934,7 +949,7 @@ struct _XENVIF_VIF_INTERFACE_V9 {
     XENVIF_VIF_ENABLE_V9                            EnableVersion9;
     XENVIF_VIF_DISABLE                              Disable;
     XENVIF_VIF_QUERY_STATISTIC                      QueryStatistic;
-    XENVIF_VIF_QUERY_RING_COUNT                     QueryRingCount;
+    XENVIF_VIF_QUERY_RING_COUNT_V8                  QueryRingCountVersion8=
;
     XENVIF_VIF_UPDATE_HASH_MAPPING                  UpdateHashMapping;
     XENVIF_VIF_RECEIVER_RETURN_PACKET               ReceiverReturnPacket;
     XENVIF_VIF_RECEIVER_SET_OFFLOAD_OPTIONS         ReceiverSetOffloadOpti=
ons;
@@ -962,6 +977,40 @@ struct _XENVIF_VIF_INTERFACE_V9 {
     \ingroup interfaces
 */
 struct _XENVIF_VIF_INTERFACE_V10 {
+    INTERFACE                                       Interface;
+    XENVIF_VIF_ACQUIRE                              Acquire;
+    XENVIF_VIF_RELEASE                              Release;
+    XENVIF_VIF_ENABLE                               Enable;
+    XENVIF_VIF_DISABLE                              Disable;
+    XENVIF_VIF_QUERY_STATISTIC                      QueryStatistic;
+    XENVIF_VIF_QUERY_RING_COUNT_V8                  QueryRingCountVersion8=
;
+    XENVIF_VIF_UPDATE_HASH_MAPPING                  UpdateHashMapping;
+    XENVIF_VIF_RECEIVER_RETURN_PACKET               ReceiverReturnPacket;
+    XENVIF_VIF_RECEIVER_SET_OFFLOAD_OPTIONS         ReceiverSetOffloadOpti=
ons;
+    XENVIF_VIF_RECEIVER_SET_BACKFILL_SIZE           ReceiverSetBackfillSiz=
e;
+    XENVIF_VIF_RECEIVER_QUERY_RING_SIZE             ReceiverQueryRingSize;
+    XENVIF_VIF_RECEIVER_SET_HASH_ALGORITHM          ReceiverSetHashAlgorit=
hm;
+    XENVIF_VIF_RECEIVER_QUERY_HASH_CAPABILITIES     ReceiverQueryHashCapab=
ilities;
+    XENVIF_VIF_RECEIVER_UPDATE_HASH_PARAMETERS      ReceiverUpdateHashPara=
meters;
+    XENVIF_VIF_TRANSMITTER_QUEUE_PACKET             TransmitterQueuePacket=
;
+    XENVIF_VIF_TRANSMITTER_QUERY_OFFLOAD_OPTIONS    TransmitterQueryOffloa=
dOptions;
+    XENVIF_VIF_TRANSMITTER_QUERY_LARGE_PACKET_SIZE  TransmitterQueryLargeP=
acketSize;
+    XENVIF_VIF_TRANSMITTER_QUERY_RING_SIZE          TransmitterQueryRingSi=
ze;
+    XENVIF_VIF_MAC_QUERY_STATE                      MacQueryState;
+    XENVIF_VIF_MAC_QUERY_MAXIMUM_FRAME_SIZE         MacQueryMaximumFrameSi=
ze;
+    XENVIF_VIF_MAC_QUERY_PERMANENT_ADDRESS          MacQueryPermanentAddre=
ss;
+    XENVIF_VIF_MAC_QUERY_CURRENT_ADDRESS            MacQueryCurrentAddress=
;
+    XENVIF_VIF_MAC_QUERY_MULTICAST_ADDRESSES        MacQueryMulticastAddre=
sses;
+    XENVIF_VIF_MAC_SET_MULTICAST_ADDRESSES          MacSetMulticastAddress=
es;
+    XENVIF_VIF_MAC_SET_FILTER_LEVEL                 MacSetFilterLevel;
+    XENVIF_VIF_MAC_QUERY_FILTER_LEVEL               MacQueryFilterLevel;
+};
+
+/*! \struct _XENVIF_VIF_INTERFACE_V11
+    \brief VIF interface version 11
+    \ingroup interfaces
+*/
+struct _XENVIF_VIF_INTERFACE_V11 {
     INTERFACE                                       Interface;
     XENVIF_VIF_ACQUIRE                              Acquire;
     XENVIF_VIF_RELEASE                              Release;
@@ -991,7 +1040,7 @@ struct _XENVIF_VIF_INTERFACE_V10 {
     XENVIF_VIF_MAC_QUERY_FILTER_LEVEL               MacQueryFilterLevel;
 };

-typedef struct _XENVIF_VIF_INTERFACE_V10 XENVIF_VIF_INTERFACE, *PXENVIF_VI=
F_INTERFACE;
+typedef struct _XENVIF_VIF_INTERFACE_V11 XENVIF_VIF_INTERFACE, *PXENVIF_VI=
F_INTERFACE;

 /*! \def XENVIF_VIF
     \brief Macro at assist in method invocation
@@ -1002,6 +1051,6 @@ typedef struct _XENVIF_VIF_INTERFACE_V10 XENVIF_VIF_I=
NTERFACE, *PXENVIF_VIF_INTE
 #endif  // _WINDLL

 #define XENVIF_VIF_INTERFACE_VERSION_MIN    8
-#define XENVIF_VIF_INTERFACE_VERSION_MAX    10
+#define XENVIF_VIF_INTERFACE_VERSION_MAX    11

 #endif  // _XENVIF_INTERFACE_H
diff --git a/src/xenvif/vif.c b/src/xenvif/vif.c
index 4937bb6..db44e37 100644
--- a/src/xenvif/vif.c
+++ b/src/xenvif/vif.c
@@ -538,18 +538,31 @@ done:
 static VOID
 VifQueryRingCount(
     _In_ PINTERFACE     Interface,
-    _Out_ PULONG        Count
+    _Out_opt_ PULONG    Count,
+    _Out_opt_ PULONG    MaxCount
     )
 {
     PXENVIF_VIF_CONTEXT Context =3D Interface->Context;

     AcquireMrswLockShared(&Context->Lock);

-    *Count =3D FrontendGetNumQueues(Context->Frontend);
+    if (Count)
+        *Count =3D FrontendGetNumQueues(Context->Frontend);
+    if (MaxCount)
+        *MaxCount =3D FrontendGetMaxQueues(Context->Frontend);

     ReleaseMrswLockShared(&Context->Lock);
 }

+static VOID
+VifQueryRingCountVersion8(
+    _In_ PINTERFACE Interface,
+    _Out_ PULONG    Count
+    )
+{
+    VifQueryRingCount(Interface, Count, NULL);
+}
+
 static NTSTATUS
 VifUpdateHashMapping(
     _In_ PINTERFACE         Interface,
@@ -1008,7 +1021,7 @@ static struct _XENVIF_VIF_INTERFACE_V8 VifInterfaceVe=
rsion8 =3D {
     VifEnableVersion8,
     VifDisable,
     VifQueryStatistic,
-    VifQueryRingCount,
+    VifQueryRingCountVersion8,
     VifUpdateHashMapping,
     VifReceiverReturnPacket,
     VifReceiverSetOffloadOptions,
@@ -1038,7 +1051,7 @@ static struct _XENVIF_VIF_INTERFACE_V9 VifInterfaceVe=
rsion9 =3D {
     VifEnableVersion9,
     VifDisable,
     VifQueryStatistic,
-    VifQueryRingCount,
+    VifQueryRingCountVersion8,
     VifUpdateHashMapping,
     VifReceiverReturnPacket,
     VifReceiverSetOffloadOptions,
@@ -1068,6 +1081,36 @@ static struct _XENVIF_VIF_INTERFACE_V10 VifInterface=
Version10 =3D {
     VifEnable,
     VifDisable,
     VifQueryStatistic,
+    VifQueryRingCountVersion8,
+    VifUpdateHashMapping,
+    VifReceiverReturnPacket,
+    VifReceiverSetOffloadOptions,
+    VifReceiverSetBackfillSize,
+    VifReceiverQueryRingSize,
+    VifReceiverSetHashAlgorithm,
+    VifReceiverQueryHashCapabilities,
+    VifReceiverUpdateHashParameters,
+    VifTransmitterQueuePacket,
+    VifTransmitterQueryOffloadOptions,
+    VifTransmitterQueryLargePacketSize,
+    VifTransmitterQueryRingSize,
+    VifMacQueryState,
+    VifMacQueryMaximumFrameSize,
+    VifMacQueryPermanentAddress,
+    VifMacQueryCurrentAddress,
+    VifMacQueryMulticastAddresses,
+    VifMacSetMulticastAddresses,
+    VifMacSetFilterLevel,
+    VifMacQueryFilterLevel
+};
+
+static struct _XENVIF_VIF_INTERFACE_V11 VifInterfaceVersion11 =3D {
+    { sizeof (struct _XENVIF_VIF_INTERFACE_V11), 11, NULL, NULL, NULL },
+    VifAcquire,
+    VifRelease,
+    VifEnable,
+    VifDisable,
+    VifQueryStatistic,
     VifQueryRingCount,
     VifUpdateHashMapping,
     VifReceiverReturnPacket,
@@ -1211,6 +1254,23 @@ VifGetInterface(
         status =3D STATUS_SUCCESS;
         break;
     }
+    case 11: {
+        struct _XENVIF_VIF_INTERFACE_V11 *VifInterface;
+
+        VifInterface =3D (struct _XENVIF_VIF_INTERFACE_V11 *)Interface;
+
+        status =3D STATUS_BUFFER_OVERFLOW;
+        if (Size < sizeof (struct _XENVIF_VIF_INTERFACE_V11))
+            break;
+
+        *VifInterface =3D VifInterfaceVersion11;
+
+        ASSERT3U(Interface->Version, =3D=3D, Version);
+        Interface->Context =3D Context;
+
+        status =3D STATUS_SUCCESS;
+        break;
+    }
     default:
         status =3D STATUS_NOT_SUPPORTED;
         break;
--
2.55.0.windows.3


--
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates solutions

web: https://vates.tech


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 15 14:51:23 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 15 Oct 2026 14:51:23 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1450747.1666160 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHMnj-00043r-1K; Thu, 15 Oct 2026 14:51:23 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1450747.1666160; Thu, 15 Oct 2026 14:51:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHMni-00043k-Us; Thu, 15 Oct 2026 14:51:22 +0000
Received: by outflank-mailman (input) for mailman id 1450747;
 Thu, 15 Oct 2026 14:51:22 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <owen.smith@citrix.com>) id 1xHMnh-00043c-TG
 for win-pv-devel@lists.xenproject.org; Thu, 15 Oct 2026 14:51:22 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xHMnh-0031o9-9m
 for win-pv-devel@lists.xenproject.org; Thu, 15 Oct 2026 16:51:21 +0200
Received: from [10.42.69.2] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ad0e868-bab6-0a2a0a5309dd-0a2a4502ebf2-6
 for <win-pv-devel@lists.xenproject.org>; Thu, 15 Oct 2026 16:51:21 +0200
Received: from [52.101.53.7]
 (helo=BL0PR03CU003.outbound.protection.outlook.com)
 by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ad0e868-6ca4-0a2a45020019-3465350778a1-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 15 Oct 2026 16:51:20 +0200
Received: from SA6PR03MB7760.namprd03.prod.outlook.com (2603:10b6:806:43c::5)
 by IA1PR03MB8335.namprd03.prod.outlook.com (2603:10b6:208:5b1::7)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.522.14; Thu, 15 Oct
 2026 14:51:18 +0000
Received: from SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38]) by SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38%5]) with mapi id 15.21.0522.012; Thu, 15 Oct 2026
 14:51:18 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:x-ms-exchange-senderadcheck"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
 b=iPgkULVpfkA82YD79eWf21SOIQyaTbRCrEDkYyrkTkg/IILhQ/5DmaWslivTGXp53BCtFZfx6xcRGgwVU8wxClRIbPy+tKVHWoxYOmuZi+EmaKcy08evtVL7BLJ776+N1tkVW1U1KR/mrrWVcdxvPSWXo6ebNoMADcyleZ4+yfj+vkCOIwXA3yKiRa9Wui9oXp4Cr9yXvrSZly92LU/jWzVJ1u5klKVu4HscJrRK0N+4WHE9Xysli3Wo4w/LVm/ZotYc5wIGJOVCOgA3Sl2dfS/XDPMLECaeXmunad9FOn+k06vLWl3bwZKySn6SpbsqAPsHIpTcvRhs9sOjBYswZg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector10001;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=JlZF1vrwoKYncrRV91vbTa6MDrnnGoNXLk4PANWTUMw=;
 b=GGbDIbgU8bYO5AGBNGP/FI2xR9SrhOwJKA1FmU2lfcbLvgW3aseacGTVRfea4x6rn/1mnyu1Xk+3ad1oIC6qYspzK+uFeQv45X4vO9qgqE8dcgYAEVqowB9hZc5Rbi2gRZW0bQ+TYUCf3w6V5INOM+rOfTDWuvL362yRYiJyQvMPTphV+9KdL1JhTAuczMY8cmiDIa3cW4Kn+oiPUYfFrArMRzabqfYLSZuvx8GxeelanXosgwui/6zWlp+9Iqq1jsc5ojyzE91ArADVvAvV1MpVTi/4Yh3jP7PKhm231VVdBNQayQ8dJh1+7K9K+KxDf7DByLoVcb+GJg8ki+AEog==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=JlZF1vrwoKYncrRV91vbTa6MDrnnGoNXLk4PANWTUMw=;
 b=Eh0OYDx62/nUx2VP3t7s098am7GWJ9RP/t5+LVSU1KBQCdL6DVESRXfoY1FJjuNh/y/G1UYray8sSudRopuKw1PlhZG/2xGxUQjM9kis5NRS1E4mCQC7OwL6AtNI4Agz94uKrb0a7rIVSvCTdxKbquc1Am76t+I1w78u2yRWJ88=
From: Owen Smith <owen.smith@citrix.com>
To: Tu Dinh <ngoc-tu.dinh@vates.tech>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Subject: Re: [PATCH v2 1/3] Add definitions and usage of VIF interface V11
Thread-Topic: [PATCH v2 1/3] Add definitions and usage of VIF interface V11
Thread-Index: AQHdXKeFKmnsUwxUKUmcFgqhjGfDuLb+r10k
Date: Thu, 15 Oct 2026 14:51:18 +0000
Message-ID:
 <SA6PR03MB7760E60037F91080C21AE936FE9C2@SA6PR03MB7760.namprd03.prod.outlook.com>
References:
 <1792070155.8631fc262581453bbf619ec5b2062170.1a13fb47d080008425@vates.tech>
 <1792070225.8631fc262581453bbf619ec5b2062170.1a13fb58d5c0008425@vates.tech>
In-Reply-To:
 <1792070225.8631fc262581453bbf619ec5b2062170.1a13fb58d5c0008425@vates.tech>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
msip_labels:
authentication-results: mx.microsoft.com 1; dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=citrix.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: SA6PR03MB7760:EE_|IA1PR03MB8335:EE_
x-ms-office365-filtering-correlation-id: a1eb364e-e96b-4f71-b408-08df2acbc54c
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam:
 BCL:0;ARA:13230040|1800799024|376014|366016|23010399003|38070700021|56012099006|11063799006|4143699003|261009220027099003|261009223027099003|261009221227099003|261009221727099003|261009223327099003|10067099003|22082099003|18002099003|6133799003|3023799007;
x-microsoft-antispam-message-info:
 FtEMxRcib6wGx8HlMY5a0yvwLlgxRCnoygwZORWAdgQGRzCdbH/d9cWuZPAezALk9CqLdJptANEkmhDrhWk5HdJQRTu0V5+jDj86rH1CghGOOjrwNdFNztubGJT+KJPiNQF9pArOan5GDK45Boe2IzPJ7eZnAdWNru6nv+SCfUVyAHvVeX/kvtp0ftWeyeV1GXwLZU3+9Zck9CgmL6tiRuIdnqeTq9yv5ebHH+5r85D3Vy8ndpd/2kbBenqsAID31O1Kac9FbYhMiOvfkI0a+0kGO8HVYhLvnmmEV1AJLiXZ3NDd8SpfhEtLsKsWQmMZDN8cyC7C9q7neIWAxa63qOtP9RqDC3cqBHVHUc+4YuWRVZ8hk1jqY8gij308qY5e/uRVrgV5hI8hlRzge/zHNOtLdYPm4wiB0NFrQ6W9nbH89n1iW0LckDh/SwR0JFEK+euNMzwhEvQCOBC30aqe6o2Yj4mdaMa7JniljVbibs9ROAabslpNw/3c8qTnBtgZpU1o4LcYkA57l7QnXKw4B71J1E3jptInuI/5FphBlkj+qtEaKQN9fjzw3WIvBECU6STk45xd6tB8mZAMnARJN9Juk6Jumwx0bCpQSMGn5HdQ8BCgM5R3VdbS3cumTt4EOY5ZC3j9EUNLBQxUYUlkJ1sA5EHI8DJtNCp081P0WS8=
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SA6PR03MB7760.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(366016)(23010399003)(38070700021)(56012099006)(11063799006)(4143699003)(261009220027099003)(261009223027099003)(261009221227099003)(261009221727099003)(261009223327099003)(10067099003)(22082099003)(18002099003)(6133799003)(3023799007);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?us-ascii?Q?7CvS5fiVtgzS/U3h8z+MlA7TaaEGJZELa6ljixPb6/seKlZ6RUMbs0lmedqZ?=
 =?us-ascii?Q?4wwD/PVvh5oheOL9Xgs4djd3T0lOMyd4XfV5cfAy5BUe/crAz/xdemaB/7as?=
 =?us-ascii?Q?93W/HqWFhSfmIHyB8Gs/sg4nOJHrWB7v9ChQ3DdNzBhnryDES7ujbj2J/PPM?=
 =?us-ascii?Q?RSj14RFfQKxUHM6tfTtQN0g/y+LHqapcra7rCVYe78q6v2THhdANbRaPi3VP?=
 =?us-ascii?Q?oJ+CmbdIxLPPpXqvq+dmT3Aes+Fw0VnZpnevGP8Fk+YlwWSDxuLNUynPqGac?=
 =?us-ascii?Q?lwOhrV5df2OdDEc4VifG7j+aH0t76px4kocHKu2/FNj0Sqnv7KTO02NUwxU8?=
 =?us-ascii?Q?1ii9YKcV5SD9Ps/aCJFRmeQmjqhIXMHgs6HFOwNjAs1fHbCTdJFMU5Aw6GId?=
 =?us-ascii?Q?9T0vO16j7OKuOchlbj4qxyoKg+HhjnJJbSduImn3MFY5h4vwSu5Orh2S8E57?=
 =?us-ascii?Q?/5EX28MSHhixrB5oO3d8vxwhh+bMV5PPgDjZuEwqk0r5To4VEGLPVSysBzlW?=
 =?us-ascii?Q?gBCghxeIffYn8+OEhozANPpMbw+twsPBU3LGAU2mj9Hulc5qLkgFv/PD5DQH?=
 =?us-ascii?Q?G6WQ+SMAPn4KERsd1cXdgPaLEPMNEw9I46SYVE9m9+4xjY98jB8JH0El5zYs?=
 =?us-ascii?Q?j+EngoY97NTUqqMThtBf1q0gEXGywpynChjs6+YHA/xudzmfPakvOLQDtZGI?=
 =?us-ascii?Q?qOPH7wBWVuf3O3hxJlX0tvR10PDEcKcruQrAD6XyfqpxK/KrzFuLLRZhonsZ?=
 =?us-ascii?Q?2RB/BDp7WiFunCWGR5Ny5XvwiNcynBBmFCh3j6dC0sOMvqla8SiX5drWX2hC?=
 =?us-ascii?Q?E69cXmiUQ/4Roy2poZb6GGd7ZoZSlIHkgRK1SCh2b1Tl6PMNj0CTflf9Czy/?=
 =?us-ascii?Q?OFmBeGuNLdRENs9S5zUF8iZxCIh8vtPgEJnqJP5jvBP+6pbHYCH141wrG8M6?=
 =?us-ascii?Q?+Ipr46zWutpLqNW7KRA88LZqNfzHXy9jiYWcBVTxTUkXggO+ILvzpd6Rerkm?=
 =?us-ascii?Q?I/bt06WT7qBnM9G0J04p+bJoJNYkX3KwXT3kGC4f5rXp2zWoobXKfXM0or81?=
 =?us-ascii?Q?613+lM95T9gDEQtSfZfKLuHw7yzCfYTXFpLgCAZJz3YwaR1pFHoOA+DXqz3M?=
 =?us-ascii?Q?fnxYt24LoNSrXjY824MS0XPdEiXwgF6hY1oeFMBO92h42r/b5xC3owgzpT7l?=
 =?us-ascii?Q?mVMpMk5CLxLu3e4g9vjQblX3wD3BOvpHV2pty/Hhg8FWRwamrp39sljtNjNb?=
 =?us-ascii?Q?JfURsu3s3yqmVWD+U6aio2Sn1B5DSiIQqgBYzL5B/UQZuNlGYwzeDuBGANSl?=
 =?us-ascii?Q?b4IgAxDr37UEwizPY52op8Q6OlnJ5tP+LEeNCpPdFe0kiwB7yOkRc7BR0CPb?=
 =?us-ascii?Q?tDTc8v8C2MpYA0x3cR3x+20bqGn4N+KClmydSNBWXGe06mNzwfdF/GPSKFED?=
 =?us-ascii?Q?y6IXKg6RM2MtFPQpBpObvdxG8iiSNKjir99Q2Bosz+Wv/CG6Le7bYrZaPla8?=
 =?us-ascii?Q?dyXXuK9SAlz2iTL+oBW+i+tvfn9MMEdfDb+UQZWckh28YaVahxPj6SL655k1?=
 =?us-ascii?Q?CRmaqV/6YKtAF1oVvuvyasLJ/K4C9XfI32Um1wO+NtfQlGf3RPHZ7+kjJ7A9?=
 =?us-ascii?Q?HZMU22ya1RnBbSFGPMP5iAzWPZuedwwMPUtiQnssBjTrwgM5Pa1Av3DhetUZ?=
 =?us-ascii?Q?gj556UrZIKQzBLxmpzOJfNjHHjeaUWBfVdgC7alNVEN+QxoK?=
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-OriginatorOrg: citrix.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: SA6PR03MB7760.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: a1eb364e-e96b-4f71-b408-08df2acbc54c
X-MS-Exchange-CrossTenant-originalarrivaltime: 15 Oct 2026 14:51:18.6703
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: Zntsjz9xyu2Xtxx/19FCgPlaM75zJa4/oavdB7XNt0FByNb4evAoc6mAec5zP/8Ln+XPSp4+dwILbPadECk4PQ==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR03MB8335
X-purgate-ID: tlsNG-720697/1792075881-F26B72AC-F76AC2E5/0/0
X-purgate-type: clean
X-purgate-size: 9861

I encountered an unusual issue applying this patch - the xennet.inf chunk
did not apply, inspecting the patch a a spurious "3D" was inserted in sever=
al
locations, which caused the patch to fail (this could be outlook mangling t=
he
file, as its not visible when inspecting the patch in outlook itself)
I've corrected this during the apply

Reviewed-by: Owen Smith <owen.smith@citrix.com>

________________________________________
From: win-pv-devel <win-pv-devel-bounces@lists.xenproject.org> on behalf of=
 Tu Dinh <ngoc-tu.dinh@vates.tech>
Sent: 15 October 2026 2:16 PM
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh
Subject: [PATCH v2 1/3] Add definitions and usage of VIF interface V11

Requires a non-functional change in AdapterSetGeneralAttributes to
account for the new MaxCount parameter.

Testing shows that an old driver with FeatureScore=3D0xFE will still
outrank a new driver with FeatureScore=3D0xFF even if its device ID no
longer matches. So delete the TODO line in the INF.

Signed-off-by: Tu Dinh <ngoc-tu.dinh@vates.tech>
---
v2: Pass NULL to MaxRingCount according to V11 changes.
---
 include/vif_interface.h | 67 +++++++++++++++++++++++++++++++++++------
 src/xennet.inf          | 14 ++++-----
 src/xennet/adapter.c    |  3 +-
 3 files changed, 66 insertions(+), 18 deletions(-)

diff --git a/include/vif_interface.h b/include/vif_interface.h
index 05d472e..3139b13 100644
--- a/include/vif_interface.h
+++ b/include/vif_interface.h
@@ -499,9 +499,9 @@ typedef union _XENVIF_VIF_CALLBACK_PARAMETERS_V10 XENVI=
F_VIF_CALLBACK_PARAMETERS
 */
 typedef VOID
 (*XENVIF_VIF_CALLBACK)(
-    _In_opt_ PVOID                          Argument,
-    _In_ XENVIF_VIF_CALLBACK_TYPE           Type,
-    _In_ PXENVIF_VIF_CALLBACK_PARAMETERS    Parameters
+    _In_opt_ PVOID                              Argument,
+    _In_ XENVIF_VIF_CALLBACK_TYPE               Type,
+    _In_opt_ PXENVIF_VIF_CALLBACK_PARAMETERS    Parameters
     );

 typedef NTSTATUS
@@ -567,7 +567,7 @@ typedef NTSTATUS
     _Out_ PULONGLONG            Value
     );

-/*! \typedef XENVIF_VIF_QUERY_RING_COUNT
+/*! \typedef XENVIF_VIF_QUERY_RING_COUNT_V8
     \brief Query the number of shared rings between frontend
     and backend

@@ -575,11 +575,26 @@ typedef NTSTATUS
     \param Count Buffer to receive the count
 */
 typedef VOID
-(*XENVIF_VIF_QUERY_RING_COUNT)(
+(*XENVIF_VIF_QUERY_RING_COUNT_V8)(
     _In_ PINTERFACE Interface,
     _Out_ PULONG    Count
     );

+/*! \typedef XENVIF_VIF_QUERY_RING_COUNT
+    \brief Query the number of shared rings between frontend
+    and backend
+
+    \param Interface The interface header
+    \param Count Buffer to receive the count
+    \param MaxCount Buffer to receive the maximum possible ring count
+*/
+typedef VOID
+(*XENVIF_VIF_QUERY_RING_COUNT)(
+    _In_ PINTERFACE     Interface,
+    _Out_opt_ PULONG    Count,
+    _Out_opt_ PULONG    MaxCount
+    );
+
 /*! \typedef XENVIF_VIF_UPDATE_HASH_MAPPING
     \brief Update the mapping of hash to transmitter/receiver ring

@@ -900,7 +915,7 @@ struct _XENVIF_VIF_INTERFACE_V8 {
     XENVIF_VIF_ENABLE_V8                            EnableVersion8;
     XENVIF_VIF_DISABLE                              Disable;
     XENVIF_VIF_QUERY_STATISTIC                      QueryStatistic;
-    XENVIF_VIF_QUERY_RING_COUNT                     QueryRingCount;
+    XENVIF_VIF_QUERY_RING_COUNT_V8                  QueryRingCountVersion8=
;
     XENVIF_VIF_UPDATE_HASH_MAPPING                  UpdateHashMapping;
     XENVIF_VIF_RECEIVER_RETURN_PACKET               ReceiverReturnPacket;
     XENVIF_VIF_RECEIVER_SET_OFFLOAD_OPTIONS         ReceiverSetOffloadOpti=
ons;
@@ -934,7 +949,7 @@ struct _XENVIF_VIF_INTERFACE_V9 {
     XENVIF_VIF_ENABLE_V9                            EnableVersion9;
     XENVIF_VIF_DISABLE                              Disable;
     XENVIF_VIF_QUERY_STATISTIC                      QueryStatistic;
-    XENVIF_VIF_QUERY_RING_COUNT                     QueryRingCount;
+    XENVIF_VIF_QUERY_RING_COUNT_V8                  QueryRingCountVersion8=
;
     XENVIF_VIF_UPDATE_HASH_MAPPING                  UpdateHashMapping;
     XENVIF_VIF_RECEIVER_RETURN_PACKET               ReceiverReturnPacket;
     XENVIF_VIF_RECEIVER_SET_OFFLOAD_OPTIONS         ReceiverSetOffloadOpti=
ons;
@@ -962,6 +977,40 @@ struct _XENVIF_VIF_INTERFACE_V9 {
     \ingroup interfaces
 */
 struct _XENVIF_VIF_INTERFACE_V10 {
+    INTERFACE                                       Interface;
+    XENVIF_VIF_ACQUIRE                              Acquire;
+    XENVIF_VIF_RELEASE                              Release;
+    XENVIF_VIF_ENABLE                               Enable;
+    XENVIF_VIF_DISABLE                              Disable;
+    XENVIF_VIF_QUERY_STATISTIC                      QueryStatistic;
+    XENVIF_VIF_QUERY_RING_COUNT_V8                  QueryRingCountVersion8=
;
+    XENVIF_VIF_UPDATE_HASH_MAPPING                  UpdateHashMapping;
+    XENVIF_VIF_RECEIVER_RETURN_PACKET               ReceiverReturnPacket;
+    XENVIF_VIF_RECEIVER_SET_OFFLOAD_OPTIONS         ReceiverSetOffloadOpti=
ons;
+    XENVIF_VIF_RECEIVER_SET_BACKFILL_SIZE           ReceiverSetBackfillSiz=
e;
+    XENVIF_VIF_RECEIVER_QUERY_RING_SIZE             ReceiverQueryRingSize;
+    XENVIF_VIF_RECEIVER_SET_HASH_ALGORITHM          ReceiverSetHashAlgorit=
hm;
+    XENVIF_VIF_RECEIVER_QUERY_HASH_CAPABILITIES     ReceiverQueryHashCapab=
ilities;
+    XENVIF_VIF_RECEIVER_UPDATE_HASH_PARAMETERS      ReceiverUpdateHashPara=
meters;
+    XENVIF_VIF_TRANSMITTER_QUEUE_PACKET             TransmitterQueuePacket=
;
+    XENVIF_VIF_TRANSMITTER_QUERY_OFFLOAD_OPTIONS    TransmitterQueryOffloa=
dOptions;
+    XENVIF_VIF_TRANSMITTER_QUERY_LARGE_PACKET_SIZE  TransmitterQueryLargeP=
acketSize;
+    XENVIF_VIF_TRANSMITTER_QUERY_RING_SIZE          TransmitterQueryRingSi=
ze;
+    XENVIF_VIF_MAC_QUERY_STATE                      MacQueryState;
+    XENVIF_VIF_MAC_QUERY_MAXIMUM_FRAME_SIZE         MacQueryMaximumFrameSi=
ze;
+    XENVIF_VIF_MAC_QUERY_PERMANENT_ADDRESS          MacQueryPermanentAddre=
ss;
+    XENVIF_VIF_MAC_QUERY_CURRENT_ADDRESS            MacQueryCurrentAddress=
;
+    XENVIF_VIF_MAC_QUERY_MULTICAST_ADDRESSES        MacQueryMulticastAddre=
sses;
+    XENVIF_VIF_MAC_SET_MULTICAST_ADDRESSES          MacSetMulticastAddress=
es;
+    XENVIF_VIF_MAC_SET_FILTER_LEVEL                 MacSetFilterLevel;
+    XENVIF_VIF_MAC_QUERY_FILTER_LEVEL               MacQueryFilterLevel;
+};
+
+/*! \struct _XENVIF_VIF_INTERFACE_V11
+    \brief VIF interface version 11
+    \ingroup interfaces
+*/
+struct _XENVIF_VIF_INTERFACE_V11 {
     INTERFACE                                       Interface;
     XENVIF_VIF_ACQUIRE                              Acquire;
     XENVIF_VIF_RELEASE                              Release;
@@ -991,7 +1040,7 @@ struct _XENVIF_VIF_INTERFACE_V10 {
     XENVIF_VIF_MAC_QUERY_FILTER_LEVEL               MacQueryFilterLevel;
 };

-typedef struct _XENVIF_VIF_INTERFACE_V10 XENVIF_VIF_INTERFACE, *PXENVIF_VI=
F_INTERFACE;
+typedef struct _XENVIF_VIF_INTERFACE_V11 XENVIF_VIF_INTERFACE, *PXENVIF_VI=
F_INTERFACE;

 /*! \def XENVIF_VIF
     \brief Macro at assist in method invocation
@@ -1002,6 +1051,6 @@ typedef struct _XENVIF_VIF_INTERFACE_V10 XENVIF_VIF_I=
NTERFACE, *PXENVIF_VIF_INTE
 #endif  // _WINDLL

 #define XENVIF_VIF_INTERFACE_VERSION_MIN    8
-#define XENVIF_VIF_INTERFACE_VERSION_MAX    10
+#define XENVIF_VIF_INTERFACE_VERSION_MAX    11

 #endif  // _XENVIF_INTERFACE_H
diff --git a/src/xennet.inf b/src/xennet.inf
index 79730e8..49a1733 100644
--- a/src/xennet.inf
+++ b/src/xennet.inf
@@ -56,15 +56,15 @@ xennet.sys

 [Inst.NT@INF_ARCH@]
 %XenNetName%=3DXenNet_Inst,\
-XENVIF\VEN_@VENDOR_PREFIX@@VENDOR_DEVICE_ID@&DEV_NET&REV_09000005,\
-XENVIF\VEN_@VENDOR_PREFIX@0001&DEV_NET&REV_09000005,\
-XENVIF\VEN_@VENDOR_PREFIX@0002&DEV_NET&REV_09000005
+XENVIF\VEN_@VENDOR_PREFIX@@VENDOR_DEVICE_ID@&DEV_NET&REV_09000006,\
+XENVIF\VEN_@VENDOR_PREFIX@0001&DEV_NET&REV_09000006,\
+XENVIF\VEN_@VENDOR_PREFIX@0002&DEV_NET&REV_09000006

 [Inst.NT@INF_ARCH@.10.0...25398]
 %XenNetName%=3DXenNet_Inst_25H2,\
-XENVIF\VEN_@VENDOR_PREFIX@@VENDOR_DEVICE_ID@&DEV_NET&REV_09000005,\
-XENVIF\VEN_@VENDOR_PREFIX@0001&DEV_NET&REV_09000005,\
-XENVIF\VEN_@VENDOR_PREFIX@0002&DEV_NET&REV_09000005
+XENVIF\VEN_@VENDOR_PREFIX@@VENDOR_DEVICE_ID@&DEV_NET&REV_09000006,\
+XENVIF\VEN_@VENDOR_PREFIX@0001&DEV_NET&REV_09000006,\
+XENVIF\VEN_@VENDOR_PREFIX@0002&DEV_NET&REV_09000006

 [XenNet_Inst]
 Characteristics=3D0x84
@@ -74,7 +74,6 @@ BusType=3D1
 *PhysicalMediaType=3D14  ; NdisPhysicalMedium802_3
 CopyFiles=3DXenNet_Copyfiles
 AddReg=3DXennet_Inst_AddReg
-; TODO: Remove during next PDO version bump
 FeatureScore=3D0xFE

 [XenNet_Inst_25H2]
@@ -85,7 +84,6 @@ BusType=3D1
 *PhysicalMediaType=3D14  ; NdisPhysicalMedium802_3
 CopyFiles=3DXenNet_Copyfiles
 AddReg=3DXennet_Inst_AddReg
-; TODO: Remove during next PDO version bump
 FeatureScore=3D0xFE

 [XenNet_Inst_AddReg]
diff --git a/src/xennet/adapter.c b/src/xennet/adapter.c
index 965315d..7cb910c 100644
--- a/src/xennet/adapter.c
+++ b/src/xennet/adapter.c
@@ -3110,7 +3110,8 @@ AdapterSetGeneralAttributes(

     XENVIF_VIF(QueryRingCount,
                &Adapter->VifInterface,
-               &Rss.NumberOfReceiveQueues);
+               &Rss.NumberOfReceiveQueues,
+               NULL);
     Rss.NumberOfInterruptMessages =3D Rss.NumberOfReceiveQueues;

     if ((ULONG)Adapter->Properties.numrssqueues < Rss.NumberOfReceiveQueue=
s)
--
2.55.0.windows.3


--
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates solutions

web: https://vates.tech


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 15 14:51:37 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 15 Oct 2026 14:51:37 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1450749.1666163 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHMnx-00047x-4H; Thu, 15 Oct 2026 14:51:37 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1450749.1666163; Thu, 15 Oct 2026 14:51:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHMnx-00047q-1F; Thu, 15 Oct 2026 14:51:37 +0000
Received: by outflank-mailman (input) for mailman id 1450749;
 Thu, 15 Oct 2026 14:51:36 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <owen.smith@citrix.com>) id 1xHMnw-00047j-KK
 for win-pv-devel@lists.xenproject.org; Thu, 15 Oct 2026 14:51:36 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xHMnw-008NHy-0m
 for win-pv-devel@lists.xenproject.org; Thu, 15 Oct 2026 16:51:36 +0200
Received: from [10.42.69.3] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ad0e876-bab6-0a2a0a5309dd-0a2a4503ae94-6
 for <win-pv-devel@lists.xenproject.org>; Thu, 15 Oct 2026 16:51:36 +0200
Received: from [40.107.201.43]
 (helo=CH4PR04CU002.outbound.protection.outlook.com)
 by tlsNG-33051d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ad0e876-fae8-0a2a45030019-286bc92bc073-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 15 Oct 2026 16:51:35 +0200
Received: from SA6PR03MB7760.namprd03.prod.outlook.com (2603:10b6:806:43c::5)
 by IA1PR03MB8335.namprd03.prod.outlook.com (2603:10b6:208:5b1::7)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.522.14; Thu, 15 Oct
 2026 14:51:33 +0000
Received: from SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38]) by SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38%5]) with mapi id 15.21.0522.012; Thu, 15 Oct 2026
 14:51:33 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:x-ms-exchange-senderadcheck"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
 b=pofku9QfbH3t8bqY3koegSSfUc0+2A0tsg00Rhbgvu9HwoFCMmZRvsg5/y0QS5X6aA/hBioyJ1jUx+GWQDIqr8tJ8SHTr94N0DivHNVJohXKjSWBZRiR+sSvDcgne6db6o4PTJc6rUs3KOJV9bsXDUbtHEvEntOWkftQeDISsDaOt0vh5GKhSxa6c1/hgZY64MQ4qrttiRMNOv2a9jwDDYZRh7lXRRR77KVGIEvx4qE8lMvZJJ8AGMHgNwO6CekLqFMMoW5RY2pMnnw044ZGOpWpVqvTDY9YeRTW6zTmsE9hg+4nEyrz1sLvD/QSldmb15vxwsaoNpJGWtP/AynZ6Q==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector10001;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=E1mIgSJsp9huthmze9qJTxbKxkPB1bm5mr4Qs4kzmLU=;
 b=bLMT2BQx4BIQXM5+fQWJlQr8+EYXP3nReP6YB3SMDpQpNkXytyYSCqco+1xQTi06SAriyToLlDpsarGo2vgeJ6gULPerk+xNMHVFjEJN9GqMJ6U/A8qDLq48t9FdFmqVm+2eMcdpAF/wJmTOrVABJUlzwVTbJwtCZFqvTo2Nb5BicX7UeIKV8bOUghSmyXx6Wfid3O92P2NvPHJ9UyinkzGJDTW2Ft3wxlSvZBFzWyOqiAUtiYXd2RF8q0jWvrTbZrUWSGEf9x69XK6k0hpEW7N3gIk2UkPF5XhdVE2x22YSBH5OGf1KuGyd5XTDMuOmtECgLI2R8mhvpHcSwJofMA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=E1mIgSJsp9huthmze9qJTxbKxkPB1bm5mr4Qs4kzmLU=;
 b=kBs0yeS3dv7rdU8RWf9Zcm71mhmTclmz+BU1q8xe6f4WEuINZcBLHCySftUz+jAGSJGl3DBt3HP3HztaVlppOf8QLM/mOXYtybM3oAz5l1lAMe71x21JQ1Rz/s6AJiw7lgzsCrZtK7VTcnqfzNpwrCpRPd7Dp9NDLSBOgdau6mw=
From: Owen Smith <owen.smith@citrix.com>
To: Tu Dinh <ngoc-tu.dinh@vates.tech>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Subject: Re: [PATCH v2 2/3] receiver: Remove dependencies on HVM_MAX_VCPUS
Thread-Topic: [PATCH v2 2/3] receiver: Remove dependencies on HVM_MAX_VCPUS
Thread-Index: AQHdXKeETOEkqqfS1kSva2TKs3Ie+bb+r/n5
Date: Thu, 15 Oct 2026 14:51:33 +0000
Message-ID:
 <SA6PR03MB77604057D29ECB8612D653BAFE9C2@SA6PR03MB7760.namprd03.prod.outlook.com>
References:
 <1792070155.8631fc262581453bbf619ec5b2062170.1a13fb47d080008425@vates.tech>
 <20261015131702.1935-1-ngoc-tu.dinh@vates.tech>
 <1792070225.8631fc262581453bbf619ec5b2062170.1a13fb58e410008425@vates.tech>
In-Reply-To:
 <1792070225.8631fc262581453bbf619ec5b2062170.1a13fb58e410008425@vates.tech>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
msip_labels:
authentication-results: mx.microsoft.com 1; dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=citrix.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: SA6PR03MB7760:EE_|IA1PR03MB8335:EE_
x-ms-office365-filtering-correlation-id: e627a750-2d6f-454b-1d99-08df2acbcdf8
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam:
 BCL:0;ARA:13230040|1800799024|376014|366016|23010399003|38070700021|56012099006|11063799006|4143699003|261009223027099003|10067099003|22082099003|18002099003|3023799007;
x-microsoft-antispam-message-info:
 4Rf98/blee1AbX/h9D1L1Pi65VJMcMygm5FCpd565kbqARcK1j+yk3ATdBPvj0+PCEtf1LKGxz1iFTfiJp6Re2Hr6r34TfCNXnrcvzpIsM/wMh7M31mVU1yY67Fq9J+sQtoO+iMRpMDNyoygN4chD++QINyyjmpNIQ1SwaM6nU4ZP+h+hN1JLQNXJmYduwgFVYIQ7GpKWZXiMceSSp4szXEvMF8lRM9eEGYYZCZpfEnz5xysDvLOYSpwbaSQoz77k6KvPIyobPFy9aLe/WqnPtcAsDOPkZyXwaSsXethHn/ejWFKgqyBQpIDl46WDp99oTGX753zPHlKd2yRbn6kVHF7CzENyGb9s2YZuwc6MhdwX7Ulk1Yfd/5tOLaXDbgtH6DmHlDDfb4fm3Ko0iFLZyDsuEcxMlLDKU3A1KRQ0Zf+MqKT8WQWYu/4alIUrU2FDUrm4w0e45bCcCcNR3yjE6mEAr15VlOJwob4/zPAA+zA1C8+SV3uYDeHsgFb7jYcFUrrTW+0dGSUphiWA7K6b6R+OQvqQEQBGymd5SPBaJajS5XaCufOww4d3bHLZOxVh5E5l550r59T5WKnxITTsDSWHMRyn2xKqA/isvUcP3Fw/ClCFiiQppJbrWb+yx5c4v+q66jH5NzcmUcgoKxSL1AMmLr+lNmYuvmELnk7nq8=
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SA6PR03MB7760.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(366016)(23010399003)(38070700021)(56012099006)(11063799006)(4143699003)(261009223027099003)(10067099003)(22082099003)(18002099003)(3023799007);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?us-ascii?Q?vDCLsWL5wOCpemZeJdDJ2irMggjUvJnPrkk+9FcEYOPISdfCpeQKEUnq+sKq?=
 =?us-ascii?Q?vUVK7wS0SZluVJGBkOtbfAx3Op3AcZqHkE70YfcxRGQwYm8e3Y4WAXc1viyS?=
 =?us-ascii?Q?KefPy3RSOaJ/hK2CQin/EUh7RLi3BND2hi8zyq6sl4nE0MRL6sW4wrleBVog?=
 =?us-ascii?Q?b0WaSIOC58hDO85K4Hs1MkK4ozEUR4r3Y+gvDeNKRE7TuB0rKb7OzUXyrAdR?=
 =?us-ascii?Q?hj+EU+ZzjK1PlNfNxShR0madjZ+dLklJn3Rr0fDoenVa1Xu38KjIPZSQVP42?=
 =?us-ascii?Q?S1H+Vgh2fzktT/etbwUJPvWObKD7Ekl8b6lLCwZ/RZBzJi04+h9j5ziyWPQc?=
 =?us-ascii?Q?YwN0qIzXTl6hyxd0rXTLI1ddHhukMUbWti19LvppobwaMIa8nyaG9rY68sTb?=
 =?us-ascii?Q?O9WisELoECpK8CGkcgAU4RbPSMUQC/q6303+dKisNi9VTLVFAvrBM8CYvDdK?=
 =?us-ascii?Q?nr7wJHTQEqSMH+u2zdr9W7ugFK2erlJfnzNzqxWFR3k26mZtzTxKA3f7resB?=
 =?us-ascii?Q?+cIidory8sLF9bS9OB3vAz3Y58ME0gHe/q1GXKex+EX0SWCoDS3YDpjMnsLj?=
 =?us-ascii?Q?0YqSWbeitbeMxM6mHzg3N1Z7MHopf+eujr2THyCfqGiL+dsZvE/QbmWOHcPV?=
 =?us-ascii?Q?vydnX34HILwcGarmMadcWJC25tTPxaIulOJ36WGoiGaybB9E4QDPiwJETPLh?=
 =?us-ascii?Q?gB30BPvjLxgSN7AO4PzlTX93nOO1MamfO6Z+anxqcZzFBvglicNzSV8gxF8S?=
 =?us-ascii?Q?ef6SCKJjF5BjRsNbqO6Xzo6NkNfk7OzvFBR2nuN4agpbtnlWrlKwwPdzx3g1?=
 =?us-ascii?Q?HhVy5F5ts2CGTjzDxLplU0+fGiPkufi5k4PkS7kqw7zTAKQSQs1YKV/9Etm6?=
 =?us-ascii?Q?UAJTNP8yLNPcJBYkVsW/hl6PYdKvinI4RYFKQaMfgiWkH+iy9lGSscQTyvEf?=
 =?us-ascii?Q?TCDflILTUV5uDUP5vrR4fJqzBZcbLKmGjZEw8BEujfljbVWK7XnQn0OIsTne?=
 =?us-ascii?Q?Ob7UMxkwXGoUGg+rAQPl9ggCM+HRunwjrRlT4ghJv5NF1kQYbsIkPZcHlwNF?=
 =?us-ascii?Q?mLL6L7siyeBzjtdkxT+MAy09Sa/mI1PtKHyNJ4uReT34Ad7WEKz+TxU1qZjz?=
 =?us-ascii?Q?3Ej2umgmVr8yUyKAz6UGU0ItwsrsgsKzIl+tzXmxY95ASxaU8Dz0qBjRTWUN?=
 =?us-ascii?Q?Hc9xjc+3Qqw9z7FMqEZJweB9tcNrrBCZabYG+j6e30UijUm7vHjlaTAoBMcT?=
 =?us-ascii?Q?P1yXXqDcmQunFy2wsQKEEqo+ym/eQiknBfj34vAtFBjIgLnGhDtW16/0lSul?=
 =?us-ascii?Q?bcezw9/BWw/tBm+VWVPym6J3X8eg2qpGemJ2q9MiYa4Bh2Da2D5lqAxkzdGR?=
 =?us-ascii?Q?MrY+H3Dma32TuzSq59C0Zeeg3sBTXFmCKtDODj/iZ9JMTURDYROSIWNK6E2v?=
 =?us-ascii?Q?ce5sIEYTDYPNxLaX/285sibiiskjgy50ie0XNwdpayqTKp8TVBZEG0gQVv4U?=
 =?us-ascii?Q?zuxTXlkne+Jn5NiHPUj37wZ+YV0cbnnhyxfeN17ED1V1yk+2P1lyRn2zJYid?=
 =?us-ascii?Q?rEHvqFq9hEW9Hq8VGbJLuvL4kxhJw/eEekp/s6kv/nSParZ8nOHof/EsqHOq?=
 =?us-ascii?Q?72UL9aDkb5e8HCBdGuwQ2m0UgcaqtdFNI/soW/bYGw3fqczmJF2/AE/yK0vJ?=
 =?us-ascii?Q?gVwt0k1XCV18o5ZI0pgrVokjYvxhGcWaIU3/s+u6aiEmclym?=
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-OriginatorOrg: citrix.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: SA6PR03MB7760.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: e627a750-2d6f-454b-1d99-08df2acbcdf8
X-MS-Exchange-CrossTenant-originalarrivaltime: 15 Oct 2026 14:51:33.2128
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: j5iyYhD2vg9knsjOSaoqbli01V24tZTi8Cyb4ZBPZjZU8sOEmU70L4VVVJrGx+3ry4Xz/Z/N6UMkUbF/YPbeyA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR03MB8335
X-purgate-ID: tlsNG-33051d/1792075895-6C6DE4E9-BCC98B70/0/0
X-purgate-type: clean
X-purgate-size: 5138

Reviewed-by: Owen Smith <owen.smith@citrix.com>

________________________________________
From: win-pv-devel <win-pv-devel-bounces@lists.xenproject.org> on behalf of=
 Tu Dinh <ngoc-tu.dinh@vates.tech>
Sent: 15 October 2026 2:16 PM
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh
Subject: [PATCH v2 2/3] receiver: Remove dependencies on HVM_MAX_VCPUS

For Receiver->GetList, XenNet can use KeQueryMaximumProcessorCountEx(
ALL_PROCESSOR_GROUPS) instead.

PutList is only used to replace the per-CPU GetList, so keep it as is.

Queue is indexed not by CPU index but by queue index, so allocate it
using the max count returned by QueryRingCount V11 instead.

Signed-off-by: Tu Dinh <ngoc-tu.dinh@vates.tech>
---
v2: Set ProcessorCount and RingCount to 0 on cleanup.
---
 src/xennet/receiver.c | 61 ++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 55 insertions(+), 6 deletions(-)

diff --git a/src/xennet/receiver.c b/src/xennet/receiver.c
index 565d31b..7fb3ed2 100644
--- a/src/xennet/receiver.c
+++ b/src/xennet/receiver.c
@@ -33,7 +33,6 @@
 #include <ndis.h>
 #include <procgrp.h>
 #include <tcpip.h>
-#include <xen.h>
 #include <ethernet.h>

 #include "util.h"
@@ -52,9 +51,11 @@ typedef struct _XENNET_RECEIVER_QUEUE {
 struct _XENNET_RECEIVER {
     PXENNET_ADAPTER             Adapter;
     NDIS_HANDLE                 NetBufferListPool;
+    ULONG                       ProcessorCount;
+    ULONG                       RingCount;
     PNET_BUFFER_LIST            PutList;
-    PNET_BUFFER_LIST            GetList[HVM_MAX_VCPUS];
-    XENNET_RECEIVER_QUEUE       Queue[HVM_MAX_VCPUS];
+    PNET_BUFFER_LIST            *GetList;
+    XENNET_RECEIVER_QUEUE       *Queue;
     LONG                        Indicated;
     LONG                        Returned;
     XENVIF_VIF_OFFLOAD_OPTIONS  OffloadOptions;
@@ -500,6 +501,24 @@ ReceiverInitialize(
     RtlZeroMemory(*Receiver, sizeof(XENNET_RECEIVER));
     (*Receiver)->Adapter =3D Adapter;

+    (*Receiver)->ProcessorCount =3D KeQueryMaximumProcessorCountEx(ALL_PRO=
CESSOR_GROUPS);
+    XENVIF_VIF(QueryRingCount,
+               AdapterGetVifInterface(Adapter),
+               NULL,
+               &(*Receiver)->RingCount);
+
+    (*Receiver)->GetList =3D __AllocatePoolWithTag(NonPagedPool,
+                                                 (*Receiver)->ProcessorCou=
nt * sizeof(PNET_BUFFER_LIST),
+                                                 RECEIVER_POOL_TAG);
+    if ((*Receiver)->GetList =3D=3D NULL)
+        goto fail2;
+
+    (*Receiver)->Queue =3D __AllocatePoolWithTag(NonPagedPool,
+                                               (*Receiver)->RingCount * si=
zeof(XENNET_RECEIVER_QUEUE),
+                                               RECEIVER_POOL_TAG);
+    if ((*Receiver)->Queue =3D=3D NULL)
+        goto fail3;
+
     RtlZeroMemory(&Params, sizeof(NET_BUFFER_LIST_POOL_PARAMETERS));
     Params.Header.Type =3D NDIS_OBJECT_TYPE_DEFAULT;
     Params.Header.Revision =3D NET_BUFFER_LIST_POOL_PARAMETERS_REVISION_1;
@@ -514,9 +533,9 @@ ReceiverInitialize(

     status =3D NDIS_STATUS_RESOURCES;
     if ((*Receiver)->NetBufferListPool =3D=3D NULL)
-        goto fail2;
+        goto fail4;

-    for (Index =3D 0; Index < HVM_MAX_VCPUS; Index++) {
+    for (Index =3D 0; Index < (*Receiver)->RingCount; Index++) {
         PXENNET_RECEIVER_QUEUE  Queue =3D &(*Receiver)->Queue[Index];

         KeInitializeSpinLock(&Queue->Lock);
@@ -524,8 +543,29 @@ ReceiverInitialize(

     return NDIS_STATUS_SUCCESS;

+fail4:
+    Error("fail4\n");
+
+    __FreePoolWithTag((*Receiver)->Queue, RECEIVER_POOL_TAG);
+    (*Receiver)->Queue =3D NULL;
+
+fail3:
+    Error("fail3\n");
+
+    __FreePoolWithTag((*Receiver)->GetList, RECEIVER_POOL_TAG);
+    (*Receiver)->GetList =3D NULL;
+
 fail2:
+    Error("fail2\n");
+
+    (*Receiver)->ProcessorCount =3D 0;
+    (*Receiver)->RingCount =3D 0;
+    __FreePoolWithTag(*Receiver, RECEIVER_POOL_TAG);
+    *Receiver =3D NULL;
+
 fail1:
+    Error("fail1 (%08x)\n", status);
+
     return status;
 }

@@ -541,7 +581,7 @@ ReceiverTeardown(

     ASSERT3U(Receiver->Returned, =3D=3D, Receiver->Indicated);

-    for (Index =3D 0; Index < HVM_MAX_VCPUS; Index++) {
+    for (Index =3D 0; Index < Receiver->ProcessorCount; Index++) {
         NetBufferList =3D Receiver->GetList[Index];

         while (NetBufferList !=3D NULL) {
@@ -571,6 +611,15 @@ ReceiverTeardown(
     NdisFreeNetBufferListPool(Receiver->NetBufferListPool);
     Receiver->NetBufferListPool =3D NULL;

+    __FreePoolWithTag(Receiver->Queue, RECEIVER_POOL_TAG);
+    Receiver->Queue =3D NULL;
+
+    __FreePoolWithTag(Receiver->GetList, RECEIVER_POOL_TAG);
+    Receiver->GetList =3D NULL;
+
+    Receiver->RingCount =3D 0;
+    Receiver->ProcessorCount =3D 0;
+
     Receiver->Adapter =3D NULL;

     __FreePoolWithTag(Receiver, RECEIVER_POOL_TAG);
--
2.55.0.windows.3


--
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates solutions

web: https://vates.tech


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 15 14:52:03 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 15 Oct 2026 14:52:03 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1450750.1666168 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHMoN-0004DM-70; Thu, 15 Oct 2026 14:52:03 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1450750.1666168; Thu, 15 Oct 2026 14:52:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHMoN-0004DF-3c; Thu, 15 Oct 2026 14:52:03 +0000
Received: by outflank-mailman (input) for mailman id 1450750;
 Thu, 15 Oct 2026 14:52:02 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <owen.smith@citrix.com>) id 1xHMoM-0004D9-6B
 for win-pv-devel@lists.xenproject.org; Thu, 15 Oct 2026 14:52:02 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xHMoL-00321W-J0
 for win-pv-devel@lists.xenproject.org; Thu, 15 Oct 2026 16:52:01 +0200
Received: from [10.42.69.3] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ad0e88f-bab6-0a2a0a5309dd-0a2a4503921c-4
 for <win-pv-devel@lists.xenproject.org>; Thu, 15 Oct 2026 16:52:01 +0200
Received: from [52.101.46.52]
 (helo=CO1PR03CU002.outbound.protection.outlook.com)
 by tlsNG-33051d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ad0e88e-fae8-0a2a45030019-34652e34ef6b-4
 for <win-pv-devel@lists.xenproject.org>; Thu, 15 Oct 2026 16:52:00 +0200
Received: from SA6PR03MB7760.namprd03.prod.outlook.com (2603:10b6:806:43c::5)
 by IA1PR03MB8335.namprd03.prod.outlook.com (2603:10b6:208:5b1::7)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.522.14; Thu, 15 Oct
 2026 14:51:57 +0000
Received: from SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38]) by SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38%5]) with mapi id 15.21.0522.012; Thu, 15 Oct 2026
 14:51:57 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:x-ms-exchange-senderadcheck"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
 b=g5M1oR5eA+xtJCas33/2UA01asi4EauD2XyJjrjVtJp9/So8rjW0dCWlrZ20KLeCj253yTpMSV2QgpE/+lnKCsZi0/OKUMjqlSWiKE6IqyoCta3g6oUPf9GxS/PyOJYL9zNqQUXC2oH9KTFLVVvPgc48u0hnM4HqVoLwbNONpE+cHm4WNn00U96ybgps76PhFdINFlHoU79J6l75UFSoaFOy5oLuFNwbgfuRC7neZuXhSPa9YIdiXx/PL02bkKZaJq0NGKU6dD0NQthEFtvcQOL6Jwk1c4Znr2f9MWxWC6oLmsuKDAlB9tBsBC/jptXz+73hyjxFYo4lHuPPa4qQGg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector10001;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=DDDLE+fdo5O0bUDLyg1M3bczpb3tBKSa0BIPoqIvOGM=;
 b=HF9kN4Q8eo/edPJxsiVrbCACb3hX2dkhzko2qaZzMom7sNg/CjhHOAoNXsz1ChxtZ8DMBujB/THIXh/4SQ+0741KVVYCBGR4NT9EVTPXS4MSyuAuUnD5jo628Fz9R/45Nig3zn/kwD7QFYbA9Q81fo8cAqvcUVlMH1Do3M3PxMEIOSOtHETt6JtP7F4GcxV817+MHvsWqHgM/R1BbYV/tWepMckAhiEtW4eYqUcm4f+kTLxyGwzyexYxbSibKGoYwnzRgALPwyvOPr7FgZ7SXZXMxfo7Dnx+WUtRAhnem95git8h/2tGHCYrdy8PDFgkCjOMGBtz/CiL1f6A117PiQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=DDDLE+fdo5O0bUDLyg1M3bczpb3tBKSa0BIPoqIvOGM=;
 b=kWNhG0iG07k6mPQ+Zs+Qjw/afFbEPpy3l7qLm+Hd8BRnBkIcl3+zOLScAnmEPHR6x33QVK9Pwwge8bZJtpJ5/DI6OyjyRfI8jNRUj6oGEGrl38sFoq2d7VxC4N6JnRQ+cq86ldl+65PlvexVgFNpKTETizy6XgR2tw5VBMQZP/0=
From: Owen Smith <owen.smith@citrix.com>
To: Tu Dinh <ngoc-tu.dinh@vates.tech>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Subject: Re: [PATCH v2 3/3] Remove Xen headers
Thread-Topic: [PATCH v2 3/3] Remove Xen headers
Thread-Index: AQHdXKeEXIqNOgcw10OuNIuGVaGEp7b+sA1Y
Date: Thu, 15 Oct 2026 14:51:57 +0000
Message-ID:
 <SA6PR03MB776090A69807E994A0FE5786FE9C2@SA6PR03MB7760.namprd03.prod.outlook.com>
References:
 <1792070155.8631fc262581453bbf619ec5b2062170.1a13fb47d080008425@vates.tech>
 <20261015131702.1935-1-ngoc-tu.dinh@vates.tech>
 <1792070225.8631fc262581453bbf619ec5b2062170.1a13fb58ffa0008425@vates.tech>
In-Reply-To:
 <1792070225.8631fc262581453bbf619ec5b2062170.1a13fb58ffa0008425@vates.tech>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
msip_labels:
authentication-results: mx.microsoft.com 1; dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=citrix.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: SA6PR03MB7760:EE_|IA1PR03MB8335:EE_
x-ms-office365-filtering-correlation-id: 3157c845-a84b-4c56-1e97-08df2acbdc52
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam:
 BCL:0;ARA:13230040|1800799024|376014|366016|23010399003|38070700021|56012099006|5023799004|11063799006|4143699003|261009223027099003|10067099003|22082099003|18002099003|6133799003|3023799007;
x-microsoft-antispam-message-info:
 VPZEfR9s986ckTXltLJFZbECBaRGse80tdsXsfx8BmmE5b24GVLlzAErMYww0/7C02SymtWkmcsZSHdLmw/oZJjmKF/VuNACe7gaY60L/sF4HJikXWGpTj2+4L9/42Nl30E0R8pal0EkO/o9EZ0gdhN0YRVjO29kppWeX36tZ/8aMi+97VuEn8Lr+YJB+B/AnfAetSA3UzeTfVuIgx5UwxWAQbYG4qaRxv9+cqOi8XP8Tz6epBrSCFNRQYVf7I6X0K8fGSvGUJIt3v8+rxmTY5EYslf23S29IAu8zXDoKYW61DE0NqB3T70AaZ9JSYVYjsR94qstaIA1vMNj6FFb2p3yRSaarCGZtqk0HVTizHlZimoYwiNKxyocBSGLmBZLvSoqXTlkt1iTbJwAdclhduQN+Qm5RQ5zuwikxhOOe8L+CaWOxhc7J4fYH63QOYNJ3j0whZk20fbSMLE3NB7Dz0CFopvGNqaMkpGzYmcpkcvQ9NESGmqRkfrizKBlOD8XapgavQi5hAL//OC38NJeKtYSafAkdArWNBM7WHC1YpjXzicF4inwr7X2ey7Zk/Btdekbb7GjxQZf6XYHdZxEXso54oZZnR33exPguFC5GzHiwktsmxNpSqOCJKXg1QvHPv8KVDsEG0QYV852689vQz+sHAlumutmBMyocdtIGjw=
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SA6PR03MB7760.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(366016)(23010399003)(38070700021)(56012099006)(5023799004)(11063799006)(4143699003)(261009223027099003)(10067099003)(22082099003)(18002099003)(6133799003)(3023799007);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?us-ascii?Q?hkDS7I2rqn6H4KshSJz6JCpaFxGybS0Xiq6UYTu4dxbm78iSJ2LEVaxCze4o?=
 =?us-ascii?Q?wHZne3Kp4yyvfo99dishCbepEpHAnQW5bYuDwp8biT1xsVRuozZ7w4MxICJX?=
 =?us-ascii?Q?XIswKRl1mqC+ZJ4f3l1/rUnC4F+KfVLYMxfo5rgnO1EkvIU5iOnrEXh2jfLE?=
 =?us-ascii?Q?gJFrNjw7S/yWVI/csKHXK7WJikDZ0uXLrH6RFIViv7VKWYVRNoPhXbxZOIex?=
 =?us-ascii?Q?8WUF+Ta5L0djJlV4mKVeVOMeMCOhFbQbu4TFd3rftg4soy4WeGc2VxptrL3+?=
 =?us-ascii?Q?qmKJCl5GrwXtFCVAPAn89GilAPCpjf3OKpH7cV34Lngv/cDCzy/I0aWiwPdE?=
 =?us-ascii?Q?7pRenwQMKEDrrJNJH9SdP8WmeuX3Be5wmGuJjwgRo+5OHYI85md/SX/O1ntp?=
 =?us-ascii?Q?zlQa4g5f5HamM8KSg7MhRe8+hUkJd1U9BuWS0N1Fsr08+KGX+8tcvJC+DSoC?=
 =?us-ascii?Q?VEsHdc6sxKmVMtjrmObLCNpVOratxxSuJX/LpTN1tkgJ6t0Eu/LxSXQVUCJg?=
 =?us-ascii?Q?Rgt5nd7f6XK6C+cflqAPb5SakOc2cpqFf2SbiTDNRX6Z6K1EsNAcxTo2fjme?=
 =?us-ascii?Q?PgIGbUlQt0NajXDP+cj5Mmfmk69bqvQUU2a48n2dMng0GeQWvMif6X2AYu/0?=
 =?us-ascii?Q?uRepeTPwB2CxnhiSJYWJ/PHQubULMd7OqNqGi31JeRs3T0HMnxkYsFB2FEo1?=
 =?us-ascii?Q?bgg6FOdU4rWdzDeC+KtxLfCXXy8dSLrzAlci+PkMpYc2a+MRDLt8ltJW56wy?=
 =?us-ascii?Q?qlR/sDp8r0ZmVgGGexOHaIxzWs3e5ldT5Cg+8+hlAy3i71omI7qETUQR1U60?=
 =?us-ascii?Q?bNGNQl5LpAjSonxVBiHNjqIJ17JHg10olkIoVCpIDc2Drz1Zx2BBhf+ah71W?=
 =?us-ascii?Q?cp1/72suoDx7B/77rK13m+DOLvDFtZEg5mIcpfnh+Q5Fm4Zm8lNG53jqKN9H?=
 =?us-ascii?Q?e23TsNEce4X6oDnDqgL+KcU3INauPQtTgMMje9OeQQqgsk4qBxcX15OJfwej?=
 =?us-ascii?Q?AoWaIEf/mC9GYFwd6E1MwMf3ijfkb5D0O1VblK4y4oXV29QAGTvRt8USesM9?=
 =?us-ascii?Q?e2dLfEwiAA4UZGAeve5rJMoMnNvEY8vPQNujFUddH3MqJ2tw94djDAMmg2Jh?=
 =?us-ascii?Q?7gTGwxOHaVO8js2Ncf5DrcftFII2b2bXKuSLWpV+iaEikcpEUZPB+ckT6Rsy?=
 =?us-ascii?Q?EGbPT5lf6BANgn5LtWzSPiRYzlLP79XGf0Rzh2W2dBiRd2CuGwFM8KRcbFqR?=
 =?us-ascii?Q?b5FFdAjpetGsnbJN+4HAsjwRU9HjNQb8E5c1a/k9MJ4udBfwSB6k6un5CYc+?=
 =?us-ascii?Q?6h0fZ8srwb/wrE4l1l+4FLv2z7rafiJjR3wjnRk3s2Wcl7ovGjeaOGKaK9eN?=
 =?us-ascii?Q?5kx44w05g6y85nc2BWXdxa43sAgcH5ahF8AEIxH5JY7I1Uc3e+xNLK3L8c1/?=
 =?us-ascii?Q?TVCTv831eWPkInzicq0pF5ux+8Q4X6rfdxUwrKEDKts1dm4lu5wPlAceqZgT?=
 =?us-ascii?Q?Qsy7HOIa9Ir4N5iRefZ2afAjZkrL62XyQ/Y6bZtGQWicwXyJPShDHsWlvv3g?=
 =?us-ascii?Q?mlftZixAlB6itfF9RMDFo8EllHlW1frhh1EkYJDu7cpKWSkeSZNhnoyg6+s8?=
 =?us-ascii?Q?GH0ix8TWoac1iQ/ZkAfiOoorFdgftwp0FcU+NprZSaGjouG39aZMTZGVfg3M?=
 =?us-ascii?Q?ZfyUCBclIpVJIY5o/aHbyWBHSffM8PHUz3fKgZcu18CByYcC?=
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-OriginatorOrg: citrix.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: SA6PR03MB7760.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 3157c845-a84b-4c56-1e97-08df2acbdc52
X-MS-Exchange-CrossTenant-originalarrivaltime: 15 Oct 2026 14:51:57.2923
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: TrJGABbTwAm3zF42ofqIRD6Qj97yMElCA1smqut/oSZAsm3grCw0u9VL1R4epoHizBRqr0OniD5pdzrR3wihyg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR03MB8335
X-purgate-ID: tlsNG-33051d/1792075921-774F4749-CE97938C/0/0
X-purgate-type: clean
X-purgate-size: 90925

Reviewed-by: Owen Smith <owen.smith@citrix.com>

________________________________________
From: win-pv-devel <win-pv-devel-bounces@lists.xenproject.org> on behalf of=
 Tu Dinh <ngoc-tu.dinh@vates.tech>
Sent: 15 October 2026 2:16 PM
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh
Subject: [PATCH v2 3/3] Remove Xen headers

As a pure NDIS driver, XenNet doesn't need Xen headers at all.

Signed-off-by: Tu Dinh <ngoc-tu.dinh@vates.tech>
---
v2: Removed include\xen from project files.
---
 get_xen_headers.py                       |  74 --
 include/xen-types.h                      |  59 --
 include/xen-version.h                    |  38 -
 include/xen-warnings.h                   |  43 -
 include/xen.h                            |  44 -
 include/xen/public/arch-x86/xen-x86_32.h | 169 ----
 include/xen/public/arch-x86/xen-x86_64.h | 202 -----
 include/xen/public/arch-x86/xen.h        | 338 --------
 include/xen/public/hvm/hvm_info_table.h  |  74 --
 include/xen/public/xen-compat.h          |  44 -
 include/xen/public/xen.h                 | 995 -----------------------
 vs2019/xennet/xennet.vcxproj             |   2 +-
 vs2022/xennet/xennet.vcxproj             |   2 +-
 13 files changed, 2 insertions(+), 2082 deletions(-)
 delete mode 100644 get_xen_headers.py
 delete mode 100644 include/xen-types.h
 delete mode 100644 include/xen-version.h
 delete mode 100644 include/xen-warnings.h
 delete mode 100644 include/xen.h
 delete mode 100644 include/xen/public/arch-x86/xen-x86_32.h
 delete mode 100644 include/xen/public/arch-x86/xen-x86_64.h
 delete mode 100644 include/xen/public/arch-x86/xen.h
 delete mode 100644 include/xen/public/hvm/hvm_info_table.h
 delete mode 100644 include/xen/public/xen-compat.h
 delete mode 100644 include/xen/public/xen.h

diff --git a/get_xen_headers.py b/get_xen_headers.py
deleted file mode 100644
index 2d4d0f6..0000000
--- a/get_xen_headers.py
+++ /dev/null
@@ -1,74 +0,0 @@
-#!python -u
-
-import os, sys
-import shutil
-import subprocess
-import re
-
-def shell(command, dir =3D '.'):
-    print("in '%s' execute '%s'" % (dir, ' '.join(command)))
-    sys.stdout.flush()
-
-    sub =3D subprocess.Popen(' '.join(command), cwd=3Ddir,
-                           stdout=3Dsubprocess.PIPE,
-                           stderr=3Dsubprocess.STDOUT)
-
-    for line in sub.stdout:
-        print(line.decode(sys.getdefaultencoding()).rstrip())
-
-    sub.wait()
-
-    return sub.returncode
-
-def get_repo(url, working):
-    shell(['git', 'clone', '--no-checkout', url, working])
-
-def get_branch(tag, working):
-    shell(['git', 'checkout', '-b', 'tmp', tag], working)
-
-def put_branch(working):
-    shell(['git', 'checkout', 'master'], working)
-    shell(['git', 'branch', '-d', 'tmp'], working)
-
-def copy_file(working, dir, name):
-    try:
-        os.makedirs('include\\xen\\%s' % dir)
-    except OSError:
-        None
-
-    src =3D open('%s\\xen\\include\\%s\\%s' % (working, dir, name), 'r')
-    dst =3D open('include\\xen\\%s\\%s' % (dir, name), 'w', newline=3D'\n'=
)
-
-    print(name)
-
-    for line in src:
-        line =3D re.sub(' unsigned long', ' ULONG_PTR', line)
-        line =3D re.sub('\(unsigned long', '(ULONG_PTR', line)
-        line =3D re.sub(' long', ' LONG_PTR', line)
-        line =3D re.sub('\(long', '(LONG_PTR', line)
-        dst.write(line)
-
-    dst.close()
-    src.close()
-
-if __name__ =3D=3D '__main__':
-    tag =3D sys.argv[1]
-    working =3D sys.argv[2]
-
-    get_repo('git://xenbits.xen.org/xen.git', working)
-    get_branch(tag, working)
-
-    shell(['git', 'rm', '-r', '-f', 'xen'], 'include')
-
-    copy_file(working, 'public', 'xen.h')
-    copy_file(working, 'public', 'xen-compat.h')
-
-    copy_file(working, 'public\\arch-x86', 'xen.h')
-    copy_file(working, 'public\\arch-x86', 'xen-x86_32.h')
-    copy_file(working, 'public\\arch-x86', 'xen-x86_64.h')
-
-    copy_file(working, 'public\\hvm', 'hvm_info_table.h')
-
-    put_branch(working)
-
-    shell(['git', 'add', 'xen'], 'include')
diff --git a/include/xen-types.h b/include/xen-types.h
deleted file mode 100644
index b618af2..0000000
--- a/include/xen-types.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/* Copyright (c) Xen Project.
- * Copyright (c) Cloud Software Group, Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms,
- * with or without modification, are permitted provided
- * that the following conditions are met:
- *
- * *   Redistributions of source code must retain the above
- *     copyright notice, this list of conditions and the
- *     following disclaimer.
- * *   Redistributions in binary form must reproduce the above
- *     copyright notice, this list of conditions and the
- *     following disclaimer in the documentation and/or other
- *     materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifndef _XEN_TYPES_H
-#define _XEN_TYPES_H
-
-#include <ntddk.h>
-
-// Define types necessary to include xen headers
-
-typedef CHAR    int8_t;
-typedef SHORT   int16_t;
-typedef LONG    int32_t;
-typedef LONG64  int64_t;
-
-typedef UCHAR   uint8_t;
-typedef USHORT  uint16_t;
-typedef ULONG   uint32_t;
-typedef ULONG64 uint64_t;
-
-#define xen_mb()    KeMemoryBarrier()
-#if defined(_M_IX86) || defined(_M_X64)
-#define xen_wmb()   KeMemoryBarrierWithoutFence()
-#define xen_rmb()   KeMemoryBarrierWithoutFence()
-#else
-#define xen_wmb()   KeMemoryBarrier()
-#define xen_rmb()   KeMemoryBarrier()
-#endif
-
-#endif  // _XEN_TYPES_H
diff --git a/include/xen-version.h b/include/xen-version.h
deleted file mode 100644
index 224ca88..0000000
--- a/include/xen-version.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Copyright (c) Xen Project.
- * Copyright (c) Cloud Software Group, Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms,
- * with or without modification, are permitted provided
- * that the following conditions are met:
- *
- * *   Redistributions of source code must retain the above
- *     copyright notice, this list of conditions and the
- *     following disclaimer.
- * *   Redistributions in binary form must reproduce the above
- *     copyright notice, this list of conditions and the
- *     following disclaimer in the documentation and/or other
- *     materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifndef _XEN_VERSION_H
-#define _XEN_VERSION_H
-
-#define __XEN_INTERFACE_VERSION__ __XEN_LATEST_INTERFACE_VERSION__
-
-#endif  // _XEN_VERSION_H
diff --git a/include/xen-warnings.h b/include/xen-warnings.h
deleted file mode 100644
index 30c0f7d..0000000
--- a/include/xen-warnings.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/* Copyright (c) Xen Project.
- * Copyright (c) Cloud Software Group, Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms,
- * with or without modification, are permitted provided
- * that the following conditions are met:
- *
- * *   Redistributions of source code must retain the above
- *     copyright notice, this list of conditions and the
- *     following disclaimer.
- * *   Redistributions in binary form must reproduce the above
- *     copyright notice, this list of conditions and the
- *     following disclaimer in the documentation and/or other
- *     materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifndef _XEN_WARNINGS_H
-#define _XEN_WARNINGS_H
-
-#include <ntddk.h>
-
-// Disable warnings necessary to include xen headers
-
-# pragma warning(disable:4214) // nonstandard extension used : bit field t=
ypes other than int
-# pragma warning(disable:4200) // nonstandard extension used : zero-sized =
array in struct/union
-
-#endif  // _XEN_WARNINGS_H
diff --git a/include/xen.h b/include/xen.h
deleted file mode 100644
index 2cee266..0000000
--- a/include/xen.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/* Copyright (c) Xen Project.
- * Copyright (c) Cloud Software Group, Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms,
- * with or without modification, are permitted provided
- * that the following conditions are met:
- *
- * *   Redistributions of source code must retain the above
- *     copyright notice, this list of conditions and the
- *     following disclaimer.
- * *   Redistributions in binary form must reproduce the above
- *     copyright notice, this list of conditions and the
- *     following disclaimer in the documentation and/or other
- *     materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifndef _XEN_H
-#define _XEN_H
-
-#include <ntddk.h>
-
-#include <xen-version.h>
-#include <xen-types.h>
-#include <xen-warnings.h>
-
-#include <public/hvm/hvm_info_table.h>
-
-#endif  // _XEN_H
diff --git a/include/xen/public/arch-x86/xen-x86_32.h b/include/xen/public/=
arch-x86/xen-x86_32.h
deleted file mode 100644
index d23340b..0000000
--- a/include/xen/public/arch-x86/xen-x86_32.h
+++ /dev/null
@@ -1,169 +0,0 @@
-/*************************************************************************=
*****
- * xen-x86_32.h
- *
- * Guest OS interface to x86 32-bit Xen.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a=
 copy
- * of this software and associated documentation files (the "Software"), t=
o
- * deal in the Software without restriction, including without limitation =
the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, an=
d/or
- * sell copies of the Software, and to permit persons to whom the Software=
 is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included=
 in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS=
 OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY=
,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL=
 THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- * Copyright (c) 2004-2007, K A Fraser
- */
-
-#ifndef __XEN_PUBLIC_ARCH_X86_XEN_X86_32_H__
-#define __XEN_PUBLIC_ARCH_X86_XEN_X86_32_H__
-
-/*
- * Hypercall interface:
- *  Input:  %ebx, %ecx, %edx, %esi, %edi, %ebp (arguments 1-6)
- *  Output: %eax
- * Access is via hypercall page (set up by guest loader or via a Xen MSR):
- *  call hypercall_page + hypercall-number * 32
- * Clobbered: Argument registers (e.g., 2-arg hypercall clobbers %ebx,%ecx=
)
- */
-
-/*
- * These flat segments are in the Xen-private section of every GDT. Since =
these
- * are also present in the initial GDT, many OSes will be able to avoid
- * installing their own GDT.
- */
-#define FLAT_RING1_CS 0xe019    /* GDT index 259 */
-#define FLAT_RING1_DS 0xe021    /* GDT index 260 */
-#define FLAT_RING1_SS 0xe021    /* GDT index 260 */
-#define FLAT_RING3_CS 0xe02b    /* GDT index 261 */
-#define FLAT_RING3_DS 0xe033    /* GDT index 262 */
-#define FLAT_RING3_SS 0xe033    /* GDT index 262 */
-
-#define FLAT_KERNEL_CS FLAT_RING1_CS
-#define FLAT_KERNEL_DS FLAT_RING1_DS
-#define FLAT_KERNEL_SS FLAT_RING1_SS
-#define FLAT_USER_CS    FLAT_RING3_CS
-#define FLAT_USER_DS    FLAT_RING3_DS
-#define FLAT_USER_SS    FLAT_RING3_SS
-
-#define __HYPERVISOR_VIRT_START_PAE    0xF5800000
-#define __MACH2PHYS_VIRT_START_PAE     0xF5800000
-#define __MACH2PHYS_VIRT_END_PAE       0xF6800000
-#define HYPERVISOR_VIRT_START_PAE      xen_mk_ulong(__HYPERVISOR_VIRT_STAR=
T_PAE)
-#define MACH2PHYS_VIRT_START_PAE       xen_mk_ulong(__MACH2PHYS_VIRT_START=
_PAE)
-#define MACH2PHYS_VIRT_END_PAE         xen_mk_ulong(__MACH2PHYS_VIRT_END_P=
AE)
-
-/* Non-PAE bounds are obsolete. */
-#define __HYPERVISOR_VIRT_START_NONPAE 0xFC000000
-#define __MACH2PHYS_VIRT_START_NONPAE  0xFC000000
-#define __MACH2PHYS_VIRT_END_NONPAE    0xFC400000
-#define HYPERVISOR_VIRT_START_NONPAE   \
-    xen_mk_ulong(__HYPERVISOR_VIRT_START_NONPAE)
-#define MACH2PHYS_VIRT_START_NONPAE    \
-    xen_mk_ulong(__MACH2PHYS_VIRT_START_NONPAE)
-#define MACH2PHYS_VIRT_END_NONPAE      \
-    xen_mk_ulong(__MACH2PHYS_VIRT_END_NONPAE)
-
-#define __HYPERVISOR_VIRT_START __HYPERVISOR_VIRT_START_PAE
-#define __MACH2PHYS_VIRT_START  __MACH2PHYS_VIRT_START_PAE
-#define __MACH2PHYS_VIRT_END    __MACH2PHYS_VIRT_END_PAE
-
-#ifndef HYPERVISOR_VIRT_START
-#define HYPERVISOR_VIRT_START xen_mk_ulong(__HYPERVISOR_VIRT_START)
-#endif
-
-#define MACH2PHYS_VIRT_START  xen_mk_ulong(__MACH2PHYS_VIRT_START)
-#define MACH2PHYS_VIRT_END    xen_mk_ulong(__MACH2PHYS_VIRT_END)
-#define MACH2PHYS_NR_ENTRIES  ((MACH2PHYS_VIRT_END-MACH2PHYS_VIRT_START)>>=
2)
-#ifndef machine_to_phys_mapping
-#define machine_to_phys_mapping ((ULONG_PTR *)MACH2PHYS_VIRT_START)
-#endif
-
-/* 32-/64-bit invariability for control interfaces (domctl/sysctl). */
-#if defined(__XEN__) || defined(__XEN_TOOLS__)
-#undef ___DEFINE_XEN_GUEST_HANDLE
-#define ___DEFINE_XEN_GUEST_HANDLE(name, type)                  \
-    typedef struct { type *p; }                                 \
-        __guest_handle_ ## name;                                \
-    typedef struct { union { type *p; uint64_aligned_t q; }; }  \
-        __guest_handle_64_ ## name
-#undef set_xen_guest_handle_raw
-#define set_xen_guest_handle_raw(hnd, val)                  \
-    do { if ( sizeof(hnd) =3D=3D 8 ) *(uint64_t *)&(hnd) =3D 0;   \
-         (hnd).p =3D val;                                     \
-    } while ( 0 )
-#define  int64_aligned_t  int64_t __attribute__((aligned(8)))
-#define uint64_aligned_t uint64_t __attribute__((aligned(8)))
-#define __XEN_GUEST_HANDLE_64(name) __guest_handle_64_ ## name
-#define XEN_GUEST_HANDLE_64(name) __XEN_GUEST_HANDLE_64(name)
-#endif
-
-#ifndef __ASSEMBLY__
-
-struct cpu_user_regs {
-    uint32_t ebx;
-    uint32_t ecx;
-    uint32_t edx;
-    uint32_t esi;
-    uint32_t edi;
-    uint32_t ebp;
-    uint32_t eax;
-    uint16_t error_code;    /* private */
-    uint16_t entry_vector;  /* private */
-    uint32_t eip;
-    uint16_t cs;
-    uint8_t  saved_upcall_mask;
-    uint8_t  _pad0;
-    uint32_t eflags;        /* eflags.IF =3D=3D !saved_upcall_mask */
-    uint32_t esp;
-    uint16_t ss, _pad1;
-    uint16_t es, _pad2;
-    uint16_t ds, _pad3;
-    uint16_t fs, _pad4;
-    uint16_t gs, _pad5;
-};
-typedef struct cpu_user_regs cpu_user_regs_t;
-DEFINE_XEN_GUEST_HANDLE(cpu_user_regs_t);
-
-/*
- * Page-directory addresses above 4GB do not fit into architectural %cr3.
- * When accessing %cr3, or equivalent field in vcpu_guest_context, guests
- * must use the following accessor macros to pack/unpack valid MFNs.
- */
-#define xen_pfn_to_cr3(pfn) (((unsigned)(pfn) << 12) | ((unsigned)(pfn) >>=
 20))
-#define xen_cr3_to_pfn(cr3) (((unsigned)(cr3) >> 12) | ((unsigned)(cr3) <<=
 20))
-
-struct arch_vcpu_info {
-    ULONG_PTR cr2;
-    ULONG_PTR pad[5]; /* sizeof(vcpu_info_t) =3D=3D 64 */
-};
-typedef struct arch_vcpu_info arch_vcpu_info_t;
-
-struct xen_callback {
-    ULONG_PTR cs;
-    ULONG_PTR eip;
-};
-typedef struct xen_callback xen_callback_t;
-
-#endif /* !__ASSEMBLY__ */
-
-#endif /* __XEN_PUBLIC_ARCH_X86_XEN_X86_32_H__ */
-
-/*
- * Local variables:
- * mode: C
- * c-file-style: "BSD"
- * c-basic-offset: 4
- * tab-width: 4
- * indent-tabs-mode: nil
- * End:
- */
diff --git a/include/xen/public/arch-x86/xen-x86_64.h b/include/xen/public/=
arch-x86/xen-x86_64.h
deleted file mode 100644
index 2f53f69..0000000
--- a/include/xen/public/arch-x86/xen-x86_64.h
+++ /dev/null
@@ -1,202 +0,0 @@
-/*************************************************************************=
*****
- * xen-x86_64.h
- *
- * Guest OS interface to x86 64-bit Xen.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a=
 copy
- * of this software and associated documentation files (the "Software"), t=
o
- * deal in the Software without restriction, including without limitation =
the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, an=
d/or
- * sell copies of the Software, and to permit persons to whom the Software=
 is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included=
 in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS=
 OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY=
,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL=
 THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- * Copyright (c) 2004-2006, K A Fraser
- */
-
-#ifndef __XEN_PUBLIC_ARCH_X86_XEN_X86_64_H__
-#define __XEN_PUBLIC_ARCH_X86_XEN_X86_64_H__
-
-/*
- * Hypercall interface:
- *  Input:  %rdi, %rsi, %rdx, %r10, %r8, %r9 (arguments 1-6)
- *  Output: %rax
- * Access is via hypercall page (set up by guest loader or via a Xen MSR):
- *  call hypercall_page + hypercall-number * 32
- * Clobbered: argument registers (e.g., 2-arg hypercall clobbers %rdi,%rsi=
)
- */
-
-/*
- * 64-bit segment selectors
- * These flat segments are in the Xen-private section of every GDT. Since =
these
- * are also present in the initial GDT, many OSes will be able to avoid
- * installing their own GDT.
- */
-
-#define FLAT_RING3_CS32 0xe023  /* GDT index 260 */
-#define FLAT_RING3_CS64 0xe033  /* GDT index 261 */
-#define FLAT_RING3_DS32 0xe02b  /* GDT index 262 */
-#define FLAT_RING3_DS64 0x0000  /* NULL selector */
-#define FLAT_RING3_SS32 0xe02b  /* GDT index 262 */
-#define FLAT_RING3_SS64 0xe02b  /* GDT index 262 */
-
-#define FLAT_KERNEL_DS64 FLAT_RING3_DS64
-#define FLAT_KERNEL_DS32 FLAT_RING3_DS32
-#define FLAT_KERNEL_DS   FLAT_KERNEL_DS64
-#define FLAT_KERNEL_CS64 FLAT_RING3_CS64
-#define FLAT_KERNEL_CS32 FLAT_RING3_CS32
-#define FLAT_KERNEL_CS   FLAT_KERNEL_CS64
-#define FLAT_KERNEL_SS64 FLAT_RING3_SS64
-#define FLAT_KERNEL_SS32 FLAT_RING3_SS32
-#define FLAT_KERNEL_SS   FLAT_KERNEL_SS64
-
-#define FLAT_USER_DS64 FLAT_RING3_DS64
-#define FLAT_USER_DS32 FLAT_RING3_DS32
-#define FLAT_USER_DS   FLAT_USER_DS64
-#define FLAT_USER_CS64 FLAT_RING3_CS64
-#define FLAT_USER_CS32 FLAT_RING3_CS32
-#define FLAT_USER_CS   FLAT_USER_CS64
-#define FLAT_USER_SS64 FLAT_RING3_SS64
-#define FLAT_USER_SS32 FLAT_RING3_SS32
-#define FLAT_USER_SS   FLAT_USER_SS64
-
-#define __HYPERVISOR_VIRT_START 0xFFFF800000000000
-#define __HYPERVISOR_VIRT_END   0xFFFF880000000000
-#define __MACH2PHYS_VIRT_START  0xFFFF800000000000
-#define __MACH2PHYS_VIRT_END    0xFFFF804000000000
-
-#ifndef HYPERVISOR_VIRT_START
-#define HYPERVISOR_VIRT_START xen_mk_ulong(__HYPERVISOR_VIRT_START)
-#define HYPERVISOR_VIRT_END   xen_mk_ulong(__HYPERVISOR_VIRT_END)
-#endif
-
-#define MACH2PHYS_VIRT_START  xen_mk_ulong(__MACH2PHYS_VIRT_START)
-#define MACH2PHYS_VIRT_END    xen_mk_ulong(__MACH2PHYS_VIRT_END)
-#define MACH2PHYS_NR_ENTRIES  ((MACH2PHYS_VIRT_END-MACH2PHYS_VIRT_START)>>=
3)
-#ifndef machine_to_phys_mapping
-#define machine_to_phys_mapping ((ULONG_PTR *)HYPERVISOR_VIRT_START)
-#endif
-
-/*
- * int HYPERVISOR_set_segment_base(unsigned int which, ULONG_PTR base)
- *  @which =3D=3D SEGBASE_*  ;  @base =3D=3D 64-bit base address
- * Returns 0 on success.
- */
-#define SEGBASE_FS          0
-#define SEGBASE_GS_USER     1
-#define SEGBASE_GS_KERNEL   2
-#define SEGBASE_GS_USER_SEL 3 /* Set user %gs specified in base[15:0] */
-
-/*
- * int HYPERVISOR_iret(void)
- * All arguments are on the kernel stack, in the following format.
- * Never returns if successful. Current kernel context is lost.
- * The saved CS is mapped as follows:
- *   RING0 -> RING3 kernel mode.
- *   RING1 -> RING3 kernel mode.
- *   RING2 -> RING3 kernel mode.
- *   RING3 -> RING3 user mode.
- * However RING0 indicates that the guest kernel should return to iteself
- * directly with
- *      orb   $3,1*8(%rsp)
- *      iretq
- * If flags contains VGCF_in_syscall:
- *   Restore RAX, RIP, RFLAGS, RSP.
- *   Discard R11, RCX, CS, SS.
- * Otherwise:
- *   Restore RAX, R11, RCX, CS:RIP, RFLAGS, SS:RSP.
- * All other registers are saved on hypercall entry and restored to user.
- */
-/* Guest exited in SYSCALL context? Return to guest with SYSRET? */
-#define _VGCF_in_syscall 8
-#define VGCF_in_syscall  (1<<_VGCF_in_syscall)
-#define VGCF_IN_SYSCALL  VGCF_in_syscall
-
-#ifndef __ASSEMBLY__
-
-struct iret_context {
-    /* Top of stack (%rsp at point of hypercall). */
-    uint64_t rax, r11, rcx, flags, rip, cs, rflags, rsp, ss;
-    /* Bottom of iret stack frame. */
-};
-
-#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
-/* Anonymous union includes both 32- and 64-bit names (e.g., eax/rax). */
-#define __DECL_REG(name) union { \
-    uint64_t r ## name, e ## name; \
-    uint32_t _e ## name; \
-}
-#else
-/* Non-gcc sources must always use the proper 64-bit name (e.g., rax). */
-#define __DECL_REG(name) uint64_t r ## name
-#endif
-
-struct cpu_user_regs {
-    uint64_t r15;
-    uint64_t r14;
-    uint64_t r13;
-    uint64_t r12;
-    __DECL_REG(bp);
-    __DECL_REG(bx);
-    uint64_t r11;
-    uint64_t r10;
-    uint64_t r9;
-    uint64_t r8;
-    __DECL_REG(ax);
-    __DECL_REG(cx);
-    __DECL_REG(dx);
-    __DECL_REG(si);
-    __DECL_REG(di);
-    uint32_t error_code;    /* private */
-    uint32_t entry_vector;  /* private */
-    __DECL_REG(ip);
-    uint16_t cs, _pad0[1];
-    uint8_t  saved_upcall_mask;
-    uint8_t  _pad1[3];
-    __DECL_REG(flags);      /* rflags.IF =3D=3D !saved_upcall_mask */
-    __DECL_REG(sp);
-    uint16_t ss, _pad2[3];
-    uint16_t es, _pad3[3];
-    uint16_t ds, _pad4[3];
-    uint16_t fs, _pad5[3]; /* Non-zero =3D> takes precedence over fs_base.=
     */
-    uint16_t gs, _pad6[3]; /* Non-zero =3D> takes precedence over gs_base_=
usr. */
-};
-typedef struct cpu_user_regs cpu_user_regs_t;
-DEFINE_XEN_GUEST_HANDLE(cpu_user_regs_t);
-
-#undef __DECL_REG
-
-#define xen_pfn_to_cr3(pfn) ((ULONG_PTR)(pfn) << 12)
-#define xen_cr3_to_pfn(cr3) ((ULONG_PTR)(cr3) >> 12)
-
-struct arch_vcpu_info {
-    ULONG_PTR cr2;
-    ULONG_PTR pad; /* sizeof(vcpu_info_t) =3D=3D 64 */
-};
-typedef struct arch_vcpu_info arch_vcpu_info_t;
-
-typedef ULONG_PTR xen_callback_t;
-
-#endif /* !__ASSEMBLY__ */
-
-#endif /* __XEN_PUBLIC_ARCH_X86_XEN_X86_64_H__ */
-
-/*
- * Local variables:
- * mode: C
- * c-file-style: "BSD"
- * c-basic-offset: 4
- * tab-width: 4
- * indent-tabs-mode: nil
- * End:
- */
diff --git a/include/xen/public/arch-x86/xen.h b/include/xen/public/arch-x8=
6/xen.h
deleted file mode 100644
index 05db77f..0000000
--- a/include/xen/public/arch-x86/xen.h
+++ /dev/null
@@ -1,338 +0,0 @@
-/*************************************************************************=
*****
- * arch-x86/xen.h
- *
- * Guest OS interface to x86 Xen.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a=
 copy
- * of this software and associated documentation files (the "Software"), t=
o
- * deal in the Software without restriction, including without limitation =
the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, an=
d/or
- * sell copies of the Software, and to permit persons to whom the Software=
 is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included=
 in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS=
 OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY=
,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL=
 THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- * Copyright (c) 2004-2006, K A Fraser
- */
-
-#include "../xen.h"
-
-#ifndef __XEN_PUBLIC_ARCH_X86_XEN_H__
-#define __XEN_PUBLIC_ARCH_X86_XEN_H__
-
-/* Structural guest handles introduced in 0x00030201. */
-#if __XEN_INTERFACE_VERSION__ >=3D 0x00030201
-#define ___DEFINE_XEN_GUEST_HANDLE(name, type) \
-    typedef struct { type *p; } __guest_handle_ ## name
-#else
-#define ___DEFINE_XEN_GUEST_HANDLE(name, type) \
-    typedef type * __guest_handle_ ## name
-#endif
-
-/*
- * XEN_GUEST_HANDLE represents a guest pointer, when passed as a field
- * in a struct in memory.
- * XEN_GUEST_HANDLE_PARAM represent a guest pointer, when passed as an
- * hypercall argument.
- * XEN_GUEST_HANDLE_PARAM and XEN_GUEST_HANDLE are the same on X86 but
- * they might not be on other architectures.
- */
-#define __DEFINE_XEN_GUEST_HANDLE(name, type) \
-    ___DEFINE_XEN_GUEST_HANDLE(name, type);   \
-    ___DEFINE_XEN_GUEST_HANDLE(const_##name, const type)
-#define DEFINE_XEN_GUEST_HANDLE(name)   __DEFINE_XEN_GUEST_HANDLE(name, na=
me)
-#define __XEN_GUEST_HANDLE(name)        __guest_handle_ ## name
-#define XEN_GUEST_HANDLE(name)          __XEN_GUEST_HANDLE(name)
-#define XEN_GUEST_HANDLE_PARAM(name)    XEN_GUEST_HANDLE(name)
-#define set_xen_guest_handle_raw(hnd, val)  do { (hnd).p =3D val; } while =
(0)
-#define set_xen_guest_handle(hnd, val) set_xen_guest_handle_raw(hnd, val)
-
-#if defined(__i386__)
-#include "xen-x86_32.h"
-#elif defined(__x86_64__)
-#include "xen-x86_64.h"
-#endif
-
-#ifndef __ASSEMBLY__
-typedef ULONG_PTR xen_pfn_t;
-#define PRI_xen_pfn "lx"
-#endif
-
-#define XEN_HAVE_PV_GUEST_ENTRY 1
-
-#define XEN_HAVE_PV_UPCALL_MASK 1
-
-/*
- * `incontents 200 segdesc Segment Descriptor Tables
- */
-/*
- * ` enum neg_errnoval
- * ` HYPERVISOR_set_gdt(const xen_pfn_t frames[], unsigned int entries);
- * `
- */
-/*
- * A number of GDT entries are reserved by Xen. These are not situated at =
the
- * start of the GDT because some stupid OSes export hard-coded selector va=
lues
- * in their ABI. These hard-coded values are always near the start of the =
GDT,
- * so Xen places itself out of the way, at the far end of the GDT.
- *
- * NB The LDT is set using the MMUEXT_SET_LDT op of HYPERVISOR_mmuext_op
- */
-#define FIRST_RESERVED_GDT_PAGE  14
-#define FIRST_RESERVED_GDT_BYTE  (FIRST_RESERVED_GDT_PAGE * 4096)
-#define FIRST_RESERVED_GDT_ENTRY (FIRST_RESERVED_GDT_BYTE / 8)
-
-
-/*
- * ` enum neg_errnoval
- * ` HYPERVISOR_update_descriptor(u64 pa, u64 desc);
- * `
- * ` @pa   The machine physical address of the descriptor to
- * `       update. Must be either a descriptor page or writable.
- * ` @desc The descriptor value to update, in the same format as a
- * `       native descriptor table entry.
- */
-
-/* Maximum number of virtual CPUs in legacy multi-processor guests. */
-#define XEN_LEGACY_MAX_VCPUS 32
-
-#ifndef __ASSEMBLY__
-
-typedef ULONG_PTR xen_ulong_t;
-#define PRI_xen_ulong "lx"
-
-/*
- * ` enum neg_errnoval
- * ` HYPERVISOR_stack_switch(ULONG_PTR ss, ULONG_PTR esp);
- * `
- * Sets the stack segment and pointer for the current vcpu.
- */
-
-/*
- * ` enum neg_errnoval
- * ` HYPERVISOR_set_trap_table(const struct trap_info traps[]);
- * `
- */
-/*
- * Send an array of these to HYPERVISOR_set_trap_table().
- * Terminate the array with a sentinel entry, with traps[].address=3D=3D0.
- * The privilege level specifies which modes may enter a trap via a softwa=
re
- * interrupt. On x86/64, since rings 1 and 2 are unavailable, we allocate
- * privilege levels as follows:
- *  Level =3D=3D 0: Noone may enter
- *  Level =3D=3D 1: Kernel may enter
- *  Level =3D=3D 2: Kernel may enter
- *  Level =3D=3D 3: Everyone may enter
- */
-#define TI_GET_DPL(_ti)      ((_ti)->flags & 3)
-#define TI_GET_IF(_ti)       ((_ti)->flags & 4)
-#define TI_SET_DPL(_ti,_dpl) ((_ti)->flags |=3D (_dpl))
-#define TI_SET_IF(_ti,_if)   ((_ti)->flags |=3D ((!!(_if))<<2))
-struct trap_info {
-    uint8_t       vector;  /* exception vector                            =
  */
-    uint8_t       flags;   /* 0-3: privilege level; 4: clear event enable?=
  */
-    uint16_t      cs;      /* code selector                               =
  */
-    ULONG_PTR address; /* code offset                                   */
-};
-typedef struct trap_info trap_info_t;
-DEFINE_XEN_GUEST_HANDLE(trap_info_t);
-
-typedef uint64_t tsc_timestamp_t; /* RDTSC timestamp */
-
-/*
- * The following is all CPU context. Note that the fpu_ctxt block is fille=
d
- * in by FXSAVE if the CPU has feature FXSR; otherwise FSAVE is used.
- *
- * Also note that when calling DOMCTL_setvcpucontext and VCPU_initialise
- * for HVM and PVH guests, not all information in this structure is update=
d:
- *
- * - For HVM guests, the structures read include: fpu_ctxt (if
- * VGCT_I387_VALID is set), flags, user_regs, debugreg[*]
- *
- * - PVH guests are the same as HVM guests, but additionally use ctrlreg[3=
] to
- * set cr3. All other fields not used should be set to 0.
- */
-struct vcpu_guest_context {
-    /* FPU registers come first so they can be aligned for FXSAVE/FXRSTOR.=
 */
-    struct { char x[512]; } fpu_ctxt;       /* User-level FPU registers   =
  */
-#define VGCF_I387_VALID                (1<<0)
-#define VGCF_IN_KERNEL                 (1<<2)
-#define _VGCF_i387_valid               0
-#define VGCF_i387_valid                (1<<_VGCF_i387_valid)
-#define _VGCF_in_kernel                2
-#define VGCF_in_kernel                 (1<<_VGCF_in_kernel)
-#define _VGCF_failsafe_disables_events 3
-#define VGCF_failsafe_disables_events  (1<<_VGCF_failsafe_disables_events)
-#define _VGCF_syscall_disables_events  4
-#define VGCF_syscall_disables_events   (1<<_VGCF_syscall_disables_events)
-#define _VGCF_online                   5
-#define VGCF_online                    (1<<_VGCF_online)
-    ULONG_PTR flags;                    /* VGCF_* flags                 */
-    struct cpu_user_regs user_regs;         /* User-level CPU registers   =
  */
-    struct trap_info trap_ctxt[256];        /* Virtual IDT                =
  */
-    ULONG_PTR ldt_base, ldt_ents;       /* LDT (linear address, # ents) */
-    ULONG_PTR gdt_frames[16], gdt_ents; /* GDT (machine frames, # ents) */
-    ULONG_PTR kernel_ss, kernel_sp;     /* Virtual TSS (only SS1/SP1)   */
-    /* NB. User pagetable on x86/64 is placed in ctrlreg[1]. */
-    ULONG_PTR ctrlreg[8];               /* CR0-CR7 (control registers)  */
-    ULONG_PTR debugreg[8];              /* DB0-DB7 (debug registers)    */
-#ifdef __i386__
-    ULONG_PTR event_callback_cs;        /* CS:EIP of event callback     */
-    ULONG_PTR event_callback_eip;
-    ULONG_PTR failsafe_callback_cs;     /* CS:EIP of failsafe callback  */
-    ULONG_PTR failsafe_callback_eip;
-#else
-    ULONG_PTR event_callback_eip;
-    ULONG_PTR failsafe_callback_eip;
-#ifdef __XEN__
-    union {
-        ULONG_PTR syscall_callback_eip;
-        struct {
-            unsigned int event_callback_cs;    /* compat CS of event cb   =
  */
-            unsigned int failsafe_callback_cs; /* compat CS of failsafe cb=
  */
-        };
-    };
-#else
-    ULONG_PTR syscall_callback_eip;
-#endif
-#endif
-    ULONG_PTR vm_assist;                /* VMASST_TYPE_* bitmap */
-#ifdef __x86_64__
-    /* Segment base addresses. */
-    uint64_t      fs_base;
-    uint64_t      gs_base_kernel;
-    uint64_t      gs_base_user;
-#endif
-};
-typedef struct vcpu_guest_context vcpu_guest_context_t;
-DEFINE_XEN_GUEST_HANDLE(vcpu_guest_context_t);
-
-struct arch_shared_info {
-    /*
-     * Number of valid entries in the p2m table(s) anchored at
-     * pfn_to_mfn_frame_list_list and/or p2m_vaddr.
-     */
-    ULONG_PTR max_pfn;
-    /*
-     * Frame containing list of mfns containing list of mfns containing p2=
m.
-     * A value of 0 indicates it has not yet been set up, ~0 indicates it =
has
-     * been set to invalid e.g. due to the p2m being too large for the 3-l=
evel
-     * p2m tree. In this case the linear mapper p2m list anchored at p2m_v=
addr
-     * is to be used.
-     */
-    xen_pfn_t     pfn_to_mfn_frame_list_list;
-    ULONG_PTR nmi_reason;
-    /*
-     * Following three fields are valid if p2m_cr3 contains a value differ=
ent
-     * from 0.
-     * p2m_cr3 is the root of the address space where p2m_vaddr is valid.
-     * p2m_cr3 is in the same format as a cr3 value in the vcpu register s=
tate
-     * and holds the folded machine frame number (via xen_pfn_to_cr3) of a
-     * L3 or L4 page table.
-     * p2m_vaddr holds the virtual address of the linear p2m list. All ent=
ries
-     * in the range [0...max_pfn[ are accessible via this pointer.
-     * p2m_generation will be incremented by the guest before and after ea=
ch
-     * change of the mappings of the p2m list. p2m_generation starts at 0 =
and
-     * a value with the least significant bit set indicates that a mapping
-     * update is in progress. This allows guest external software (e.g. in=
 Dom0)
-     * to verify that read mappings are consistent and whether they have c=
hanged
-     * since the last check.
-     * Modifying a p2m element in the linear p2m list is allowed via an at=
omic
-     * write only.
-     */
-    ULONG_PTR p2m_cr3;         /* cr3 value of the p2m address space */
-    ULONG_PTR p2m_vaddr;       /* virtual address of the p2m list */
-    ULONG_PTR p2m_generation;  /* generation count of p2m mapping */
-#ifdef __i386__
-    /* There's no room for this field in the generic structure. */
-    uint32_t wc_sec_hi;
-#endif
-};
-typedef struct arch_shared_info arch_shared_info_t;
-
-#if defined(__XEN__) || defined(__XEN_TOOLS__)
-/*
- * struct xen_arch_domainconfig's ABI is covered by
- * XEN_DOMCTL_INTERFACE_VERSION.
- */
-struct xen_arch_domainconfig {
-#define _XEN_X86_EMU_LAPIC          0
-#define XEN_X86_EMU_LAPIC           (1U<<_XEN_X86_EMU_LAPIC)
-#define _XEN_X86_EMU_HPET           1
-#define XEN_X86_EMU_HPET            (1U<<_XEN_X86_EMU_HPET)
-#define _XEN_X86_EMU_PM             2
-#define XEN_X86_EMU_PM              (1U<<_XEN_X86_EMU_PM)
-#define _XEN_X86_EMU_RTC            3
-#define XEN_X86_EMU_RTC             (1U<<_XEN_X86_EMU_RTC)
-#define _XEN_X86_EMU_IOAPIC         4
-#define XEN_X86_EMU_IOAPIC          (1U<<_XEN_X86_EMU_IOAPIC)
-#define _XEN_X86_EMU_PIC            5
-#define XEN_X86_EMU_PIC             (1U<<_XEN_X86_EMU_PIC)
-#define _XEN_X86_EMU_VGA            6
-#define XEN_X86_EMU_VGA             (1U<<_XEN_X86_EMU_VGA)
-#define _XEN_X86_EMU_IOMMU          7
-#define XEN_X86_EMU_IOMMU           (1U<<_XEN_X86_EMU_IOMMU)
-#define _XEN_X86_EMU_PIT            8
-#define XEN_X86_EMU_PIT             (1U<<_XEN_X86_EMU_PIT)
-
-#define XEN_X86_EMU_ALL             (XEN_X86_EMU_LAPIC | XEN_X86_EMU_HPET =
|  \
-                                     XEN_X86_EMU_PM | XEN_X86_EMU_RTC |   =
   \
-                                     XEN_X86_EMU_IOAPIC | XEN_X86_EMU_PIC =
|  \
-                                     XEN_X86_EMU_VGA | XEN_X86_EMU_IOMMU |=
   \
-                                     XEN_X86_EMU_PIT)
-    uint32_t emulation_flags;
-};
-#endif
-
-#endif /* !__ASSEMBLY__ */
-
-/*
- * ` enum neg_errnoval
- * ` HYPERVISOR_fpu_taskswitch(int set);
- * `
- * Sets (if set!=3D0) or clears (if set=3D=3D0) CR0.TS.
- */
-
-/*
- * ` enum neg_errnoval
- * ` HYPERVISOR_set_debugreg(int regno, ULONG_PTR value);
- *
- * ` ULONG_PTR
- * ` HYPERVISOR_get_debugreg(int regno);
- * For 0<=3Dreg<=3D7, returns the debug register value.
- * For other values of reg, returns ((ULONG_PTR)-EINVAL).
- * (Unfortunately, this interface is defective.)
- */
-
-/*
- * Prefix forces emulation of some non-trapping instructions.
- * Currently only CPUID.
- */
-#ifdef __ASSEMBLY__
-#define XEN_EMULATE_PREFIX .byte 0x0f,0x0b,0x78,0x65,0x6e ;
-#define XEN_CPUID          XEN_EMULATE_PREFIX cpuid
-#else
-#define XEN_EMULATE_PREFIX ".byte 0x0f,0x0b,0x78,0x65,0x6e ; "
-#define XEN_CPUID          XEN_EMULATE_PREFIX "cpuid"
-#endif
-
-#endif /* __XEN_PUBLIC_ARCH_X86_XEN_H__ */
-
-/*
- * Local variables:
- * mode: C
- * c-file-style: "BSD"
- * c-basic-offset: 4
- * tab-width: 4
- * indent-tabs-mode: nil
- * End:
- */
diff --git a/include/xen/public/hvm/hvm_info_table.h b/include/xen/public/h=
vm/hvm_info_table.h
deleted file mode 100644
index a92e8f7..0000000
--- a/include/xen/public/hvm/hvm_info_table.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/*************************************************************************=
*****
- * hvm/hvm_info_table.h
- *
- * HVM parameter and information table, written into guest memory map.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a=
 copy
- * of this software and associated documentation files (the "Software"), t=
o
- * deal in the Software without restriction, including without limitation =
the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, an=
d/or
- * sell copies of the Software, and to permit persons to whom the Software=
 is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included=
 in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS=
 OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY=
,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL=
 THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- * Copyright (c) 2006, Keir Fraser
- */
-
-#ifndef __XEN_PUBLIC_HVM_HVM_INFO_TABLE_H__
-#define __XEN_PUBLIC_HVM_HVM_INFO_TABLE_H__
-
-#define HVM_INFO_PFN         0x09F
-#define HVM_INFO_OFFSET      0x800
-#define HVM_INFO_PADDR       ((HVM_INFO_PFN << 12) + HVM_INFO_OFFSET)
-
-/* Maximum we can support with current vLAPIC ID mapping. */
-#define HVM_MAX_VCPUS        128
-
-struct hvm_info_table {
-    char        signature[8]; /* "HVM INFO" */
-    uint32_t    length;
-    uint8_t     checksum;
-
-    /* Should firmware build APIC descriptors (APIC MADT / MP BIOS)? */
-    uint8_t     apic_mode;
-
-    /* How many CPUs does this domain have? */
-    uint32_t    nr_vcpus;
-
-    /*
-     * MEMORY MAP provided by HVM domain builder.
-     * Notes:
-     *  1. page_to_phys(x) =3D x << 12
-     *  2. If a field is zero, the corresponding range does not exist.
-     */
-    /*
-     *  0x0 to page_to_phys(low_mem_pgend)-1:
-     *    RAM below 4GB (except for VGA hole 0xA0000-0xBFFFF)
-     */
-    uint32_t    low_mem_pgend;
-    /*
-     *  page_to_phys(reserved_mem_pgstart) to 0xFFFFFFFF:
-     *    Reserved for special memory mappings
-     */
-    uint32_t    reserved_mem_pgstart;
-    /*
-     *  0x100000000 to page_to_phys(high_mem_pgend)-1:
-     *    RAM above 4GB
-     */
-    uint32_t    high_mem_pgend;
-
-    /* Bitmap of which CPUs are online at boot time. */
-    uint8_t     vcpu_online[(HVM_MAX_VCPUS + 7)/8];
-};
-
-#endif /* __XEN_PUBLIC_HVM_HVM_INFO_TABLE_H__ */
diff --git a/include/xen/public/xen-compat.h b/include/xen/public/xen-compa=
t.h
deleted file mode 100644
index 2eea0e2..0000000
--- a/include/xen/public/xen-compat.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*************************************************************************=
*****
- * xen-compat.h
- *
- * Guest OS interface to Xen.  Compatibility layer.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a=
 copy
- * of this software and associated documentation files (the "Software"), t=
o
- * deal in the Software without restriction, including without limitation =
the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, an=
d/or
- * sell copies of the Software, and to permit persons to whom the Software=
 is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included=
 in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS=
 OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY=
,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL=
 THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- * Copyright (c) 2006, Christian Limpach
- */
-
-#ifndef __XEN_PUBLIC_XEN_COMPAT_H__
-#define __XEN_PUBLIC_XEN_COMPAT_H__
-
-#define __XEN_LATEST_INTERFACE_VERSION__ 0x00040700
-
-#if defined(__XEN__) || defined(__XEN_TOOLS__)
-/* Xen is built with matching headers and implements the latest interface.=
 */
-#define __XEN_INTERFACE_VERSION__ __XEN_LATEST_INTERFACE_VERSION__
-#elif !defined(__XEN_INTERFACE_VERSION__)
-/* Guests which do not specify a version get the legacy interface. */
-#define __XEN_INTERFACE_VERSION__ 0x00000000
-#endif
-
-#if __XEN_INTERFACE_VERSION__ > __XEN_LATEST_INTERFACE_VERSION__
-#error "These header files do not support the requested interface version.=
"
-#endif
-
-#endif /* __XEN_PUBLIC_XEN_COMPAT_H__ */
diff --git a/include/xen/public/xen.h b/include/xen/public/xen.h
deleted file mode 100644
index 2057b52..0000000
--- a/include/xen/public/xen.h
+++ /dev/null
@@ -1,995 +0,0 @@
-/*************************************************************************=
*****
- * xen.h
- *
- * Guest OS interface to Xen.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a=
 copy
- * of this software and associated documentation files (the "Software"), t=
o
- * deal in the Software without restriction, including without limitation =
the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, an=
d/or
- * sell copies of the Software, and to permit persons to whom the Software=
 is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included=
 in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS=
 OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY=
,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL=
 THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- * Copyright (c) 2004, K A Fraser
- */
-
-#ifndef __XEN_PUBLIC_XEN_H__
-#define __XEN_PUBLIC_XEN_H__
-
-#include "xen-compat.h"
-
-#if defined(__i386__) || defined(__x86_64__)
-#include "arch-x86/xen.h"
-#elif defined(__arm__) || defined (__aarch64__)
-#include "arch-arm.h"
-#else
-#error "Unsupported architecture"
-#endif
-
-#ifndef __ASSEMBLY__
-/* Guest handles for primitive C types. */
-DEFINE_XEN_GUEST_HANDLE(char);
-__DEFINE_XEN_GUEST_HANDLE(uchar, unsigned char);
-DEFINE_XEN_GUEST_HANDLE(int);
-__DEFINE_XEN_GUEST_HANDLE(uint,  unsigned int);
-#if __XEN_INTERFACE_VERSION__ < 0x00040300
-DEFINE_XEN_GUEST_HANDLE(LONG_PTR);
-__DEFINE_XEN_GUEST_HANDLE(ulong, ULONG_PTR);
-#endif
-DEFINE_XEN_GUEST_HANDLE(void);
-
-DEFINE_XEN_GUEST_HANDLE(uint64_t);
-DEFINE_XEN_GUEST_HANDLE(xen_pfn_t);
-DEFINE_XEN_GUEST_HANDLE(xen_ulong_t);
-
-/* Turn a plain number into a C unsigned (LONG_PTR) constant. */
-#define __xen_mk_uint(x)  x ## U
-#define __xen_mk_ulong(x) x ## UL
-#define xen_mk_uint(x)    __xen_mk_uint(x)
-#define xen_mk_ulong(x)   __xen_mk_ulong(x)
-
-#else
-
-/* In assembly code we cannot use C numeric constant suffixes. */
-#define xen_mk_uint(x)  x
-#define xen_mk_ulong(x) x
-
-#endif
-
-/*
- * HYPERCALLS
- */
-
-/* `incontents 100 hcalls List of hypercalls
- * ` enum hypercall_num { // __HYPERVISOR_* =3D> HYPERVISOR_*()
- */
-
-#define __HYPERVISOR_set_trap_table        0
-#define __HYPERVISOR_mmu_update            1
-#define __HYPERVISOR_set_gdt               2
-#define __HYPERVISOR_stack_switch          3
-#define __HYPERVISOR_set_callbacks         4
-#define __HYPERVISOR_fpu_taskswitch        5
-#define __HYPERVISOR_sched_op_compat       6 /* compat since 0x00030101 */
-#define __HYPERVISOR_platform_op           7
-#define __HYPERVISOR_set_debugreg          8
-#define __HYPERVISOR_get_debugreg          9
-#define __HYPERVISOR_update_descriptor    10
-#define __HYPERVISOR_memory_op            12
-#define __HYPERVISOR_multicall            13
-#define __HYPERVISOR_update_va_mapping    14
-#define __HYPERVISOR_set_timer_op         15
-#define __HYPERVISOR_event_channel_op_compat 16 /* compat since 0x00030202=
 */
-#define __HYPERVISOR_xen_version          17
-#define __HYPERVISOR_console_io           18
-#define __HYPERVISOR_physdev_op_compat    19 /* compat since 0x00030202 */
-#define __HYPERVISOR_grant_table_op       20
-#define __HYPERVISOR_vm_assist            21
-#define __HYPERVISOR_update_va_mapping_otherdomain 22
-#define __HYPERVISOR_iret                 23 /* x86 only */
-#define __HYPERVISOR_vcpu_op              24
-#define __HYPERVISOR_set_segment_base     25 /* x86/64 only */
-#define __HYPERVISOR_mmuext_op            26
-#define __HYPERVISOR_xsm_op               27
-#define __HYPERVISOR_nmi_op               28
-#define __HYPERVISOR_sched_op             29
-#define __HYPERVISOR_callback_op          30
-#define __HYPERVISOR_xenoprof_op          31
-#define __HYPERVISOR_event_channel_op     32
-#define __HYPERVISOR_physdev_op           33
-#define __HYPERVISOR_hvm_op               34
-#define __HYPERVISOR_sysctl               35
-#define __HYPERVISOR_domctl               36
-#define __HYPERVISOR_kexec_op             37
-#define __HYPERVISOR_tmem_op              38
-#define __HYPERVISOR_xc_reserved_op       39 /* reserved for XenClient */
-#define __HYPERVISOR_xenpmu_op            40
-
-/* Architecture-specific hypercall definitions. */
-#define __HYPERVISOR_arch_0               48
-#define __HYPERVISOR_arch_1               49
-#define __HYPERVISOR_arch_2               50
-#define __HYPERVISOR_arch_3               51
-#define __HYPERVISOR_arch_4               52
-#define __HYPERVISOR_arch_5               53
-#define __HYPERVISOR_arch_6               54
-#define __HYPERVISOR_arch_7               55
-
-/* ` } */
-
-/*
- * HYPERCALL COMPATIBILITY.
- */
-
-/* New sched_op hypercall introduced in 0x00030101. */
-#if __XEN_INTERFACE_VERSION__ < 0x00030101
-#undef __HYPERVISOR_sched_op
-#define __HYPERVISOR_sched_op __HYPERVISOR_sched_op_compat
-#endif
-
-/* New event-channel and physdev hypercalls introduced in 0x00030202. */
-#if __XEN_INTERFACE_VERSION__ < 0x00030202
-#undef __HYPERVISOR_event_channel_op
-#define __HYPERVISOR_event_channel_op __HYPERVISOR_event_channel_op_compat
-#undef __HYPERVISOR_physdev_op
-#define __HYPERVISOR_physdev_op __HYPERVISOR_physdev_op_compat
-#endif
-
-/* New platform_op hypercall introduced in 0x00030204. */
-#if __XEN_INTERFACE_VERSION__ < 0x00030204
-#define __HYPERVISOR_dom0_op __HYPERVISOR_platform_op
-#endif
-
-/*
- * VIRTUAL INTERRUPTS
- *
- * Virtual interrupts that a guest OS may receive from Xen.
- *
- * In the side comments, 'V.' denotes a per-VCPU VIRQ while 'G.' denotes a
- * global VIRQ. The former can be bound once per VCPU and cannot be re-bou=
nd.
- * The latter can be allocated only once per guest: they must initially be
- * allocated to VCPU0 but can subsequently be re-bound.
- */
-/* ` enum virq { */
-#define VIRQ_TIMER      0  /* V. Timebase update, and/or requested timeout=
.  */
-#define VIRQ_DEBUG      1  /* V. Request guest to dump debug info.        =
   */
-#define VIRQ_CONSOLE    2  /* G. (DOM0) Bytes received on emergency consol=
e. */
-#define VIRQ_DOM_EXC    3  /* G. (DOM0) Exceptional event for some domain.=
   */
-#define VIRQ_TBUF       4  /* G. (DOM0) Trace buffer has records available=
.  */
-#define VIRQ_DEBUGGER   6  /* G. (DOM0) A domain has paused for debugging.=
   */
-#define VIRQ_XENOPROF   7  /* V. XenOprofile interrupt: new sample availab=
le */
-#define VIRQ_CON_RING   8  /* G. (DOM0) Bytes received on console         =
   */
-#define VIRQ_PCPU_STATE 9  /* G. (DOM0) PCPU state changed                =
   */
-#define VIRQ_MEM_EVENT  10 /* G. (DOM0) A memory event has occured        =
   */
-#define VIRQ_XC_RESERVED 11 /* G. Reserved for XenClient                  =
   */
-#define VIRQ_ENOMEM     12 /* G. (DOM0) Low on heap memory       */
-#define VIRQ_XENPMU     13 /* V.  PMC interrupt                           =
   */
-
-/* Architecture-specific VIRQ definitions. */
-#define VIRQ_ARCH_0    16
-#define VIRQ_ARCH_1    17
-#define VIRQ_ARCH_2    18
-#define VIRQ_ARCH_3    19
-#define VIRQ_ARCH_4    20
-#define VIRQ_ARCH_5    21
-#define VIRQ_ARCH_6    22
-#define VIRQ_ARCH_7    23
-/* ` } */
-
-#define NR_VIRQS       24
-
-/*
- * ` enum neg_errnoval
- * ` HYPERVISOR_mmu_update(const struct mmu_update reqs[],
- * `                       unsigned count, unsigned *done_out,
- * `                       unsigned foreigndom)
- * `
- * @reqs is an array of mmu_update_t structures ((ptr, val) pairs).
- * @count is the length of the above array.
- * @pdone is an output parameter indicating number of completed operations
- * @foreigndom[15:0]: FD, the expected owner of data pages referenced in t=
his
- *                    hypercall invocation. Can be DOMID_SELF.
- * @foreigndom[31:16]: PFD, the expected owner of pagetable pages referenc=
ed
- *                     in this hypercall invocation. The value of this fie=
ld
- *                     (x) encodes the PFD as follows:
- *                     x =3D=3D 0 =3D> PFD =3D=3D DOMID_SELF
- *                     x !=3D 0 =3D> PFD =3D=3D x - 1
- *
- * Sub-commands: ptr[1:0] specifies the appropriate MMU_* command.
- * -------------
- * ptr[1:0] =3D=3D MMU_NORMAL_PT_UPDATE:
- * Updates an entry in a page table belonging to PFD. If updating an L1 ta=
ble,
- * and the new table entry is valid/present, the mapped frame must belong =
to
- * FD. If attempting to map an I/O page then the caller assumes the privil=
ege
- * of the FD.
- * FD =3D=3D DOMID_IO: Permit /only/ I/O mappings, at the priv level of th=
e caller.
- * FD =3D=3D DOMID_XEN: Map restricted areas of Xen's heap space.
- * ptr[:2]  -- Machine address of the page-table entry to modify.
- * val      -- Value to write.
- *
- * There also certain implicit requirements when using this hypercall. The
- * pages that make up a pagetable must be mapped read-only in the guest.
- * This prevents uncontrolled guest updates to the pagetable. Xen strictly
- * enforces this, and will disallow any pagetable update which will end up
- * mapping pagetable page RW, and will disallow using any writable page as=
 a
- * pagetable. In practice it means that when constructing a page table for=
 a
- * process, thread, etc, we MUST be very dilligient in following these rul=
es:
- *  1). Start with top-level page (PGD or in Xen language: L4). Fill out
- *      the entries.
- *  2). Keep on going, filling out the upper (PUD or L3), and middle (PMD
- *      or L2).
- *  3). Start filling out the PTE table (L1) with the PTE entries. Once
- *     done, make sure to set each of those entries to RO (so writeable bi=
t
- *     is unset). Once that has been completed, set the PMD (L2) for this
- *     PTE table as RO.
- *  4). When completed with all of the PMD (L2) entries, and all of them h=
ave
- *     been set to RO, make sure to set RO the PUD (L3). Do the same
- *     operation on PGD (L4) pagetable entries that have a PUD (L3) entry.
- *  5). Now before you can use those pages (so setting the cr3), you MUST =
also
- *      pin them so that the hypervisor can verify the entries. This is do=
ne
- *      via the HYPERVISOR_mmuext_op(MMUEXT_PIN_L4_TABLE, guest physical f=
rame
- *      number of the PGD (L4)). And this point the HYPERVISOR_mmuext_op(
- *      MMUEXT_NEW_BASEPTR, guest physical frame number of the PGD (L4)) c=
an be
- *      issued.
- * For 32-bit guests, the L4 is not used (as there is less pagetables), so
- * instead use L3.
- * At this point the pagetables can be modified using the MMU_NORMAL_PT_UP=
DATE
- * hypercall. Also if so desired the OS can also try to write to the PTE
- * and be trapped by the hypervisor (as the PTE entry is RO).
- *
- * To deallocate the pages, the operations are the reverse of the steps
- * mentioned above. The argument is MMUEXT_UNPIN_TABLE for all levels and =
the
- * pagetable MUST not be in use (meaning that the cr3 is not set to it).
- *
- * ptr[1:0] =3D=3D MMU_MACHPHYS_UPDATE:
- * Updates an entry in the machine->pseudo-physical mapping table.
- * ptr[:2]  -- Machine address within the frame whose mapping to modify.
- *             The frame must belong to the FD, if one is specified.
- * val      -- Value to write into the mapping entry.
- *
- * ptr[1:0] =3D=3D MMU_PT_UPDATE_PRESERVE_AD:
- * As MMU_NORMAL_PT_UPDATE above, but A/D bits currently in the PTE are OR=
ed
- * with those in @val.
- *
- * @val is usually the machine frame number along with some attributes.
- * The attributes by default follow the architecture defined bits. Meaning=
 that
- * if this is a X86_64 machine and four page table layout is used, the lay=
out
- * of val is:
- *  - 63 if set means No execute (NX)
- *  - 46-13 the machine frame number
- *  - 12 available for guest
- *  - 11 available for guest
- *  - 10 available for guest
- *  - 9 available for guest
- *  - 8 global
- *  - 7 PAT (PSE is disabled, must use hypercall to make 4MB or 2MB pages)
- *  - 6 dirty
- *  - 5 accessed
- *  - 4 page cached disabled
- *  - 3 page write through
- *  - 2 userspace accessible
- *  - 1 writeable
- *  - 0 present
- *
- *  The one bits that does not fit with the default layout is the PAGE_PSE
- *  also called PAGE_PAT). The MMUEXT_[UN]MARK_SUPER arguments to the
- *  HYPERVISOR_mmuext_op serve as mechanism to set a pagetable to be 4MB
- *  (or 2MB) instead of using the PAGE_PSE bit.
- *
- *  The reason that the PAGE_PSE (bit 7) is not being utilized is due to X=
en
- *  using it as the Page Attribute Table (PAT) bit - for details on it ple=
ase
- *  refer to Intel SDM 10.12. The PAT allows to set the caching attributes=
 of
- *  pages instead of using MTRRs.
- *
- *  The PAT MSR is as follows (it is a 64-bit value, each entry is 8 bits)=
:
- *                    PAT4                 PAT0
- *  +-----+-----+----+----+----+-----+----+----+
- *  | UC  | UC- | WC | WB | UC | UC- | WC | WB |  <=3D Linux
- *  +-----+-----+----+----+----+-----+----+----+
- *  | UC  | UC- | WT | WB | UC | UC- | WT | WB |  <=3D BIOS (default when =
machine boots)
- *  +-----+-----+----+----+----+-----+----+----+
- *  | rsv | rsv | WP | WC | UC | UC- | WT | WB |  <=3D Xen
- *  +-----+-----+----+----+----+-----+----+----+
- *
- *  The lookup of this index table translates to looking up
- *  Bit 7, Bit 4, and Bit 3 of val entry:
- *
- *  PAT/PSE (bit 7) ... PCD (bit 4) .. PWT (bit 3).
- *
- *  If all bits are off, then we are using PAT0. If bit 3 turned on,
- *  then we are using PAT1, if bit 3 and bit 4, then PAT2..
- *
- *  As you can see, the Linux PAT1 translates to PAT4 under Xen. Which mea=
ns
- *  that if a guest that follows Linux's PAT setup and would like to set W=
rite
- *  Combined on pages it MUST use PAT4 entry. Meaning that Bit 7 (PAGE_PAT=
) is
- *  set. For example, under Linux it only uses PAT0, PAT1, and PAT2 for th=
e
- *  caching as:
- *
- *   WB =3D none (so PAT0)
- *   WC =3D PWT (bit 3 on)
- *   UC =3D PWT | PCD (bit 3 and 4 are on).
- *
- * To make it work with Xen, it needs to translate the WC bit as so:
- *
- *  PWT (so bit 3 on) --> PAT (so bit 7 is on) and clear bit 3
- *
- * And to translate back it would:
- *
- * PAT (bit 7 on) --> PWT (bit 3 on) and clear bit 7.
- */
-#define MMU_NORMAL_PT_UPDATE      0 /* checked '*ptr =3D val'. ptr is MA. =
     */
-#define MMU_MACHPHYS_UPDATE       1 /* ptr =3D MA of frame to modify entry=
 for */
-#define MMU_PT_UPDATE_PRESERVE_AD 2 /* atomically: *ptr =3D val | (*ptr&(A=
|D)) */
-
-/*
- * MMU EXTENDED OPERATIONS
- *
- * ` enum neg_errnoval
- * ` HYPERVISOR_mmuext_op(mmuext_op_t uops[],
- * `                      unsigned int count,
- * `                      unsigned int *pdone,
- * `                      unsigned int foreigndom)
- */
-/* HYPERVISOR_mmuext_op() accepts a list of mmuext_op structures.
- * A foreigndom (FD) can be specified (or DOMID_SELF for none).
- * Where the FD has some effect, it is described below.
- *
- * cmd: MMUEXT_(UN)PIN_*_TABLE
- * mfn: Machine frame number to be (un)pinned as a p.t. page.
- *      The frame must belong to the FD, if one is specified.
- *
- * cmd: MMUEXT_NEW_BASEPTR
- * mfn: Machine frame number of new page-table base to install in MMU.
- *
- * cmd: MMUEXT_NEW_USER_BASEPTR [x86/64 only]
- * mfn: Machine frame number of new page-table base to install in MMU
- *      when in user space.
- *
- * cmd: MMUEXT_TLB_FLUSH_LOCAL
- * No additional arguments. Flushes local TLB.
- *
- * cmd: MMUEXT_INVLPG_LOCAL
- * linear_addr: Linear address to be flushed from the local TLB.
- *
- * cmd: MMUEXT_TLB_FLUSH_MULTI
- * vcpumask: Pointer to bitmap of VCPUs to be flushed.
- *
- * cmd: MMUEXT_INVLPG_MULTI
- * linear_addr: Linear address to be flushed.
- * vcpumask: Pointer to bitmap of VCPUs to be flushed.
- *
- * cmd: MMUEXT_TLB_FLUSH_ALL
- * No additional arguments. Flushes all VCPUs' TLBs.
- *
- * cmd: MMUEXT_INVLPG_ALL
- * linear_addr: Linear address to be flushed from all VCPUs' TLBs.
- *
- * cmd: MMUEXT_FLUSH_CACHE
- * No additional arguments. Writes back and flushes cache contents.
- *
- * cmd: MMUEXT_FLUSH_CACHE_GLOBAL
- * No additional arguments. Writes back and flushes cache contents
- * on all CPUs in the system.
- *
- * cmd: MMUEXT_SET_LDT
- * linear_addr: Linear address of LDT base (NB. must be page-aligned).
- * nr_ents: Number of entries in LDT.
- *
- * cmd: MMUEXT_CLEAR_PAGE
- * mfn: Machine frame number to be cleared.
- *
- * cmd: MMUEXT_COPY_PAGE
- * mfn: Machine frame number of the destination page.
- * src_mfn: Machine frame number of the source page.
- *
- * cmd: MMUEXT_[UN]MARK_SUPER
- * mfn: Machine frame number of head of superpage to be [un]marked.
- */
-/* ` enum mmuext_cmd { */
-#define MMUEXT_PIN_L1_TABLE      0
-#define MMUEXT_PIN_L2_TABLE      1
-#define MMUEXT_PIN_L3_TABLE      2
-#define MMUEXT_PIN_L4_TABLE      3
-#define MMUEXT_UNPIN_TABLE       4
-#define MMUEXT_NEW_BASEPTR       5
-#define MMUEXT_TLB_FLUSH_LOCAL   6
-#define MMUEXT_INVLPG_LOCAL      7
-#define MMUEXT_TLB_FLUSH_MULTI   8
-#define MMUEXT_INVLPG_MULTI      9
-#define MMUEXT_TLB_FLUSH_ALL    10
-#define MMUEXT_INVLPG_ALL       11
-#define MMUEXT_FLUSH_CACHE      12
-#define MMUEXT_SET_LDT          13
-#define MMUEXT_NEW_USER_BASEPTR 15
-#define MMUEXT_CLEAR_PAGE       16
-#define MMUEXT_COPY_PAGE        17
-#define MMUEXT_FLUSH_CACHE_GLOBAL 18
-#define MMUEXT_MARK_SUPER       19
-#define MMUEXT_UNMARK_SUPER     20
-/* ` } */
-
-#ifndef __ASSEMBLY__
-struct mmuext_op {
-    unsigned int cmd; /* =3D> enum mmuext_cmd */
-    union {
-        /* [UN]PIN_TABLE, NEW_BASEPTR, NEW_USER_BASEPTR
-         * CLEAR_PAGE, COPY_PAGE, [UN]MARK_SUPER */
-        xen_pfn_t     mfn;
-        /* INVLPG_LOCAL, INVLPG_ALL, SET_LDT */
-        ULONG_PTR linear_addr;
-    } arg1;
-    union {
-        /* SET_LDT */
-        unsigned int nr_ents;
-        /* TLB_FLUSH_MULTI, INVLPG_MULTI */
-#if __XEN_INTERFACE_VERSION__ >=3D 0x00030205
-        XEN_GUEST_HANDLE(const_void) vcpumask;
-#else
-        const void *vcpumask;
-#endif
-        /* COPY_PAGE */
-        xen_pfn_t src_mfn;
-    } arg2;
-};
-typedef struct mmuext_op mmuext_op_t;
-DEFINE_XEN_GUEST_HANDLE(mmuext_op_t);
-#endif
-
-/*
- * ` enum neg_errnoval
- * ` HYPERVISOR_update_va_mapping(ULONG_PTR va, u64 val,
- * `                              enum uvm_flags flags)
- * `
- * ` enum neg_errnoval
- * ` HYPERVISOR_update_va_mapping_otherdomain(ULONG_PTR va, u64 val,
- * `                                          enum uvm_flags flags,
- * `                                          domid_t domid)
- * `
- * ` @va: The virtual address whose mapping we want to change
- * ` @val: The new page table entry, must contain a machine address
- * ` @flags: Control TLB flushes
- */
-/* These are passed as 'flags' to update_va_mapping. They can be ORed. */
-/* When specifying UVMF_MULTI, also OR in a pointer to a CPU bitmap.   */
-/* UVMF_LOCAL is merely UVMF_MULTI with a NULL bitmap pointer.         */
-/* ` enum uvm_flags { */
-#define UVMF_NONE           (xen_mk_ulong(0)<<0) /* No flushing at all.   =
*/
-#define UVMF_TLB_FLUSH      (xen_mk_ulong(1)<<0) /* Flush entire TLB(s).  =
*/
-#define UVMF_INVLPG         (xen_mk_ulong(2)<<0) /* Flush only one entry. =
*/
-#define UVMF_FLUSHTYPE_MASK (xen_mk_ulong(3)<<0)
-#define UVMF_MULTI          (xen_mk_ulong(0)<<2) /* Flush subset of TLBs. =
*/
-#define UVMF_LOCAL          (xen_mk_ulong(0)<<2) /* Flush local TLB.      =
*/
-#define UVMF_ALL            (xen_mk_ulong(1)<<2) /* Flush all TLBs.       =
*/
-/* ` } */
-
-/*
- * Commands to HYPERVISOR_console_io().
- */
-#define CONSOLEIO_write         0
-#define CONSOLEIO_read          1
-
-/*
- * Commands to HYPERVISOR_vm_assist().
- */
-#define VMASST_CMD_enable                0
-#define VMASST_CMD_disable               1
-
-/* x86/32 guests: simulate full 4GB segment limits. */
-#define VMASST_TYPE_4gb_segments         0
-
-/* x86/32 guests: trap (vector 15) whenever above vmassist is used. */
-#define VMASST_TYPE_4gb_segments_notify  1
-
-/*
- * x86 guests: support writes to bottom-level PTEs.
- * NB1. Page-directory entries cannot be written.
- * NB2. Guest must continue to remove all writable mappings of PTEs.
- */
-#define VMASST_TYPE_writable_pagetables  2
-
-/* x86/PAE guests: support PDPTs above 4GB. */
-#define VMASST_TYPE_pae_extended_cr3     3
-
-/*
- * x86 guests: Sane behaviour for virtual iopl
- *  - virtual iopl updated from do_iret() hypercalls.
- *  - virtual iopl reported in bounce frames.
- *  - guest kernels assumed to be level 0 for the purpose of iopl checks.
- */
-#define VMASST_TYPE_architectural_iopl   4
-
-/*
- * x86/64 guests: strictly hide M2P from user mode.
- * This allows the guest to control respective hypervisor behavior:
- * - when not set, L4 tables get created with the respective slot blank,
- *   and whenever the L4 table gets used as a kernel one the missing
- *   mapping gets inserted,
- * - when set, L4 tables get created with the respective slot initialized
- *   as before, and whenever the L4 table gets used as a user one the
- *   mapping gets zapped.
- */
-#define VMASST_TYPE_m2p_strict           32
-
-#if __XEN_INTERFACE_VERSION__ < 0x00040600
-#define MAX_VMASST_TYPE                  3
-#endif
-
-/* Domain ids >=3D DOMID_FIRST_RESERVED cannot be used for ordinary domain=
s. */
-#define DOMID_FIRST_RESERVED xen_mk_uint(0x7FF0)
-
-/* DOMID_SELF is used in certain contexts to refer to oneself. */
-#define DOMID_SELF           xen_mk_uint(0x7FF0)
-
-/*
- * DOMID_IO is used to restrict page-table updates to mapping I/O memory.
- * Although no Foreign Domain need be specified to map I/O pages, DOMID_IO
- * is useful to ensure that no mappings to the OS's own heap are accidenta=
lly
- * installed. (e.g., in Linux this could cause havoc as reference counts
- * aren't adjusted on the I/O-mapping code path).
- * This only makes sense in MMUEXT_SET_FOREIGNDOM, but in that context can
- * be specified by any calling domain.
- */
-#define DOMID_IO             xen_mk_uint(0x7FF1)
-
-/*
- * DOMID_XEN is used to allow privileged domains to map restricted parts o=
f
- * Xen's heap space (e.g., the machine_to_phys table).
- * This only makes sense in MMUEXT_SET_FOREIGNDOM, and is only permitted i=
f
- * the caller is privileged.
- */
-#define DOMID_XEN            xen_mk_uint(0x7FF2)
-
-/*
- * DOMID_COW is used as the owner of sharable pages */
-#define DOMID_COW            xen_mk_uint(0x7FF3)
-
-/* DOMID_INVALID is used to identify pages with unknown owner. */
-#define DOMID_INVALID        xen_mk_uint(0x7FF4)
-
-/* Idle domain. */
-#define DOMID_IDLE           xen_mk_uint(0x7FFF)
-
-#ifndef __ASSEMBLY__
-
-typedef uint16_t domid_t;
-
-/*
- * Send an array of these to HYPERVISOR_mmu_update().
- * NB. The fields are natural pointer/address size for this architecture.
- */
-struct mmu_update {
-    uint64_t ptr;       /* Machine address of PTE. */
-    uint64_t val;       /* New contents of PTE.    */
-};
-typedef struct mmu_update mmu_update_t;
-DEFINE_XEN_GUEST_HANDLE(mmu_update_t);
-
-/*
- * ` enum neg_errnoval
- * ` HYPERVISOR_multicall(multicall_entry_t call_list[],
- * `                      uint32_t nr_calls);
- *
- * NB. The fields are logically the natural register size for this
- * architecture. In cases where xen_ulong_t is larger than this then
- * any unused bits in the upper portion must be zero.
- */
-struct multicall_entry {
-    xen_ulong_t op, result;
-    xen_ulong_t args[6];
-};
-typedef struct multicall_entry multicall_entry_t;
-DEFINE_XEN_GUEST_HANDLE(multicall_entry_t);
-
-#if __XEN_INTERFACE_VERSION__ < 0x00040400
-/*
- * Event channel endpoints per domain (when using the 2-level ABI):
- *  1024 if a LONG_PTR is 32 bits; 4096 if a LONG_PTR is 64 bits.
- */
-#define NR_EVENT_CHANNELS EVTCHN_2L_NR_CHANNELS
-#endif
-
-struct vcpu_time_info {
-    /*
-     * Updates to the following values are preceded and followed by an
-     * increment of 'version'. The guest can therefore detect updates by
-     * looking for changes to 'version'. If the least-significant bit of
-     * the version number is set then an update is in progress and the gue=
st
-     * must wait to read a consistent set of values.
-     * The correct way to interact with the version number is similar to
-     * Linux's seqlock: see the implementations of read_seqbegin/read_seqr=
etry.
-     */
-    uint32_t version;
-    uint32_t pad0;
-    uint64_t tsc_timestamp;   /* TSC at last update of time vals.  */
-    uint64_t system_time;     /* Time, in nanosecs, since boot.    */
-    /*
-     * Current system time:
-     *   system_time +
-     *   ((((tsc - tsc_timestamp) << tsc_shift) * tsc_to_system_mul) >> 32=
)
-     * CPU frequency (Hz):
-     *   ((10^9 << 32) / tsc_to_system_mul) >> tsc_shift
-     */
-    uint32_t tsc_to_system_mul;
-    int8_t   tsc_shift;
-#if __XEN_INTERFACE_VERSION__ > 0x040600
-    uint8_t  flags;
-    uint8_t  pad1[2];
-#else
-    int8_t   pad1[3];
-#endif
-}; /* 32 bytes */
-typedef struct vcpu_time_info vcpu_time_info_t;
-
-#define XEN_PVCLOCK_TSC_STABLE_BIT     (1 << 0)
-#define XEN_PVCLOCK_GUEST_STOPPED      (1 << 1)
-
-struct vcpu_info {
-    /*
-     * 'evtchn_upcall_pending' is written non-zero by Xen to indicate
-     * a pending notification for a particular VCPU. It is then cleared
-     * by the guest OS /before/ checking for pending work, thus avoiding
-     * a set-and-check race. Note that the mask is only accessed by Xen
-     * on the CPU that is currently hosting the VCPU. This means that the
-     * pending and mask flags can be updated by the guest without special
-     * synchronisation (i.e., no need for the x86 LOCK prefix).
-     * This may seem suboptimal because if the pending flag is set by
-     * a different CPU then an IPI may be scheduled even when the mask
-     * is set. However, note:
-     *  1. The task of 'interrupt holdoff' is covered by the per-event-
-     *     channel mask bits. A 'noisy' event that is continually being
-     *     triggered can be masked at source at this very precise
-     *     granularity.
-     *  2. The main purpose of the per-VCPU mask is therefore to restrict
-     *     reentrant execution: whether for concurrency control, or to
-     *     prevent unbounded stack usage. Whatever the purpose, we expect
-     *     that the mask will be asserted only for short periods at a time=
,
-     *     and so the likelihood of a 'spurious' IPI is suitably small.
-     * The mask is read before making an event upcall to the guest: a
-     * non-zero mask therefore guarantees that the VCPU will not receive
-     * an upcall activation. The mask is cleared when the VCPU requests
-     * to block: this avoids wakeup-waiting races.
-     */
-    uint8_t evtchn_upcall_pending;
-#ifdef XEN_HAVE_PV_UPCALL_MASK
-    uint8_t evtchn_upcall_mask;
-#else /* XEN_HAVE_PV_UPCALL_MASK */
-    uint8_t pad0;
-#endif /* XEN_HAVE_PV_UPCALL_MASK */
-    xen_ulong_t evtchn_pending_sel;
-    struct arch_vcpu_info arch;
-    struct vcpu_time_info time;
-}; /* 64 bytes (x86) */
-#ifndef __XEN__
-typedef struct vcpu_info vcpu_info_t;
-#endif
-
-/*
- * `incontents 200 startofday_shared Start-of-day shared data structure
- * Xen/kernel shared data -- pointer provided in start_info.
- *
- * This structure is defined to be both smaller than a page, and the
- * only data on the shared page, but may vary in actual size even within
- * compatible Xen versions; guests should not rely on the size
- * of this structure remaining constant.
- */
-struct shared_info {
-    struct vcpu_info vcpu_info[XEN_LEGACY_MAX_VCPUS];
-
-    /*
-     * A domain can create "event channels" on which it can send and recei=
ve
-     * asynchronous event notifications. There are three classes of event =
that
-     * are delivered by this mechanism:
-     *  1. Bi-directional inter- and intra-domain connections. Domains mus=
t
-     *     arrange out-of-band to set up a connection (usually by allocati=
ng
-     *     an unbound 'listener' port and avertising that via a storage se=
rvice
-     *     such as xenstore).
-     *  2. Physical interrupts. A domain with suitable hardware-access
-     *     privileges can bind an event-channel port to a physical interru=
pt
-     *     source.
-     *  3. Virtual interrupts ('events'). A domain can bind an event-chann=
el
-     *     port to a virtual interrupt source, such as the virtual-timer
-     *     device or the emergency console.
-     *
-     * Event channels are addressed by a "port index". Each channel is
-     * associated with two bits of information:
-     *  1. PENDING -- notifies the domain that there is a pending notifica=
tion
-     *     to be processed. This bit is cleared by the guest.
-     *  2. MASK -- if this bit is clear then a 0->1 transition of PENDING
-     *     will cause an asynchronous upcall to be scheduled. This bit is =
only
-     *     updated by the guest. It is read-only within Xen. If a channel
-     *     becomes pending while the channel is masked then the 'edge' is =
lost
-     *     (i.e., when the channel is unmasked, the guest must manually ha=
ndle
-     *     pending notifications as no upcall will be scheduled by Xen).
-     *
-     * To expedite scanning of pending notifications, any 0->1 pending
-     * transition on an unmasked channel causes a corresponding bit in a
-     * per-vcpu selector word to be set. Each bit in the selector covers a
-     * 'C LONG_PTR' in the PENDING bitfield array.
-     */
-    xen_ulong_t evtchn_pending[sizeof(xen_ulong_t) * 8];
-    xen_ulong_t evtchn_mask[sizeof(xen_ulong_t) * 8];
-
-    /*
-     * Wallclock time: updated only by control software. Guests should bas=
e
-     * their gettimeofday() syscall on this wallclock-base value.
-     */
-    uint32_t wc_version;      /* Version counter: see vcpu_time_info_t. */
-    uint32_t wc_sec;          /* Secs  00:00:00 UTC, Jan 1, 1970.  */
-    uint32_t wc_nsec;         /* Nsecs 00:00:00 UTC, Jan 1, 1970.  */
-#if !defined(__i386__)
-    uint32_t wc_sec_hi;
-# define xen_wc_sec_hi wc_sec_hi
-#elif !defined(__XEN__) && !defined(__XEN_TOOLS__)
-# define xen_wc_sec_hi arch.wc_sec_hi
-#endif
-
-    struct arch_shared_info arch;
-
-};
-#ifndef __XEN__
-typedef struct shared_info shared_info_t;
-#endif
-
-/*
- * `incontents 200 startofday Start-of-day memory layout
- *
- *  1. The domain is started within contiguous virtual-memory region.
- *  2. The contiguous region ends on an aligned 4MB boundary.
- *  3. This the order of bootstrap elements in the initial virtual region:
- *      a. relocated kernel image
- *      b. initial ram disk              [mod_start, mod_len]
- *         (may be omitted)
- *      c. list of allocated page frames [mfn_list, nr_pages]
- *         (unless relocated due to XEN_ELFNOTE_INIT_P2M)
- *      d. start_info_t structure        [register ESI (x86)]
- *         in case of dom0 this page contains the console info, too
- *      e. unless dom0: xenstore ring page
- *      f. unless dom0: console ring page
- *      g. bootstrap page tables         [pt_base and CR3 (x86)]
- *      h. bootstrap stack               [register ESP (x86)]
- *  4. Bootstrap elements are packed together, but each is 4kB-aligned.
- *  5. The list of page frames forms a contiguous 'pseudo-physical' memory
- *     layout for the domain. In particular, the bootstrap virtual-memory
- *     region is a 1:1 mapping to the first section of the pseudo-physical=
 map.
- *  6. All bootstrap elements are mapped read-writable for the guest OS. T=
he
- *     only exception is the bootstrap page table, which is mapped read-on=
ly.
- *  7. There is guaranteed to be at least 512kB padding after the final
- *     bootstrap element. If necessary, the bootstrap virtual region is
- *     extended by an extra 4MB to ensure this.
- *
- * Note: Prior to 25833:bb85bbccb1c9. ("x86/32-on-64 adjust Dom0 initial p=
age
- * table layout") a bug caused the pt_base (3.g above) and cr3 to not poin=
t
- * to the start of the guest page tables (it was offset by two pages).
- * This only manifested itself on 32-on-64 dom0 kernels and not 32-on-64 d=
omU
- * or 64-bit kernels of any colour. The page tables for a 32-on-64 dom0 go=
t
- * allocated in the order: 'first L1','first L2', 'first L3', so the offse=
t
- * to the page table base is by two pages back. The initial domain if it i=
s
- * 32-bit and runs under a 64-bit hypervisor should _NOT_ use two of the
- * pages preceding pt_base and mark them as reserved/unused.
- */
-#ifdef XEN_HAVE_PV_GUEST_ENTRY
-struct start_info {
-    /* THE FOLLOWING ARE FILLED IN BOTH ON INITIAL BOOT AND ON RESUME.    =
*/
-    char magic[32];             /* "xen-<version>-<platform>".            =
*/
-    ULONG_PTR nr_pages;     /* Total pages allocated to this domain.  */
-    ULONG_PTR shared_info;  /* MACHINE address of shared info struct. */
-    uint32_t flags;             /* SIF_xxx flags.                         =
*/
-    xen_pfn_t store_mfn;        /* MACHINE page number of shared page.    =
*/
-    uint32_t store_evtchn;      /* Event channel for store communication. =
*/
-    union {
-        struct {
-            xen_pfn_t mfn;      /* MACHINE page number of console page.   =
*/
-            uint32_t  evtchn;   /* Event channel for console page.        =
*/
-        } domU;
-        struct {
-            uint32_t info_off;  /* Offset of console_info struct.         =
*/
-            uint32_t info_size; /* Size of console_info struct from start.=
*/
-        } dom0;
-    } console;
-    /* THE FOLLOWING ARE ONLY FILLED IN ON INITIAL BOOT (NOT RESUME).     =
*/
-    ULONG_PTR pt_base;      /* VIRTUAL address of page directory.     */
-    ULONG_PTR nr_pt_frames; /* Number of bootstrap p.t. frames.       */
-    ULONG_PTR mfn_list;     /* VIRTUAL address of page-frame list.    */
-    ULONG_PTR mod_start;    /* VIRTUAL address of pre-loaded module   */
-                                /* (PFN of pre-loaded module if           =
*/
-                                /*  SIF_MOD_START_PFN set in flags).      =
*/
-    ULONG_PTR mod_len;      /* Size (bytes) of pre-loaded module.     */
-#define MAX_GUEST_CMDLINE 1024
-    int8_t cmd_line[MAX_GUEST_CMDLINE];
-    /* The pfn range here covers both page table and p->m table frames.   =
*/
-    ULONG_PTR first_p2m_pfn;/* 1st pfn forming initial P->M table.    */
-    ULONG_PTR nr_p2m_frames;/* # of pfns forming initial P->M table.  */
-};
-typedef struct start_info start_info_t;
-
-/*
- * Start of day structure passed to PVH guests in %ebx.
- *
- * NOTE: nothing will be loaded at physical address 0, so a 0 value in any
- * of the address fields should be treated as not present.
- *
- *  0 +----------------+
- *    | magic          | Contains the magic value XEN_HVM_START_MAGIC_VALU=
E
- *    |                | ("xEn3" with the 0x80 bit of the "E" set).
- *  4 +----------------+
- *    | version        | Version of this structure. Current version is 0. =
New
- *    |                | versions are guaranteed to be backwards-compatibl=
e.
- *  8 +----------------+
- *    | flags          | SIF_xxx flags.
- * 12 +----------------+
- *    | nr_modules     | Number of modules passed to the kernel.
- * 16 +----------------+
- *    | modlist_paddr  | Physical address of an array of modules
- *    |                | (layout of the structure below).
- * 24 +----------------+
- *    | cmdline_paddr  | Physical address of the command line,
- *    |                | a zero-terminated ASCII string.
- * 32 +----------------+
- *    | rsdp_paddr     | Physical address of the RSDP ACPI data structure.
- * 40 +----------------+
- *
- * The layout of each entry in the module structure is the following:
- *
- *  0 +----------------+
- *    | paddr          | Physical address of the module.
- *  8 +----------------+
- *    | size           | Size of the module in bytes.
- * 16 +----------------+
- *    | cmdline_paddr  | Physical address of the command line,
- *    |                | a zero-terminated ASCII string.
- * 24 +----------------+
- *    | reserved       |
- * 32 +----------------+
- *
- * The address and sizes are always a 64bit little endian unsigned integer=
.
- *
- * NB: Xen on x86 will always try to place all the data below the 4GiB
- * boundary.
- */
-#define XEN_HVM_START_MAGIC_VALUE 0x336ec578
-
-/* New console union for dom0 introduced in 0x00030203. */
-#if __XEN_INTERFACE_VERSION__ < 0x00030203
-#define console_mfn    console.domU.mfn
-#define console_evtchn console.domU.evtchn
-#endif
-#endif /* XEN_HAVE_PV_GUEST_ENTRY */
-
-/* These flags are passed in the 'flags' field of start_info_t. */
-#define SIF_PRIVILEGED    (1<<0)  /* Is the domain privileged? */
-#define SIF_INITDOMAIN    (1<<1)  /* Is this the initial control domain? *=
/
-#define SIF_MULTIBOOT_MOD (1<<2)  /* Is mod_start a multiboot module? */
-#define SIF_MOD_START_PFN (1<<3)  /* Is mod_start a PFN? */
-#define SIF_VIRT_P2M_4TOOLS (1<<4) /* Do Xen tools understand a virt. mapp=
ed */
-                                   /* P->M making the 3 level tree obsolet=
e? */
-#define SIF_PM_MASK       (0xFF<<8) /* reserve 1 byte for xen-pm options *=
/
-
-/*
- * A multiboot module is a package containing modules very similar to a
- * multiboot module array. The only differences are:
- * - the array of module descriptors is by convention simply at the beginn=
ing
- *   of the multiboot module,
- * - addresses in the module descriptors are based on the beginning of the
- *   multiboot module,
- * - the number of modules is determined by a termination descriptor that =
has
- *   mod_start =3D=3D 0.
- *
- * This permits to both build it statically and reference it in a configur=
ation
- * file, and let the PV guest easily rebase the addresses to virtual addre=
sses
- * and at the same time count the number of modules.
- */
-struct xen_multiboot_mod_list
-{
-    /* Address of first byte of the module */
-    uint32_t mod_start;
-    /* Address of last byte of the module (inclusive) */
-    uint32_t mod_end;
-    /* Address of zero-terminated command line */
-    uint32_t cmdline;
-    /* Unused, must be zero */
-    uint32_t pad;
-};
-/*
- * `incontents 200 startofday_dom0_console Dom0_console
- *
- * The console structure in start_info.console.dom0
- *
- * This structure includes a variety of information required to
- * have a working VGA/VESA console.
- */
-typedef struct dom0_vga_console_info {
-    uint8_t video_type; /* DOM0_VGA_CONSOLE_??? */
-#define XEN_VGATYPE_TEXT_MODE_3 0x03
-#define XEN_VGATYPE_VESA_LFB    0x23
-#define XEN_VGATYPE_EFI_LFB     0x70
-
-    union {
-        struct {
-            /* Font height, in pixels. */
-            uint16_t font_height;
-            /* Cursor location (column, row). */
-            uint16_t cursor_x, cursor_y;
-            /* Number of rows and columns (dimensions in characters). */
-            uint16_t rows, columns;
-        } text_mode_3;
-
-        struct {
-            /* Width and height, in pixels. */
-            uint16_t width, height;
-            /* Bytes per scan line. */
-            uint16_t bytes_per_line;
-            /* Bits per pixel. */
-            uint16_t bits_per_pixel;
-            /* LFB physical address, and size (in units of 64kB). */
-            uint32_t lfb_base;
-            uint32_t lfb_size;
-            /* RGB mask offsets and sizes, as defined by VBE 1.2+ */
-            uint8_t  red_pos, red_size;
-            uint8_t  green_pos, green_size;
-            uint8_t  blue_pos, blue_size;
-            uint8_t  rsvd_pos, rsvd_size;
-#if __XEN_INTERFACE_VERSION__ >=3D 0x00030206
-            /* VESA capabilities (offset 0xa, VESA command 0x4f00). */
-            uint32_t gbl_caps;
-            /* Mode attributes (offset 0x0, VESA command 0x4f01). */
-            uint16_t mode_attrs;
-#endif
-        } vesa_lfb;
-    } u;
-} dom0_vga_console_info_t;
-#define xen_vga_console_info dom0_vga_console_info
-#define xen_vga_console_info_t dom0_vga_console_info_t
-
-typedef uint8_t xen_domain_handle_t[16];
-
-__DEFINE_XEN_GUEST_HANDLE(uint8,  uint8_t);
-__DEFINE_XEN_GUEST_HANDLE(uint16, uint16_t);
-__DEFINE_XEN_GUEST_HANDLE(uint32, uint32_t);
-__DEFINE_XEN_GUEST_HANDLE(uint64, uint64_t);
-
-#endif /* !__ASSEMBLY__ */
-
-/* Default definitions for macros used by domctl/sysctl. */
-#if defined(__XEN__) || defined(__XEN_TOOLS__)
-
-#ifndef int64_aligned_t
-#define int64_aligned_t int64_t
-#endif
-#ifndef uint64_aligned_t
-#define uint64_aligned_t uint64_t
-#endif
-#ifndef XEN_GUEST_HANDLE_64
-#define XEN_GUEST_HANDLE_64(name) XEN_GUEST_HANDLE(name)
-#endif
-
-#ifndef __ASSEMBLY__
-struct xenctl_bitmap {
-    XEN_GUEST_HANDLE_64(uint8) bitmap;
-    uint32_t nr_bits;
-};
-#endif
-
-#endif /* defined(__XEN__) || defined(__XEN_TOOLS__) */
-
-#endif /* __XEN_PUBLIC_XEN_H__ */
-
-/*
- * Local variables:
- * mode: C
- * c-file-style: "BSD"
- * c-basic-offset: 4
- * tab-width: 4
- * indent-tabs-mode: nil
- * End:
- */
diff --git a/vs2019/xennet/xennet.vcxproj b/vs2019/xennet/xennet.vcxproj
index cfc70b0..6823e12 100644
--- a/vs2019/xennet/xennet.vcxproj
+++ b/vs2019/xennet/xennet.vcxproj
@@ -24,7 +24,7 @@
       <AdditionalOptions>/ZH:SHA_256 %(AdditionalOptions)</AdditionalOptio=
ns>
       <PreprocessorDefinitions>PROJECT=3D$(ProjectName);NDIS_MINIPORT_DRIV=
ER;NDIS_WDM=3D1;NDIS630_MINIPORT=3D1;NDIS660_MINIPORT=3D1;NDIS685_MINIPORT=
=3D1;POOL_NX_OPTIN=3D1;NT_PROCESSOR_GROUPS;%(PreprocessorDefinitions)</Prep=
rocessorDefinitions>
       <IntrinsicFunctions>true</IntrinsicFunctions>
-      <AdditionalIncludeDirectories>$(WindowsSdkDir)\include\km;..\..\incl=
ude;..\..\include\xen;</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>$(WindowsSdkDir)\include\km;..\..\incl=
ude;</AdditionalIncludeDirectories>
       <WarningLevel>EnableAllWarnings</WarningLevel>
       <DisableSpecificWarnings>4061;4062;4464;4711;4770;4548;4820;4668;425=
5;5045;6001;6054;26451;28160;28196;30030;30029;%(DisableSpecificWarnings)</=
DisableSpecificWarnings>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
diff --git a/vs2022/xennet/xennet.vcxproj b/vs2022/xennet/xennet.vcxproj
index c97a158..5785cea 100644
--- a/vs2022/xennet/xennet.vcxproj
+++ b/vs2022/xennet/xennet.vcxproj
@@ -24,7 +24,7 @@
       <AdditionalOptions>/ZH:SHA_256 %(AdditionalOptions)</AdditionalOptio=
ns>
       <PreprocessorDefinitions>PROJECT=3D$(ProjectName);NDIS_MINIPORT_DRIV=
ER;NDIS_WDM=3D1;NDIS630_MINIPORT=3D1;NDIS660_MINIPORT=3D1;NDIS685_MINIPORT=
=3D1;POOL_NX_OPTIN=3D1;NT_PROCESSOR_GROUPS;%(PreprocessorDefinitions)</Prep=
rocessorDefinitions>
       <IntrinsicFunctions>true</IntrinsicFunctions>
-      <AdditionalIncludeDirectories>$(WindowsSdkDir)\include\km;..\..\incl=
ude;..\..\include\xen;</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>$(WindowsSdkDir)\include\km;..\..\incl=
ude;</AdditionalIncludeDirectories>
       <WarningLevel>EnableAllWarnings</WarningLevel>
       <DisableSpecificWarnings>4061;4062;4464;4711;4770;4548;4820;4668;425=
5;5045;6001;6054;26451;28160;28196;30030;30029;%(DisableSpecificWarnings)</=
DisableSpecificWarnings>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
--
2.55.0.windows.3


--
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates solutions

web: https://vates.tech


From win-pv-devel-bounces@lists.xenproject.org Fri Oct 16 08:24:40 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 16 Oct 2026 08:24:40 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1451374.1666442 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHdF1-00063q-51; Fri, 16 Oct 2026 08:24:39 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1451374.1666442; Fri, 16 Oct 2026 08:24:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHdF1-00063i-26; Fri, 16 Oct 2026 08:24:39 +0000
Received: by outflank-mailman (input) for mailman id 1451374;
 Fri, 16 Oct 2026 08:24:38 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <owen.smith@citrix.com>) id 1xHdF0-00063c-ED
 for win-pv-devel@lists.xenproject.org; Fri, 16 Oct 2026 08:24:38 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xHdEz-009psW-By
 for win-pv-devel@lists.xenproject.org; Fri, 16 Oct 2026 10:24:37 +0200
Received: from [10.42.69.9] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ad1df43-bab6-0a2a0a5309dd-0a2a4509c6be-2
 for <win-pv-devel@lists.xenproject.org>; Fri, 16 Oct 2026 10:24:37 +0200
Received: from [52.101.57.13]
 (helo=BN8PR05CU002.outbound.protection.outlook.com)
 by tlsNG-bad1c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ad1df43-be1a-0a2a45090019-3465390d560c-4
 for <win-pv-devel@lists.xenproject.org>; Fri, 16 Oct 2026 10:24:37 +0200
Received: from SA6PR03MB7760.namprd03.prod.outlook.com (2603:10b6:806:43c::5)
 by SA1PR03MB8068.namprd03.prod.outlook.com (2603:10b6:806:459::8)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.496.23; Fri, 16 Oct
 2026 08:24:33 +0000
Received: from SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38]) by SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38%5]) with mapi id 15.21.0522.013; Fri, 16 Oct 2026
 08:24:33 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:x-ms-exchange-senderadcheck"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
 b=OgCqnGag8bvmYuRcEI3KlaoW1PoePyo698s1+g5MW26MOGHJPK6SuRpvHq4EJL5OqVwkTWWNt4Y3OljiKR/Cot8HczR2BAPP1OnElXoQQjki98+7X1ydvcQR9PTB/XDkUQyfYQP5Ipr8ce3soEDJ1VE0AQwxSJul9NltWJVvSsNBrbfzzWch5iF+lD5D+llmffVaHlBvC1h13wCZPxrsOmq3dGNUndkJFjSWQk5TPAkqtEYhPAIpMC/opPZ09XbKP8vT7IxysyxPl2hYbHsnEheTlYG1RIs4pVAS3kIH6cQtRKaZMe+X5Ee5UzEYd9kltQkrUwAgFFYWj/GcXgMuIg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector10001;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=vYON8qgAX0N8h4lC6FXtZ7U6rqYnq9icyP+K0yVgQJQ=;
 b=pEoyt1VKRVHG9iO8XpHWUIz5zeka0A5e4k+VCEvx/16xstV+pIxZ/NvQ9/2p3q1bx5pyeRWEZKeaUiJtCItojUggL5YVhAWTAWV83oSFw80fL94OWTa/KPI0cLrLhzCR3SFGwdbF9uBX2/dk/FEzybyiv3GT2fX+3yIgAZGPjuIpmIafgu9xpXA2i6dCP6EhxUGdaBVe+xYVF+d/FOeO+TcUuBI+4IksudeXUcEs2PB3jjeJG9/5Vmv6dIdxUCPxhRw2Du+xfIiwdLcNzVJddQJB42DbQ9m9SJHmQXa+DCrleyjQCuuzqYKieIp2/NuJpcgAhhAFYtl389tVvrO0Fg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=vYON8qgAX0N8h4lC6FXtZ7U6rqYnq9icyP+K0yVgQJQ=;
 b=S7eEBmKKJp+0lbxSHv4n4akLXigr1xWgoy3cVWdpt+XbWBN02sfrGXtgV7hLGj5VoVS/MQhsHRJVPmEyEkxbjd9MwyJrxF2h0sn425ofeYWE80yJe36GrDqabLYNJzwutNaJ596NdAaQaUpUFufkPWw5yhF25j4M4wI5iwqQRfc=
From: Owen Smith <owen.smith@citrix.com>
To: Tu Dinh <ngoc-tu.dinh@vates.tech>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Subject: Re: [PATCH 0/3] Update Xen headers to RELEASE-4.22.0
Thread-Topic: [PATCH 0/3] Update Xen headers to RELEASE-4.22.0
Thread-Index: AQHdXLAb3vQyW7dPBEKDbHPKhS2q17b/1eYv
Date: Fri, 16 Oct 2026 08:24:33 +0000
Message-ID:
 <SA6PR03MB776076E1A7C7BD9D16F5703CFE9B2@SA6PR03MB7760.namprd03.prod.outlook.com>
References:
 <1792073912.8631fc262581453bbf619ec5b2062170.1a13fedd1870008425@vates.tech>
In-Reply-To:
 <1792073912.8631fc262581453bbf619ec5b2062170.1a13fedd1870008425@vates.tech>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
msip_labels:
authentication-results: mx.microsoft.com 1; dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=citrix.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: SA6PR03MB7760:EE_|SA1PR03MB8068:EE_
x-ms-office365-filtering-correlation-id: 40b965e8-f4b7-42c1-a2f8-08df2b5ee822
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam:
 BCL:0;ARA:13230040|376014|1800799024|23010399003|366016|18002099003|10067099003|22082099003|38070700021|11063799006|261009223027099003|56012099006;
x-microsoft-antispam-message-info:
 ZvjTJHKCA0x5+Z5ia2Mlqu/tvTfk3lqmELE08ZYdVJthg3HSHpsHnM1rAZhL1ukPF39HQsnW7U4C1sRAy5BMDjpxcc4JZPO6ISArgIXByW5F2+SNWqwboN0esCtsfzmJI3x0MnUPEtvJr9xozn6O1KVLFRagtyWrH+4g2wTpWoWN5J+Wk2V1YKPZKV11fbjtu1XBFYzUpYZZQ5/MCvrty9OSU4D8UrRlsB8jIApkutvdicRUDFgHW9yYX4B5x0GJjadqXJOXZTVPsDfPIR8wn9KlaE8f8JHge8/ijzUG+l6bv8ZBK7gyvF6xy2FdcdO81cJIrdlvHSL9InZf3xOxovvo+mz5+YShjOLWvJmqAM3WD58M3tRHvBFG9kHMKHjq1vrMZmx9WkyLNvxPY5rMfudlZD9/v4a474SM8fRKMqeQSNSzZ7THvyTQdyCJJ/hGqXjywirSOoWij44LsrhqQUXajMU0JQoPq9dGW6TxffNl7iNUARoHA7kdeJFD4yv3XIg6IfR0zcfbB56v9kjNo32gXq3XdqIJS+owAMZcul1lUognJaT+3808zNtwwyvBi9G4x3Yyy4tquzeWrIo+BHxYfm356x2AGRAHJQvy0xsOxdizvM+d6v8LMgltT7g+e2ytnRInOk7+okIwvlDpX0s/e1AZ/FeeSne4ZJGR+QA=
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SA6PR03MB7760.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(23010399003)(366016)(18002099003)(10067099003)(22082099003)(38070700021)(11063799006)(261009223027099003)(56012099006);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?us-ascii?Q?qudswWmcEoCWX+jdaM9AKgpbox/c4LjX1rbBMvcRVXMIp5tmEIgfK2nf+GRY?=
 =?us-ascii?Q?uNaoxE4tsn2aJgtXIozwHrG+2KpXFqbbtgdWldT5Q2XZuor3E8DZJMKbgJBu?=
 =?us-ascii?Q?Zc5PQhXoY3d63uVaikTHmoKTeTBnuMRbGkUPbY0RI5ukAkdaKwSrFNT/E+oH?=
 =?us-ascii?Q?xVAuUHwFEtEXqHPsTThtUQYzf+Zk41GEyolJ7D8jyMcwX9SIAEzdRWMPAuSo?=
 =?us-ascii?Q?/3y+rfKwEb1qgZF1aVBySyonFtqUb2OiU0CIfilG0Eu9nIBvJCqIdPElHmY1?=
 =?us-ascii?Q?/fD1+BJ6liizm6KtgTnFd/OSwSN6nlkt9Ak/xfaJa0lN2VI5rr6orHjcIxIP?=
 =?us-ascii?Q?28ubbO9xQaoKGhdSJdS5ZuRp/lXGcoOKbJ+nknn9eas4lCUwOpZ7nUoA1jMR?=
 =?us-ascii?Q?nzazApAriDVGhvrVu+eaJNvb0TnHBiFg8PQ+zIk3nwGEeTFtj5Cd9kaCNxX9?=
 =?us-ascii?Q?Dkk8CdvM/mrPS6Ep8vZmT+zb/oO8IVGzIFit5YwhmXgI4meTsguiuctKezYd?=
 =?us-ascii?Q?TI35vyNZZlv29xgJTJ043nE81SP/G2yauXeQRz7PV0N+ibAXrzc+OeQJOKAF?=
 =?us-ascii?Q?DOXMevPYYQ1/x7LbuJSt4Lf5Dyvc4Fcwj6psy6tIB7Gv7jCRBg0Cy77YuJJO?=
 =?us-ascii?Q?+m7keAiXDWsjO1BjVwY29AkXP/yid6KolhmTa/CIIyOY2huWSq5U5+Zhk8KL?=
 =?us-ascii?Q?O5tuXKRSiMMw+hR9aVeiIUTbZ6XpynzuMtgxqiCJ80danh43qPicdMpfLw99?=
 =?us-ascii?Q?B6cLzXcAThfmFobLqw8BAarqADz8Rn9c5H5YSHxsGnOBVagjRxYRAFsVTMP5?=
 =?us-ascii?Q?UfurZ11knJTokfOF6vHoYn+nMCbQYhCkXrFIXE9cY2hB2viYY8zmuQrEkJoM?=
 =?us-ascii?Q?B/CUzF0UnL3aiNSvkzxbEF5qrNOZ77kPExr6h7zzX6CGGc32EA/7zW2wnvSa?=
 =?us-ascii?Q?JptkoTse4iASFwNhuVdxz8QFG6y47+kir+gxRn8CRQ0w3IZb7Ojy2XkEcUSs?=
 =?us-ascii?Q?zy8+L4j39z0CscheuztGey+Jm9BDWqJZKSTORbY6sZNTtDlWclPQWJUBmL2U?=
 =?us-ascii?Q?A2xs1NpA5DO4EBUfYOM/0FywB/L6zZB02pOg4s9sq/l32voG+HjdWth545M3?=
 =?us-ascii?Q?w+ZIUl6jb+kBoDYaw5kb7pu2E4FsF+lw4Lx2zJSOH4+mgsWzU8MT3IvB1AhN?=
 =?us-ascii?Q?inR3uvPXBmeCDdU4+NHbCoF53Qm7Kmi4gTiY+Y9leUZZdwKopXihD38ujEBZ?=
 =?us-ascii?Q?U0Ka2ZhPChFFZCW3gdZAp3t4c7Idqh6/ehiI2uQakN0Vsr6VCY1bjaSslNuY?=
 =?us-ascii?Q?bST1iCJfF3y+39XggKnUN9xOXz+Aaj8udhKrxi4yADnZRPnhSHUq2VQeGlgs?=
 =?us-ascii?Q?ybOZkHGEYQ260payntx5uXLCFrSL2WmGmRU5y3LJOXMJ2Nm7FAjIkCcXUuLj?=
 =?us-ascii?Q?TUyYMLkeLdjDNWbMUUo7Oj4J8utTlvUKZlAKhQESXcihT9V9mkgT5SWV5uqJ?=
 =?us-ascii?Q?oO+iRb0Q0aWAw+mUDUNxHKflHjLElMs4lDhy/dbY3gi1i4aicpRhMH3xCiT/?=
 =?us-ascii?Q?NO1MsLtXgaaGOpkL1LutRYKsYh1ZnYW0jOqwQdKp0qXARmxzLZAH6n7fH133?=
 =?us-ascii?Q?xFY32EM3Dmc1n/06reAF4+ZIiZqhx4gAxqb4InME/JzwRxg5+SWraxrMO+f8?=
 =?us-ascii?Q?BfkllA4sN2B44HxOE86DgPtHzBI9pzTKzlFJ+/NriI66W5T2RNHuo3K6SgzJ?=
 =?us-ascii?Q?BP2hp0WGLg=3D=3D?=
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-OriginatorOrg: citrix.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: SA6PR03MB7760.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 40b965e8-f4b7-42c1-a2f8-08df2b5ee822
X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Oct 2026 08:24:33.0969
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: hTX6mRmANyAb4OfSuwXaZ94/jUlDrT0topNefEB0HtYo0FmJtTllZkEc9QkL3g04hY7hT404oOezuNKu51E5ag==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR03MB8068
X-purgate-ID: tlsNG-bad1c0/1792139077-FD469034-E4D14773/0/0
X-purgate-type: clean
X-purgate-size: 2105

This series looks good
3 xenbus, 2 xenvkbd, 2 xenvbd, 2 xencons and 1 xenvif patches

Reviewed-by: Owen Smith <owen.smith@citrix.com>

________________________________________
From: win-pv-devel <win-pv-devel-bounces@lists.xenproject.org> on behalf of=
 Tu Dinh <ngoc-tu.dinh@vates.tech>
Sent: 15 October 2026 3:18 PM
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh
Subject: [PATCH 0/3] Update Xen headers to RELEASE-4.22.0

Updates for each individual drivers to follow.

Tu Dinh (3):
  Remove XS_RESTRICT from StoreIgnoreHeaderType
  Update Xen headers to RELEASE-4.22.0
  xsd_errors structs are now const

 get_xen_headers.py                       |   1 +
 include/xen/public/arch-x86/xen-x86_32.h |  81 +++--
 include/xen/public/arch-x86/xen-x86_64.h | 126 +++++---
 include/xen/public/arch-x86/xen.h        | 121 +++++---
 include/xen/public/errno.h               |  14 +-
 include/xen/public/event_channel.h       |  52 ++--
 include/xen/public/features.h            |  64 ++--
 include/xen/public/grant_table.h         |  57 ++--
 include/xen/public/hvm/hvm_info_table.h  |  21 +-
 include/xen/public/hvm/hvm_op.h          | 372 ++++++++---------------
 include/xen/public/hvm/params.h          | 114 ++++---
 include/xen/public/io/console.h          |  37 +--
 include/xen/public/io/xs_wire.h          |  65 ++--
 include/xen/public/memory.h              | 178 ++++++++---
 include/xen/public/physdev.h             |  67 ++--
 include/xen/public/sched.h               |  19 +-
 include/xen/public/trace.h               |  33 +-
 include/xen/public/vcpu.h                |  48 +--
 include/xen/public/version.h             | 125 ++++++--
 include/xen/public/xen-compat.h          |  25 +-
 include/xen/public/xen.h                 | 223 ++++++++++----
 include/xen/xen/errno.h                  |   8 +-
 src/xenbus/store.c                       |   3 +-
 23 files changed, 1037 insertions(+), 817 deletions(-)

--
2.55.0.windows.3


--
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates solutions

web: https://vates.tech


From win-pv-devel-bounces@lists.xenproject.org Fri Oct 16 11:43:21 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 16 Oct 2026 11:43:21 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1451696.1666607 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHgLI-0003g4-Cj; Fri, 16 Oct 2026 11:43:20 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1451696.1666607; Fri, 16 Oct 2026 11:43:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHgLI-0003fw-9m; Fri, 16 Oct 2026 11:43:20 +0000
Received: by outflank-mailman (input) for mailman id 1451696;
 Fri, 16 Oct 2026 11:43:18 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1448601d80008425@swg.vates.tech>)
 id 1xHgLG-0003fn-OU
 for win-pv-devel@lists.xenproject.org; Fri, 16 Oct 2026 11:43:18 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xHgLG-008KUm-58
 for win-pv-devel@lists.xenproject.org; Fri, 16 Oct 2026 13:43:18 +0200
Received: from [10.42.69.11] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1448601d80008425@swg.vates.tech>)
 id 6ad20dcd-bab6-0a2a0a5309dd-0a2a450bdbb6-14
 for <win-pv-devel@lists.xenproject.org>; Fri, 16 Oct 2026 13:43:18 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-42698a.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1448601d80008425@swg.vates.tech>)
 id 6ad20dd5-b7e8-0a2a450b0019-b9ff1c238fd5-3
 for <win-pv-devel@lists.xenproject.org>; Fri, 16 Oct 2026 13:43:18 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1448601d80008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Fri, 16 Oct 2026 11:43:15 +0000
Received: from localhost.localdomain (unknown [37.66.220.142])
 (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 8455F81EC8;
 Fri, 16 Oct 2026 13:43:14 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=oftwiFdzHaRq7pY/R1h16KwJ2Vti832m1DzcNq28Wwo=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:feedback-id;
 b=GJAaczKNboZUnNwX8AKd2TOiigYTnooyvaD/YVAn8K87+rZheBtS7slb36LrO+r2+ecr14xG9
 wFx4WrPs5X+7D7Q315/a0rFP8ljL3j73VPzHJ7JaxlmdBFb0LOeNeKkwgAjCCo+N3O7klCV9QEH
 Py7/AMmOLXOzGkuqlvKfKhHGMiQtA7LKZVq0iyh0l9qPR3r5wYKsqAyZi8P3YnphtYgOi/cJzcD
 qob9FVdTXkPoKW59z6J9RKRjQV+oFSTY9aPY3gd43/C+JC2UlZpsmjqs39uIkrzAM5GE67hQh8c
 qHRovqVWaEsA0lNhVLXuYGFyH9SsAJJKWVqNPTJbLQmA==
X-Zone-Loop: 8dedce15aa034afc598321d01c93a2a382940f70b722
x-campaign-type: default
x-transaction-id: 71e23ff8-f1c0-4032-adc9-f58962db506e
x-swg-uid: 01-b738faf6-a4d0-46c1-9ff8-c9f2a4d7fa1a
X-Mailer: Sweego
Message-ID:
 <1792150995.8631fc262581453bbf619ec5b2062170.1a1448601d80008425@vates.tech>
x-swg-bid: 1792150995.8631fc262581453bbf619ec5b2062170.1a1448601d80008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [PATCH] Early-stop state wait when backend disappears
Date: Fri, 16 Oct 2026 13:43:09 +0200
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.2ba.93632104f2e9f8f1.1a14485feac.2d9f34c7e77738ab=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792150994605
X-purgate-ID: tlsNG-42698a/1792150998-A8CCF9EA-7ED939E6/0/0
X-purgate-type: clean
X-purgate-size: 1662

---=Part.2ba.93632104f2e9f8f1.1a14485feac.2d9f34c7e77738ab=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

During unplug, if the backend disappears before FrontendWaitForBackend-
XenbusStateChange is called, that function will block at
XenbusStateUnknown and cause the system to hang until the timeout
expires=2E

Break out of the watch loop as soon as this condition is detected to
avoid this hang=2E

Ported from Xenvif=2E

Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 src/xenvkbd/frontend=2Ec | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/xenvkbd/frontend=2Ec b/src/xenvkbd/frontend=2Ec
index 7b258ca=2E=2E4b96423 100644
--- a/src/xenvkbd/frontend=2Ec
+++ b/src/xenvkbd/frontend=2Ec
@@ -460,7 +460,12 @@ FrontendWaitForBackendXenbusStateChange(
                               __FrontendGetBackendPath(Frontend),
                               "state",
                               &Buffer);
-        if (!NT_SUCCESS(status)) {
+        if (status =3D=3D STATUS_OBJECT_NAME_NOT_FOUND) {
+            *State =3D XenbusStateUnknown;
+            Trace("%s disappeared\n",
+                  __FrontendGetBackendPath(Frontend));
+            break;
+        } else if (!NT_SUCCESS(status)) {
             *State =3D XenbusStateUnknown;
         } else {
             *State =3D (XenbusState)strtol(Buffer, NULL, 10);
--=20
2=2E55=2E0=2Ewindows=2E3



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.2ba.93632104f2e9f8f1.1a14485feac.2d9f34c7e77738ab=---


From win-pv-devel-bounces@lists.xenproject.org Fri Oct 16 13:24:39 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 16 Oct 2026 13:24:39 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1451848.1666685 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHhvK-0005xw-AW; Fri, 16 Oct 2026 13:24:38 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1451848.1666685; Fri, 16 Oct 2026 13:24:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHhvK-0005xn-5x; Fri, 16 Oct 2026 13:24:38 +0000
Received: by outflank-mailman (input) for mailman id 1451848;
 Fri, 16 Oct 2026 13:24:36 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e2bf7f0008425@swg.vates.tech>)
 id 1xHhvI-0005xh-Eh
 for win-pv-devel@lists.xenproject.org; Fri, 16 Oct 2026 13:24:36 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xHhvH-000zWA-O5
 for win-pv-devel@lists.xenproject.org; Fri, 16 Oct 2026 15:24:35 +0200
Received: from [10.42.69.3] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e2bf7f0008425@swg.vates.tech>)
 id 6ad2258d-bab6-0a2a0a5309dd-0a2a4503e2d0-22
 for <win-pv-devel@lists.xenproject.org>; Fri, 16 Oct 2026 15:24:35 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-33051d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e2bf7f0008425@swg.vates.tech>)
 id 6ad22593-fae8-0a2a45030019-b9ff1c22a3db-3
 for <win-pv-devel@lists.xenproject.org>; Fri, 16 Oct 2026 15:24:35 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a144e2bf7f0008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Fri, 16 Oct 2026 13:24:33 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 93C46823F4;
 Fri, 16 Oct 2026 15:24:32 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=SrX8h18dUgmQM3YMsIFriMJ9VmCJEKz7SpradxUpQjY=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:feedback-id;
 b=qMUOY/Nd9gbT0vx2pdTeqDBl+uD0I9mwu2aD+aE9KHbPD8hAFcuLKaxoKG3XykQE4smAg/Szl
 cmVkuJXW/3+3osSeqTdSVuF+QE5Y61bvwUuildQGJS+qdYHUL06LJbJrZbbGG/NqIvaA59/kvk+
 DwNd+BWjnSXwRQScjWN3tX0FC051EAZM6oVBiB42dz02lZZ2w7ErqkQTQKeEnbMm5HQe60qku1x
 57b7x80OpfS1paXTQ9gz7lq5Y0aMiEYo2GfT0VKHfTJ6QaIVBDRy5TQoK5Asjq8p3hh75X1+k/J
 vqE3F1wa6C30h+XWSZDVZodwhUlShh7IR61PJ0OmUpEg==
X-Zone-Loop: 67253ab8dc595aa700ca16105babd2ef01c2699b97fe
x-campaign-type: default
x-transaction-id: a7a637c0-169d-4c67-a511-04824a196367
x-swg-uid: 01-9a8d6e98-b8da-4ca1-8ff7-f8e8377b6a6b
X-Mailer: Sweego
Message-ID:
 <1792157073.8631fc262581453bbf619ec5b2062170.1a144e2bf7f0008425@vates.tech>
x-swg-bid: 1792157073.8631fc262581453bbf619ec5b2062170.1a144e2bf7f0008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 00/18] xenvbd: Update annotations to SAL 2.0
Date: Fri, 16 Oct 2026 15:24:25 +0200
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.2c8.788e192e0f006a64.1a144e2bd30.7186ab70574579c3=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792157072688
X-purgate-ID: tlsNG-33051d/1792157075-74E874E9-47AD151B/0/0
X-purgate-type: clean
X-purgate-size: 5309

---=Part.2c8.788e192e0f006a64.1a144e2bd30.7186ab70574579c3=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

This patch series updates the xenvbd and xencrsh drivers to use SAL 2=2E0
annotations and fixes the issues found after code analysis=2E

It is organized into three parts: updating annotations to SAL 2=2E0,
fixing annotation issues, and fixes after code analysis=2E

Part 1: Update annotations to SAL 2=2E0
* Update common files with xenbus
* Sync shared headers with xenbus
* xenvbd: convert old annotations to SAL 2=2E0
* Update string typedefs

Part 2: Fix annotation issues
* fix missing annotations
* Fix direction annotations on written parameters
* Add size annotations to buffer parameters
* Annotate logging format strings
* Return StoreDirectory results as PZZSTR
* Annotate conditional output parameters with _Success_
* Fix annotations in macros
* Fix inconsistent annotations
* xenvbd: Fix the Interface annotation of __AdapterQueryInterface
* xenvbd: Accept NULL in RegistryOpenKey, RegistryCreateKey and
    __RingFree
* xencrsh: Annotate __Decode as _Success_

Part 3: Fixes after code analysis
* xenvbd: Fix out-of-bounds read on empty StoreDirectory results
* xencrsh: Suppress a C6385 false positive in __DumpBytes
* xenvbd:registry: sync with xenbus

C=C3=A9saire Mounah (18):
  Update common files with xenbus
  Sync shared headers with xenbus
  xenvbd: convert old annotations to SAL 2=2E0
  Update string typedefs
  fix missing annotations
  Fix direction annotations on written parameters
  Add size annotations to buffer parameters
  Annotate logging format strings
  Return StoreDirectory results as PZZSTR
  xenvbd: Fix out-of-bounds read on empty StoreDirectory results
  Annotate conditional output parameters with _Success_
  Fix annotations in macros
  Fix inconsistent annotations
  xenvbd: Fix the Interface annotation of __AdapterQueryInterface
  xenvbd: Accept NULL in RegistryOpenKey, RegistryCreateKey and
    __RingFree
  xencrsh: Annotate __Decode as _Success_
  xencrsh: Suppress a C6385 false positive in __DumpBytes
  xenvbd:registry: sync with xenbus

 include/cache_interface=2Eh    | 130 +++++-----
 include/debug_interface=2Eh    |  88 +++----
 include/emulated_interface=2Eh | 137 ++++++----
 include/evtchn_interface=2Eh   | 136 +++++-----
 include/gnttab_interface=2Eh   | 148 +++++------
 include/names=2Eh              |  32 +--
 include/store_interface=2Eh    | 156 +++++------
 include/suspend_interface=2Eh  |  80 +++---
 include/unplug_interface=2Eh   |  20 +-
 include/xencrsh_interface=2Eh  |   2 +-
 src/common/util=2Eh            |  87 ++++---
 src/xencrsh/assert=2Eh         | 158 ++++++++----
 src/xencrsh/austere=2Ec        |  44 ++--
 src/xencrsh/austere=2Eh        |   8 +-
 src/xencrsh/buffer=2Ec         |  23 +-
 src/xencrsh/buffer=2Eh         |  19 +-
 src/xencrsh/driver=2Ec         |  73 +++---
 src/xencrsh/driver=2Eh         |   6 +-
 src/xencrsh/evtchn=2Ec         |  24 +-
 src/xencrsh/evtchn=2Eh         |  20 +-
 src/xencrsh/fdo=2Ec            |  70 ++---
 src/xencrsh/fdo=2Eh            |  28 +-
 src/xencrsh/frontend=2Ec       | 176 ++++++-------
 src/xencrsh/frontend=2Eh       |  30 +--
 src/xencrsh/gnttab=2Ec         |  22 +-
 src/xencrsh/gnttab=2Eh         |  14 +-
 src/xencrsh/hvm=2Ec            |  36 +--
 src/xencrsh/hvm=2Eh            |  18 +-
 src/xencrsh/hypercall_stub=2Ec |  12 +-
 src/xencrsh/log=2Ec            |  42 +--
 src/xencrsh/log=2Eh            |   6 +-
 src/xencrsh/pdo=2Ec            | 223 ++++++++--------
 src/xencrsh/pdo=2Eh            |  42 +--
 src/xencrsh/pdoinquiry=2Ec     | 132 +++++-----
 src/xencrsh/pdoinquiry=2Eh     |  10 +-
 src/xencrsh/queue=2Ec          |  40 +--
 src/xencrsh/queue=2Eh          |  20 +-
 src/xencrsh/srbext=2Eh         |   2 +-
 src/xencrsh/store=2Ec          | 178 ++++++-------
 src/xencrsh/store=2Eh          |  44 ++--
 src/xenvbd/adapter=2Ec         | 357 ++++++++++++-------------
 src/xenvbd/adapter=2Eh         |  54 ++--
 src/xenvbd/assert=2Eh          | 165 +++++-------
 src/xenvbd/base64=2Ec          |  33 +--
 src/xenvbd/base64=2Eh          |   8 +-
 src/xenvbd/debug=2Eh           |   8 +-
 src/xenvbd/driver=2Ec          |  44 ++--
 src/xenvbd/driver=2Eh          |  20 +-
 src/xenvbd/frontend=2Ec        | 272 +++++++++----------
 src/xenvbd/frontend=2Eh        |  50 ++--
 src/xenvbd/granter=2Ec         |  58 ++---
 src/xenvbd/granter=2Eh         |  34 +--
 src/xenvbd/registry=2Ec        | 487 +++++++++++++++++++----------------
 src/xenvbd/registry=2Eh        | 225 ++++++++--------
 src/xenvbd/ring=2Ec            | 416 +++++++++++++++---------------
 src/xenvbd/ring=2Eh            |  28 +-
 src/xenvbd/target=2Ec          | 334 ++++++++++++------------
 src/xenvbd/target=2Eh          |  60 +++--
 src/xenvbd/thread=2Ec          |  46 ++--
 src/xenvbd/thread=2Eh          |  30 +--
 60 files changed, 2692 insertions(+), 2573 deletions(-)

--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.2c8.788e192e0f006a64.1a144e2bd30.7186ab70574579c3=---


From win-pv-devel-bounces@lists.xenproject.org Fri Oct 16 13:27:08 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 16 Oct 2026 13:27:08 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1451851.1666687 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHhxk-00068t-Fy; Fri, 16 Oct 2026 13:27:08 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1451851.1666687; Fri, 16 Oct 2026 13:27:08 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHhxk-00068m-D0; Fri, 16 Oct 2026 13:27:08 +0000
Received: by outflank-mailman (input) for mailman id 1451851;
 Fri, 16 Oct 2026 13:27:07 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e513eb0008425@swg.vates.tech>)
 id 1xHhxj-00068Z-8O
 for win-pv-devel@lists.xenproject.org; Fri, 16 Oct 2026 13:27:07 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xHhxi-001Ytu-KU
 for win-pv-devel@lists.xenproject.org; Fri, 16 Oct 2026 15:27:06 +0200
Received: from [10.42.69.12] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e513eb0008425@swg.vates.tech>)
 id 6ad22629-2eae-0a2a0a5409dd-0a2a450c86aa-2
 for <win-pv-devel@lists.xenproject.org>; Fri, 16 Oct 2026 15:27:06 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-d25034.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e513eb0008425@swg.vates.tech>)
 id 6ad2262a-f479-0a2a450c0019-b9ff1c128479-3
 for <win-pv-devel@lists.xenproject.org>; Fri, 16 Oct 2026 15:27:06 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a144e513eb0008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Fri, 16 Oct 2026 13:27:05 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 6CDBE82814;
 Fri, 16 Oct 2026 15:27:05 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=Tqqz8voIjUR7VhWq0Navm156XOu+ah50u8S3g7it6xY=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=B4hn5AXlp8kKSoc1P+wCeuuhQaG4Tv4fWru9p7+cPFr5A57S6MGI4GoFCRG6/lmrcAdWWcBVi
 5yTWJweAB5WHV4gk06eM91pmL7KkcFau4gC+lA26Vl0FN9LsNbC0ebiUsl7gWRVbiSNIPQOTeyq
 9hIi6tZldv/lyRAi4fRn6+XYTL6Ar+26oTFLlq/rsmI+t7TuFD9p0llCXIeX9PkvXxAOXoRXUFh
 u9u9U17GVi4IcmmZpOMhBPyTgqe8o0rTofFFcOvWj8obc5crv8OoUt6ZFoZjvhC/vOw0AeuReNl
 X4RlETRLuhp6iy4H0ohXDnlc8qpSald9N0H3LF0YauJA==
X-Zone-Loop: c77b7b6579afd7bdb3e2b54cc39c4c50dee263e1f1f9
x-campaign-type: default
x-transaction-id: f90fcc1a-36a8-499e-baf3-d5a4f553fc8a
x-swg-uid: 01-54a02338-0b4d-4f4c-bc32-b80e66eed731
X-Mailer: Sweego
Message-ID:
 <1792157226.8631fc262581453bbf619ec5b2062170.1a144e513eb0008425@vates.tech>
x-swg-bid: 1792157226.8631fc262581453bbf619ec5b2062170.1a144e513eb0008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 05/18] fix missing annotations
Date: Fri, 16 Oct 2026 15:26:42 +0200
In-Reply-To: <1792157073.8631fc262581453bbf619ec5b2062170.1a144e2bf7f0008425@vates.tech>
References: <1792157073.8631fc262581453bbf619ec5b2062170.1a144e2bf7f0008425@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.2cd.3ff0bb257d7d0e8a.1a144e51241.33bd227017008534=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792157225537
X-purgate-ID: tlsNG-d25034/1792157226-51F33A5B-2A9A44EC/0/0
X-purgate-type: clean
X-purgate-size: 5920

---=Part.2cd.3ff0bb257d7d0e8a.1a144e51241.33bd227017008534=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

* Fix missed annotations of macro-defined functions
* Fix functions with missing annotations

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xencrsh/pdo=2Ec     | 5 +++--
 src/xencrsh/store=2Ec   | 4 ++--
 src/xenvbd/adapter=2Ec  | 4 ++--
 src/xenvbd/frontend=2Ec | 8 ++++----
 src/xenvbd/registry=2Ec | 4 ++--
 src/xenvbd/target=2Ec   | 2 +-
 6 files changed, 14 insertions(+), 13 deletions(-)

diff --git a/src/xencrsh/pdo=2Ec b/src/xencrsh/pdo=2Ec
index 3ab4ba0=2E=2Efa66172 100644
--- a/src/xencrsh/pdo=2Ec
+++ b/src/xencrsh/pdo=2Ec
@@ -302,8 +302,9 @@ VirtToPfn(
     PHYSICAL_ADDRESS    PhysAddr =3D MmGetPhysicalAddress(VirtAddr);
     return (PFN_NUMBER)(PhysAddr=2EQuadPart >> PAGE_SHIFT);
 }
-static FORCEINLINE ULONG __SectorSize(
-    IN  PXENVBD_PDO             Pdo
+static FORCEINLINE ULONG=20
+__SectorSize(
+    _In_ PXENVBD_PDO    Pdo
     )
 {
     ASSERT3U(Pdo->Frontend=2ESectorSize, !=3D, 0);
diff --git a/src/xencrsh/store=2Ec b/src/xencrsh/store=2Ec
index 1f64dfd=2E=2E8da61e8 100644
--- a/src/xencrsh/store=2Ec
+++ b/src/xencrsh/store=2Ec
@@ -355,10 +355,10 @@ StoreReceiveSegment(
=20
 static FORCEINLINE BOOLEAN
 __StoreVerifyHeader(
-    struct xsd_sockmsg  *Header
+    _In_ struct xsd_sockmsg *Header
     )
 {
-    BOOLEAN             Valid;
+    BOOLEAN                 Valid;
=20
     Valid =3D TRUE;
=20
diff --git a/src/xenvbd/adapter=2Ec b/src/xenvbd/adapter=2Ec
index beffcff=2E=2E8eab1f2 100644
--- a/src/xenvbd/adapter=2Ec
+++ b/src/xenvbd/adapter=2Ec
@@ -2312,8 +2312,8 @@ fail1:
 #define ADAPTER_GET_INTERFACE(_name, _type)                     \
 VOID                                                            \
 AdapterGet ## _name ## Interface(                               \
-    IN  PXENVBD_ADAPTER Adapter,                                \
-    OUT _type           _name ## Interface                      \
+    _In_ PXENVBD_ADAPTER    Adapter,                            \
+    _Out_ _type             _name ## Interface                  \
     )                                                           \
 {                                                               \
     * ## _name ## Interface =3D Adapter-> ## _name ## Interface;  \
diff --git a/src/xenvbd/frontend=2Ec b/src/xenvbd/frontend=2Ec
index a5e2236=2E=2Ed75e702 100644
--- a/src/xenvbd/frontend=2Ec
+++ b/src/xenvbd/frontend=2Ec
@@ -118,14 +118,14 @@ __XenvbdStateName(
 #define FRONTEND_GET_PROPERTY(_name, _type)     \
 static FORCEINLINE _type                        \
 __FrontendGet ## _name ## (                     \
-    IN  PXENVBD_FRONTEND    Frontend            \
+    _In_ PXENVBD_FRONTEND   Frontend            \
     )                                           \
 {                                               \
     return Frontend-> ## _name ## ;             \
 }                                               \
 _type                                           \
 FrontendGet ## _name ## (                       \
-    IN  PXENVBD_FRONTEND    Frontend            \
+    _In_ PXENVBD_FRONTEND   Frontend            \
     )                                           \
 {                                               \
     return __FrontendGet ## _name ## (Frontend);\
@@ -135,14 +135,14 @@ FrontendGet ## _name ## (                       \
 #define FRONTEND_GET_PROPERTY_PTR(_name, _type) \
 static FORCEINLINE _type                        \
 __FrontendGet ## _name ## (                     \
-    IN  PXENVBD_FRONTEND    Frontend            \
+    _In_ PXENVBD_FRONTEND   Frontend            \
     )                                           \
 {                                               \
     return &Frontend-> ## _name ## ;            \
 }                                               \
 _type                                           \
 FrontendGet ## _name ## (                       \
-    IN  PXENVBD_FRONTEND    Frontend            \
+    _In_ PXENVBD_FRONTEND   Frontend            \
     )                                           \
 {                                               \
     return __FrontendGet ## _name ## (Frontend);\
diff --git a/src/xenvbd/registry=2Ec b/src/xenvbd/registry=2Ec
index 080b200=2E=2E3efff22 100644
--- a/src/xenvbd/registry=2Ec
+++ b/src/xenvbd/registry=2Ec
@@ -1398,7 +1398,7 @@ fail1:
 _IRQL_requires_(PASSIVE_LEVEL)
 static PKEY_VALUE_PARTIAL_INFORMATION
 RegistryAnsiToSz(
-    PANSI_STRING                    Ansi
+    _In_ PANSI_STRING               Ansi
     )
 {
     ULONG                           Length;
@@ -1445,7 +1445,7 @@ fail1:
 _IRQL_requires_(PASSIVE_LEVEL)
 static PKEY_VALUE_PARTIAL_INFORMATION
 RegistryAnsiToMultiSz(
-    PANSI_STRING                    Ansi
+    _In_ PANSI_STRING               Ansi
     )
 {
     ULONG                           Length;
diff --git a/src/xenvbd/target=2Ec b/src/xenvbd/target=2Ec
index 0051e90=2E=2E0ba09cb 100644
--- a/src/xenvbd/target=2Ec
+++ b/src/xenvbd/target=2Ec
@@ -1587,7 +1587,7 @@ TargetDestroy(
 #define TARGET_GET_PROPERTY(_name, _type)       \
 _type                                           \
 TargetGet ## _name ## (                         \
-    IN  PXENVBD_TARGET  Target                  \
+    _In_ PXENVBD_TARGET Target                  \
     )                                           \
 {                                               \
     return Target-> ## _name ## ;               \
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.2cd.3ff0bb257d7d0e8a.1a144e51241.33bd227017008534=---


From win-pv-devel-bounces@lists.xenproject.org Fri Oct 16 13:27:09 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 16 Oct 2026 13:27:09 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1451852.1666691 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHhxl-0006B2-Ia; Fri, 16 Oct 2026 13:27:09 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1451852.1666691; Fri, 16 Oct 2026 13:27:09 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHhxl-0006Ar-F3; Fri, 16 Oct 2026 13:27:09 +0000
Received: by outflank-mailman (input) for mailman id 1451852;
 Fri, 16 Oct 2026 13:27:08 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e511e70008425@swg.vates.tech>)
 id 1xHhxj-00068Y-De
 for win-pv-devel@lists.xenproject.org; Fri, 16 Oct 2026 13:27:07 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xHhxi-0060cn-JE
 for win-pv-devel@lists.xenproject.org; Fri, 16 Oct 2026 15:27:06 +0200
Received: from [10.42.69.1] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e511e70008425@swg.vates.tech>)
 id 6ad22611-8faa-0a2a0a5109dd-0a2a4501beec-48
 for <win-pv-devel@lists.xenproject.org>; Fri, 16 Oct 2026 15:27:06 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e511e70008425@swg.vates.tech>)
 id 6ad2262a-5984-0a2a45010019-b9ff1c228703-3
 for <win-pv-devel@lists.xenproject.org>; Fri, 16 Oct 2026 15:27:06 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a144e511e70008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Fri, 16 Oct 2026 13:27:05 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 86847827B9;
 Fri, 16 Oct 2026 15:27:04 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=W/+fKu3q36g+ydgR7kEsUaDG9aXdwShRFOlBNYub0eo=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=X3l0HBsZmSkFqqJ0vzgsSnrdhBdViW+Z4at0SPiv9mhlp7VI3m2p8S+XHCCR+02TFAfl7n/Vk
 TEiNW9TkSV1h6G7CuuUbN8HOGN9VGpU9ulJGInp/dNrS06vC6MHP5Uj+1NtettCi9j0N5c7zK0S
 gqdrLQa8wann2PWZEFF4yXNVEj2RuRrgbIxmgyZ1OAsvxcqrHy8Yy0+I8CS58YFyullMhobX3/3
 V5cmuQ7xvcRjWHzRTESso8077Rm64S9FXh8YWBCyKkt03fqniEgb/UkPVdRowA8FV+PxPQUSFf5
 Q+fDmferdKteaK9vg61z3aL54uEqPtmPsniANfj0wvCw==
X-Zone-Loop: fa12a735f6122a3893a9de8d3fb73e1573aa3ae8cfe6
x-campaign-type: default
x-transaction-id: 4503a8bf-77f7-4383-a474-05f219953d3b
x-swg-uid: 01-2925129b-8b42-46d8-aab9-d4d7351b1e21
X-Mailer: Sweego
Message-ID:
 <1792157225.8631fc262581453bbf619ec5b2062170.1a144e511e70008425@vates.tech>
x-swg-bid: 1792157225.8631fc262581453bbf619ec5b2062170.1a144e511e70008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 03/18] xenvbd: convert old annotations to SAL 2.0
Date: Fri, 16 Oct 2026 15:26:40 +0200
In-Reply-To: <1792157073.8631fc262581453bbf619ec5b2062170.1a144e2bf7f0008425@vates.tech>
References: <1792157073.8631fc262581453bbf619ec5b2062170.1a144e2bf7f0008425@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.2cb.ff8d434b954ef7a9.1a144e5105c.7d288c2a6d3c2f45=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792157225053
X-purgate-ID: tlsNG-d62444/1792157226-BF86F4F7-CEE976E8/0/0
X-purgate-type: clean
X-purgate-size: 235298

---=Part.2cb.ff8d434b954ef7a9.1a144e5105c.7d288c2a6d3c2f45=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Convert to SAL 2=2E0 annotations

Mechanical pass, no functional change=2E

Annotations:
  IN/OUT/IN OUT -> In/Out/Inout
  __in/__out/__inout -> same, opt variants preserved
  trailing OPTIONAL -> folded into the annotation (In_opt &c)
  Out on a T ** -> Outptr
  _drv/__checkReturn-> IRQL_requires/Dispatch_type/Check_return

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 include/names=2Eh              |  32 ++--
 include/xencrsh_interface=2Eh  |   2 +-
 src/xencrsh/assert=2Eh         |  16 +-
 src/xencrsh/austere=2Ec        |  44 ++---
 src/xencrsh/austere=2Eh        |   8 +-
 src/xencrsh/buffer=2Ec         |  22 +--
 src/xencrsh/buffer=2Eh         |  18 +-
 src/xencrsh/driver=2Ec         |  72 +++----
 src/xencrsh/driver=2Eh         |   6 +-
 src/xencrsh/evtchn=2Ec         |  24 +--
 src/xencrsh/evtchn=2Eh         |  20 +-
 src/xencrsh/fdo=2Ec            |  70 +++----
 src/xencrsh/fdo=2Eh            |  28 +--
 src/xencrsh/frontend=2Ec       | 176 +++++++++---------
 src/xencrsh/frontend=2Eh       |  30 +--
 src/xencrsh/gnttab=2Ec         |  22 +--
 src/xencrsh/gnttab=2Eh         |  14 +-
 src/xencrsh/hvm=2Ec            |  36 ++--
 src/xencrsh/hvm=2Eh            |  18 +-
 src/xencrsh/hypercall_stub=2Ec |  12 +-
 src/xencrsh/log=2Ec            |  38 ++--
 src/xencrsh/log=2Eh            |   6 +-
 src/xencrsh/pdo=2Ec            | 218 +++++++++++-----------
 src/xencrsh/pdo=2Eh            |  42 ++---
 src/xencrsh/pdoinquiry=2Ec     | 126 ++++++-------
 src/xencrsh/pdoinquiry=2Eh     |  10 +-
 src/xencrsh/queue=2Ec          |  40 ++--
 src/xencrsh/queue=2Eh          |  20 +-
 src/xencrsh/srbext=2Eh         |   2 +-
 src/xencrsh/store=2Ec          | 166 ++++++++---------
 src/xencrsh/store=2Eh          |  44 ++---
 src/xenvbd/adapter=2Ec         | 352 +++++++++++++++++------------------
 src/xenvbd/adapter=2Eh         |  50 ++---
 src/xenvbd/assert=2Eh          |  16 +-
 src/xenvbd/base64=2Ec          |  32 ++--
 src/xenvbd/base64=2Eh          |   8 +-
 src/xenvbd/debug=2Eh           |   8 +-
 src/xenvbd/driver=2Ec          |  42 ++---
 src/xenvbd/driver=2Eh          |  20 +-
 src/xenvbd/frontend=2Ec        | 232 +++++++++++------------
 src/xenvbd/frontend=2Eh        |  48 ++---
 src/xenvbd/granter=2Ec         |  58 +++---
 src/xenvbd/granter=2Eh         |  34 ++--
 src/xenvbd/registry=2Ec        | 228 +++++++++++------------
 src/xenvbd/registry=2Eh        | 180 +++++++++---------
 src/xenvbd/ring=2Ec            | 254 ++++++++++++-------------
 src/xenvbd/ring=2Eh            |  28 +--
 src/xenvbd/target=2Ec          | 304 +++++++++++++++---------------
 src/xenvbd/target=2Eh          |  52 +++---
 src/xenvbd/thread=2Ec          |  44 ++---
 src/xenvbd/thread=2Eh          |  30 +--
 51 files changed, 1701 insertions(+), 1701 deletions(-)

diff --git a/include/names=2Eh b/include/names=2Eh
index dfd445a=2E=2E3848e39 100644
--- a/include/names=2Eh
+++ b/include/names=2Eh
@@ -38,7 +38,7 @@
=20
 static FORCEINLINE const PCHAR
 XenbusStateName(
-    IN  XenbusState     State
+    _In_ XenbusState    State
     )
 {
     switch (State) {
@@ -57,7 +57,7 @@ XenbusStateName(
=20
 static FORCEINLINE const PCHAR
 SrbStatusName(
-    IN  ULONG       Status
+    _In_ ULONG  Status
     )
 {
     switch (Status) {
@@ -75,7 +75,7 @@ SrbStatusName(
=20
 static FORCEINLINE const PCHAR
 StorStatusName(
-    IN  ULONG       Status
+    _In_ ULONG  Status
     )
 {
     switch (Status) {
@@ -87,7 +87,7 @@ StorStatusName(
 }
 static FORCEINLINE const PCHAR
 ScsiAdapterControlTypeName(
-    IN  SCSI_ADAPTER_CONTROL_TYPE   ControlType
+    _In_ SCSI_ADAPTER_CONTROL_TYPE  ControlType
     )
 {
 #define _SCSI_CONTROL_TYPE_NAME(_type)      \
@@ -107,7 +107,7 @@ ScsiAdapterControlTypeName(
 }
 static FORCEINLINE const PCHAR
 StorPnPActionName(
-    IN  STOR_PNP_ACTION         Action
+    _In_ STOR_PNP_ACTION    Action
     )
 {
     switch (Action) {
@@ -121,7 +121,7 @@ StorPnPActionName(
 }
 static FORCEINLINE const PCHAR
 StorDeviceStateName(
-    IN  STOR_DEVICE_POWER_STATE     State
+    _In_ STOR_DEVICE_POWER_STATE    State
     )
 {
     switch (State) {
@@ -136,7 +136,7 @@ StorDeviceStateName(
 }
 static FORCEINLINE const PCHAR
 StorPowerActionName(
-    IN  STOR_POWER_ACTION           Action
+    _In_ STOR_POWER_ACTION  Action
     )
 {
     switch (Action) {
@@ -154,7 +154,7 @@ StorPowerActionName(
=20
 static FORCEINLINE const PCHAR
 PowerTypeName(
-    IN  POWER_STATE_TYPE    Type
+    _In_ POWER_STATE_TYPE   Type
     )
 {
 #define _POWER_TYPE_NAME(_Type) \
@@ -174,7 +174,7 @@ PowerTypeName(
=20
 static FORCEINLINE const PCHAR
 PowerSystemStateName(
-    IN  SYSTEM_POWER_STATE State
+    _In_ SYSTEM_POWER_STATE State
     )
 {
 #define _POWER_SYSTEM_STATE_NAME(_State)    \
@@ -200,7 +200,7 @@ PowerSystemStateName(
=20
 static FORCEINLINE const PCHAR
 PowerDeviceStateName(
-    IN  DEVICE_POWER_STATE State
+    _In_ DEVICE_POWER_STATE State
     )
 {
 #define _POWER_DEVICE_STATE_NAME(_State)    \
@@ -224,7 +224,7 @@ PowerDeviceStateName(
=20
 static FORCEINLINE const PCHAR
 PowerActionName(
-    IN  POWER_ACTION    Type
+    _In_ POWER_ACTION   Type
     )
 {
 #define _POWER_ACTION_NAME(_Type)   \
@@ -250,7 +250,7 @@ PowerActionName(
=20
 static FORCEINLINE const PCHAR
 PowerMinorFunctionName(
-    IN  ULONG   MinorFunction
+    _In_ ULONG  MinorFunction
     )
 {
 #define _POWER_MINOR_FUNCTION_NAME(_Function)   \
@@ -272,7 +272,7 @@ PowerMinorFunctionName(
=20
 static FORCEINLINE const PCHAR
 PnpMinorFunctionName(
-    IN  ULONG   Function
+    _In_ ULONG  Function
     )
 {
 #define _PNP_MINOR_FUNCTION_NAME(_Function) \
@@ -315,7 +315,7 @@ PnpMinorFunctionName(
=20
 static FORCEINLINE const PCHAR
 PartialResourceDescriptorTypeName(
-    IN  UCHAR   Type
+    _In_ UCHAR  Type
     )
 {
 #define _PARTIAL_RESOURCE_DESCRIPTOR_TYPE_NAME(_Type)   \
@@ -344,7 +344,7 @@ PartialResourceDescriptorTypeName(
=20
 static FORCEINLINE const PCHAR
 PnPMinorFunction(
-    IN  ULONG   Func
+    _In_ ULONG  Func
     )
 {
 #define _PNP_MINOR_FUNC_NAME(_func)     \
@@ -385,7 +385,7 @@ PnPMinorFunction(
=20
 static FORCEINLINE const PCHAR
 QueryDeviceRelationsName(
-    IN  ULONG   Type
+    _In_ ULONG  Type
     )
 {
     switch (Type) {
diff --git a/include/xencrsh_interface=2Eh b/include/xencrsh_interface=2Eh
index 2f42316=2E=2E4931928 100644
--- a/include/xencrsh_interface=2Eh
+++ b/include/xencrsh_interface=2Eh
@@ -39,7 +39,7 @@
=20
 XEN_API NTSTATUS
 XencrshEntryPoint(
-    IN  PDRIVER_OBJECT  _DriverObject
+    _In_ PDRIVER_OBJECT _DriverObject
     );
=20
 #endif // _XENCRSH_XENCRSH_INTERFACE_H
diff --git a/src/xencrsh/assert=2Eh b/src/xencrsh/assert=2Eh
index 72ae0cc=2E=2Ed5b64d6 100644
--- a/src/xencrsh/assert=2Eh
+++ b/src/xencrsh/assert=2Eh
@@ -154,10 +154,10 @@ __Bug(
=20
 static __inline BOOLEAN
 _IsZeroMemory(
-    _In_ PCSTR          Caller,
-    _In_ PCSTR          Name,
-    _In_ PVOID          Buffer,
-    _In_ ULONG          Length
+    _In_ PCSTR      Caller,
+    _In_ PCSTR      Name,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length
     )
 {
     ULONG           Offset;
@@ -178,10 +178,10 @@ _IsZeroMemory(
=20
 static __inline BOOLEAN
 _IsZeroMemory(
-    _In_ PCSTR          Caller,
-    _In_ PCSTR          Name,
-    _In_ PVOID          Buffer,
-    _In_ ULONG          Length
+    _In_ PCSTR  Caller,
+    _In_ PCSTR  Name,
+    _In_ PVOID  Buffer,
+    _In_ ULONG  Length
     )
 {
     UNREFERENCED_PARAMETER(Caller);
diff --git a/src/xencrsh/austere=2Ec b/src/xencrsh/austere=2Ec
index 95a6422=2E=2E631a930 100644
--- a/src/xencrsh/austere=2Ec
+++ b/src/xencrsh/austere=2Ec
@@ -99,14 +99,14 @@ __CompactBigHeap()
 }
 static PVOID
 __AllocBig(
-    IN  PCHAR   Caller,
-    IN  ULONG   Size
+    _In_ PCHAR  Caller,
+    _In_ ULONG  Size
     )
 {
-    ULONG   NumPages;
-    ULONG   i, n;
-    PVOID   Res;
-    BOOLEAN repeat =3D FALSE;
+    ULONG       NumPages;
+    ULONG       i, n;
+    PVOID       Res;
+    BOOLEAN     repeat =3D FALSE;
    =20
     NumPages =3D (ULONG)((Size + PAGE_SIZE - 1) / (PAGE_SIZE));
=20
@@ -140,10 +140,10 @@ retry:
 }
 static VOID
 __FreeBig(
-    IN  PVOID   Buffer
+    _In_ PVOID  Buffer
     )
 {
-    int   StartNr;
+    int         StartNr;
     StartNr =3D (int)(((PUCHAR)Buffer - AustereHeap=2EBigHeapStart) / PAG=
E_SIZE);
     if (StartNr < 0 || (ULONG)StartNr >=3D AustereHeap=2ENumHeapPages)
         return;
@@ -156,12 +156,12 @@ __FreeBig(
 }
 static PVOID
 __TrySmall(
-    IN  PXENCRSH_SUBHEAP    SubHeap,
-    IN  ULONG               Size
+    _In_ PXENCRSH_SUBHEAP   SubHeap,
+    _In_ ULONG              Size
     )
 {
-    PUCHAR      Ptr;
-    ULONG       ThisSize;
+    PUCHAR                  Ptr;
+    ULONG                   ThisSize;
    =20
     if (SubHeap->Free < Size)
         return NULL;
@@ -226,8 +226,8 @@ __NewSubHeap(
 }
 static PVOID
 __AllocSmall(
-    IN  PCHAR   Caller,
-    IN  ULONG   Size
+    _In_ PCHAR          Caller,
+    _In_ ULONG          Size
     )
 {
     PXENCRSH_SUBHEAP    SubHeap;
@@ -271,7 +271,7 @@ __AllocSmall(
 }
 static VOID
 __FreeSmall(
-    IN  PVOID   Buffer
+    _In_ PVOID          Buffer
     )
 {
     PXENCRSH_SUBHEAP    SubHeap;
@@ -338,8 +338,8 @@ __FreeSmall(
=20
 static FORCEINLINE PVOID
 __Round(
-    IN  PVOID               Buffer,
-    IN  ULONG               RoundTo
+    _In_ PVOID  Buffer,
+    _In_ ULONG  RoundTo
     )
 {
     // round buffer to (normally PAGE_SIZE) boundary
@@ -376,11 +376,11 @@ __SubHeapSize()
 }
 PVOID
 __AustereAllocate(
-    IN  PCHAR   Caller,
-    IN  ULONG   Size
+    _In_ PCHAR  Caller,
+    _In_ ULONG  Size
     )
 {
-    PVOID   Res;
+    PVOID       Res;
=20
     if (Size < sizeof(PVOID))
         Size =3D sizeof(PVOID);
@@ -406,8 +406,8 @@ __AustereAllocate(
=20
 VOID
 __AustereFree(
-    IN  PCHAR   Caller,
-    IN  PVOID   Buffer
+    _In_ PCHAR      Caller,
+    _In_ PVOID      Buffer
     )
 {  =20
     const ULONG_PTR AustereHeapStart =3D (ULONG_PTR)AustereHeap=2EBigHeap=
Start;
diff --git a/src/xencrsh/austere=2Eh b/src/xencrsh/austere=2Eh
index b74053f=2E=2Eb5b8f8c 100644
--- a/src/xencrsh/austere=2Eh
+++ b/src/xencrsh/austere=2Eh
@@ -43,14 +43,14 @@ AustereInitialize();
=20
 PVOID
 __AustereAllocate(
-    IN  PCHAR   Caller,
-    IN  ULONG   Size
+    _In_ PCHAR  Caller,
+    _In_ ULONG  Size
     );
=20
 VOID
 __AustereFree(
-    IN  PCHAR   Caller,
-    IN  PVOID   Buffer
+    _In_ PCHAR  Caller,
+    _In_ PVOID  Buffer
     );
=20
 #define AustereAllocate(x)  __AustereAllocate(__FUNCTION__, x);
diff --git a/src/xencrsh/buffer=2Ec b/src/xencrsh/buffer=2Ec
index 83b0601=2E=2E8fd1702 100644
--- a/src/xencrsh/buffer=2Ec
+++ b/src/xencrsh/buffer=2Ec
@@ -100,12 +100,12 @@ BufferTerminate(
=20
 BOOLEAN
 BufferGet(
-    OUT PULONG      BufferId,
-    OUT PFN_NUMBER* Pfn
+    _Out_ PULONG        BufferId,
+    _Outptr_ PFN_NUMBER *Pfn
     )
 {
-    ULONG           BufId;
-    PXENVBD_BUFFER  Buf;
+    ULONG               BufId;
+    PXENVBD_BUFFER      Buf;
=20
     if (__Buffer=2ENext =3D=3D 0) {
         LogWarning("failed to get buffer\n");
@@ -130,7 +130,7 @@ BufferGet(
=20
 VOID
 BufferPut(
-    IN  ULONG       BufferId
+    _In_ ULONG  BufferId
     )
 {
     // copy the Pfn@Length to the Buffer, and release the BufferId to the=
 free list
@@ -150,9 +150,9 @@ BufferPut(
=20
 VOID
 BufferCopyIn(
-    IN  ULONG       BufferId,
-    IN  PVOID       Input,
-    IN  ULONG       Length
+    _In_ ULONG      BufferId,
+    _In_ PVOID      Input,
+    _In_ ULONG      Length
     )
 {
     PXENVBD_BUFFER  Buf;
@@ -170,9 +170,9 @@ BufferCopyIn(
=20
 VOID
 BufferCopyOut(
-    IN  ULONG       BufferId,
-    IN  PVOID       Output,
-    IN  ULONG       Length
+    _In_ ULONG      BufferId,
+    _In_ PVOID      Output,
+    _In_ ULONG      Length
     )
 {
     PXENVBD_BUFFER  Buf;
diff --git a/src/xencrsh/buffer=2Eh b/src/xencrsh/buffer=2Eh
index 68a0f0f=2E=2E5c54c03 100644
--- a/src/xencrsh/buffer=2Eh
+++ b/src/xencrsh/buffer=2Eh
@@ -47,27 +47,27 @@ BufferTerminate(
=20
 extern BOOLEAN
 BufferGet(
-    OUT PULONG      BufferId,
-    OUT PFN_NUMBER* Pfn
+    _Out_ PULONG        BufferId,
+    _Outptr_ PFN_NUMBER *Pfn
     );
=20
 extern VOID
 BufferPut(
-    IN  ULONG       BufferId
+    _In_ ULONG  BufferId
     );
=20
 extern VOID
 BufferCopyIn(
-    IN  ULONG       BufferId,
-    IN  PVOID       Input,
-    IN  ULONG       Length
+    _In_ ULONG  BufferId,
+    _In_ PVOID  Input,
+    _In_ ULONG  Length
     );
=20
 extern VOID
 BufferCopyOut(
-    IN  ULONG       BufferId,
-    IN  PVOID       Output,
-    IN  ULONG       Length
+    _In_ ULONG  BufferId,
+    _In_ PVOID  Output,
+    _In_ ULONG  Length
     );
    =20
 #endif // _XENVBD_BUFFER_H
diff --git a/src/xencrsh/driver=2Ec b/src/xencrsh/driver=2Ec
index beb5908=2E=2E1bf6950 100644
--- a/src/xencrsh/driver=2Ec
+++ b/src/xencrsh/driver=2Ec
@@ -72,7 +72,7 @@ static PXENVBD_FDO              __XenvbdFdo;
=20
 VOID
 DriverLinkFdo(
-    IN  PXENVBD_FDO             Fdo
+    _In_ PXENVBD_FDO    Fdo
     )
 {
     __XenvbdFdo =3D Fdo;
@@ -80,7 +80,7 @@ DriverLinkFdo(
=20
 VOID
 DriverUnlinkFdo(
-    IN  PXENVBD_FDO             Fdo
+    _In_ PXENVBD_FDO    Fdo
     )
 {
     UNREFERENCED_PARAMETER(Fdo);
@@ -91,13 +91,13 @@ DriverUnlinkFdo(
 // Global Functions
 static FORCEINLINE PCHAR
 __DriverFormatV(
-    IN  PCHAR       Fmt,
-    IN  va_list     Args
+    _In_ PCHAR      Fmt,
+    _In_ va_list    Args
     )
 {
-    NTSTATUS    Status;
-    PCHAR       Str;
-    ULONG       Size =3D 32;
+    NTSTATUS        Status;
+    PCHAR           Str;
+    ULONG           Size =3D 32;
=20
     for (;;) {
         Str =3D (PCHAR)AustereAllocate(Size);
@@ -124,12 +124,12 @@ __DriverFormatV(
=20
 PCHAR
 DriverFormat(
-    IN  PCHAR       Format,
+    _In_ PCHAR  Format,
     =2E=2E=2E
     )
 {
-    va_list Args;
-    PCHAR   Str;
+    va_list     Args;
+    PCHAR       Str;
=20
     va_start(Args, Format);
     Str =3D __DriverFormatV(Format, Args);
@@ -143,7 +143,7 @@ HW_INITIALIZE       HwInitialize;
=20
 BOOLEAN=20
 HwInitialize(
-    IN  PVOID   HwDeviceExtension
+    _In_ PVOID  HwDeviceExtension
     )
 {
     UNREFERENCED_PARAMETER(HwDeviceExtension);
@@ -154,7 +154,7 @@ HW_INTERRUPT        HwInterrupt;
=20
 BOOLEAN=20
 HwInterrupt(
-    IN  PVOID   HwDeviceExtension
+    _In_ PVOID  HwDeviceExtension
     )
 {
     PXENVBD_PDO Pdo =3D FdoGetPdo((PXENVBD_FDO)HwDeviceExtension);
@@ -169,8 +169,8 @@ HW_RESET_BUS        HwResetBus;
=20
 BOOLEAN=20
 HwResetBus(
-    IN  PVOID   HwDeviceExtension,
-    IN  ULONG   PathId
+    _In_ PVOID  HwDeviceExtension,
+    _In_ ULONG  PathId
     )
 {
     UNREFERENCED_PARAMETER(PathId);
@@ -181,9 +181,9 @@ HW_ADAPTER_CONTROL  HwAdapterControl;
=20
 SCSI_ADAPTER_CONTROL_STATUS
 HwAdapterControl(
-    IN  PVOID                       HwDeviceExtension,
-    IN  SCSI_ADAPTER_CONTROL_TYPE   ControlType,
-    IN  PVOID                       Parameters
+    _In_ PVOID                      HwDeviceExtension,
+    _In_ SCSI_ADAPTER_CONTROL_TYPE  ControlType,
+    _In_ PVOID                      Parameters
     )
 {
     return FdoAdapterControl((PXENVBD_FDO)HwDeviceExtension, ControlType,=
 Parameters);
@@ -193,12 +193,12 @@ HW_FIND_ADAPTER     HwFindAdapter;
=20
 ULONG
 HwFindAdapter(
-    IN  PVOID                               HwDeviceExtension,
-    IN  PVOID                               Context,
-    IN  PVOID                               BusInformation,
-    IN  PCHAR                               ArgumentString,
-    IN OUT PPORT_CONFIGURATION_INFORMATION  ConfigInfo,
-    OUT PBOOLEAN                            Again
+    _In_ PVOID                              HwDeviceExtension,
+    _In_ PVOID                              Context,
+    _In_ PVOID                              BusInformation,
+    _In_ PCHAR                              ArgumentString,
+    _Inout_ PPORT_CONFIGURATION_INFORMATION ConfigInfo,
+    _Out_ PBOOLEAN                          Again
     )
 {
     UNREFERENCED_PARAMETER(Context);
@@ -213,8 +213,8 @@ HW_BUILDIO          HwBuildIo;
=20
 BOOLEAN=20
 HwBuildIo(
-    IN  PVOID               HwDeviceExtension,
-    IN  PSCSI_REQUEST_BLOCK Srb
+    _In_ PVOID                  HwDeviceExtension,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
     return FdoBuildIo((PXENVBD_FDO)HwDeviceExtension, Srb);
@@ -224,8 +224,8 @@ HW_STARTIO          HwStartIo;
=20
 BOOLEAN=20
 HwStartIo(
-    IN  PVOID               HwDeviceExtension,
-    IN  PSCSI_REQUEST_BLOCK Srb
+    _In_ PVOID                  HwDeviceExtension,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
     return FdoStartIo((PXENVBD_FDO)HwDeviceExtension, Srb);
@@ -237,7 +237,7 @@ HwStartIo(
=20
 XEN_API NTSTATUS
 XencrshEntryPoint(
-    IN  PDRIVER_OBJECT  _DriverObject
+    _In_ PDRIVER_OBJECT     _DriverObject
     )
 {
     NTSTATUS                Status;
@@ -292,7 +292,7 @@ XencrshEntryPoint(
 //=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D
 static FORCEINLINE WCHAR
 __ToUpper(
-    IN  WCHAR   Ch
+    _In_ WCHAR  Ch
     )
 {
     if (Ch >=3D L'a' && Ch <=3D L'z')
@@ -302,8 +302,8 @@ __ToUpper(
=20
 static FORCEINLINE BOOLEAN
 __StrStarts(
-    IN  PWCHAR  Str,
-    IN  PWCHAR  Starts
+    _In_ PWCHAR Str,
+    _In_ PWCHAR Starts
     )
 {
     while (*Str !=3D L'\0' && *Starts !=3D L'\0') {
@@ -317,10 +317,10 @@ __StrStarts(
=20
 NTSTATUS
 DllInitialize(
-    IN  PUNICODE_STRING RegistryPath
+    _In_ PUNICODE_STRING    RegistryPath
     )
 {
-    PWSTR       Name;
+    PWSTR                   Name;
=20
     Name =3D wcsrchr(RegistryPath->Buffer, L'\\');
     if (Name) {
@@ -349,8 +349,8 @@ DRIVER_INITIALIZE   DriverEntry;
=20
 NTSTATUS
 DriverEntry(
-    IN  PDRIVER_OBJECT  _DriverObject,
-    IN  PUNICODE_STRING RegistryPath
+    _In_ PDRIVER_OBJECT     _DriverObject,
+    _In_ PUNICODE_STRING    RegistryPath
     )
 {
     UNREFERENCED_PARAMETER(_DriverObject);
@@ -363,7 +363,7 @@ DRIVER_UNLOAD               DriverUnload;
=20
 VOID
 DriverUnload(
-    IN PDRIVER_OBJECT  _DriverObject
+    _In_ PDRIVER_OBJECT _DriverObject
     )
 {
     UNREFERENCED_PARAMETER(_DriverObject);
diff --git a/src/xencrsh/driver=2Eh b/src/xencrsh/driver=2Eh
index 4f9cbc5=2E=2Ea0043ca 100644
--- a/src/xencrsh/driver=2Eh
+++ b/src/xencrsh/driver=2Eh
@@ -71,18 +71,18 @@
 // Fdo Device Extension management
 VOID
 DriverLinkFdo(
-    IN  PXENVBD_FDO             Fdo
+    _In_ PXENVBD_FDO    Fdo
     );
=20
 VOID
 DriverUnlinkFdo(
-    IN  PXENVBD_FDO             Fdo
+    _In_ PXENVBD_FDO    Fdo
     );
=20
 // Global Functions
 PCHAR
 DriverFormat(
-    IN  PCHAR                   Format,
+    _In_ PCHAR  Format,
     =2E=2E=2E
     );
=20
diff --git a/src/xencrsh/evtchn=2Ec b/src/xencrsh/evtchn=2Ec
index 34a9b28=2E=2E09565d1 100644
--- a/src/xencrsh/evtchn=2Ec
+++ b/src/xencrsh/evtchn=2Ec
@@ -54,8 +54,8 @@
=20
 static FORCEINLINE LONG_PTR
 EventChannelOp(
-    IN  ULONG   Command,
-    IN  PVOID   Argument
+    _In_ ULONG  Command,
+    _In_ PVOID  Argument
     )
 {
     return Hypercall2(LONG_PTR, event_channel_op, Command, Argument);
@@ -63,7 +63,7 @@ EventChannelOp(
=20
 NTSTATUS
 EventChannelSend(
-    IN  ULONG           LocalPort
+    _In_ ULONG          LocalPort
     )
 {
     struct evtchn_send  op;
@@ -115,9 +115,9 @@ fail1:
=20
 NTSTATUS
 EventChannelBindInterDomain(
-    IN  USHORT                      RemoteDomain,
-    IN  ULONG                       RemotePort,
-    OUT PULONG                      LocalPort
+    _In_ USHORT                     RemoteDomain,
+    _In_ ULONG                      RemotePort,
+    _Out_ PULONG                    LocalPort
     )
 {
     struct evtchn_bind_interdomain  op;
@@ -146,9 +146,9 @@ fail1:
=20
 NTSTATUS
 EventChannelQueryInterDomain(
-    IN  ULONG               LocalPort,
-    OUT PUSHORT             RemoteDomain,
-    OUT PULONG              RemotePort
+    _In_ ULONG              LocalPort,
+    _Out_ PUSHORT           RemoteDomain,
+    _Out_ PULONG            RemotePort
     )
 {
     struct evtchn_status    op;
@@ -185,8 +185,8 @@ fail1:
=20
 NTSTATUS
 EventChannelAllocate(
-    IN  ULONG           Domain,
-    OUT PULONG          LocalPort
+    _In_ ULONG                  Domain,
+    _Out_ PULONG                LocalPort
     )
 {
     struct evtchn_alloc_unbound op;
@@ -215,7 +215,7 @@ fail1:
=20
 NTSTATUS
 EventChannelClose(
-    IN  ULONG           LocalPort
+    _In_ ULONG          LocalPort
     )
 {
     struct evtchn_close op;
diff --git a/src/xencrsh/evtchn=2Eh b/src/xencrsh/evtchn=2Eh
index 9ccfde3=2E=2E38b56c0 100644
--- a/src/xencrsh/evtchn=2Eh
+++ b/src/xencrsh/evtchn=2Eh
@@ -39,7 +39,7 @@
=20
 NTSTATUS
 EventChannelSend(
-    IN  ULONG           LocalPort
+    _In_ ULONG  LocalPort
     );
=20
 NTSTATUS
@@ -49,27 +49,27 @@ EventChannelReset(
=20
 NTSTATUS
 EventChannelBindInterDomain(
-    IN  USHORT          RemoteDomain,
-    IN  ULONG           RemotePort,
-    OUT PULONG          LocalPort
+    _In_ USHORT     RemoteDomain,
+    _In_ ULONG      RemotePort,
+    _Out_ PULONG    LocalPort
     );
=20
 NTSTATUS
 EventChannelQueryInterDomain(
-    IN  ULONG           LocalPort,
-    OUT PUSHORT         RemoteDomain,
-    OUT PULONG          RemotePort
+    _In_ ULONG      LocalPort,
+    _Out_ PUSHORT   RemoteDomain,
+    _Out_ PULONG    RemotePort
     );
=20
 NTSTATUS
 EventChannelAllocate(
-    IN  ULONG           Domain,
-    OUT PULONG          LocalPort
+    _In_ ULONG      Domain,
+    _Out_ PULONG    LocalPort
     );
=20
 NTSTATUS
 EventChannelClose(
-    IN  ULONG           LocalPort
+    _In_ ULONG  LocalPort
     );
=20
=20
diff --git a/src/xencrsh/fdo=2Ec b/src/xencrsh/fdo=2Ec
index 78027db=2E=2E79b57d1 100644
--- a/src/xencrsh/fdo=2Ec
+++ b/src/xencrsh/fdo=2Ec
@@ -61,7 +61,7 @@ struct _XENVBD_FDO {
 // Initialize, Start, Stop
 static FORCEINLINE PCHAR
 __Next(
-    IN  PCHAR                   Ptr
+    _In_ PCHAR  Ptr
     )
 {
     if (Ptr =3D=3D NULL)
@@ -117,8 +117,8 @@ fail1:
 }
 static BOOLEAN
 FdoGetFeatureFlag(
-    IN  PCHAR                   Path,
-    IN  PCHAR                   Feature
+    _In_ PCHAR  Path,
+    _In_ PCHAR  Feature
     )
 {
     BOOLEAN     Ret =3D FALSE;
@@ -138,13 +138,13 @@ FdoGetFeatureFlag(
 }
 static FORCEINLINE NTSTATUS
 FdoCreateTarget(
-    IN  PXENVBD_FDO             Fdo,
-    IN  PCHAR                   DeviceId,
-    IN  ULONG                   TargetId
+    _In_ PXENVBD_FDO    Fdo,
+    _In_ PCHAR          DeviceId,
+    _In_ ULONG          TargetId
     )
 {
-    NTSTATUS        Status;
-    PXENVBD_PDO     Pdo;
+    NTSTATUS            Status;
+    PXENVBD_PDO         Pdo;
=20
     LogTrace("=3D=3D=3D> %p, %s, %d\n", Fdo, DeviceId, TargetId);
=20
@@ -158,14 +158,14 @@ FdoCreateTarget(
 }
 static NTSTATUS
 FdoFindTarget(
-    IN  PXENVBD_FDO                 Fdo
+    _In_ PXENVBD_FDO    Fdo
     )
 {
-    NTSTATUS        Status;
-    ULONG           TargetId;
-    PCHAR           TargetPath;
-    PCHAR           Disk =3D NULL;
-    const ULONG     OperatingMode =3D DriverGetOperatingMode();
+    NTSTATUS            Status;
+    ULONG               TargetId;
+    PCHAR               TargetPath;
+    PCHAR               Disk =3D NULL;
+    const ULONG         OperatingMode =3D DriverGetOperatingMode();
=20
     LogTrace("=3D=3D=3D=3D>\n");
=20
@@ -213,10 +213,10 @@ done:
=20
 static FORCEINLINE BOOLEAN
 FdoInitialize(
-    IN  PXENVBD_FDO                 Fdo
+    _In_ PXENVBD_FDO    Fdo
     )
 {
-    NTSTATUS    Status;
+    NTSTATUS            Status;
=20
     LogTrace("=3D=3D=3D=3D>\n");
=20
@@ -264,7 +264,7 @@ fail:
=20
 VOID
 FdoTerminate(
-    IN  PXENVBD_FDO                 Fdo
+    _In_ PXENVBD_FDO    Fdo
     )
 {
     LogTrace("=3D=3D=3D=3D>\n");
@@ -292,7 +292,7 @@ FdoSizeofXenvbdFdo(
=20
 PXENVBD_PDO
 FdoGetPdo(
-    IN  PXENVBD_FDO                 Fdo
+    _In_ PXENVBD_FDO    Fdo
     )
 {
     return Fdo->Target;
@@ -303,8 +303,8 @@ FdoGetPdo(
=20
 FORCEINLINE VOID
 FdoCompleteSrb(
-    IN  PXENVBD_FDO                 Fdo,
-    IN  PSCSI_REQUEST_BLOCK         Srb
+    _In_ PXENVBD_FDO            Fdo,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
     StorPortNotification(RequestComplete, Fdo, Srb);
@@ -314,10 +314,10 @@ FdoCompleteSrb(
 // StorPort Methods
 BOOLEAN
 FdoResetBus(
-    IN  PXENVBD_FDO                 Fdo
+    _In_ PXENVBD_FDO    Fdo
     )
 {
-    PXENVBD_PDO     Pdo;
+    PXENVBD_PDO         Pdo;
=20
     LogTrace("=3D=3D=3D> (Irql=3D%d)\n", KeGetCurrentIrql());
=20
@@ -336,9 +336,9 @@ FdoResetBus(
=20
 SCSI_ADAPTER_CONTROL_STATUS
 FdoAdapterControl(
-    IN  PXENVBD_FDO                 Fdo,
-    IN  SCSI_ADAPTER_CONTROL_TYPE   ControlType,
-    IN  PVOID                       Parameters
+    _In_ PXENVBD_FDO                Fdo,
+    _In_ SCSI_ADAPTER_CONTROL_TYPE  ControlType,
+    _In_ PVOID                      Parameters
     )
 {
     LogTrace("%s =3D=3D=3D> (Irql=3D%d)\n", ScsiAdapterControlTypeName(Co=
ntrolType), KeGetCurrentIrql());
@@ -372,8 +372,8 @@ FdoAdapterControl(
=20
 ULONG
 FdoFindAdapter(
-    IN  PXENVBD_FDO                 Fdo,
-    IN OUT PPORT_CONFIGURATION_INFORMATION  ConfigInfo
+    _In_ PXENVBD_FDO                        Fdo,
+    _Inout_ PPORT_CONFIGURATION_INFORMATION ConfigInfo
     )
 {
     LogTrace("=3D=3D=3D> (Irql=3D%d)\n", KeGetCurrentIrql());
@@ -409,11 +409,11 @@ FdoFindAdapter(
=20
 BOOLEAN=20
 FdoBuildIo(
-    IN  PXENVBD_FDO                 Fdo,
-    IN  PSCSI_REQUEST_BLOCK         Srb
+    _In_ PXENVBD_FDO            Fdo,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
-    PXENVBD_SRBEXT  SrbExt =3D GetSrbExt(Srb);
+    PXENVBD_SRBEXT              SrbExt =3D GetSrbExt(Srb);
=20
     RtlZeroMemory(SrbExt, sizeof(XENVBD_SRBEXT));
     Srb->SrbStatus =3D SRB_STATUS_INVALID_REQUEST;
@@ -448,7 +448,7 @@ FdoBuildIo(
=20
 static FORCEINLINE PCHAR
 SrbFunctionName(
-    IN  UCHAR                       Func
+    _In_ UCHAR  Func
     )
 {
     switch (Func) {
@@ -463,12 +463,12 @@ SrbFunctionName(
 }
 BOOLEAN=20
 FdoStartIo(
-    IN  PXENVBD_FDO                 Fdo,
-    IN  PSCSI_REQUEST_BLOCK         Srb
+    _In_ PXENVBD_FDO            Fdo,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
-    PXENVBD_PDO Pdo =3D NULL;
-    BOOLEAN     CompleteSrb =3D TRUE;
+    PXENVBD_PDO                 Pdo =3D NULL;
+    BOOLEAN                     CompleteSrb =3D TRUE;
 =20
     if (Fdo->Target) {
         Pdo =3D Fdo->Target;
diff --git a/src/xencrsh/fdo=2Eh b/src/xencrsh/fdo=2Eh
index a3fc3fb=2E=2E2ecfb28 100644
--- a/src/xencrsh/fdo=2Eh
+++ b/src/xencrsh/fdo=2Eh
@@ -43,7 +43,7 @@ typedef struct _XENVBD_FDO XENVBD_FDO, *PXENVBD_FDO;
=20
 extern VOID
 FdoTerminate(
-    IN  PXENVBD_FDO                 Fdo
+    _In_ PXENVBD_FDO    Fdo
     );
=20
 // Query Methods
@@ -53,45 +53,45 @@ FdoSizeofXenvbdFdo(
=20
 extern PXENVBD_PDO
 FdoGetPdo(
-    IN  PXENVBD_FDO                 Fdo
+    _In_ PXENVBD_FDO    Fdo
     );
=20
 // SRB Methods
 extern VOID
 FdoCompleteSrb(
-    IN  PXENVBD_FDO                 Fdo,
-    IN  PSCSI_REQUEST_BLOCK         Srb
+    _In_ PXENVBD_FDO            Fdo,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     );
=20
 // StorPort Methods
 extern BOOLEAN
 FdoResetBus(
-    IN  PXENVBD_FDO                 Fdo
+    _In_ PXENVBD_FDO    Fdo
     );
=20
 extern SCSI_ADAPTER_CONTROL_STATUS
 FdoAdapterControl(
-    IN  PXENVBD_FDO                 Fdo,
-    IN  SCSI_ADAPTER_CONTROL_TYPE   ControlType,
-    IN  PVOID                       Parameters
+    _In_ PXENVBD_FDO                Fdo,
+    _In_ SCSI_ADAPTER_CONTROL_TYPE  ControlType,
+    _In_ PVOID                      Parameters
     );
=20
 extern ULONG
 FdoFindAdapter(
-    IN  PXENVBD_FDO                 Fdo,
-    IN OUT PPORT_CONFIGURATION_INFORMATION  ConfigInfo
+    _In_ PXENVBD_FDO                        Fdo,
+    _Inout_ PPORT_CONFIGURATION_INFORMATION ConfigInfo
     );
=20
 extern BOOLEAN=20
 FdoBuildIo(
-    IN  PXENVBD_FDO                 Fdo,
-    IN  PSCSI_REQUEST_BLOCK         Srb
+    _In_ PXENVBD_FDO            Fdo,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     );
=20
 extern BOOLEAN=20
 FdoStartIo(
-    IN  PXENVBD_FDO                 Fdo,
-    IN  PSCSI_REQUEST_BLOCK         Srb
+    _In_ PXENVBD_FDO            Fdo,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     );
=20
 #endif // _XENVBD_FDO_H
diff --git a/src/xencrsh/frontend=2Ec b/src/xencrsh/frontend=2Ec
index 0cb4dd6=2E=2E3a269a1 100644
--- a/src/xencrsh/frontend=2Ec
+++ b/src/xencrsh/frontend=2Ec
@@ -60,7 +60,7 @@ typedef enum _XENBUS_STATE {
=20
 static FORCEINLINE const PCHAR
 __XenbusStateName(
-    IN  XENBUS_STATE                        State
+    _In_ XENBUS_STATE   State
     )
 {
     switch (State) {
@@ -76,7 +76,7 @@ __XenbusStateName(
 }
 static FORCEINLINE const PCHAR
 __XenvbdStateName(
-    IN  XENVBD_STATE                        State
+    _In_ XENVBD_STATE   State
     )
 {
     switch (State) {
@@ -92,14 +92,14 @@ __XenvbdStateName(
 //=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D
 static FORCEINLINE PVOID
 __FrontendAlloc(
-    IN  ULONG                   Size
+    _In_ ULONG  Size
     )
 {
     return AustereAllocate(Size);
 }
 static FORCEINLINE VOID
 __FrontendFree(
-    IN  PVOID                   Buffer
+    _In_ PVOID  Buffer
     )
 {
     AustereFree(Buffer);
@@ -120,14 +120,14 @@ __WriteMemoryBarrier()
 }
 static FORCEINLINE BOOLEAN
 __HasUnconsumedResponses(
-    IN  PXENVBD_FRONTEND        Frontend
+    _In_ PXENVBD_FRONTEND   Frontend
     )
 {
     return (Frontend->SharedRing->rsp_prod - Frontend->FrontRing=2Ersp_co=
ns) > 0;
 }
 static FORCEINLINE BOOLEAN
 __FinalCheckForResponses(
-    IN  PXENVBD_FRONTEND        Frontend
+    _In_ PXENVBD_FRONTEND   Frontend
     )
 {
     if (__HasUnconsumedResponses(Frontend))
@@ -141,7 +141,7 @@ __FinalCheckForResponses(
 }
 static FORCEINLINE BOOLEAN
 __IsValidStatus(
-    IN  SHORT                   Status
+    _In_ SHORT  Status
     )
 {
     if (Status =3D=3D BLKIF_RSP_OKAY ||
@@ -152,15 +152,15 @@ __IsValidStatus(
 }
 static FORCEINLINE ULONG
 __Idx(
-    IN  ULONG   Index,
-    IN  ULONG   nr_ents
+    _In_ ULONG  Index,
+    _In_ ULONG  nr_ents
     )
 {
     return Index & (nr_ents - 1);
 }
 static FORCEINLINE VOID
 FrontendCompleteResponses(
-    IN  PXENVBD_FRONTEND        Frontend
+    _In_ PXENVBD_FRONTEND   Frontend
     )
 {
     for (;;) {
@@ -202,7 +202,7 @@ FrontendCompleteResponses(
=20
 VOID
 FrontendEvtchnCallback(
-    IN  PXENVBD_FRONTEND        Frontend
+    _In_ PXENVBD_FRONTEND   Frontend
     )
 {
     // complete responses
@@ -221,8 +221,8 @@ FrontendEvtchnCallback(
 // Ring Slots
 BOOLEAN
 FrontendCanSubmitRequest(
-    IN  PXENVBD_FRONTEND        Frontend,
-    IN  ULONG                   NumRequests
+    _In_ PXENVBD_FRONTEND   Frontend,
+    _In_ ULONG              NumRequests
     )
 {
     // RING_PROD_SLOTS_AVAIL(=2E=2E=2E)
@@ -234,12 +234,12 @@ FrontendCanSubmitRequest(
=20
 VOID
 FrontendInsertRequestOnRing(
-    IN  PXENVBD_FRONTEND        Frontend,
-    IN  PXENVBD_REQUEST         Request
+    _In_ PXENVBD_FRONTEND   Frontend,
+    _In_ PXENVBD_REQUEST    Request
     )
 {
-    ULONG               Index;
-    blkif_request_t*    RingReq;
+    ULONG                   Index;
+    blkif_request_t*        RingReq;
     //blkif_request_discard_t*    Discard;
=20
     RingReq =3D RING_GET_REQUEST(&Frontend->FrontRing, Frontend->FrontRin=
g=2Ereq_prod_pvt);
@@ -283,7 +283,7 @@ FrontendInsertRequestOnRing(
=20
 VOID
 FrontendPushRequestAndCheckNotify(
-    IN  PXENVBD_FRONTEND        Frontend
+    _In_ PXENVBD_FRONTEND   Frontend
     )
 {
     // RING_PUSH_REQUESTS_AND_CHECK_NOTIFY(=2E=2E)
@@ -308,17 +308,17 @@ FrontendPushRequestAndCheckNotify(
 extern PHYSICAL_ADDRESS MmGetPhysicalAddress(IN PVOID Buffer);
 static FORCEINLINE PFN_NUMBER
 __VirtToPfn(
-    IN  PVOID                   VirtAddr
+    _In_ PVOID          VirtAddr
     )
 {
-    PHYSICAL_ADDRESS PhysAddr =3D MmGetPhysicalAddress(VirtAddr);
+    PHYSICAL_ADDRESS    PhysAddr =3D MmGetPhysicalAddress(VirtAddr);
     return (PFN_NUMBER)(ULONG_PTR)(PhysAddr=2EQuadPart >> 12);
 }
 //=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D
 static FORCEINLINE ULONG
 __Min(
-    IN  ULONG                   A,
-    IN  ULONG                   B
+    _In_ ULONG  A,
+    _In_ ULONG  B
     )
 {
     if (A < B)  return A;
@@ -326,11 +326,11 @@ __Min(
 }
 static FORCEINLINE NTSTATUS
 __UpdateBackendPath(
-    IN  PXENVBD_FRONTEND        Frontend
+    _In_ PXENVBD_FRONTEND   Frontend
     )
 {
-    NTSTATUS    Status;
-    PCHAR       Path;
+    NTSTATUS                Status;
+    PCHAR                   Path;
=20
     if (Frontend->BackendPath) {
         LogTrace("<< %s\n", Frontend->BackendPath);
@@ -358,13 +358,13 @@ __UpdateBackendPath(
 }
 static FORCEINLINE NTSTATUS
 __ReadState(
-    IN  PXENVBD_FRONTEND        Frontend,
-    IN  PCHAR                   Path,
-    OUT PXENBUS_STATE           State
+    _In_ PXENVBD_FRONTEND   Frontend,
+    _In_ PCHAR              Path,
+    _Out_ PXENBUS_STATE     State
     )
 {
-    NTSTATUS        Status;
-    PCHAR           Buffer;
+    NTSTATUS                Status;
+    PCHAR                   Buffer;
=20
     UNREFERENCED_PARAMETER(Frontend);
=20
@@ -383,12 +383,12 @@ fail:
 }
 static FORCEINLINE NTSTATUS
 __PollState(
-    IN  PXENVBD_FRONTEND        Frontend,
-    IN OUT PXENBUS_STATE        State
+    _In_ PXENVBD_FRONTEND   Frontend,
+    _Inout_ PXENBUS_STATE   State
     )
 {
-    NTSTATUS        Status;
-    XENBUS_STATE    OldState =3D *State;
+    NTSTATUS                Status;
+    XENBUS_STATE            OldState =3D *State;
=20
     while (OldState =3D=3D *State) {
         Status =3D __ReadState(Frontend, Frontend->BackendPath, State);
@@ -407,19 +407,19 @@ fail:
 }
 static NTSTATUS
 __WaitState(
-    IN  PXENVBD_FRONTEND        Frontend,
-    IN OUT PXENBUS_STATE        State
+    _In_ PXENVBD_FRONTEND   Frontend,
+    _Inout_ PXENBUS_STATE   State
     )
 {
     return __PollState(Frontend, State);
 }
 static FORCEINLINE NTSTATUS
 ___SetState(
-    IN  PXENVBD_FRONTEND        Frontend,
-    IN  XENBUS_STATE            State
+    _In_ PXENVBD_FRONTEND   Frontend,
+    _In_ XENBUS_STATE       State
     )
 {
-    NTSTATUS    Status;
+    NTSTATUS                Status;
=20
     Status =3D StorePrintf(NULL, Frontend->FrontendPath,
                     "state", "%u", State);
@@ -431,10 +431,10 @@ ___SetState(
 }
 static FORCEINLINE NTSTATUS
 __WriteTargetPath(
-    IN  PXENVBD_FRONTEND        Frontend
+    _In_ PXENVBD_FRONTEND   Frontend
     )
 {
-    NTSTATUS    Status;
+    NTSTATUS                Status;
=20
     Status =3D StorePrintf(NULL, Frontend->TargetPath,=20
                         "frontend", "%s", Frontend->FrontendPath);
@@ -456,11 +456,11 @@ out:
 }
 static VOID
 __ReadFeatures(
-    IN  PXENVBD_FRONTEND        Frontend
+    _In_ PXENVBD_FRONTEND   Frontend
     )
 {
-    NTSTATUS    Status;
-    PCHAR       Buffer;
+    NTSTATUS                Status;
+    PCHAR                   Buffer;
=20
     Status =3D StoreRead(NULL, Frontend->BackendPath,
                         "feature-barrier", &Buffer);
@@ -497,12 +497,12 @@ __ReadFeatures(
 }
 static VOID
 __ReadDiskInfo(
-    IN  PXENVBD_FRONTEND        Frontend
+    _In_ PXENVBD_FRONTEND   Frontend
     )
 {
-    NTSTATUS    Status;
-    PCHAR       Buffer;
-    BOOLEAN     Updated =3D FALSE;
+    NTSTATUS                Status;
+    PCHAR                   Buffer;
+    BOOLEAN                 Updated =3D FALSE;
=20
     Status =3D StoreRead(NULL, Frontend->BackendPath,=20
                         "info", &Buffer);
@@ -556,12 +556,12 @@ __ReadDiskInfo(
 }
 static FORCEINLINE NTSTATUS
 __AllocRing(
-    IN  PXENVBD_FRONTEND        Frontend
+    _In_ PXENVBD_FRONTEND   Frontend
     )
 {
-    NTSTATUS    Status;
-    ULONG       RingRef;
-    PFN_NUMBER  Pfn;
+    NTSTATUS                Status;
+    ULONG                   RingRef;
+    PFN_NUMBER              Pfn;
=20
     // SharedRing
     ASSERT3P(Frontend->SharedRing, =3D=3D, NULL);
@@ -615,7 +615,7 @@ fail1:
 }
 static FORCEINLINE VOID
 __FreeRing(
-    IN  PXENVBD_FRONTEND        Frontend
+    _In_ PXENVBD_FRONTEND   Frontend
     )
 {
     // EVTCHN
@@ -640,10 +640,10 @@ __FreeRing(
 }
 static NTSTATUS
 __WriteRing(
-    IN  PXENVBD_FRONTEND        Frontend
+    _In_ PXENVBD_FRONTEND   Frontend
     )
 {
-    NTSTATUS    Status;
+    NTSTATUS                Status;
    =20
     for (;;) {
         PVOID                       Transaction;
@@ -698,11 +698,11 @@ abort:
 //=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D
 static NTSTATUS
 FrontendClose(
-    IN  PXENVBD_FRONTEND        Frontend
+    _In_ PXENVBD_FRONTEND   Frontend
     )
 {
-    NTSTATUS        Status;
-    XENBUS_STATE    BackendState;
+    NTSTATUS                Status;
+    XENBUS_STATE            BackendState;
=20
     // get/update backend path
     Status =3D __UpdateBackendPath(Frontend);
@@ -774,11 +774,11 @@ fail1:
 }
 static NTSTATUS
 FrontendPrepare(
-    IN  PXENVBD_FRONTEND        Frontend
+    _In_ PXENVBD_FRONTEND   Frontend
     )
 {
-    NTSTATUS        Status;
-    XENBUS_STATE    BackendState;
+    NTSTATUS                Status;
+    XENBUS_STATE            BackendState;
=20
     // ASSERT(Backend : CLOSED)
     //__AssertBackendState(Frontend, XENBUS_STATE_CLOSED);
@@ -825,11 +825,11 @@ fail1:
 }
 static NTSTATUS
 FrontendConnect(
-    IN  PXENVBD_FRONTEND        Frontend
+    _In_ PXENVBD_FRONTEND   Frontend
     )
 {
-    NTSTATUS        Status;
-    XENBUS_STATE    BackendState;
+    NTSTATUS                Status;
+    XENBUS_STATE            BackendState;
=20
     // ASSERT(Backend: INITWAIT)
     //__AssertBackendState(Frontend, XENBUS_STATE_INITWAIT);
@@ -889,7 +889,7 @@ fail1:
 }
 static FORCEINLINE VOID
 FrontendDisconnect(
-    IN  PXENVBD_FRONTEND        Frontend
+    _In_ PXENVBD_FRONTEND   Frontend
     )
 {
     // Free Ring, Close Evtchn, Gnttab unmap
@@ -897,14 +897,14 @@ FrontendDisconnect(
 }
 static FORCEINLINE VOID
 FrontendEnable(
-    IN  PXENVBD_FRONTEND        Frontend
+    _In_ PXENVBD_FRONTEND   Frontend
     )
 {
     Frontend->Connected =3D TRUE;
 }
 static FORCEINLINE VOID
 FrontendDisable(
-    IN  PXENVBD_FRONTEND        Frontend
+    _In_ PXENVBD_FRONTEND   Frontend
     )
 {
     Frontend->Connected =3D FALSE;
@@ -913,10 +913,10 @@ FrontendDisable(
 // Init/Term
 NTSTATUS
 FrontendCreate(
-    IN  PXENVBD_FRONTEND        Frontend,
-    IN  PCHAR                   DeviceId,=20
-    IN  ULONG                   TargetId,=20
-    IN  PXENVBD_PDO             Pdo
+    _In_ PXENVBD_FRONTEND   Frontend,
+    _In_ PCHAR              DeviceId,
+    _In_ ULONG              TargetId,
+    _In_ PXENVBD_PDO        Pdo
     )
 {
     LogTrace("Target[%d] @ (%d) =3D=3D=3D=3D=3D>\n", TargetId, KeGetCurre=
ntIrql());
@@ -950,10 +950,10 @@ fail1:
=20
 VOID
 FrontendDestroy(
-    IN  PXENVBD_FRONTEND        Frontend
+    _In_ PXENVBD_FRONTEND   Frontend
     )
 {
-    const ULONG TargetId =3D Frontend->TargetId;
+    const ULONG             TargetId =3D Frontend->TargetId;
=20
     LogTrace("Target[%d] @ (%d) =3D=3D=3D=3D=3D>\n", TargetId, KeGetCurre=
ntIrql());
=20
@@ -979,13 +979,13 @@ FrontendDestroy(
=20
 NTSTATUS
 FrontendSetState(
-    IN  PXENVBD_FRONTEND        Frontend,
-    IN  XENVBD_STATE            State
+    _In_ PXENVBD_FRONTEND   Frontend,
+    _In_ XENVBD_STATE       State
     )
 {
-    NTSTATUS    Status;
-    const ULONG TargetId =3D Frontend->TargetId;
-    BOOLEAN     Failed =3D FALSE;
+    NTSTATUS                Status;
+    const ULONG             TargetId =3D Frontend->TargetId;
+    BOOLEAN                 Failed =3D FALSE;
=20
     LogTrace("Target[%d] @ (%d) =3D=3D=3D=3D=3D>\n", TargetId, KeGetCurre=
ntIrql());
     LogVerbose("Target[%d] : %s ----> %s\n", TargetId, __XenvbdStateName(=
Frontend->State),=20
@@ -1115,13 +1115,13 @@ FrontendSetState(
=20
 static FORCEINLINE NTSTATUS
 __WaitState2(
-    IN  PCHAR                   BackendPath,
-    IN OUT PXENBUS_STATE        State
+    _In_ PCHAR              BackendPath,
+    _Inout_ PXENBUS_STATE   State
     )
 {
-    NTSTATUS        Status;
-    PCHAR           Buffer;
-    XENBUS_STATE    OldState =3D *State;
+    NTSTATUS                Status;
+    PCHAR                   Buffer;
+    XENBUS_STATE            OldState =3D *State;
=20
     while (OldState =3D=3D *State) {
         Status =3D StoreRead(NULL, BackendPath, "state", &Buffer);
@@ -1142,11 +1142,11 @@ fail:
 }
 static FORCEINLINE NTSTATUS
 ___SetState2(
-    IN  PCHAR                   FrontendPath,
-    IN  XENBUS_STATE            State
+    _In_ PCHAR          FrontendPath,
+    _In_ XENBUS_STATE   State
     )
 {
-    NTSTATUS    Status;
+    NTSTATUS            Status;
=20
     Status =3D StorePrintf(NULL, FrontendPath,
                     "state", "%u", State);
@@ -1158,8 +1158,8 @@ ___SetState2(
 }
 NTSTATUS
 FrontendCloseTarget(
-    IN  PCHAR                   FrontendPath,
-    IN  PCHAR                   BackendPath
+    _In_ PCHAR      FrontendPath,
+    _In_ PCHAR      BackendPath
     )
 {
     NTSTATUS        Status;
diff --git a/src/xencrsh/frontend=2Eh b/src/xencrsh/frontend=2Eh
index 5b0030a=2E=2Eaf2c71a 100644
--- a/src/xencrsh/frontend=2Eh
+++ b/src/xencrsh/frontend=2Eh
@@ -94,50 +94,50 @@ typedef struct _XENVBD_FRONTEND {
 // Init/Term
 extern NTSTATUS
 FrontendCreate(
-    IN  PXENVBD_FRONTEND        Frontend,
-    IN  PCHAR                   DeviceId,=20
-    IN  ULONG                   TargetId,=20
-    IN  PXENVBD_PDO             Pdo
+    _In_ PXENVBD_FRONTEND   Frontend,
+    _In_ PCHAR              DeviceId,
+    _In_ ULONG              TargetId,
+    _In_ PXENVBD_PDO        Pdo
     );
=20
 extern VOID
 FrontendDestroy(
-    IN  PXENVBD_FRONTEND        Frontend
+    _In_ PXENVBD_FRONTEND   Frontend
     );
=20
 extern NTSTATUS
 FrontendSetState(
-    IN  PXENVBD_FRONTEND        Frontend,
-    IN  XENVBD_STATE            State
+    _In_ PXENVBD_FRONTEND   Frontend,
+    _In_ XENVBD_STATE       State
     );
=20
 extern NTSTATUS
 FrontendCloseTarget(
-    IN  PCHAR                   FrontendPath,
-    IN  PCHAR                   BackendPath
+    _In_ PCHAR  FrontendPath,
+    _In_ PCHAR  BackendPath
     );
=20
 // Ring Slots
 extern VOID
 FrontendEvtchnCallback(
-    IN  PXENVBD_FRONTEND        Frontend
+    _In_ PXENVBD_FRONTEND   Frontend
     );
=20
 extern BOOLEAN
 FrontendCanSubmitRequest(
-    IN  PXENVBD_FRONTEND        Frontend,
-    IN  ULONG                   NumRequests
+    _In_ PXENVBD_FRONTEND   Frontend,
+    _In_ ULONG              NumRequests
     );
=20
 extern VOID
 FrontendInsertRequestOnRing(
-    IN  PXENVBD_FRONTEND        Frontend,
-    IN  PXENVBD_REQUEST         Request
+    _In_ PXENVBD_FRONTEND   Frontend,
+    _In_ PXENVBD_REQUEST    Request
     );
=20
 extern VOID
 FrontendPushRequestAndCheckNotify(
-    IN  PXENVBD_FRONTEND        Frontend
+    _In_ PXENVBD_FRONTEND   Frontend
     );
=20
 #endif // _XENVBD_FRONTEND_H
diff --git a/src/xencrsh/gnttab=2Ec b/src/xencrsh/gnttab=2Ec
index 23010aa=2E=2Ed68a16e 100644
--- a/src/xencrsh/gnttab=2Ec
+++ b/src/xencrsh/gnttab=2Ec
@@ -91,16 +91,16 @@ static UCHAR __GnttabSection[(GNTTAB_MAXIMUM_FRAME_COU=
NT + 1) * PAGE_SIZE];
 extern PHYSICAL_ADDRESS MmGetPhysicalAddress(IN PVOID Buffer);
 static FORCEINLINE PFN_NUMBER
 __VirtToPfn(
-    IN  PVOID                   VirtAddr
+    _In_ PVOID          VirtAddr
     )
 {
-    PHYSICAL_ADDRESS PhysAddr =3D MmGetPhysicalAddress(VirtAddr);
+    PHYSICAL_ADDRESS    PhysAddr =3D MmGetPhysicalAddress(VirtAddr);
     return (PFN_NUMBER)(ULONG_PTR)(PhysAddr=2EQuadPart >> PAGE_SHIFT);
 }
=20
 NTSTATUS
 GnttabGet(
-    OUT PULONG                      Reference
+    _Out_ PULONG                    Reference
     )
 {
     PGNTTAB_REFERENCE_DESCRIPTOR    Descriptor;
@@ -127,7 +127,7 @@ gnttab_full:
=20
 VOID
 GnttabPut(
-    IN  ULONG                       Reference
+    _In_ ULONG                      Reference
     )
 {
     PGNTTAB_REFERENCE_DESCRIPTOR    Descriptor;
@@ -147,10 +147,10 @@ GnttabPut(
=20
 VOID
 GnttabPermitForeignAccess(
-    IN  ULONG                       Reference,
-    IN  USHORT                      Domain,
-    IN  PFN_NUMBER                  Frame,
-    IN  BOOLEAN                     ReadOnly
+    _In_ ULONG                      Reference,
+    _In_ USHORT                     Domain,
+    _In_ PFN_NUMBER                 Frame,
+    _In_ BOOLEAN                    ReadOnly
     )
 {
     PGNTTAB_REFERENCE_DESCRIPTOR    Descriptor;
@@ -176,7 +176,7 @@ GnttabPermitForeignAccess(
=20
 VOID
 GnttabRevokeForeignAccess(
-    IN  ULONG                       Reference
+    _In_ ULONG                      Reference
     )
 {
     grant_entry_v1_t                *Entry;
@@ -213,8 +213,8 @@ GnttabRevokeForeignAccess(
=20
 static FORCEINLINE PVOID
 __Round(
-    IN  PVOID               Buffer,
-    IN  ULONG               RoundTo
+    _In_ PVOID  Buffer,
+    _In_ ULONG  RoundTo
     )
 {
     // round buffer to (normally PAGE_SIZE) boundary
diff --git a/src/xencrsh/gnttab=2Eh b/src/xencrsh/gnttab=2Eh
index 72350ed=2E=2E456162f 100644
--- a/src/xencrsh/gnttab=2Eh
+++ b/src/xencrsh/gnttab=2Eh
@@ -44,25 +44,25 @@ GnttabTerminate();
=20
 NTSTATUS
 GnttabGet(
-    OUT PULONG                      Reference
+    _Out_ PULONG    Reference
     );
=20
 VOID
 GnttabPut(
-    IN  ULONG                       Reference
+    _In_ ULONG  Reference
     );
=20
 VOID
 GnttabPermitForeignAccess(
-    IN  ULONG                       Reference,
-    IN  USHORT                      Domain,
-    IN  PFN_NUMBER                  Frame,
-    IN  BOOLEAN                     ReadOnly
+    _In_ ULONG      Reference,
+    _In_ USHORT     Domain,
+    _In_ PFN_NUMBER Frame,
+    _In_ BOOLEAN    ReadOnly
     );
=20
 VOID
 GnttabRevokeForeignAccess(
-    IN  ULONG                       Reference
+    _In_ ULONG  Reference
     );
=20
 #endif // _XENVBD_GNTTAB_H
diff --git a/src/xencrsh/hvm=2Ec b/src/xencrsh/hvm=2Ec
index 82230ef=2E=2Ef1b8c23 100644
--- a/src/xencrsh/hvm=2Ec
+++ b/src/xencrsh/hvm=2Ec
@@ -60,12 +60,12 @@ extern PHYSICAL_ADDRESS MmGetPhysicalAddress(IN PVOID =
 BaseAddress);
=20
 static FORCEINLINE NTSTATUS
 MemoryOp(
-    IN  ULONG       Command,
-    IN  PVOID       Argument
+    _In_ ULONG  Command,
+    _In_ PVOID  Argument
     )
 {
-    LONG_PTR ret;
-    NTSTATUS Status;
+    LONG_PTR    ret;
+    NTSTATUS    Status;
=20
     ret =3D Hypercall2(LONG_PTR, memory_op, Command, Argument);
     if (ret < 0) {
@@ -151,12 +151,12 @@ HvmTerminate()
=20
 NTSTATUS
 HvmAddToPhysMap(
-    IN  PFN_NUMBER      Pfn,
-    IN  ULONG           Space,
-    IN  ULONG           Offset
+    _In_ PFN_NUMBER             Pfn,
+    _In_ ULONG                  Space,
+    _In_ ULONG                  Offset
     )
 {
-    struct xen_add_to_physmap xatp;
+    struct xen_add_to_physmap   xatp;
=20
 #ifdef AMD64
     ASSERT3U(Pfn >> 32, =3D=3D, 0);
@@ -172,8 +172,8 @@ HvmAddToPhysMap(
=20
 static FORCEINLINE ULONG_PTR
 HvmOp(
-    IN  ULONG   Command,
-    IN  PVOID   Argument
+    _In_ ULONG  Command,
+    _In_ PVOID  Argument
     )
 {
     return Hypercall2(ULONG_PTR, hvm_op, Command, Argument);
@@ -181,8 +181,8 @@ HvmOp(
=20
 NTSTATUS
 HvmGetParameter(
-    IN  ULONG               Param,
-    OUT PULONGLONG          Value
+    _In_ ULONG              Param,
+    _Out_ PULONGLONG        Value
     )
 {
     struct xen_hvm_param    op;
@@ -217,8 +217,8 @@ fail1:
=20
 NTSTATUS
 HvmSetParameter(
-    IN  ULONG               Param,
-    IN  ULONGLONG           Value
+    _In_ ULONG              Param,
+    _In_ ULONGLONG          Value
     )
 {
     struct xen_hvm_param    op;
@@ -245,13 +245,13 @@ fail1:
=20
 NTSTATUS
 HvmGetMemoryType(
-    IN  PFN_NUMBER              Pfn,
-    OUT ULONG                   *Type
+    _In_ PFN_NUMBER             Pfn,
+    _Out_ ULONG                 *Type
     )
 {
     struct xen_hvm_get_mem_type op;
-    LONG_PTR                rc;
-    NTSTATUS                status;
+    LONG_PTR                    rc;
+    NTSTATUS                    status;
=20
     RtlZeroMemory(&op, sizeof(struct xen_hvm_get_mem_type));
=20
diff --git a/src/xencrsh/hvm=2Eh b/src/xencrsh/hvm=2Eh
index ceae249=2E=2Eb86ae16 100644
--- a/src/xencrsh/hvm=2Eh
+++ b/src/xencrsh/hvm=2Eh
@@ -43,27 +43,27 @@ HvmTerminate();
=20
 NTSTATUS
 HvmAddToPhysMap(
-    IN  PFN_NUMBER      Pfn,
-    IN  ULONG           Space,
-    IN  ULONG           Offset
+    _In_ PFN_NUMBER Pfn,
+    _In_ ULONG      Space,
+    _In_ ULONG      Offset
     );
=20
 NTSTATUS
 HvmGetParameter(
-    IN  ULONG           Param,
-    OUT PULONGLONG      Value
+    _In_ ULONG          Param,
+    _Out_ PULONGLONG    Value
     );
=20
 NTSTATUS
 HvmSetParameter(
-    IN  ULONG           Param,
-    IN  ULONGLONG       Value
+    _In_ ULONG      Param,
+    _In_ ULONGLONG  Value
     );
=20
 NTSTATUS
 HvmGetMemoryType(
-    IN  PFN_NUMBER      Pfn,
-    OUT ULONG           *Type
+    _In_ PFN_NUMBER Pfn,
+    _Out_ ULONG     *Type
     );
=20
 #endif // _XENVBD_HVM_H
diff --git a/src/xencrsh/hypercall_stub=2Ec b/src/xencrsh/hypercall_stub=
=2Ec
index 5183f58=2E=2Ef804d26 100644
--- a/src/xencrsh/hypercall_stub=2Ec
+++ b/src/xencrsh/hypercall_stub=2Ec
@@ -91,14 +91,14 @@ static HYPERCALL_INSTRUCTION    HypercallInstruction
=20
 static FORCEINLINE VOID
 __CpuId(
-    IN  ULONG   Leaf,
-    OUT PULONG  EAX OPTIONAL,
-    OUT PULONG  EBX OPTIONAL,
-    OUT PULONG  ECX OPTIONAL,
-    OUT PULONG  EDX OPTIONAL
+    _In_ ULONG          Leaf,
+    _Out_opt_ PULONG    EAX,
+    _Out_opt_ PULONG    EBX,
+    _Out_opt_ PULONG    ECX,
+    _Out_opt_ PULONG    EDX
     )
 {
-    int         Value[4] =3D {0};
+    int                 Value[4] =3D {0};
=20
     __cpuid(Value, Leaf);
=20
diff --git a/src/xencrsh/log=2Ec b/src/xencrsh/log=2Ec
index 5d3fcc0=2E=2E43d5b0b 100644
--- a/src/xencrsh/log=2Ec
+++ b/src/xencrsh/log=2Ec
@@ -40,7 +40,7 @@ static PVOID Port12 =3D ((PVOID)(ULONG_PTR)0x12);
=20
 static DECLSPEC_NOINLINE VOID
 LogQemuPut(
-    IN  CHAR        Char
+    _In_ CHAR   Char
     )
 {
     WRITE_PORT_UCHAR(Port12, (UCHAR)Char);
@@ -48,10 +48,10 @@ LogQemuPut(
=20
 static DECLSPEC_NOINLINE PCHAR
 LogFormatNumber(
-    IN  PCHAR       Buffer,
-    IN  ULONGLONG   Value,
-    IN  UCHAR       Base,
-    IN  BOOLEAN     UpperCase
+    _In_ PCHAR      Buffer,
+    _In_ ULONGLONG  Value,
+    _In_ UCHAR      Base,
+    _In_ BOOLEAN    UpperCase
     )
 {
     ULONGLONG       Next =3D Value / Base;
@@ -108,9 +108,9 @@ LogFormatNumber(
=20
 static DECLSPEC_NOINLINE VOID
 LogVPrintf(
-    IN  VOID        (*Put)(CHAR),
-    IN  const CHAR  *Format,
-    IN  va_list     Arguments
+    _In_ VOID       (*Put)(CHAR),
+    _In_ const CHAR *Format,
+    _In_ va_list    Arguments
     )
 {
     CHAR            Character;
@@ -221,12 +221,12 @@ LogVPrintf(
=20
 static DECLSPEC_NOINLINE VOID
 LogPrintf(
-    IN  VOID        (*Put)(CHAR),
-    IN  const CHAR  *Format,
+    _In_ VOID       (*Put)(CHAR),
+    _In_ const CHAR *Format,
     =2E=2E=2E
     )
 {
-    va_list Args;
+    va_list         Args;
=20
     va_start(Args, Format);
     LogVPrintf(Put, Format, Args);
@@ -246,11 +246,11 @@ __Mode()
=20
 static FORCEINLINE VOID
 LogVDebug(
-    IN  ULONG       Level,
-    IN  const CHAR  *Module,
-    IN  const CHAR  *Function,
-    IN  const CHAR  *Format,
-    IN  va_list     Args
+    _In_ ULONG      Level,
+    _In_ const CHAR *Module,
+    _In_ const CHAR *Function,
+    _In_ const CHAR *Format,
+    _In_ va_list    Args
     )
 {
     static CHAR     Buffer[256];
@@ -276,9 +276,9 @@ LogVDebug(
=20
 void
 __LogMessage(
-    IN  ULONG       Level,
-    IN  const char* Function,
-    IN  const char* Format,
+    _In_ ULONG      Level,
+    _In_ const char *Function,
+    _In_ const char *Format,
     =2E=2E=2E
     )
 {
diff --git a/src/xencrsh/log=2Eh b/src/xencrsh/log=2Eh
index d638371=2E=2Ef2cc918 100644
--- a/src/xencrsh/log=2Eh
+++ b/src/xencrsh/log=2Eh
@@ -40,9 +40,9 @@
=20
 extern void
 __LogMessage(
-    IN  ULONG       Level,
-    IN  const char* Func,
-    IN  const char* Format,
+    _In_ ULONG      Level,
+    _In_ const char *Func,
+    _In_ const char *Format,
     =2E=2E=2E
     );
=20
diff --git a/src/xencrsh/pdo=2Ec b/src/xencrsh/pdo=2Ec
index 0335205=2E=2E14eca16 100644
--- a/src/xencrsh/pdo=2Ec
+++ b/src/xencrsh/pdo=2Ec
@@ -88,14 +88,14 @@ struct _XENVBD_PDO {
 //=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D
 static FORCEINLINE PVOID
 __PdoAlloc(
-    IN  ULONG                   Size
+    _In_ ULONG  Size
     )
 {
     return AustereAllocate(Size);
 }
 static FORCEINLINE VOID
 __PdoFree(
-    IN  PVOID                   Buffer
+    _In_ PVOID  Buffer
     )
 {
     AustereFree(Buffer);
@@ -105,14 +105,14 @@ __PdoFree(
 // Creation/Deletion
 NTSTATUS
 PdoCreate(
-    IN  PXENVBD_FDO             Fdo,
-    IN  PCHAR                   DeviceId,
-    IN  ULONG                   TargetId,
-    OUT PXENVBD_PDO*            _Pdo
+    _In_ PXENVBD_FDO        Fdo,
+    _In_ PCHAR              DeviceId,
+    _In_ ULONG              TargetId,
+    _Outptr_ PXENVBD_PDO    *_Pdo
     )
 {
-    PXENVBD_PDO         Pdo;
-    NTSTATUS            Status;
+    PXENVBD_PDO             Pdo;
+    NTSTATUS                Status;
=20
     Status =3D STATUS_INSUFFICIENT_RESOURCES;
     Pdo =3D __PdoAlloc(sizeof(XENVBD_PDO));
@@ -136,7 +136,7 @@ fail1:
=20
 VOID
 PdoDestroy(
-    IN  PXENVBD_PDO             Pdo
+    _In_ PXENVBD_PDO    Pdo
     )
 {
     LARGE_INTEGER       Timeout;
@@ -156,7 +156,7 @@ PdoDestroy(
=20
 DECLSPEC_NOINLINE VOID
 PdoD3ToD0(
-    IN  PXENVBD_PDO             Pdo
+    _In_ PXENVBD_PDO    Pdo
     )
 {
     LogTrace("Target[%d] =3D=3D=3D=3D=3D> (Irql=3D%d)\n", Pdo->Frontend=
=2ETargetId, KeGetCurrentIrql());
@@ -169,7 +169,7 @@ PdoD3ToD0(
=20
 DECLSPEC_NOINLINE VOID
 PdoD0ToD3(
-    IN  PXENVBD_PDO             Pdo
+    _In_ PXENVBD_PDO    Pdo
     )
 {
     LogTrace("Target[%d] =3D=3D=3D=3D=3D> (Irql=3D%d)\n", Pdo->Frontend=
=2ETargetId, KeGetCurrentIrql());
@@ -185,7 +185,7 @@ PdoD0ToD3(
 // Reference Counting
 VOID
 PdoReference(
-    IN  PXENVBD_PDO             Pdo
+    _In_ PXENVBD_PDO    Pdo
     )
 {
     if (Pdo)
@@ -194,7 +194,7 @@ PdoReference(
=20
 VOID
 PdoDereference(
-    IN  PXENVBD_PDO             Pdo
+    _In_ PXENVBD_PDO    Pdo
     )
 {
     if (Pdo)
@@ -206,7 +206,7 @@ PdoDereference(
=20
 ULONG
 PdoSectorSize(
-    IN  PXENVBD_PDO             Pdo
+    _In_ PXENVBD_PDO    Pdo
     )
 {
     ASSERT3U(Pdo->Frontend=2ESectorSize, !=3D, 0);
@@ -217,11 +217,11 @@ PdoSectorSize(
 // REQUEST related
 static VOID
 __CleanupRequest(
-    IN  PXENVBD_REQUEST         Request,
-    IN  BOOLEAN                 CopyOut
+    _In_ PXENVBD_REQUEST    Request,
+    _In_ BOOLEAN            CopyOut
     )
 {
-    ULONG               Index;
+    ULONG                   Index;
=20
     for (Index =3D 0; Index < Request->NrSegments; ++Index) {
         // ungrant request
@@ -250,11 +250,11 @@ __CleanupRequest(
 }
 static VOID
 __CleanupSrb(
-    IN  PSCSI_REQUEST_BLOCK     Srb
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
-    PXENVBD_SRBEXT      SrbExt =3D GetSrbExt(Srb);
-    ULONG               Index;
+    PXENVBD_SRBEXT              SrbExt =3D GetSrbExt(Srb);
+    ULONG                       Index;
=20
     for (Index =3D 0; Index < SrbExt->NumRequests; ++Index) {
         PXENVBD_REQUEST Request =3D &SrbExt->Requests[Index];
@@ -266,8 +266,8 @@ __CleanupSrb(
 // Preparing Requests
 static FORCEINLINE VOID
 __UpdateStats(
-    __in PXENVBD_PDO             Pdo,
-    __in UCHAR                   Operation
+    _In_ PXENVBD_PDO    Pdo,
+    _In_ UCHAR          Operation
     )
 {
     switch (Operation) {
@@ -284,8 +284,8 @@ __UpdateStats(
 }
 static FORCEINLINE ULONG
 __Min(
-    IN  ULONG                   Val1,
-    IN  ULONG                   Val2
+    _In_ ULONG  Val1,
+    _In_ ULONG  Val2
     )
 {
     if (Val1 < Val2)
@@ -296,10 +296,10 @@ __Min(
 extern PHYSICAL_ADDRESS MmGetPhysicalAddress(IN PVOID Buffer);
 static FORCEINLINE PFN_NUMBER
 VirtToPfn(
-    IN  PVOID                   VirtAddr
+    _In_ PVOID          VirtAddr
     )
 {
-    PHYSICAL_ADDRESS PhysAddr =3D MmGetPhysicalAddress(VirtAddr);
+    PHYSICAL_ADDRESS    PhysAddr =3D MmGetPhysicalAddress(VirtAddr);
     return (PFN_NUMBER)(PhysAddr=2EQuadPart >> PAGE_SHIFT);
 }
 static FORCEINLINE ULONG __SectorSize(
@@ -311,9 +311,9 @@ static FORCEINLINE ULONG __SectorSize(
 }
 static FORCEINLINE VOID
 __Operation(
-    IN  UCHAR                   CdbOp,
-    OUT PUCHAR                  RingOp,
-    OUT PBOOLEAN                ReadOnly
+    _In_ UCHAR      CdbOp,
+    _Out_ PUCHAR    RingOp,
+    _Out_ PBOOLEAN  ReadOnly
     )
 {
     switch (CdbOp) {
@@ -331,17 +331,17 @@ __Operation(
 }
 static FORCEINLINE ULONG
 __Offset(
-    IN  STOR_PHYSICAL_ADDRESS   PhysAddr
+    _In_ STOR_PHYSICAL_ADDRESS  PhysAddr
     )
 {
     return (ULONG)(PhysAddr=2EQuadPart & (PAGE_SIZE - 1));
 }
 static FORCEINLINE VOID
 __GetPhysAddr(
-    IN  PSTOR_SCATTER_GATHER_LIST   SGList,
-    IN OUT PXENVBD_SG_INDEX         SGIndex,
-    OUT PSTOR_PHYSICAL_ADDRESS      SGPhysAddr,
-    OUT PULONG                      SGPhysLen
+    _In_ PSTOR_SCATTER_GATHER_LIST  SGList,
+    _Inout_ PXENVBD_SG_INDEX        SGIndex,
+    _Out_ PSTOR_PHYSICAL_ADDRESS    SGPhysAddr,
+    _Out_ PULONG                    SGPhysLen
     )
 {
     PSTOR_SCATTER_GATHER_ELEMENT    SGElement;
@@ -366,9 +366,9 @@ __GetPhysAddr(
 }
 static FORCEINLINE BOOLEAN
 __PhysAddrIsAligned(
-    IN  STOR_PHYSICAL_ADDRESS   PhysAddr,
-    IN  ULONG                   Length,
-    IN  ULONG                   Alignment
+    _In_ STOR_PHYSICAL_ADDRESS  PhysAddr,
+    _In_ ULONG                  Length,
+    _In_ ULONG                  Alignment
     )
 {
     if ((PhysAddr=2EQuadPart & Alignment) || (Length & Alignment))
@@ -378,23 +378,23 @@ __PhysAddrIsAligned(
 }
 static FORCEINLINE PFN_NUMBER
 __Pfn(
-    IN  STOR_PHYSICAL_ADDRESS   PhysAddr
+    _In_ STOR_PHYSICAL_ADDRESS  PhysAddr
     )
 {
     return (PFN_NUMBER)(PhysAddr=2EQuadPart >> PAGE_SHIFT);
 }
 static NTSTATUS
 PrepareReadWrite(
-    IN  PXENVBD_PDO             Pdo,
-    IN  PSCSI_REQUEST_BLOCK     Srb
+    _In_ PXENVBD_PDO            Pdo,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
-    NTSTATUS        Status;
-    ULONG           SectorsDone;
-    UCHAR           Operation;
-    BOOLEAN         ReadOnly;
-    ULONG           Index1, Index2;
-    ULONG           SectorsNow;
+    NTSTATUS                    Status;
+    ULONG                       SectorsDone;
+    UCHAR                       Operation;
+    BOOLEAN                     ReadOnly;
+    ULONG                       Index1, Index2;
+    ULONG                       SectorsNow;
=20
     PSTOR_SCATTER_GATHER_LIST   SGList;
     XENVBD_SG_INDEX             SGIndex;
@@ -557,13 +557,13 @@ done:
 }
 static VOID
 PrepareSyncCache(
-    IN  PXENVBD_PDO             Pdo,
-    IN  PSCSI_REQUEST_BLOCK     Srb
+    _In_ PXENVBD_PDO            Pdo,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
-    PXENVBD_SRBEXT          SrbExt =3D GetSrbExt(Srb);
-    PXENVBD_REQUEST         Request;
-    UCHAR                   Operation;
+    PXENVBD_SRBEXT              SrbExt =3D GetSrbExt(Srb);
+    PXENVBD_REQUEST             Request;
+    UCHAR                       Operation;
=20
     if (Pdo->Frontend=2EFeatureBarrier) {
         Operation =3D BLKIF_OP_WRITE_BARRIER;
@@ -596,7 +596,7 @@ PrepareSyncCache(
=20
 VOID
 PdoPrepareFresh(
-    IN  PXENVBD_PDO             Pdo
+    _In_ PXENVBD_PDO        Pdo
     )
 {
     PSCSI_REQUEST_BLOCK     Srb;
@@ -622,7 +622,7 @@ PdoPrepareFresh(
=20
 VOID
 PdoSubmitPrepared(
-    IN  PXENVBD_PDO             Pdo
+    _In_ PXENVBD_PDO    Pdo
     )
 {
     for (;;) {
@@ -654,7 +654,7 @@ PdoSubmitPrepared(
=20
 VOID
 PdoCompleteShutdown(
-    IN  PXENVBD_PDO             Pdo
+    _In_ PXENVBD_PDO        Pdo
     )
 {
     PSCSI_REQUEST_BLOCK     Srb;
@@ -675,13 +675,13 @@ PdoCompleteShutdown(
=20
 VOID
 PdoCompleteSubmittedRequest(
-    IN  PXENVBD_PDO             Pdo,
-    IN  PXENVBD_REQUEST         Request,
-    IN  SHORT                   Status
+    _In_ PXENVBD_PDO        Pdo,
+    _In_ PXENVBD_REQUEST    Request,
+    _In_ SHORT              Status
     )
 {
-    PSCSI_REQUEST_BLOCK Srb =3D Request->Srb;
-    PXENVBD_SRBEXT      SrbExt =3D GetSrbExt(Srb);
+    PSCSI_REQUEST_BLOCK     Srb =3D Request->Srb;
+    PXENVBD_SRBEXT          SrbExt =3D GetSrbExt(Srb);
=20
     if (Status !=3D BLKIF_RSP_OKAY) {
         LogError("Request 0x%p was failed by the backend with %d\n", Requ=
est, Status);
@@ -766,11 +766,11 @@ __ValidateSectors(
 }
 static BOOLEAN
 PdoReadWrite(
-    IN  PXENVBD_PDO            Pdo,
-    IN  PSCSI_REQUEST_BLOCK    Srb
+    _In_ PXENVBD_PDO            Pdo,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
-    NTSTATUS Status;
+    NTSTATUS                    Status;
=20
     if (!Pdo->Frontend=2EConnected) {
         LogTrace("Target[%d] : Not Ready, fail SRB\n", Pdo->Frontend=2ETa=
rgetId);
@@ -800,8 +800,8 @@ PdoReadWrite(
 }
 static FORCEINLINE BOOLEAN
 PdoSyncCache(
-    IN  PXENVBD_PDO             Pdo,
-    IN  PSCSI_REQUEST_BLOCK     Srb
+    _In_ PXENVBD_PDO            Pdo,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
     if (!Pdo->Frontend=2EConnected) {
@@ -829,14 +829,14 @@ PdoSyncCache(
 #define MODE_CACHING_PAGE_LENGTH 20
 static FORCEINLINE VOID
 PdoModeSense(
-    IN  PXENVBD_PDO             Pdo,
-    IN  PSCSI_REQUEST_BLOCK     Srb
+    _In_ PXENVBD_PDO            Pdo,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     )   =20
 {
-    PMODE_PARAMETER_HEADER  Header  =3D Srb->DataBuffer;
-    const UCHAR PageCode            =3D Cdb_PageCode(Srb);
-    ULONG LengthLeft                =3D Cdb_AllocationLength(Srb);
-    PVOID CurrentPage               =3D Srb->DataBuffer;
+    PMODE_PARAMETER_HEADER      Header =3D Srb->DataBuffer;
+    const UCHAR                 PageCode =3D Cdb_PageCode(Srb);
+    ULONG                       LengthLeft =3D Cdb_AllocationLength(Srb);
+    PVOID                       CurrentPage =3D Srb->DataBuffer;
=20
     UNREFERENCED_PARAMETER(Pdo);
=20
@@ -934,11 +934,11 @@ PdoModeSense(
 }
 static FORCEINLINE VOID
 PdoRequestSense(
-    IN  PXENVBD_PDO             Pdo,
-    IN  PSCSI_REQUEST_BLOCK     Srb
+    _In_ PXENVBD_PDO            Pdo,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
-    PSENSE_DATA         Sense =3D Srb->DataBuffer;
+    PSENSE_DATA                 Sense =3D Srb->DataBuffer;
=20
     UNREFERENCED_PARAMETER(Pdo);
=20
@@ -954,14 +954,14 @@ PdoRequestSense(
 }
 static FORCEINLINE VOID
 PdoReportLuns(
-    IN  PXENVBD_PDO             Pdo,
-    IN  PSCSI_REQUEST_BLOCK     Srb
+    _In_ PXENVBD_PDO            Pdo,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
-    ULONG           Length;
-    ULONG           Offset;
-    ULONG           AllocLength =3D Cdb_AllocationLength(Srb);
-    PUCHAR          Buffer =3D Srb->DataBuffer;
+    ULONG                       Length;
+    ULONG                       Offset;
+    ULONG                       AllocLength =3D Cdb_AllocationLength(Srb)=
;
+    PUCHAR                      Buffer =3D Srb->DataBuffer;
=20
     UNREFERENCED_PARAMETER(Pdo);
=20
@@ -989,15 +989,15 @@ PdoReportLuns(
 }
 static FORCEINLINE VOID
 PdoReadCapacity(
-    IN  PXENVBD_PDO             Pdo,
-    IN  PSCSI_REQUEST_BLOCK     Srb
+    _In_ PXENVBD_PDO            Pdo,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
-    PXENVBD_FRONTEND        Frontend =3D &Pdo->Frontend;
-    PREAD_CAPACITY_DATA     Capacity =3D Srb->DataBuffer;
-    ULONG64                 SectorCount;
-    ULONG                   SectorSize;
-    ULONG                   LastBlock;
+    PXENVBD_FRONTEND            Frontend =3D &Pdo->Frontend;
+    PREAD_CAPACITY_DATA         Capacity =3D Srb->DataBuffer;
+    ULONG64                     SectorCount;
+    ULONG                       SectorSize;
+    ULONG                       LastBlock;
=20
     SectorCount =3D Frontend->BlkifSectorCount >> Frontend->SectorShift;
     SectorSize =3D Frontend->SectorSize;
@@ -1016,14 +1016,14 @@ PdoReadCapacity(
 }
 static FORCEINLINE VOID
 PdoReadCapacity16(
-    IN  PXENVBD_PDO             Pdo,
-    IN  PSCSI_REQUEST_BLOCK     Srb
+    _In_ PXENVBD_PDO            Pdo,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
-    PXENVBD_FRONTEND        Frontend =3D &Pdo->Frontend;
-    PREAD_CAPACITY_DATA_EX  Capacity =3D Srb->DataBuffer;
-    ULONG64                 SectorCount;
-    ULONG                   SectorSize;
+    PXENVBD_FRONTEND            Frontend =3D &Pdo->Frontend;
+    PREAD_CAPACITY_DATA_EX      Capacity =3D Srb->DataBuffer;
+    ULONG64                     SectorCount;
+    ULONG                       SectorSize;
=20
     SectorCount =3D Frontend->BlkifSectorCount >> Frontend->SectorShift;
     SectorSize =3D Frontend->SectorSize;
@@ -1040,7 +1040,7 @@ PdoReadCapacity16(
 // StorPort Methods
 static FORCEINLINE VOID
 __DisplayStats(
-    IN  PXENVBD_PDO             Pdo
+    _In_ PXENVBD_PDO    Pdo
     )
 {
     LogVerbose("Target[%d] : BLKIF_OP_'s Reads %d / Writes %d / Others %d=
\n",
@@ -1050,10 +1050,10 @@ __DisplayStats(
 }
 static VOID
 __AbortSrbQueue(
-    IN  PSRB_QUEUE              Queue,
-    IN  PXENVBD_PDO             Pdo,
-    IN  BOOLEAN                 Free,
-    IN  PCHAR                   Name
+    _In_ PSRB_QUEUE     Queue,
+    _In_ PXENVBD_PDO    Pdo,
+    _In_ BOOLEAN        Free,
+    _In_ PCHAR          Name
     )
 {
     PSCSI_REQUEST_BLOCK Srb;
@@ -1069,11 +1069,11 @@ __AbortSrbQueue(
 }
 static BOOLEAN
 PdoExecuteScsi(
-    IN  PXENVBD_PDO             Pdo,
-    IN  PSCSI_REQUEST_BLOCK     Srb
+    _In_ PXENVBD_PDO            Pdo,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
-    const UCHAR Operation =3D Cdb_OperationEx(Srb);
+    const UCHAR                 Operation =3D Cdb_OperationEx(Srb);
     // idea: check pdo state here=2E still push to freshsrbs
     //LogVerbose("Target[%d] =3D=3D=3D=3D> %02x:%s\n", Pdo->Frontend=2ETa=
rgetId, Operation, Cdb_OperationName(Operation));
     switch (Operation) {
@@ -1132,8 +1132,8 @@ PdoExecuteScsi(
 }
 static FORCEINLINE VOID
 PdoQueueShutdown(
-    IN  PXENVBD_PDO             Pdo,
-    IN  PSCSI_REQUEST_BLOCK     Srb
+    _In_ PXENVBD_PDO            Pdo,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
     LogVerbose("Target[%d] : shutdown\n", Pdo->Frontend=2ETargetId);
@@ -1143,7 +1143,7 @@ PdoQueueShutdown(
=20
 VOID
 PdoReset(
-    IN  PXENVBD_PDO             Pdo
+    _In_ PXENVBD_PDO        Pdo
     )
 {
     PSCSI_REQUEST_BLOCK     Srb;
@@ -1180,8 +1180,8 @@ PdoReset(
 }
 static FORCEINLINE BOOLEAN
 ValidateSrbForPdo(
-    IN  PXENVBD_PDO             Pdo,
-    IN  PSCSI_REQUEST_BLOCK     Srb
+    _In_ PXENVBD_PDO            Pdo,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
     if (Srb->PathId !=3D 0) {
@@ -1205,8 +1205,8 @@ ValidateSrbForPdo(
 }
 BOOLEAN
 PdoStartIo(
-    IN  PXENVBD_PDO             Pdo,
-    IN  PSCSI_REQUEST_BLOCK     Srb
+    _In_ PXENVBD_PDO            Pdo,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
     if (!ValidateSrbForPdo(Pdo, Srb))
@@ -1240,7 +1240,7 @@ PdoStartIo(
=20
 VOID
 PdoAbortAllSrbs(
-    IN  PXENVBD_PDO             Pdo
+    _In_ PXENVBD_PDO    Pdo
     )
 {
     __AbortSrbQueue(&Pdo->FreshSrbs, Pdo, FALSE, "Fresh");
@@ -1250,7 +1250,7 @@ PdoAbortAllSrbs(
=20
 VOID
 PdoEvtchnInterruptHandler(
-    IN  PXENVBD_PDO             Pdo
+    _In_ PXENVBD_PDO    Pdo
     )
 {
     FrontendEvtchnCallback(&Pdo->Frontend);
diff --git a/src/xencrsh/pdo=2Eh b/src/xencrsh/pdo=2Eh
index 0e2f4e2=2E=2E03fc84f 100644
--- a/src/xencrsh/pdo=2Eh
+++ b/src/xencrsh/pdo=2Eh
@@ -45,87 +45,87 @@ typedef struct _XENVBD_PDO XENVBD_PDO, *PXENVBD_PDO;
 // Creation/Deletion
 extern NTSTATUS
 PdoCreate(
-    IN  PXENVBD_FDO             Fdo,
-    IN  PCHAR                   DeviceId,
-    IN  ULONG                   TargetId,
-    OUT PXENVBD_PDO*            _Pdo
+    _In_ PXENVBD_FDO        Fdo,
+    _In_ PCHAR              DeviceId,
+    _In_ ULONG              TargetId,
+    _Outptr_ PXENVBD_PDO    *_Pdo
     );
=20
 extern VOID
 PdoDestroy(
-    IN  PXENVBD_PDO             Pdo
+    _In_ PXENVBD_PDO    Pdo
     );
=20
 extern VOID
 PdoD3ToD0(
-    IN  PXENVBD_PDO             Pdo
+    _In_ PXENVBD_PDO    Pdo
     );
=20
 extern VOID
 PdoD0ToD3(
-    IN  PXENVBD_PDO             Pdo
+    _In_ PXENVBD_PDO    Pdo
     );
=20
 // Reference Counting
 extern VOID
 PdoReference(
-    IN  PXENVBD_PDO             Pdo
+    _In_ PXENVBD_PDO    Pdo
     );
=20
 extern VOID
 PdoDereference(
-    IN  PXENVBD_PDO             Pdo
+    _In_ PXENVBD_PDO    Pdo
     );
=20
 // Query Methods
 extern ULONG
 PdoSectorSize(
-    IN  PXENVBD_PDO             Pdo
+    _In_ PXENVBD_PDO    Pdo
     );
=20
 // Queue-Related
 extern VOID
 PdoPrepareFresh(
-    IN  PXENVBD_PDO             Pdo
+    _In_ PXENVBD_PDO    Pdo
     );
=20
 extern VOID
 PdoSubmitPrepared(
-    IN  PXENVBD_PDO             Pdo
+    _In_ PXENVBD_PDO    Pdo
     );
=20
 extern VOID
 PdoCompleteShutdown(
-    IN  PXENVBD_PDO             Pdo
+    _In_ PXENVBD_PDO    Pdo
     );
=20
 extern VOID
 PdoCompleteSubmittedRequest(
-    IN  PXENVBD_PDO             Pdo,
-    IN  PXENVBD_REQUEST         Request,
-    IN  SHORT                   Status
+    _In_ PXENVBD_PDO        Pdo,
+    _In_ PXENVBD_REQUEST    Request,
+    _In_ SHORT              Status
     );
=20
 // StorPort Methods
 extern VOID
 PdoReset(
-    IN  PXENVBD_PDO             Pdo
+    _In_ PXENVBD_PDO    Pdo
     );
=20
 extern BOOLEAN
 PdoStartIo(
-    IN  PXENVBD_PDO             Pdo,
-    IN  PSCSI_REQUEST_BLOCK     Srb
+    _In_ PXENVBD_PDO            Pdo,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     );
=20
 extern VOID
 PdoAbortAllSrbs(
-    IN  PXENVBD_PDO             Pdo
+    _In_ PXENVBD_PDO    Pdo
     );
=20
 extern VOID
 PdoEvtchnInterruptHandler(
-    IN  PXENVBD_PDO             Pdo
+    _In_ PXENVBD_PDO    Pdo
     );
=20
 #endif // _XENVBD_PDO_H
diff --git a/src/xencrsh/pdoinquiry=2Ec b/src/xencrsh/pdoinquiry=2Ec
index 3a44ee3=2E=2E7d4c5d6 100644
--- a/src/xencrsh/pdoinquiry=2Ec
+++ b/src/xencrsh/pdoinquiry=2Ec
@@ -62,11 +62,11 @@ typedef struct _XENVBD_INQUIRY {
=20
 static VOID
 __DefaultInquiry(
-    IN  PSCSI_REQUEST_BLOCK Srb
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
-    const UCHAR Evpd =3D Cdb_EVPD(Srb);
-    const UCHAR PageCode =3D Cdb_PageCode(Srb);
+    const UCHAR                 Evpd =3D Cdb_EVPD(Srb);
+    const UCHAR                 PageCode =3D Cdb_PageCode(Srb);
=20
     if (Evpd =3D=3D 0)
     {
@@ -133,13 +133,13 @@ __DefaultInquiry(
=20
 static FORCEINLINE PXENVBD_PAGE
 __FindPage(
-    IN  PXENVBD_INQUIRY Inquiry,
-    IN  UCHAR           Evpd,
-    IN  UCHAR           PageCode
+    _In_ PXENVBD_INQUIRY    Inquiry,
+    _In_ UCHAR              Evpd,
+    _In_ UCHAR              PageCode
     )
 {
-    PLIST_ENTRY     Entry;
-    PXENVBD_PAGE    Page =3D NULL;
+    PLIST_ENTRY             Entry;
+    PXENVBD_PAGE            Page =3D NULL;
=20
     if (Evpd =3D=3D 0) {
         if (PageCode =3D=3D 0) {
@@ -169,11 +169,11 @@ __FindPage(
=20
 static VOID
 __FreeInquiryData(
-    IN  PXENVBD_INQUIRY     Inquiry
+    _In_ PXENVBD_INQUIRY    Inquiry
     )
 {
-    PLIST_ENTRY     Entry;
-    PXENVBD_PAGE    Page;
+    PLIST_ENTRY             Entry;
+    PXENVBD_PAGE            Page;
=20
     // free standard page
     if (Inquiry->StandardPage=2EData) {
@@ -200,10 +200,10 @@ __FreeInquiryData(
=20
 static FORCEINLINE UCHAR
 __PageCode(
-    IN  PCHAR   PageCode
+    _In_ PCHAR  PageCode
     )
 {
-    ULONG Ret;
+    ULONG       Ret;
     if (PageCode[0] =3D=3D '0' && PageCode[1] =3D=3D 'x')
         Ret =3D strtoul(PageCode + 2, NULL, 16);
     else
@@ -213,7 +213,7 @@ __PageCode(
 }
 static FORCEINLINE UCHAR
 __DecodeChar(
-    IN  CHAR    Char
+    _In_ CHAR   Char
     )
 {
     if (Char >=3D 'A' && Char <=3D 'Z')
@@ -233,12 +233,12 @@ __DecodeChar(
 }
 static FORCEINLINE UCHAR
 __Decode(
-    IN  PUCHAR  Dest,
-    IN  PCHAR   Src,
-    IN  ULONG   RemainingChars
+    _In_ PUCHAR Dest,
+    _In_ PCHAR  Src,
+    _In_ ULONG  RemainingChars
     )
 {
-    UCHAR   Values[4];=20
+    UCHAR       Values[4];
=20
     if (RemainingChars < 4)
         return 0xFF;
@@ -267,10 +267,10 @@ __Decode(
 }
 static NTSTATUS
 __DecodeBase64(
-    IN  PCHAR   Base64,
-    IN  ULONG   Base64Length,
-    OUT PVOID   *_Buffer,
-    OUT PULONG  BufferLength
+    _In_ PCHAR      Base64,
+    _In_ ULONG      Base64Length,
+    _Outptr_ PVOID  *_Buffer,
+    _Out_ PULONG    BufferLength
     )
 {
     // convert Base64(4chars) into Buffer(3bytes)
@@ -308,17 +308,17 @@ fail1:
 }
 static NTSTATUS
 __ReadPage(
-    IN  PXENVBD_INQUIRY         Inquiry,
-    IN  PCHAR                   BasePath,
-    IN  PCHAR                   PageCode
+    _In_ PXENVBD_INQUIRY    Inquiry,
+    _In_ PCHAR              BasePath,
+    _In_ PCHAR              PageCode
     )
 {
-    NTSTATUS        Status;
-    PCHAR           Base64;
-    ULONG           Base64Length;
-    PVOID           Buffer;
-    ULONG           BufferLength;
-    PXENVBD_PAGE    Page;
+    NTSTATUS                Status;
+    PCHAR                   Base64;
+    ULONG                   Base64Length;
+    PVOID                   Buffer;
+    ULONG                   BufferLength;
+    PXENVBD_PAGE            Page;
=20
     Status =3D StoreRead(NULL, BasePath, PageCode, &Base64);
     if (!NT_SUCCESS(Status)) {
@@ -373,11 +373,11 @@ fail1:
 }
 static NTSTATUS
 __GeneratePage83(
-    IN  PXENVBD_INQUIRY         Inquiry
+    _In_ PXENVBD_INQUIRY    Inquiry
     )
 {
-    PXENVBD_PAGE    Page;
-    PUCHAR          Data;
+    PXENVBD_PAGE            Page;
+    PUCHAR                  Data;
=20
     Page =3D (PXENVBD_PAGE)AustereAllocate(sizeof(XENVBD_PAGE));
     if (!Page) {
@@ -408,7 +408,7 @@ fail1:
 }
 static NTSTATUS
 __GeneratePage80(
-    IN  PXENVBD_INQUIRY         Inquiry
+    _In_ PXENVBD_INQUIRY    Inquiry
     )
 {
     PXENVBD_PAGE            Page;
@@ -445,10 +445,10 @@ fail1:
 }
 static FORCEINLINE NTSTATUS
 __GeneratePageStd(
-    IN  PXENVBD_INQUIRY         Inquiry
+    _In_ PXENVBD_INQUIRY    Inquiry
     )
 {
-    INQUIRYDATA     *Data;
+    INQUIRYDATA             *Data;
=20
     Inquiry->StandardPage=2EPageCode =3D 0;
     Inquiry->StandardPage=2ELength =3D sizeof(INQUIRYDATA);
@@ -478,14 +478,14 @@ fail1:
 }
 static NTSTATUS
 __GeneratePage00(
-    IN  PXENVBD_INQUIRY         Inquiry
+    _In_ PXENVBD_INQUIRY    Inquiry
     )
 {
-    PUCHAR          Buffer;
-    ULONG           PageNum;
-    PLIST_ENTRY     Entry;
-    PXENVBD_PAGE    Page;
-    ULONG           NumPages =3D 0;
+    PUCHAR                  Buffer;
+    ULONG                   PageNum;
+    PLIST_ENTRY             Entry;
+    PXENVBD_PAGE            Page;
+    ULONG                   NumPages =3D 0;
    =20
     for (Entry =3D Inquiry->ListHead=2EFlink; Entry !=3D &Inquiry->ListHe=
ad; Entry =3D Entry->Flink) {
         ++NumPages;
@@ -529,8 +529,8 @@ fail1:
 }
 static NTSTATUS
 __ReadInquiry(
-    IN  PCHAR                   Path,
-    OUT PVOID*                  _Inquiry
+    _In_ PCHAR      Path,
+    _Outptr_ PVOID  *_Inquiry
     )
 {
     NTSTATUS        Status;
@@ -620,19 +620,19 @@ fail1:
=20
 static FORCEINLINE ULONG
 __Min(
-    IN  ULONG   A,
-    IN  ULONG   B
+    _In_ ULONG  A,
+    _In_ ULONG  B
     )
 {
     return A < B ? A : B;
 }
 static FORCEINLINE VOID
 __DumpBytes(
-    IN  PUCHAR  Bytes,
-    IN  ULONG   Length
+    _In_ PUCHAR Bytes,
+    _In_ ULONG  Length
     )
 {
-    ULONG ThisTime, Index;
+    ULONG       ThisTime, Index;
=20
     for (Index =3D 0; Index < Length; ) {
         ThisTime =3D __Min(Length - Index, 8);
@@ -677,7 +677,7 @@ __DumpBytes(
 }
 static FORCEINLINE VOID
 __DumpPage(
-    IN  PXENVBD_PAGE    Page
+    _In_ PXENVBD_PAGE   Page
     )
 {
     LogTrace("PAGE_CODE : %02x\n", Page->PageCode);
@@ -686,7 +686,7 @@ __DumpPage(
 }
 static FORCEINLINE VOID
 __DumpPageStandard(
-    IN  PXENVBD_PAGE    Page
+    _In_ PXENVBD_PAGE   Page
     )
 {
     LogTrace("PAGE_CODE : %02x STANDARD\n", Page->PageCode);
@@ -695,7 +695,7 @@ __DumpPageStandard(
 }
 static FORCEINLINE VOID
 __DumpInquiry(
-    IN  PVOID           _Inquiry
+    _In_ PVOID      _Inquiry
     )
 {
     PLIST_ENTRY     Entry;
@@ -713,11 +713,11 @@ __DumpInquiry(
=20
 VOID
 PdoReadInquiryData(
-    IN  PXENVBD_FRONTEND        Frontend,
-    OUT PVOID*                  _Inquiry
+    _In_ PXENVBD_FRONTEND   Frontend,
+    _Outptr_ PVOID          *_Inquiry
     )
 {
-    NTSTATUS        Status;
+    NTSTATUS                Status;
=20
     Status =3D __ReadInquiry(Frontend->BackendPath, _Inquiry);
     if (!NT_SUCCESS(Status))
@@ -732,7 +732,7 @@ fail:
=20
 VOID
 PdoFreeInquiryData(
-    IN  PVOID                   Inquiry
+    _In_ PVOID  Inquiry
     )
 {
     __FreeInquiryData((PXENVBD_INQUIRY)Inquiry);
@@ -740,14 +740,14 @@ PdoFreeInquiryData(
=20
 VOID
 PdoInquiry(
-    IN  PVOID                   Inquiry,
-    IN  PSCSI_REQUEST_BLOCK     Srb
+    _In_ PVOID                  Inquiry,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
-    ULONG           Length;
-    PXENVBD_PAGE    Page;
-    const UCHAR     Evpd =3D Cdb_EVPD(Srb);
-    const UCHAR     PageCode =3D Cdb_PageCode(Srb);
+    ULONG                       Length;
+    PXENVBD_PAGE                Page;
+    const UCHAR                 Evpd =3D Cdb_EVPD(Srb);
+    const UCHAR                 PageCode =3D Cdb_PageCode(Srb);
=20
     if (Inquiry) {
         Page =3D __FindPage((PXENVBD_INQUIRY)Inquiry, Evpd, PageCode);
diff --git a/src/xencrsh/pdoinquiry=2Eh b/src/xencrsh/pdoinquiry=2Eh
index 0b25d31=2E=2E2f3e89e 100644
--- a/src/xencrsh/pdoinquiry=2Eh
+++ b/src/xencrsh/pdoinquiry=2Eh
@@ -41,19 +41,19 @@
=20
 extern VOID
 PdoReadInquiryData(
-    IN  PXENVBD_FRONTEND        Frontend,
-    OUT PVOID*                  _Inquiry
+    _In_ PXENVBD_FRONTEND   Frontend,
+    _Outptr_ PVOID          *_Inquiry
     );
=20
 extern VOID
 PdoFreeInquiryData(
-    IN  PVOID                   Inquiry
+    _In_ PVOID  Inquiry
     );
=20
 extern VOID
 PdoInquiry(
-    IN  PVOID                   Inquiry,
-    IN  PSCSI_REQUEST_BLOCK     Srb
+    _In_ PVOID                  Inquiry,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     );
=20
 #endif // _XENVBD_PDO_INQUIRY_H
diff --git a/src/xencrsh/queue=2Ec b/src/xencrsh/queue=2Ec
index a1882fe=2E=2E4bd3339 100644
--- a/src/xencrsh/queue=2Ec
+++ b/src/xencrsh/queue=2Ec
@@ -38,7 +38,7 @@
=20
 static FORCEINLINE BOOLEAN
 __QueueValid(
-    IN  PSRB_QUEUE          Queue
+    _In_ PSRB_QUEUE Queue
     )
 {
     if (( Queue->Count =3D=3D 0 && (Queue->Head !=3D NULL || Queue->Tail =
!=3D NULL) ) ||
@@ -51,11 +51,11 @@ __QueueValid(
 }
 static VOID
 __QueueRemoveLocked(
-    IN  PSRB_QUEUE          Queue,
-    IN  PSCSI_REQUEST_BLOCK Srb
+    _In_ PSRB_QUEUE             Queue,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
-    PXENVBD_SRBEXT  SrbExt =3D GetSrbExt(Srb);
+    PXENVBD_SRBEXT              SrbExt =3D GetSrbExt(Srb);
=20
     ASSERT3P(SrbExt->QueueHead, =3D=3D, Queue);
=20
@@ -86,11 +86,11 @@ __QueueRemoveLocked(
=20
 static FORCEINLINE VOID
 __QueueInsertHeadLocked(
-    IN  PSRB_QUEUE          Queue,
-    IN  PSCSI_REQUEST_BLOCK Srb
+    _In_ PSRB_QUEUE             Queue,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
-    PXENVBD_SRBEXT  SrbExt =3D GetSrbExt(Srb);
+    PXENVBD_SRBEXT              SrbExt =3D GetSrbExt(Srb);
=20
     ASSERT3P(SrbExt->QueueHead, =3D=3D, NULL);
=20
@@ -117,11 +117,11 @@ __QueueInsertHeadLocked(
=20
 static FORCEINLINE VOID
 __QueueInsertTailLocked(
-    IN  PSRB_QUEUE          Queue,
-    IN  PSCSI_REQUEST_BLOCK Srb
+    _In_ PSRB_QUEUE             Queue,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
-    PXENVBD_SRBEXT  SrbExt =3D GetSrbExt(Srb);
+    PXENVBD_SRBEXT              SrbExt =3D GetSrbExt(Srb);
=20
     ASSERT3P(SrbExt->QueueHead, =3D=3D, NULL);
=20
@@ -148,7 +148,7 @@ __QueueInsertTailLocked(
=20
 PSCSI_REQUEST_BLOCK
 QueuePeek(
-    IN  PSRB_QUEUE          Queue
+    _In_ PSRB_QUEUE Queue
     )
 {
     ASSERT(__QueueValid(Queue));
@@ -157,7 +157,7 @@ QueuePeek(
=20
 PSCSI_REQUEST_BLOCK
 QueuePop(
-    IN  PSRB_QUEUE          Queue
+    _In_ PSRB_QUEUE     Queue
     )
 {
     PSCSI_REQUEST_BLOCK Srb =3D NULL;
@@ -170,8 +170,8 @@ QueuePop(
=20
 VOID
 QueueInsertHead(
-    IN  PSRB_QUEUE          Queue,
-    IN  PSCSI_REQUEST_BLOCK Srb
+    _In_ PSRB_QUEUE             Queue,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
     __QueueInsertHeadLocked(Queue, Srb);
@@ -179,8 +179,8 @@ QueueInsertHead(
=20
 VOID
 QueueInsertTail(
-    IN  PSRB_QUEUE          Queue,
-    IN  PSCSI_REQUEST_BLOCK Srb
+    _In_ PSRB_QUEUE             Queue,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
     __QueueInsertTailLocked(Queue, Srb);
@@ -188,8 +188,8 @@ QueueInsertTail(
=20
 VOID
 QueueRemove(
-    IN  PSRB_QUEUE          Queue,
-    IN  PSCSI_REQUEST_BLOCK Srb
+    _In_ PSRB_QUEUE             Queue,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
     __QueueRemoveLocked(Queue, Srb);
@@ -197,8 +197,8 @@ QueueRemove(
=20
 VOID
 QueueDebugCallback(
-    IN  PSRB_QUEUE          Queue,
-    IN  PCHAR               Name
+    _In_ PSRB_QUEUE Queue,
+    _In_ PCHAR      Name
     )
 {
     LogTrace("=3D=3D=3D=3D=3D> %s\n", Name);
diff --git a/src/xencrsh/queue=2Eh b/src/xencrsh/queue=2Eh
index c727936=2E=2Ec53b3e6 100644
--- a/src/xencrsh/queue=2Eh
+++ b/src/xencrsh/queue=2Eh
@@ -50,36 +50,36 @@ typedef struct _SRB_QUEUE {
=20
 PSCSI_REQUEST_BLOCK
 QueuePeek(
-    IN  PSRB_QUEUE          Queue
+    _In_ PSRB_QUEUE Queue
     );
=20
 PSCSI_REQUEST_BLOCK
 QueuePop(
-    IN  PSRB_QUEUE          Queue
+    _In_ PSRB_QUEUE Queue
     );
=20
 VOID
 QueueInsertHead(
-    IN  PSRB_QUEUE          Queue,
-    IN  PSCSI_REQUEST_BLOCK Srb
+    _In_ PSRB_QUEUE             Queue,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     );
=20
 VOID
 QueueInsertTail(
-    IN  PSRB_QUEUE          Queue,
-    IN  PSCSI_REQUEST_BLOCK Srb
+    _In_ PSRB_QUEUE             Queue,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     );
=20
 VOID
 QueueRemove(
-    IN  PSRB_QUEUE          Queue,
-    IN  PSCSI_REQUEST_BLOCK Srb
+    _In_ PSRB_QUEUE             Queue,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     );
=20
 VOID
 QueueDebugCallback(
-    IN  PSRB_QUEUE          Queue,
-    IN  PCHAR               Name
+    _In_ PSRB_QUEUE Queue,
+    _In_ PCHAR      Name
     );
=20
 #endif // _XENVBD_QUEUE_H
diff --git a/src/xencrsh/srbext=2Eh b/src/xencrsh/srbext=2Eh
index 2cc287e=2E=2E6599ce4 100644
--- a/src/xencrsh/srbext=2Eh
+++ b/src/xencrsh/srbext=2Eh
@@ -52,7 +52,7 @@ typedef struct _XENVBD_SRBEXT {
=20
 FORCEINLINE PXENVBD_SRBEXT
 GetSrbExt(
-    IN  PSCSI_REQUEST_BLOCK     Srb
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
     return Srb->SrbExtension;
diff --git a/src/xencrsh/store=2Ec b/src/xencrsh/store=2Ec
index f118646=2E=2Efc945a6 100644
--- a/src/xencrsh/store=2Ec
+++ b/src/xencrsh/store=2Ec
@@ -121,15 +121,15 @@ C_ASSERT(sizeof (struct xenstore_domain_interface) <=
=3D PAGE_SIZE);
=20
 static VOID
 StorePrepareRequest(
-    OUT PSTORE_REQUEST              Request,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  enum xsd_sockmsg_type       Type,
+    _Out_ PSTORE_REQUEST                Request,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_ enum xsd_sockmsg_type          Type,
     IN  =2E=2E=2E
     )
 {
-    static LONG                     Sequence;
-    PSTORE_SEGMENT                  Segment;
-    va_list                         Arguments;
+    static LONG                         Sequence;
+    PSTORE_SEGMENT                      Segment;
+    va_list                             Arguments;
=20
     ASSERT(IsZeroMemory(Request, sizeof (STORE_REQUEST)));
=20
@@ -176,8 +176,8 @@ StorePrepareRequest(
=20
 static FORCEINLINE ULONG
 __StoreCopyToRing(
-    IN  PCHAR                           Data,
-    IN  ULONG                           Length
+    _In_ PCHAR                          Data,
+    _In_ ULONG                          Length
     )
 {
     struct xenstore_domain_interface    *Shared;
@@ -226,8 +226,8 @@ __StoreCopyToRing(
=20
 static FORCEINLINE NTSTATUS
 StoreSendSegment(
-    IN OUT  PSTORE_SEGMENT          Segment,
-    IN OUT  PULONG                  Written
+    _Inout_ PSTORE_SEGMENT          Segment,
+    _Inout_ PULONG                  Written
     )
 {
     ULONG                           Copied;
@@ -244,7 +244,7 @@ StoreSendSegment(
=20
 static VOID
 StoreSendRequests(
-    IN OUT  PULONG                  Written
+    _Inout_ PULONG  Written
     )
 {
     if (IsListEmpty(&StoreContext=2ESubmittedList))
@@ -285,8 +285,8 @@ StoreSendRequests(
=20
 static FORCEINLINE ULONG
 __StoreCopyFromRing(
-    IN  PCHAR                           Data,
-    IN  ULONG                           Length
+    _In_ PCHAR                          Data,
+    _In_ ULONG                          Length
     )
 {
     struct xenstore_domain_interface    *Shared;
@@ -335,8 +335,8 @@ __StoreCopyFromRing(
=20
 static NTSTATUS
 StoreReceiveSegment(
-    IN OUT  PSTORE_SEGMENT          Segment,
-    IN OUT  PULONG                  Read
+    _Inout_ PSTORE_SEGMENT          Segment,
+    _Inout_ PULONG                  Read
     )
 {
     ULONG                           Copied;
@@ -386,7 +386,7 @@ __StoreVerifyHeader(
=20
 static FORCEINLINE NTSTATUS
 StoreReceiveResponse(
-    IN OUT  PULONG                  Read
+    _Inout_ PULONG                  Read
     )
 {
     PSTORE_RESPONSE                 Response =3D &StoreContext=2EResponse=
;
@@ -421,7 +421,7 @@ done:
=20
 static FORCEINLINE PSTORE_REQUEST
 StoreFindRequest(
-    IN  uint32_t                req_id
+    _In_ uint32_t               req_id
     )
 {
     PLIST_ENTRY                 ListEntry;
@@ -445,10 +445,10 @@ StoreFindRequest(
=20
 static FORCEINLINE VOID
 __StoreResetResponse(
-    OUT PSTORE_RESPONSE  Response
+    _Out_ PSTORE_RESPONSE   Response
     )
 {
-    PSTORE_SEGMENT       Segment;
+    PSTORE_SEGMENT          Segment;
=20
     RtlZeroMemory(Response, sizeof (STORE_RESPONSE));
=20
@@ -511,7 +511,7 @@ StorePoll()
=20
 static PSTORE_RESPONSE
 StoreSubmitRequest(
-    IN  PSTORE_REQUEST          Request
+    _In_ PSTORE_REQUEST         Request
     )
 {
     PSTORE_RESPONSE             Response;
@@ -537,10 +537,10 @@ StoreSubmitRequest(
=20
 static FORCEINLINE NTSTATUS
 __StoreCheckResponse(
-    IN  PSTORE_RESPONSE Response
+    _In_ PSTORE_RESPONSE    Response
     )
 {
-    NTSTATUS            status;
+    NTSTATUS                status;
=20
     status =3D STATUS_UNSUCCESSFUL;
     if (Response->Header=2Etype =3D=3D XS_ERROR) {
@@ -571,7 +571,7 @@ fail1:
=20
 static FORCEINLINE ULONG
 __StorePayloadLength(
-    IN  PSTORE_RESPONSE Response
+    _In_ PSTORE_RESPONSE    Response
     )
 {
     return Response->Segment[RESPONSE_PAYLOAD_SEGMENT]=2ELength;
@@ -579,7 +579,7 @@ __StorePayloadLength(
=20
 static FORCEINLINE PCHAR
 __StorePayloadData(
-    IN  PSTORE_RESPONSE Response
+    _In_ PSTORE_RESPONSE    Response
     )
 {
     return Response->Segment[RESPONSE_PAYLOAD_SEGMENT]=2EData;
@@ -587,10 +587,10 @@ __StorePayloadData(
=20
 static FORCEINLINE VOID
 StoreFreeResponse(
-    IN  PSTORE_RESPONSE Response
+    _In_ PSTORE_RESPONSE    Response
     )
 {
-    PSTORE_SEGMENT      Segment;
+    PSTORE_SEGMENT          Segment;
=20
     Segment =3D &Response->Segment[RESPONSE_PAYLOAD_SEGMENT];
=20
@@ -602,18 +602,18 @@ StoreFreeResponse(
=20
 NTSTATUS
 StoreRead(
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node,
-    OUT PCHAR                       *Value
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PCHAR                      Prefix,
+    _In_ PCHAR                          Node,
+    _Outptr_ PCHAR                      *Value
     )
 {
-    STORE_REQUEST                   Request;
-    PSTORE_RESPONSE                 Response;
-    ULONG                           Length;
-    PCHAR                           Data;
-    PCHAR                           Buffer;
-    NTSTATUS                        status;
+    STORE_REQUEST                       Request;
+    PSTORE_RESPONSE                     Response;
+    ULONG                               Length;
+    PCHAR                               Data;
+    PCHAR                               Buffer;
+    NTSTATUS                            status;
=20
     LogTrace("=3D=3D=3D> %p %s %s\n", Transaction, Prefix ? Prefix : "NUL=
L", Node);
=20
@@ -675,15 +675,15 @@ fail1:
=20
 NTSTATUS
 StoreWrite(
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node,
-    IN  PCHAR                       Value
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PCHAR                      Prefix,
+    _In_ PCHAR                          Node,
+    _In_ PCHAR                          Value
     )
 {
-    STORE_REQUEST                   Request;
-    PSTORE_RESPONSE                 Response;
-    NTSTATUS                        status;
+    STORE_REQUEST                       Request;
+    PSTORE_RESPONSE                     Response;
+    NTSTATUS                            status;
=20
     RtlZeroMemory(&Request, sizeof (STORE_REQUEST));
=20
@@ -729,16 +729,16 @@ fail1:
=20
 static FORCEINLINE NTSTATUS
 StoreVPrintf(
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node,
-    IN  const CHAR                  *Format,
-    IN  va_list                     Arguments
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PCHAR                      Prefix,
+    _In_ PCHAR                          Node,
+    _In_ const CHAR                     *Format,
+    _In_ va_list                        Arguments
     )
 {
-    PCHAR                           Buffer;
-    ULONG                           Length;
-    NTSTATUS                        status;
+    PCHAR                               Buffer;
+    ULONG                               Length;
+    NTSTATUS                            status;
=20
     Length =3D 32;
     for (;;) {
@@ -794,15 +794,15 @@ fail1:
=20
 NTSTATUS
 StorePrintf(
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node,
-    IN  const CHAR                  *Format,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PCHAR                      Prefix,
+    _In_ PCHAR                          Node,
+    _In_ const CHAR                     *Format,
     =2E=2E=2E
     )
 {
-    va_list                         Arguments;
-    NTSTATUS                        status;
+    va_list                             Arguments;
+    NTSTATUS                            status;
=20
     va_start(Arguments, Format);
     status =3D StoreVPrintf(Transaction,
@@ -817,14 +817,14 @@ StorePrintf(
=20
 NTSTATUS
 StoreRemove(
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PCHAR                      Prefix,
+    _In_ PCHAR                          Node
     )
 {
-    STORE_REQUEST                   Request;
-    PSTORE_RESPONSE                 Response;
-    NTSTATUS                        status;
+    STORE_REQUEST                       Request;
+    PSTORE_RESPONSE                     Response;
+    NTSTATUS                            status;
=20
     LogTrace("=3D=3D=3D> %p %s %s\n", Transaction, Prefix ? Prefix : "NUL=
L", Node);
=20
@@ -871,18 +871,18 @@ fail1:
=20
 NTSTATUS
 StoreDirectory(
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node,
-    OUT PCHAR                       *Value
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PCHAR                      Prefix,
+    _In_ PCHAR                          Node,
+    _Outptr_ PCHAR                      *Value
     )
 {
-    STORE_REQUEST                   Request;
-    PSTORE_RESPONSE                 Response;
-    ULONG                           Length;
-    PCHAR                           Data;
-    PCHAR                           Buffer;
-    NTSTATUS                        status;
+    STORE_REQUEST                       Request;
+    PSTORE_RESPONSE                     Response;
+    ULONG                               Length;
+    PCHAR                               Data;
+    PCHAR                               Buffer;
+    NTSTATUS                            status;
=20
     LogTrace("=3D=3D=3D> %p %s %s\n", Transaction, Prefix ? Prefix : "NUL=
L", Node);
=20
@@ -944,12 +944,12 @@ fail1:
=20
 NTSTATUS
 StoreTransactionStart(
-    OUT PXENBUS_STORE_TRANSACTION   *Transaction
+    _Outptr_ PXENBUS_STORE_TRANSACTION  *Transaction
     )
 {
-    STORE_REQUEST                   Request;
-    PSTORE_RESPONSE                 Response;
-    NTSTATUS                        status;
+    STORE_REQUEST                       Request;
+    PSTORE_RESPONSE                     Response;
+    NTSTATUS                            status;
=20
     LogTrace("=3D=3D=3D>\n");
=20
@@ -999,8 +999,8 @@ fail1:
=20
 NTSTATUS
 StoreTransactionEnd(
-    IN  PXENBUS_STORE_TRANSACTION   Transaction,
-    IN  BOOLEAN                     Commit
+    _In_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_ BOOLEAN                    Commit
     )
 {
     STORE_REQUEST                   Request;
@@ -1047,8 +1047,8 @@ extern PHYSICAL_ADDRESS MmGetPhysicalAddress(IN PVOI=
D  BaseAddress);
=20
 static FORCEINLINE int
 MemoryOp(
-    IN  ULONG   Command,
-    IN  PVOID   Argument
+    _In_ ULONG  Command,
+    _In_ PVOID  Argument
     )
 {
     return Hypercall2(int, memory_op, Command, Argument);
@@ -1056,8 +1056,8 @@ MemoryOp(
=20
 static FORCEINLINE PVOID
 __Round(
-    IN  PVOID               Buffer,
-    IN  ULONG               RoundTo
+    _In_ PVOID  Buffer,
+    _In_ ULONG  RoundTo
     )
 {
     // round buffer to (normally PAGE_SIZE) boundary
diff --git a/src/xencrsh/store=2Eh b/src/xencrsh/store=2Eh
index 58ebef5=2E=2Efa9b2ec 100644
--- a/src/xencrsh/store=2Eh
+++ b/src/xencrsh/store=2Eh
@@ -43,53 +43,53 @@ StoreTerminate();
=20
 NTSTATUS
 StoreRead(
-    IN  PVOID                       Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,    =20
-    IN  PCHAR                       Node,               =20
-    OUT PCHAR                       *Value              =20
+    _In_opt_ PVOID  Transaction,
+    _In_opt_ PCHAR  Prefix,
+    _In_ PCHAR      Node,
+    _Outptr_ PCHAR  *Value
     );
=20
 NTSTATUS
 StoreWrite(
-    IN  PVOID                       Transaction OPTIONAL,=20
-    IN  PCHAR                       Prefix OPTIONAL,     =20
-    IN  PCHAR                       Node,                =20
-    IN  PCHAR                       Value
+    _In_opt_ PVOID  Transaction,
+    _In_opt_ PCHAR  Prefix,
+    _In_ PCHAR      Node,
+    _In_ PCHAR      Value
     );
=20
 NTSTATUS
 StorePrintf(
-    IN  PVOID                       Transaction OPTIONAL,=20
-    IN  PCHAR                       Prefix OPTIONAL,     =20
-    IN  PCHAR                       Node,                =20
-    IN  const CHAR                  *Format,             =20
+    _In_opt_ PVOID  Transaction,
+    _In_opt_ PCHAR  Prefix,
+    _In_ PCHAR      Node,
+    _In_ const CHAR *Format,
     =2E=2E=2E                                                  =20
     );
=20
 NTSTATUS
 StoreRemove(                                                    =20
-    IN  PVOID                       Transaction OPTIONAL,=20
-    IN  PCHAR                       Prefix OPTIONAL,     =20
-    IN  PCHAR                       Node                 =20
+    _In_opt_ PVOID  Transaction,
+    _In_opt_ PCHAR  Prefix,
+    _In_ PCHAR      Node
     );
=20
 NTSTATUS
 StoreDirectory(                                                    =20
-    IN  PVOID                       Transaction OPTIONAL,=20
-    IN  PCHAR                       Prefix OPTIONAL,     =20
-    IN  PCHAR                       Node,                =20
-    OUT PCHAR                       *Value               =20
+    _In_opt_ PVOID  Transaction,
+    _In_opt_ PCHAR  Prefix,
+    _In_ PCHAR      Node,
+    _Outptr_ PCHAR  *Value
     );
=20
 NTSTATUS
 StoreTransactionStart(                                                   =
 =20
-    OUT PVOID                       *Transaction         =20
+    _Outptr_ PVOID  *Transaction
     );
=20
 NTSTATUS
 StoreTransactionEnd(                                                    =
=20
-    IN  PVOID                       Transaction,         =20
-    IN  BOOLEAN                     Commit               =20
+    _In_ PVOID      Transaction,
+    _In_ BOOLEAN    Commit
     );
=20
 #endif // _XENVBD_STORE_H
diff --git a/src/xenvbd/adapter=2Ec b/src/xenvbd/adapter=2Ec
index a0be841=2E=2E360cf50 100644
--- a/src/xenvbd/adapter=2Ec
+++ b/src/xenvbd/adapter=2Ec
@@ -100,7 +100,7 @@ struct _XENVBD_ADAPTER {
=20
 static FORCEINLINE PVOID
 __AdapterAllocate(
-    IN  ULONG   Size
+    _In_ ULONG  Size
     )
 {
     return __AllocatePoolWithTag(NonPagedPool,
@@ -110,7 +110,7 @@ __AdapterAllocate(
=20
 static FORCEINLINE VOID
 __AdapterFree(
-    IN  PVOID   Buffer
+    _In_ PVOID  Buffer
     )
 {
     __FreePoolWithTag(Buffer, ADAPTER_POOL_TAG);
@@ -118,7 +118,7 @@ __AdapterFree(
=20
 static FORCEINLINE PANSI_STRING
 __AdapterMultiSzToAnsi(
-    IN  PCHAR       Buffer
+    _In_ PCHAR      Buffer
     )
 {
     PANSI_STRING    Ansi;
@@ -181,7 +181,7 @@ fail1:
=20
 static FORCEINLINE PANSI_STRING
 __AdapterMultiSzToUpcaseAnsi(
-    IN  PCHAR       Buffer
+    _In_ PCHAR      Buffer
     )
 {
     PANSI_STRING    Ansi;
@@ -245,7 +245,7 @@ fail1:
=20
 static FORCEINLINE VOID
 __AdapterFreeAnsi(
-    IN  PANSI_STRING    Ansi
+    _In_ PANSI_STRING   Ansi
     )
 {
     ULONG               Index;
@@ -258,8 +258,8 @@ __AdapterFreeAnsi(
=20
 static FORCEINLINE BOOLEAN
 __AdapterSetDevicePowerState(
-    IN  PXENVBD_ADAPTER     Adapter,
-    IN  DEVICE_POWER_STATE  State
+    _In_ PXENVBD_ADAPTER    Adapter,
+    _In_ DEVICE_POWER_STATE State
     )
 {
     KIRQL                   Irql;
@@ -280,11 +280,11 @@ __AdapterSetDevicePowerState(
=20
 static FORCEINLINE DEVICE_POWER_STATE
 __AdapterGetDevicePowerState(
-    IN  PXENVBD_ADAPTER Adapter
+    _In_ PXENVBD_ADAPTER    Adapter
     )
 {
-    KIRQL               Irql;
-    DEVICE_POWER_STATE  State;
+    KIRQL                   Irql;
+    DEVICE_POWER_STATE      State;
=20
     KeAcquireSpinLock(&Adapter->Lock, &Irql);
     State =3D Adapter->DevicePower;
@@ -295,12 +295,12 @@ __AdapterGetDevicePowerState(
=20
 static FORCEINLINE PXENVBD_TARGET
 AdapterGetTarget(
-    IN  PXENVBD_ADAPTER Adapter,
-    IN  ULONG           TargetId
+    _In_ PXENVBD_ADAPTER    Adapter,
+    _In_ ULONG              TargetId
     )
 {
-    PXENVBD_TARGET      Target;
-    KIRQL               Irql;
+    PXENVBD_TARGET          Target;
+    KIRQL                   Irql;
=20
     ASSERT3U(TargetId, <, XENVBD_MAX_TARGETS);
=20
@@ -313,8 +313,8 @@ AdapterGetTarget(
=20
 static FORCEINLINE BOOLEAN
 __AdapterHiddenTarget(
-    IN  PXENVBD_ADAPTER     Adapter,
-    IN  PCHAR               DeviceId
+    _In_ PXENVBD_ADAPTER    Adapter,
+    _In_ PCHAR              DeviceId
     )
 {
     NTSTATUS                status;
@@ -380,12 +380,12 @@ ignore:
=20
 BOOLEAN
 AdapterIsTargetEmulated(
-    IN  PXENVBD_ADAPTER Adapter,
-    IN  ULONG           TargetId
+    _In_ PXENVBD_ADAPTER    Adapter,
+    _In_ ULONG              TargetId
     )
 {
-    BOOLEAN             Emulated;
-    NTSTATUS            status;
+    BOOLEAN                 Emulated;
+    NTSTATUS                status;
=20
     // Only check targets that could be emulated
     if (TargetId > 3)
@@ -412,7 +412,7 @@ AdapterIsTargetEmulated(
=20
 BOOLEAN
 AdapterBootEmulated(
-    IN  PXENVBD_ADAPTER Adapter
+    _In_ PXENVBD_ADAPTER    Adapter
     )
 {
     return Adapter->BootEmulated;
@@ -420,10 +420,10 @@ AdapterBootEmulated(
=20
 VOID
 AdapterRequestReboot(
-    IN  PXENVBD_ADAPTER Adapter
+    _In_ PXENVBD_ADAPTER    Adapter
     )
 {
-    NTSTATUS            status;
+    NTSTATUS                status;
=20
     status =3D XENBUS_UNPLUG(Acquire, &Adapter->UnplugInterface);
     if (!NT_SUCCESS(status))
@@ -438,18 +438,18 @@ AdapterRequestReboot(
=20
 static FORCEINLINE VOID
 __AdapterEnumerate(
-    IN  PXENVBD_ADAPTER Adapter,
-    IN  PANSI_STRING    Devices
+    _In_ PXENVBD_ADAPTER    Adapter,
+    _In_ PANSI_STRING       Devices
     )
 {
-    KIRQL               Irql;
-    ULONG               TargetId;
-    ULONG               DeviceId;
-    PANSI_STRING        Device;
-    ULONG               Index;
-    PXENVBD_TARGET      Target;
-    BOOLEAN             NeedInvalidate;
-    BOOLEAN             NeedReboot;
+    KIRQL                   Irql;
+    ULONG                   TargetId;
+    ULONG                   DeviceId;
+    PANSI_STRING            Device;
+    ULONG                   Index;
+    PXENVBD_TARGET          Target;
+    BOOLEAN                 NeedInvalidate;
+    BOOLEAN                 NeedReboot;
=20
     NeedInvalidate =3D FALSE;
     NeedReboot =3D FALSE;
@@ -531,8 +531,8 @@ __AdapterEnumerate(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 AdapterScanThread(
-    IN  PXENVBD_THREAD  Thread,
-    IN  PVOID           Context
+    _In_ PXENVBD_THREAD Thread,
+    _In_ PVOID          Context
     )
 {
     PXENVBD_ADAPTER     Adapter =3D Context;
@@ -591,17 +591,17 @@ done:
=20
 static FORCEINLINE BOOLEAN
 __AdapterMatchDistribution(
-    IN  PXENVBD_ADAPTER Adapter,
-    IN  PCHAR       Buffer
+    _In_ PXENVBD_ADAPTER    Adapter,
+    _In_ PCHAR              Buffer
     )
 {
-    PCHAR           Vendor;
-    PCHAR           Product;
-    PCHAR           Context;
-    const CHAR      *Text;
-    BOOLEAN         Match;
-    ULONG           Index;
-    NTSTATUS        status;
+    PCHAR                   Vendor;
+    PCHAR                   Product;
+    PCHAR                   Context;
+    const CHAR              *Text;
+    BOOLEAN                 Match;
+    ULONG                   Index;
+    NTSTATUS                status;
=20
     UNREFERENCED_PARAMETER(Adapter);
=20
@@ -651,13 +651,13 @@ fail1:
=20
 static VOID
 AdapterClearDistribution(
-    IN  PXENVBD_ADAPTER Adapter
+    _In_ PXENVBD_ADAPTER    Adapter
     )
 {
-    PCHAR           Buffer;
-    PANSI_STRING    Distributions;
-    ULONG           Index;
-    NTSTATUS        status;
+    PCHAR                   Buffer;
+    PANSI_STRING            Distributions;
+    ULONG                   Index;
+    NTSTATUS                status;
=20
     Trace("=3D=3D=3D=3D>\n");
=20
@@ -714,14 +714,14 @@ done:
=20
 static NTSTATUS
 AdapterSetDistribution(
-    IN  PXENVBD_ADAPTER Adapter
+    _In_ PXENVBD_ADAPTER    Adapter
     )
 {
-    ULONG           Index;
-    CHAR            Distribution[MAXNAMELEN];
-    CHAR            Vendor[MAXNAMELEN];
-    const CHAR      *Product;
-    NTSTATUS        status;
+    ULONG                   Index;
+    CHAR                    Distribution[MAXNAMELEN];
+    CHAR                    Vendor[MAXNAMELEN];
+    const CHAR              *Product;
+    NTSTATUS                status;
=20
     Trace("=3D=3D=3D=3D>\n");
=20
@@ -808,10 +808,10 @@ fail1:
=20
 static FORCEINLINE NTSTATUS
 __AdapterD3ToD0(
-    IN  PXENVBD_ADAPTER Adapter
+    _In_ PXENVBD_ADAPTER    Adapter
     )
 {
-    NTSTATUS            status;
+    NTSTATUS                status;
=20
     Trace("=3D=3D=3D=3D=3D>\n");
=20
@@ -854,7 +854,7 @@ fail1:
=20
 static FORCEINLINE VOID
 __AdapterD0ToD3(
-    IN  PXENVBD_ADAPTER Adapter
+    _In_ PXENVBD_ADAPTER    Adapter
     )
 {
     Trace("=3D=3D=3D=3D=3D>\n");
@@ -879,7 +879,7 @@ __AdapterD0ToD3(
=20
 static VOID
 AdapterSuspendLateCallback(
-    IN  PVOID       Argument
+    _In_ PVOID      Argument
     )
 {
     PXENVBD_ADAPTER Adapter =3D Argument;
@@ -902,8 +902,8 @@ AdapterSuspendLateCallback(
=20
 static DECLSPEC_NOINLINE VOID
 AdapterDebugCallback(
-    IN  PVOID       Context,
-    IN  BOOLEAN     Crashing
+    _In_ PVOID      Context,
+    _In_ BOOLEAN    Crashing
     )
 {
     PXENVBD_ADAPTER Adapter =3D Context;
@@ -939,11 +939,11 @@ AdapterDebugCallback(
=20
 static NTSTATUS
 AdapterD3ToD0(
-    IN  PXENVBD_ADAPTER Adapter
+    _In_ PXENVBD_ADAPTER    Adapter
     )
 {
-    NTSTATUS            status;
-    ULONG               TargetId;
+    NTSTATUS                status;
+    ULONG                   TargetId;
=20
     if (!__AdapterSetDevicePowerState(Adapter, PowerDeviceD0))
         return STATUS_SUCCESS;
@@ -1034,10 +1034,10 @@ fail1:
=20
 static VOID
 AdapterD0ToD3(
-    IN  PXENVBD_ADAPTER Adapter
+    _In_ PXENVBD_ADAPTER    Adapter
     )
 {
-    ULONG               TargetId;
+    ULONG                   TargetId;
=20
     if (!__AdapterSetDevicePowerState(Adapter, PowerDeviceD3))
         return;
@@ -1070,8 +1070,8 @@ AdapterD0ToD3(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 AdapterDevicePowerThread(
-    IN  PXENVBD_THREAD  Thread,
-    IN  PVOID           Context
+    _In_ PXENVBD_THREAD Thread,
+    _In_ PVOID          Context
     )
 {
     PXENVBD_ADAPTER     Adapter =3D Context;
@@ -1122,7 +1122,7 @@ AdapterDevicePowerThread(
=20
 PXENVBD_BOUNCE
 AdapterGetBounce(
-    IN  PXENVBD_ADAPTER Adapter
+    _In_ PXENVBD_ADAPTER    Adapter
     )
 {
     return XENBUS_CACHE(Get,
@@ -1133,8 +1133,8 @@ AdapterGetBounce(
=20
 VOID
 AdapterPutBounce(
-    IN  PXENVBD_ADAPTER Adapter,
-    IN  PXENVBD_BOUNCE  Bounce
+    _In_ PXENVBD_ADAPTER    Adapter,
+    _In_ PXENVBD_BOUNCE     Bounce
     )
 {
     XENBUS_CACHE(Put,
@@ -1146,8 +1146,8 @@ AdapterPutBounce(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 AdapterBounceCtor(
-    IN  PVOID       Argument,
-    IN  PVOID       Object
+    _In_ PVOID      Argument,
+    _In_ PVOID      Object
     )
 {
     PXENVBD_BOUNCE  Bounce =3D Object;
@@ -1171,8 +1171,8 @@ fail1:
=20
 static DECLSPEC_NOINLINE VOID
 AdapterBounceDtor(
-    IN  PVOID       Argument,
-    IN  PVOID       Object
+    _In_ PVOID      Argument,
+    _In_ PVOID      Object
     )
 {
     PXENVBD_BOUNCE  Bounce =3D Object;
@@ -1187,7 +1187,7 @@ AdapterBounceDtor(
=20
 static DECLSPEC_NOINLINE VOID
 AdapterAcquireLock(
-    IN  PVOID       Argument
+    _In_ PVOID      Argument
     )
 {
     PXENVBD_ADAPTER Adapter =3D Argument;
@@ -1196,7 +1196,7 @@ AdapterAcquireLock(
=20
 static DECLSPEC_NOINLINE VOID
 AdapterReleaseLock(
-    IN  PVOID       Argument
+    _In_ PVOID      Argument
     )
 {
     PXENVBD_ADAPTER Adapter =3D Argument;
@@ -1205,10 +1205,10 @@ AdapterReleaseLock(
=20
 static FORCEINLINE VOID
 __AdapterSetBootEmulated(
-    IN  PXENVBD_ADAPTER Adapter
+    _In_ PXENVBD_ADAPTER    Adapter
     )
 {
-    NTSTATUS            status;
+    NTSTATUS                status;
=20
     Adapter->BootEmulated =3D FALSE;
=20
@@ -1222,22 +1222,22 @@ __AdapterSetBootEmulated(
     XENBUS_UNPLUG(Release, &Adapter->UnplugInterface);
 }
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 static NTSTATUS
 __AdapterQueryInterface(
-    IN  PXENVBD_ADAPTER Adapter,
-    IN  const GUID      *Guid,
-    IN  ULONG           Version,
-    OUT PINTERFACE      Interface,
-    IN  ULONG           Size,
-    IN  BOOLEAN         Optional
+    _In_ PXENVBD_ADAPTER    Adapter,
+    _In_ const GUID         *Guid,
+    _In_ ULONG              Version,
+    _Out_ PINTERFACE        Interface,
+    _In_ ULONG              Size,
+    _In_ BOOLEAN            Optional
     )
 {
-    KEVENT              Event;
-    IO_STATUS_BLOCK     StatusBlock;
-    PIRP                Irp;
-    PIO_STACK_LOCATION  StackLocation;
-    NTSTATUS            status;
+    KEVENT                  Event;
+    IO_STATUS_BLOCK         StatusBlock;
+    PIRP                    Irp;
+    PIO_STACK_LOCATION      StackLocation;
+    NTSTATUS                status;
=20
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, PASSIVE_LEVEL);
=20
@@ -1303,16 +1303,16 @@ fail1:
                             sizeof( ## _name ## _INTERFACE),    \
                             (_opt))
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 static NTSTATUS
 AdapterInitialize(
-    IN  PXENVBD_ADAPTER Adapter,
-    IN  PDEVICE_OBJECT  DeviceObject,
-    IN  PDEVICE_OBJECT  PhysicalDeviceObject,
-    IN  PDEVICE_OBJECT  LowerDeviceObject
+    _In_ PXENVBD_ADAPTER    Adapter,
+    _In_ PDEVICE_OBJECT     DeviceObject,
+    _In_ PDEVICE_OBJECT     PhysicalDeviceObject,
+    _In_ PDEVICE_OBJECT     LowerDeviceObject
     )
 {
-    NTSTATUS            status;
+    NTSTATUS                status;
=20
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, PASSIVE_LEVEL);
=20
@@ -1480,10 +1480,10 @@ fail1:
=20
 static VOID
 AdapterTeardown(
-    IN  PXENVBD_ADAPTER Adapter
+    _In_ PXENVBD_ADAPTER    Adapter
     )
 {
-    ULONG               TargetId;
+    ULONG                   TargetId;
=20
     ASSERT3U(Adapter->DevicePower, =3D=3D, PowerDeviceD3);
=20
@@ -1563,11 +1563,11 @@ AdapterTeardown(
=20
 VOID
 AdapterCompleteSrb(
-    IN  PXENVBD_ADAPTER Adapter,
-    IN  PXENVBD_SRBEXT  SrbExt
+    _In_ PXENVBD_ADAPTER    Adapter,
+    _In_ PXENVBD_SRBEXT     SrbExt
     )
 {
-    PSCSI_REQUEST_BLOCK Srb =3D SrbExt->Srb;
+    PSCSI_REQUEST_BLOCK     Srb =3D SrbExt->Srb;
=20
     ASSERT3U(Srb->SrbStatus, !=3D, SRB_STATUS_PENDING);
=20
@@ -1581,7 +1581,7 @@ AdapterCompleteSrb(
=20
 VOID
 AdapterTargetListChanged(
-    IN  PXENVBD_ADAPTER Adapter
+    _In_ PXENVBD_ADAPTER    Adapter
     )
 {
     StorPortNotification(BusChangeDetected,
@@ -1591,8 +1591,8 @@ AdapterTargetListChanged(
=20
 VOID
 AdapterSetDeviceQueueDepth(
-    IN  PXENVBD_ADAPTER Adapter,
-    IN  ULONG           TargetId
+    _In_ PXENVBD_ADAPTER    Adapter,
+    _In_ ULONG              TargetId
     )
 {
     if (!StorPortSetDeviceQueueDepth(Adapter,
@@ -1606,11 +1606,11 @@ AdapterSetDeviceQueueDepth(
=20
 PFN_NUMBER
 AdapterGetNextSGEntry(
-    IN  PXENVBD_ADAPTER Adapter,
-    IN  PXENVBD_SRBEXT  SrbExt,
-    IN  ULONG           Existing,
-    OUT PULONG          Offset,
-    OUT PULONG          Length
+    _In_ PXENVBD_ADAPTER            Adapter,
+    _In_ PXENVBD_SRBEXT             SrbExt,
+    _In_ ULONG                      Existing,
+    _Out_ PULONG                    Offset,
+    _Out_ PULONG                    Length
     )
 {
     PSTOR_SCATTER_GATHER_LIST       SGList =3D SrbExt->SGList;
@@ -1642,12 +1642,12 @@ AdapterGetNextSGEntry(
=20
 static FORCEINLINE VOID
 AdapterPullupSrb(
-    IN  PXENVBD_ADAPTER     Adapter,
-    IN  PSCSI_REQUEST_BLOCK Srb
+    _In_ PXENVBD_ADAPTER        Adapter,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
-    PXENVBD_SRBEXT          SrbExt =3D Srb->SrbExtension;
-    UCHAR                   Operation;
+    PXENVBD_SRBEXT              SrbExt =3D Srb->SrbExtension;
+    UCHAR                       Operation;
=20
     Operation =3D Cdb_OperationEx(Srb);
     switch (Operation) {
@@ -1666,11 +1666,11 @@ AdapterPullupSrb(
=20
 static VOID
 AdapterUnplugRequest(
-    IN  PXENVBD_ADAPTER Adapter,
-    IN  BOOLEAN         Make
+    _In_ PXENVBD_ADAPTER    Adapter,
+    _In_ BOOLEAN            Make
     )
 {
-    NTSTATUS            status;
+    NTSTATUS                status;
=20
     status =3D XENBUS_UNPLUG(Acquire, &Adapter->UnplugInterface);
     if (!NT_SUCCESS(status))
@@ -1686,11 +1686,11 @@ AdapterUnplugRequest(
=20
 static PXENVBD_TARGET
 AdapterGetTargetFromDeviceObject(
-    IN  PXENVBD_ADAPTER Adapter,
-    IN  PDEVICE_OBJECT  DeviceObject
+    _In_ PXENVBD_ADAPTER    Adapter,
+    _In_ PDEVICE_OBJECT     DeviceObject
     )
 {
-    ULONG               TargetId;
+    ULONG                   TargetId;
=20
     ASSERT3P(DeviceObject, !=3D, NULL);
=20
@@ -1707,18 +1707,18 @@ AdapterGetTargetFromDeviceObject(
=20
 static PXENVBD_TARGET
 AdapterMapDeviceObjectToTarget(
-    IN  PXENVBD_ADAPTER Adapter,
-    IN  PDEVICE_OBJECT  DeviceObject
+    _In_ PXENVBD_ADAPTER    Adapter,
+    _In_ PDEVICE_OBJECT     DeviceObject
     )
 {
-    PXENVBD_TARGET      Target;
-    KEVENT              Complete;
-    PIRP                Irp;
-    IO_STATUS_BLOCK     StatusBlock;
-    PIO_STACK_LOCATION  Stack;
-    NTSTATUS            Status;
-    PWCHAR              String;
-    ULONG               TargetId;
+    PXENVBD_TARGET          Target;
+    KEVENT                  Complete;
+    PIRP                    Irp;
+    IO_STATUS_BLOCK         StatusBlock;
+    PIO_STACK_LOCATION      Stack;
+    NTSTATUS                Status;
+    PWCHAR                  String;
+    ULONG                   TargetId;
     DECLARE_UNICODE_STRING_SIZE(UniStr, 4);
=20
     KeInitializeEvent(&Complete, NotificationEvent, FALSE);
@@ -1782,13 +1782,13 @@ fail1:
=20
 static NTSTATUS
 AdapterForwardPnp(
-    IN  PXENVBD_ADAPTER Adapter,
-    IN  PDEVICE_OBJECT  DeviceObject,
-    IN  PIRP            Irp
+    _In_ PXENVBD_ADAPTER    Adapter,
+    _In_ PDEVICE_OBJECT     DeviceObject,
+    _In_ PIRP               Irp
     )
 {
-    PIO_STACK_LOCATION  Stack;
-    PXENVBD_TARGET      Target;
+    PIO_STACK_LOCATION      Stack;
+    PXENVBD_TARGET          Target;
=20
     ASSERT3P(DeviceObject, !=3D, Adapter->DeviceObject);
=20
@@ -1811,12 +1811,12 @@ AdapterForwardPnp(
=20
 NTSTATUS
 AdapterDispatchPnp(
-    IN  PXENVBD_ADAPTER Adapter,
-    IN  PDEVICE_OBJECT  DeviceObject,
-    IN  PIRP            Irp
+    _In_ PXENVBD_ADAPTER    Adapter,
+    _In_ PDEVICE_OBJECT     DeviceObject,
+    _In_ PIRP               Irp
     )
 {
-    PIO_STACK_LOCATION  Stack;
+    PIO_STACK_LOCATION      Stack;
=20
     if (Adapter->DeviceObject !=3D DeviceObject)
         return AdapterForwardPnp(Adapter, DeviceObject, Irp);
@@ -1854,14 +1854,14 @@ AdapterDispatchPnp(
=20
 NTSTATUS
 AdapterDispatchPower(
-    IN  PXENVBD_ADAPTER Adapter,
-    IN  PDEVICE_OBJECT  DeviceObject,
-    IN  PIRP            Irp
+    _In_ PXENVBD_ADAPTER    Adapter,
+    _In_ PDEVICE_OBJECT     DeviceObject,
+    _In_ PIRP               Irp
     )
 {
-    PIO_STACK_LOCATION  Stack;
-    POWER_STATE_TYPE    PowerType;
-    NTSTATUS            status;
+    PIO_STACK_LOCATION      Stack;
+    POWER_STATE_TYPE        PowerType;
+    NTSTATUS                status;
=20
     if (Adapter->DeviceObject !=3D DeviceObject)
         return DriverDispatchPower(DeviceObject, Irp);
@@ -1901,8 +1901,8 @@ HW_RESET_BUS        AdapterHwResetBus;
=20
 BOOLEAN
 AdapterHwResetBus(
-    IN  PVOID       DevExt,
-    IN  ULONG       PathId
+    _In_ PVOID      DevExt,
+    _In_ ULONG      PathId
     )
 {
     PXENVBD_ADAPTER Adapter =3D DevExt;
@@ -1925,11 +1925,11 @@ AdapterHwResetBus(
=20
 static FORCEINLINE VOID
 __AdapterSrbPnp(
-    IN  PXENVBD_ADAPTER         Adapter,
-    IN  PSCSI_PNP_REQUEST_BLOCK Srb
+    _In_ PXENVBD_ADAPTER            Adapter,
+    _In_ PSCSI_PNP_REQUEST_BLOCK    Srb
     )
 {
-    PXENVBD_TARGET              Target;
+    PXENVBD_TARGET                  Target;
=20
     if (Srb->SrbPnPFlags & SRB_PNP_FLAGS_ADAPTER_REQUEST)
         return;
@@ -1958,13 +1958,13 @@ HW_BUILDIO          AdapterHwBuildIo;
=20
 BOOLEAN
 AdapterHwBuildIo(
-    IN  PVOID               DevExt,
-    IN  PSCSI_REQUEST_BLOCK Srb
+    _In_ PVOID                  DevExt,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
-    PXENVBD_ADAPTER         Adapter =3D DevExt;
-    PXENVBD_SRBEXT          SrbExt =3D Srb->SrbExtension;
-    PXENVBD_TARGET          Target;
+    PXENVBD_ADAPTER             Adapter =3D DevExt;
+    PXENVBD_SRBEXT              SrbExt =3D Srb->SrbExtension;
+    PXENVBD_TARGET              Target;
=20
     RtlZeroMemory(SrbExt, sizeof(XENVBD_SRBEXT));
     SrbExt->Srb =3D Srb;
@@ -2021,14 +2021,14 @@ HW_STARTIO          AdapterHwStartIo;
=20
 BOOLEAN
 AdapterHwStartIo(
-    IN  PVOID               DevExt,
-    IN  PSCSI_REQUEST_BLOCK Srb
+    _In_ PVOID                  DevExt,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
-    PXENVBD_ADAPTER         Adapter =3D DevExt;
-    PXENVBD_SRBEXT          SrbExt =3D Srb->SrbExtension;
-    BOOLEAN                 WasQueued =3D FALSE;
-    PXENVBD_TARGET          Target;
+    PXENVBD_ADAPTER             Adapter =3D DevExt;
+    PXENVBD_SRBEXT              SrbExt =3D Srb->SrbExtension;
+    BOOLEAN                     WasQueued =3D FALSE;
+    PXENVBD_TARGET              Target;
=20
     InterlockedIncrement((PLONG)&Adapter->StartIo);
     Target =3D AdapterGetTarget(Adapter, Srb->TargetId);
@@ -2073,9 +2073,9 @@ HW_ADAPTER_CONTROL  AdapterHwAdapterControl;
=20
 SCSI_ADAPTER_CONTROL_STATUS
 AdapterHwAdapterControl(
-    IN  PVOID                       DevExt,
-    IN  SCSI_ADAPTER_CONTROL_TYPE   ControlType,
-    IN  PVOID                       Parameters
+    _In_ PVOID                          DevExt,
+    _In_ SCSI_ADAPTER_CONTROL_TYPE      ControlType,
+    _In_ PVOID                          Parameters
     )
 {
     PSCSI_SUPPORTED_CONTROL_TYPE_LIST   List;
@@ -2098,12 +2098,12 @@ HW_FIND_ADAPTER     AdapterHwFindAdapter;
=20
 ULONG
 AdapterHwFindAdapter(
-    IN  PVOID                               DevExt,
-    IN  PVOID                               Context,
-    IN  PVOID                               BusInformation,
-    IN  PCHAR                               ArgumentString,
-    IN OUT PPORT_CONFIGURATION_INFORMATION  ConfigInfo,
-    OUT PBOOLEAN                            Again
+    _In_ PVOID                              DevExt,
+    _In_ PVOID                              Context,
+    _In_ PVOID                              BusInformation,
+    _In_ PCHAR                              ArgumentString,
+    _Inout_ PPORT_CONFIGURATION_INFORMATION ConfigInfo,
+    _Out_ PBOOLEAN                          Again
     )
 {
     UNREFERENCED_PARAMETER(DevExt);
@@ -2138,7 +2138,7 @@ AdapterHwFindAdapter(
=20
 static FORCEINLINE VOID
 AdapterSetPerformanceOptions(
-    IN  PVOID               DevExt
+    _In_ PVOID              DevExt
     )
 {
     PERF_CONFIGURATION_DATA PerfData;
@@ -2193,7 +2193,7 @@ HW_PASSIVE_INITIALIZE_ROUTINE AdapterHwPassiveInitia=
lize;
=20
 BOOLEAN
 AdapterHwPassiveInitialize(
-    IN  PVOID   DevExt
+    _In_ PVOID      DevExt
     )
 {
     PXENVBD_ADAPTER Adapter =3D DevExt;
@@ -2244,7 +2244,7 @@ HW_INITIALIZE   AdapterHwInitialize;
=20
 BOOLEAN
 AdapterHwInitialize(
-    IN  PVOID   DevExt
+    _In_ PVOID  DevExt
     )
 {
     return StorPortEnablePassiveInitialization(DevExt,
@@ -2255,7 +2255,7 @@ HW_INTERRUPT    AdapterHwInterrupt;
=20
 BOOLEAN
 AdapterHwInterrupt(
-    IN  PVOID   DevExt
+    _In_ PVOID  DevExt
     )
 {
     UNREFERENCED_PARAMETER(DevExt);
@@ -2264,8 +2264,8 @@ AdapterHwInterrupt(
=20
 NTSTATUS
 AdapterDriverEntry(
-    IN  PUNICODE_STRING     RegistryPath,
-    IN  PDRIVER_OBJECT      DriverObject
+    _In_ PUNICODE_STRING    RegistryPath,
+    _In_ PDRIVER_OBJECT     DriverObject
     )
 {
     HW_INITIALIZATION_DATA  InitData;
diff --git a/src/xenvbd/adapter=2Eh b/src/xenvbd/adapter=2Eh
index 7b8b952=2E=2Ef57168a 100644
--- a/src/xenvbd/adapter=2Eh
+++ b/src/xenvbd/adapter=2Eh
@@ -64,75 +64,75 @@ ADAPTER_GET_INTERFACE(Suspend, PXENBUS_SUSPEND_INTERFA=
CE)
=20
 extern BOOLEAN
 AdapterIsTargetEmulated(
-    IN  PXENVBD_ADAPTER Adapter,
-    IN  ULONG           TargetId
+    _In_ PXENVBD_ADAPTER    Adapter,
+    _In_ ULONG              TargetId
     );
=20
 extern BOOLEAN
 AdapterBootEmulated(
-    IN  PXENVBD_ADAPTER Adapter
+    _In_ PXENVBD_ADAPTER    Adapter
     );
=20
 extern VOID
 AdapterRequestReboot(
-    IN  PXENVBD_ADAPTER Adapter
+    _In_ PXENVBD_ADAPTER    Adapter
     );
=20
 extern VOID
 AdapterCompleteSrb(
-    IN  PXENVBD_ADAPTER Adapter,
-    IN  PXENVBD_SRBEXT  SrbExt
+    _In_ PXENVBD_ADAPTER    Adapter,
+    _In_ PXENVBD_SRBEXT     SrbExt
     );
=20
 extern VOID
 AdapterTargetListChanged(
-    IN  PXENVBD_ADAPTER Adapter
+    _In_ PXENVBD_ADAPTER    Adapter
     );
=20
 extern VOID
 AdapterSetDeviceQueueDepth(
-    IN  PXENVBD_ADAPTER Adapter,
-    IN  ULONG           TargetId
+    _In_ PXENVBD_ADAPTER    Adapter,
+    _In_ ULONG              TargetId
     );
=20
 extern PFN_NUMBER
 AdapterGetNextSGEntry(
-    IN  PXENVBD_ADAPTER Adapter,
-    IN  PXENVBD_SRBEXT  SrbExt,
-    IN  ULONG           Existing,
-    OUT PULONG          Offset,
-    OUT PULONG          Length
+    _In_ PXENVBD_ADAPTER    Adapter,
+    _In_ PXENVBD_SRBEXT     SrbExt,
+    _In_ ULONG              Existing,
+    _Out_ PULONG            Offset,
+    _Out_ PULONG            Length
     );
=20
 extern PXENVBD_BOUNCE
 AdapterGetBounce(
-    IN  PXENVBD_ADAPTER Adapter
+    _In_ PXENVBD_ADAPTER    Adapter
     );
=20
 extern VOID
 AdapterPutBounce(
-    IN  PXENVBD_ADAPTER Adapter,
-    IN  PXENVBD_BOUNCE  Bounce
+    _In_ PXENVBD_ADAPTER    Adapter,
+    _In_ PXENVBD_BOUNCE     Bounce
     );
=20
 extern NTSTATUS
 AdapterDispatchPnp(
-    IN  PXENVBD_ADAPTER Adapter,
-    IN  PDEVICE_OBJECT  DeviceObject,
-    IN  PIRP            Irp
+    _In_ PXENVBD_ADAPTER    Adapter,
+    _In_ PDEVICE_OBJECT     DeviceObject,
+    _In_ PIRP               Irp
     );
=20
 extern NTSTATUS
 AdapterDispatchPower(
-    IN  PXENVBD_ADAPTER Adapter,
-    IN  PDEVICE_OBJECT  DeviceObject,
-    IN  PIRP            Irp
+    _In_ PXENVBD_ADAPTER    Adapter,
+    _In_ PDEVICE_OBJECT     DeviceObject,
+    _In_ PIRP               Irp
     );
=20
 extern NTSTATUS
 AdapterDriverEntry(
-    IN  PUNICODE_STRING RegistryPath,
-    IN  PDRIVER_OBJECT  DriverObject
+    _In_ PUNICODE_STRING    RegistryPath,
+    _In_ PDRIVER_OBJECT     DriverObject
     );
=20
 #endif // _XENVBD_ADAPTER_H
diff --git a/src/xenvbd/assert=2Eh b/src/xenvbd/assert=2Eh
index fe64a91=2E=2Eb1e206c 100644
--- a/src/xenvbd/assert=2Eh
+++ b/src/xenvbd/assert=2Eh
@@ -155,10 +155,10 @@ __Bug(
=20
 static __inline BOOLEAN
 _IsZeroMemory(
-    _In_ PCSTR          Caller,
-    _In_ PCSTR          Name,
-    _In_ PVOID          Buffer,
-    _In_ ULONG          Length
+    _In_ PCSTR      Caller,
+    _In_ PCSTR      Name,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length
     )
 {
     ULONG           Offset;
@@ -179,10 +179,10 @@ _IsZeroMemory(
=20
 static __inline BOOLEAN
 _IsZeroMemory(
-    _In_ PCSTR          Caller,
-    _In_ PCSTR          Name,
-    _In_ PVOID          Buffer,
-    _In_ ULONG          Length
+    _In_ PCSTR  Caller,
+    _In_ PCSTR  Name,
+    _In_ PVOID  Buffer,
+    _In_ ULONG  Length
     )
 {
     UNREFERENCED_PARAMETER(Caller);
diff --git a/src/xenvbd/base64=2Ec b/src/xenvbd/base64=2Ec
index 455327a=2E=2E0d37d22 100644
--- a/src/xenvbd/base64=2Ec
+++ b/src/xenvbd/base64=2Ec
@@ -42,7 +42,7 @@
=20
 static FORCEINLINE PVOID
 Base64Allocate(
-    IN  ULONG   Size
+    _In_ ULONG  Size
     )
 {
     return __AllocatePoolWithTag(NonPagedPool,
@@ -52,7 +52,7 @@ Base64Allocate(
=20
 VOID
 Base64Free(
-    IN  PVOID   Buffer
+    _In_ PVOID  Buffer
     )
 {
     __FreePoolWithTag(Buffer, BASE64_POOL_TAG);
@@ -60,7 +60,7 @@ Base64Free(
=20
 static FORCEINLINE UCHAR
 __DecodeChar(
-    IN  CHAR    Char
+    _In_ CHAR   Char
     )
 {
     if (Char >=3D 'A' && Char <=3D 'Z') return Char - 'A';
@@ -74,12 +74,12 @@ __DecodeChar(
=20
 static DECLSPEC_NOINLINE CHAR
 __Decode(
-    IN  PUCHAR  Dst,
-    IN  PCHAR   Src,
-    IN  ULONG   Left
+    _In_ PUCHAR Dst,
+    _In_ PCHAR  Src,
+    _In_ ULONG  Left
     )
 {
-    UCHAR   Values[4];
+    UCHAR       Values[4];
=20
     if (Left < 4)
         return -1;
@@ -113,17 +113,17 @@ __Decode(
=20
 NTSTATUS
 Base64Decode(
-    IN  PCHAR   String,
-    OUT PVOID   *Binary,
-    OUT PULONG  Length
+    _In_ PCHAR      String,
+    _Outptr_ PVOID  *Binary,
+    _Out_ PULONG    Length
     )
 {
-    ULONG       StringLength;
-    ULONG       BlockCount;
-    ULONG       Index;
-    PUCHAR      Buffer;
-    CHAR        Padding;
-    NTSTATUS    status;
+    ULONG           StringLength;
+    ULONG           BlockCount;
+    ULONG           Index;
+    PUCHAR          Buffer;
+    CHAR            Padding;
+    NTSTATUS        status;
=20
     StringLength =3D (ULONG)strlen(String);
=20
diff --git a/src/xenvbd/base64=2Eh b/src/xenvbd/base64=2Eh
index 52b6fac=2E=2E73159ce 100644
--- a/src/xenvbd/base64=2Eh
+++ b/src/xenvbd/base64=2Eh
@@ -37,14 +37,14 @@
=20
 extern VOID
 Base64Free(
-    IN  PVOID   Buffer
+    _In_ PVOID  Buffer
     );
=20
 extern NTSTATUS
 Base64Decode(
-    IN  PCHAR   String,
-    OUT PVOID   *Binary,
-    OUT PULONG  Length
+    _In_ PCHAR      String,
+    _Outptr_ PVOID  *Binary,
+    _Out_ PULONG    Length
     );
=20
 #endif // _XENVBD_BASE64_H
diff --git a/src/xenvbd/debug=2Eh b/src/xenvbd/debug=2Eh
index 84c27f2=2E=2E617ad99 100644
--- a/src/xenvbd/debug=2Eh
+++ b/src/xenvbd/debug=2Eh
@@ -54,13 +54,13 @@
 //
 static __inline VOID
 __DebugMessage(
-    __in    ULONG       Level,
-    __in __nullterminated const CHAR  *Prefix,
-    __in __nullterminated const CHAR  *Format,
+    _In_ ULONG                          Level,
+    _In_ __nullterminated const CHAR    *Prefix,
+    _In_ __nullterminated const CHAR    *Format,
     =2E=2E=2E
     )
 {
-    va_list         Arguments;
+    va_list                             Arguments;
=20
     va_start(Arguments, Format);
=20
diff --git a/src/xenvbd/driver=2Ec b/src/xenvbd/driver=2Ec
index 676246e=2E=2E1b6b191 100644
--- a/src/xenvbd/driver=2Ec
+++ b/src/xenvbd/driver=2Ec
@@ -69,7 +69,7 @@ static XENVBD_DRIVER Driver;
=20
 VOID
 DriverSetAdapter(
-    IN  PVOID   Adapter
+    _In_ PVOID  Adapter
     )
 {
     ASSERT3P(Driver=2EAdapter, =3D=3D, NULL);
@@ -95,8 +95,8 @@ DriverGetParametersKey(
=20
 NTSTATUS
 DriverDispatchPnp(
-    IN  PDEVICE_OBJECT  DeviceObject,
-    IN  PIRP            Irp
+    _In_ PDEVICE_OBJECT DeviceObject,
+    _In_ PIRP           Irp
     )
 {
     return Driver=2EStorPortDispatchPnp(DeviceObject, Irp);
@@ -104,20 +104,20 @@ DriverDispatchPnp(
=20
 NTSTATUS
 DriverDispatchPower(
-    IN  PDEVICE_OBJECT  DeviceObject,
-    IN  PIRP            Irp
+    _In_ PDEVICE_OBJECT DeviceObject,
+    _In_ PIRP           Irp
     )
 {
     return Driver=2EStorPortDispatchPower(DeviceObject, Irp);
 }
=20
-__drv_dispatchType(IRP_MJ_PNP)
+_Dispatch_type_(IRP_MJ_PNP)
 DRIVER_DISPATCH             DispatchPnp;
=20
 NTSTATUS=20
 DispatchPnp(
-    IN PDEVICE_OBJECT   DeviceObject,
-    IN PIRP             Irp
+    _In_ PDEVICE_OBJECT DeviceObject,
+    _In_ PIRP           Irp
     )
 {
     if (Driver=2EAdapter =3D=3D NULL)
@@ -126,13 +126,13 @@ DispatchPnp(
     return AdapterDispatchPnp(Driver=2EAdapter, DeviceObject, Irp);
 }
=20
-__drv_dispatchType(IRP_MJ_POWER)
+_Dispatch_type_(IRP_MJ_POWER)
 DRIVER_DISPATCH             DispatchPower;
=20
 NTSTATUS=20
 DispatchPower(
-    IN PDEVICE_OBJECT   DeviceObject,
-    IN PIRP             Irp
+    _In_ PDEVICE_OBJECT DeviceObject,
+    _In_ PIRP           Irp
     )
 {
     if (Driver=2EAdapter =3D=3D NULL)
@@ -145,7 +145,7 @@ DRIVER_UNLOAD           DriverUnload;
=20
 VOID
 DriverUnload(
-    IN  PDRIVER_OBJECT  DriverObject
+    _In_ PDRIVER_OBJECT DriverObject
     )
 {
     Verbose("%u=2E%u=2E%u=2E%u (%02u/%02u/%04u)\n",
@@ -170,7 +170,7 @@ DriverUnload(
     RegistryTeardown();
 }
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 static FORCEINLINE VOID
 __DriverInitializeOverrides(
     VOID
@@ -216,15 +216,15 @@ __DriverInitializeOverrides(
     }
 }
=20
-__checkReturn
+_Check_return_
 _Success_(return)
 BOOLEAN
 DriverGetFeatureOverride(
-    IN  XENVBD_FEATURE   Feature,
-    OUT PULONG           Value
+    _In_ XENVBD_FEATURE Feature,
+    _Out_ PULONG        Value
     )
 {
-    BOOLEAN              Present =3D FALSE;
+    BOOLEAN             Present =3D FALSE;
=20
     if ((ULONG)Feature < ARRAYSIZE(Driver=2EFeatureOverride)) {
         Present =3D Driver=2EFeatureOverride[Feature]=2EPresent;
@@ -234,10 +234,10 @@ DriverGetFeatureOverride(
     return Present;
 }
=20
-__checkReturn
+_Check_return_
 const CHAR *
 DriverGetFeatureName(
-    IN  XENVBD_FEATURE  Feature
+    _In_ XENVBD_FEATURE Feature
     )
 {
     return ((ULONG)Feature < ARRAYSIZE(Driver=2EFeatureOverride)) ?
@@ -271,8 +271,8 @@ DRIVER_INITIALIZE   DriverEntry;
=20
 NTSTATUS
 DriverEntry(
-    IN  PDRIVER_OBJECT      DriverObject,
-    IN  PUNICODE_STRING     RegistryPath
+    _In_ PDRIVER_OBJECT     DriverObject,
+    _In_ PUNICODE_STRING    RegistryPath
     )
 {
     HANDLE                  ParametersKey;
diff --git a/src/xenvbd/driver=2Eh b/src/xenvbd/driver=2Eh
index 5c5df45=2E=2Ed09140a 100644
--- a/src/xenvbd/driver=2Eh
+++ b/src/xenvbd/driver=2Eh
@@ -42,7 +42,7 @@
=20
 extern VOID
 DriverSetAdapter(
-    IN  PVOID   Adapter
+    _In_ PVOID  Adapter
     );
=20
 extern HANDLE
@@ -52,14 +52,14 @@ DriverGetParametersKey(
=20
 extern NTSTATUS
 DriverDispatchPnp(
-    IN  PDEVICE_OBJECT  DeviceObject,
-    IN  PIRP            Irp
+    _In_ PDEVICE_OBJECT DeviceObject,
+    _In_ PIRP           Irp
     );
=20
 extern NTSTATUS
 DriverDispatchPower(
-    IN  PDEVICE_OBJECT  DeviceObject,
-    IN  PIRP            Irp
+    _In_ PDEVICE_OBJECT DeviceObject,
+    _In_ PIRP           Irp
     );
=20
 // Registry overrides for driver features
@@ -81,18 +81,18 @@ typedef enum _XENVBD_FEATURE {
     NumberOfFeatures
 } XENVBD_FEATURE, *PXENVBD_FEATURE;
=20
-__checkReturn
+_Check_return_
 _Success_(return)
 extern BOOLEAN
 DriverGetFeatureOverride(
-    IN  XENVBD_FEATURE   Feature,
-    OUT PULONG           Value
+    _In_ XENVBD_FEATURE Feature,
+    _Out_ PULONG        Value
     );
=20
-__checkReturn
+_Check_return_
 extern const CHAR *
 DriverGetFeatureName(
-    IN  XENVBD_FEATURE  Feature
+    _In_ XENVBD_FEATURE Feature
     );
=20
 extern ULONG
diff --git a/src/xenvbd/frontend=2Ec b/src/xenvbd/frontend=2Ec
index 5311dd5=2E=2E98bedb3 100644
--- a/src/xenvbd/frontend=2Ec
+++ b/src/xenvbd/frontend=2Ec
@@ -98,7 +98,7 @@ struct _XENVBD_FRONTEND {
=20
 static const PCHAR
 __XenvbdStateName(
-    IN  XENVBD_STATE                        State
+    _In_ XENVBD_STATE   State
     )
 {
     switch (State) {
@@ -167,13 +167,13 @@ FRONTEND_GET_PROPERTY_PTR(DiskInfo, PXENVBD_DISKINFO=
)
=20
 //=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D
 #define FRONTEND_POOL_TAG            'tnFX'
-__checkReturn
+_Check_return_
 __drv_allocatesMem(mem)
-__bcount(Size)
+_Writable_bytes_(Size)
 static FORCEINLINE PVOID
 #pragma warning(suppress: 28195)
 __FrontendAlloc(
-    __in  ULONG Size
+    _In_ ULONG  Size
     )
 {
     return __AllocatePoolWithTag(NonPagedPool, Size, FRONTEND_POOL_TAG);
@@ -182,7 +182,7 @@ __FrontendAlloc(
 static FORCEINLINE VOID
 #pragma warning(suppress: 28197)
 __FrontendFree(
-    __in __drv_freesMem(mem) PVOID Buffer
+    _In_ __drv_freesMem(mem) PVOID  Buffer
     )
 {
     if (Buffer)
@@ -191,8 +191,8 @@ __FrontendFree(
=20
 VOID
 FrontendRemoveFeature(
-    IN  PXENVBD_FRONTEND        Frontend,
-    IN  UCHAR                   BlkifOperation
+    _In_ PXENVBD_FRONTEND   Frontend,
+    _In_ UCHAR              BlkifOperation
     )
 {
     switch (BlkifOperation) {
@@ -219,9 +219,9 @@ FrontendRemoveFeature(
=20
 PVOID
 FrontendGetInquiryOverride(
-    IN  PXENVBD_FRONTEND    Frontend,
-    IN  UCHAR               PageCode,
-    OUT PULONG              Length
+    _In_ PXENVBD_FRONTEND   Frontend,
+    _In_ UCHAR              PageCode,
+    _Out_ PULONG            Length
     )
 {
     switch (PageCode) {
@@ -239,7 +239,7 @@ FrontendGetInquiryOverride(
=20
 VOID
 FrontendSetEjected(
-    IN  PXENVBD_FRONTEND    Frontend
+    _In_ PXENVBD_FRONTEND   Frontend
     )
 {
     (VOID) XENBUS_STORE(Printf,
@@ -252,7 +252,7 @@ FrontendSetEjected(
=20
 VOID
 FrontendSetEjectFailed(
-    IN  PXENVBD_FRONTEND    Frontend
+    _In_ PXENVBD_FRONTEND   Frontend
     )
 {
     (VOID) XENBUS_STORE(Printf,
@@ -265,9 +265,9 @@ FrontendSetEjectFailed(
=20
 VOID
 FrontendSetDeviceUsage(
-    IN  PXENVBD_FRONTEND                Frontend,
-    IN  DEVICE_USAGE_NOTIFICATION_TYPE  Type,
-    IN  BOOLEAN                         Value
+    _In_ PXENVBD_FRONTEND               Frontend,
+    _In_ DEVICE_USAGE_NOTIFICATION_TYPE Type,
+    _In_ BOOLEAN                        Value
     )
 {
     PCHAR                               UsageName;
@@ -304,15 +304,15 @@ FrontendSetDeviceUsage(
 }
=20
 //=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D
-__drv_requiresIRQL(DISPATCH_LEVEL)
+_IRQL_requires_(DISPATCH_LEVEL)
 static NTSTATUS
 __UpdateBackendPath(
-    __in  PXENVBD_FRONTEND        Frontend
+    _In_ PXENVBD_FRONTEND   Frontend
     )
 {
-    NTSTATUS    Status;
-    PCHAR       Value;
-    ULONG       Length;
+    NTSTATUS                Status;
+    PCHAR                   Value;
+    ULONG                   Length;
=20
     Status =3D XENBUS_STORE(Read,
                           &Frontend->StoreInterface,
@@ -360,17 +360,17 @@ __UpdateBackendPath(
=20
     return Status;
 }
-__drv_maxIRQL(DISPATCH_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
 static NTSTATUS
 __ReadState(
-    __in  PXENVBD_FRONTEND        Frontend,
-    __in_opt PXENBUS_STORE_TRANSACTION Transaction,
-    __in  PCHAR                   Path,
-    __out XenbusState*            State
+    _In_ PXENVBD_FRONTEND               Frontend,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_ PCHAR                          Path,
+    _Out_ XenbusState                   *State
     )
 {
-    NTSTATUS        Status;
-    PCHAR           Buffer;
+    NTSTATUS                            Status;
+    PCHAR                               Buffer;
=20
     Status =3D XENBUS_STORE(Read,
                           &Frontend->StoreInterface,
@@ -392,18 +392,18 @@ fail:
     *State =3D XenbusStateUnknown;
     return Status;
 }
-__drv_requiresIRQL(DISPATCH_LEVEL)
+_IRQL_requires_(DISPATCH_LEVEL)
 static NTSTATUS
 __WaitState(
-    __in  PXENVBD_FRONTEND        Frontend,
-    __inout  XenbusState*         State
+    _In_ PXENVBD_FRONTEND   Frontend,
+    _Inout_ XenbusState     *State
     )
 {
-    NTSTATUS        Status;
-    XenbusState     OldState =3D *State;
-    PXENBUS_STORE_WATCH Watch;
-    KEVENT          Event;
-    LARGE_INTEGER   Timeout;
+    NTSTATUS                Status;
+    XenbusState             OldState =3D *State;
+    PXENBUS_STORE_WATCH     Watch;
+    KEVENT                  Event;
+    LARGE_INTEGER           Timeout;
=20
     LARGE_INTEGER   StartTime;
     LARGE_INTEGER   CurrentTime;
@@ -469,14 +469,14 @@ fail1:
=20
     return Status;
 }
-__drv_requiresIRQL(DISPATCH_LEVEL)
+_IRQL_requires_(DISPATCH_LEVEL)
 static NTSTATUS
 ___SetState(
-    __in  PXENVBD_FRONTEND        Frontend,
-    __in  XenbusState             State
+    _In_ PXENVBD_FRONTEND   Frontend,
+    _In_ XenbusState        State
     )
 {
-    NTSTATUS    Status;
+    NTSTATUS                Status;
=20
     Status =3D XENBUS_STORE(Printf,
                           &Frontend->StoreInterface,
@@ -495,17 +495,17 @@ ___SetState(
=20
     return Status;
 }
-__drv_requiresIRQL(DISPATCH_LEVEL)
+_IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE VOID
 __CheckBackendForEject(
-    __in  PXENVBD_FRONTEND        Frontend
+    _In_ PXENVBD_FRONTEND   Frontend
     )
 {
-    XenbusState     FrontendState;
-    XenbusState     BackendState;
-    BOOLEAN         Online;
-    ULONG           Attempt;
-    NTSTATUS        Status;
+    XenbusState             FrontendState;
+    XenbusState             BackendState;
+    BOOLEAN                 Online;
+    ULONG                   Attempt;
+    NTSTATUS                Status;
=20
 #pragma prefast(suppress:28649)
     if (Frontend->FrontendPath =3D=3D NULL)
@@ -588,9 +588,9 @@ abort:
=20
 static FORCEINLINE BOOLEAN
 FrontendReadFeature(
-    IN  PXENVBD_FRONTEND    Frontend,
-    IN  XENVBD_FEATURE      Feature,
-    IN  PBOOLEAN            Value
+    _In_ PXENVBD_FRONTEND   Frontend,
+    _In_ XENVBD_FEATURE     Feature,
+    _In_ PBOOLEAN           Value
 )
 {
     NTSTATUS                status;
@@ -629,9 +629,9 @@ FrontendReadFeature(
=20
 static FORCEINLINE BOOLEAN
 FrontendReadDiskFeature(
-    IN  PXENVBD_FRONTEND    Frontend,
-    IN  PCHAR               Name,
-    IN  PBOOLEAN            Value
+    _In_ PXENVBD_FRONTEND   Frontend,
+    _In_ PCHAR              Name,
+    _In_ PBOOLEAN           Value
     )
 {
     NTSTATUS                status;
@@ -658,10 +658,10 @@ FrontendReadDiskFeature(
=20
 static FORCEINLINE BOOLEAN
 FrontendReadValue32(
-    IN  PXENVBD_FRONTEND    Frontend,
-    IN  XENVBD_FEATURE      Feature,
-    IN  BOOLEAN             AllowOverride,
-    IN  PULONG              Value
+    _In_ PXENVBD_FRONTEND   Frontend,
+    _In_ XENVBD_FEATURE     Feature,
+    _In_ BOOLEAN            AllowOverride,
+    _In_ PULONG             Value
 )
 {
     NTSTATUS                status;
@@ -701,9 +701,9 @@ FrontendReadValue32(
=20
 static FORCEINLINE BOOLEAN
 FrontendReadDiskValue32(
-    IN  PXENVBD_FRONTEND    Frontend,
-    IN  PCHAR               Name,
-    IN  PULONG              Value
+    _In_ PXENVBD_FRONTEND   Frontend,
+    _In_ PCHAR              Name,
+    _In_ PULONG             Value
 )
 {
     NTSTATUS                status;
@@ -730,9 +730,9 @@ FrontendReadDiskValue32(
=20
 static FORCEINLINE BOOLEAN
 FrontendReadValue64(
-    IN  PXENVBD_FRONTEND    Frontend,
-    IN  PCHAR               Name,
-    IN OUT PULONG64         Value
+    _In_ PXENVBD_FRONTEND   Frontend,
+    _In_ PCHAR              Name,
+    _Inout_ PULONG64        Value
     )
 {
     NTSTATUS                status;
@@ -759,7 +759,7 @@ FrontendReadValue64(
=20
 static FORCEINLINE ULONG
 __Size(
-    __in  PXENVBD_DISKINFO  Info
+    _In_ PXENVBD_DISKINFO   Info
     )
 {
     ULONG64                 MBytes =3D Info->BlkifSectorCount >> (20 - BL=
KIF_SECTOR_SHIFT);
@@ -771,7 +771,7 @@ __Size(
 }
 static FORCEINLINE PCHAR
 __Units(
-    __in  PXENVBD_DISKINFO  Info
+    _In_ PXENVBD_DISKINFO   Info
     )
 {
     ULONG64                 MBytes =3D Info->BlkifSectorCount >> (20 - BL=
KIF_SECTOR_SHIFT);
@@ -784,7 +784,7 @@ __Units(
=20
 static FORCEINLINE VOID
 FrontendReadFeatures(
-    IN  PXENVBD_FRONTEND    Frontend
+    _In_ PXENVBD_FRONTEND   Frontend
     )
 {
     BOOLEAN                 DiscardFeature =3D FALSE;
@@ -853,7 +853,7 @@ FrontendReadFeatures(
=20
 static FORCEINLINE VOID
 FrontendReadDiskInfo(
-    IN  PXENVBD_FRONTEND    Frontend
+    _In_ PXENVBD_FRONTEND   Frontend
     )
 {
     BOOLEAN                 Changed;
@@ -928,7 +928,7 @@ FrontendReadDiskInfo(
=20
 static FORCEINLINE VOID
 FrontendReadInquiryOverrides(
-    IN  PXENVBD_FRONTEND    Frontend
+    _In_ PXENVBD_FRONTEND   Frontend
     )
 {
     PCHAR                   Buffer;
@@ -968,14 +968,14 @@ FrontendReadInquiryOverrides(
 }
=20
 //=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D
-__drv_requiresIRQL(DISPATCH_LEVEL)
+_IRQL_requires_(DISPATCH_LEVEL)
 static NTSTATUS
 FrontendClose(
-    __in  PXENVBD_FRONTEND        Frontend
+    _In_ PXENVBD_FRONTEND   Frontend
     )
 {
-    NTSTATUS        Status;
-    XenbusState     BackendState;
+    NTSTATUS                Status;
+    XenbusState             BackendState;
=20
     // unwatch backend (null check for initial close operation)
     if (Frontend->BackendWatch)
@@ -1032,14 +1032,14 @@ fail2:
 fail1:
     return Status;
 }
-__drv_requiresIRQL(DISPATCH_LEVEL)
+_IRQL_requires_(DISPATCH_LEVEL)
 static NTSTATUS
 FrontendPrepare(
-    __in  PXENVBD_FRONTEND        Frontend
+    _In_ PXENVBD_FRONTEND   Frontend
     )
 {
-    NTSTATUS        Status;
-    XenbusState     BackendState;
+    NTSTATUS                Status;
+    XenbusState             BackendState;
=20
     // get/update backend path
     Status =3D __UpdateBackendPath(Frontend);
@@ -1133,7 +1133,7 @@ fail1:
 }
 static VOID
 FrontendSetNumQueues(
-    IN  PXENVBD_FRONTEND    Frontend
+    _In_ PXENVBD_FRONTEND   Frontend
     )
 {
     PCHAR                   Buffer;
@@ -1163,14 +1163,14 @@ FrontendSetNumQueues(
             __FrontendGetTargetId(Frontend),
             Frontend->NumQueues);
 }
-__drv_requiresIRQL(DISPATCH_LEVEL)
+_IRQL_requires_(DISPATCH_LEVEL)
 static NTSTATUS
 FrontendConnect(
-    __in  PXENVBD_FRONTEND        Frontend
+    _In_ PXENVBD_FRONTEND   Frontend
     )
 {
-    NTSTATUS        Status;
-    XenbusState     BackendState;
+    NTSTATUS                Status;
+    XenbusState             BackendState;
=20
     FrontendSetNumQueues(Frontend);
=20
@@ -1317,10 +1317,10 @@ fail1:
     Frontend->NumQueues =3D 0;
     return Status;
 }
-__drv_requiresIRQL(DISPATCH_LEVEL)
+_IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE VOID
 FrontendDisconnect(
-    __in  PXENVBD_FRONTEND        Frontend
+    _In_ PXENVBD_FRONTEND   Frontend
     )
 {
     RingDisconnect(Frontend->Ring);
@@ -1340,10 +1340,10 @@ FrontendDisconnect(
=20
     RtlZeroMemory(&Frontend->Features, sizeof(XENVBD_FEATURES));
 }
-__drv_requiresIRQL(DISPATCH_LEVEL)
+_IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE VOID
 FrontendEnable(
-    __in  PXENVBD_FRONTEND        Frontend
+    _In_ PXENVBD_FRONTEND   Frontend
     )
 {
     Frontend->Caps=2EConnected =3D TRUE;
@@ -1352,10 +1352,10 @@ FrontendEnable(
     GranterEnable(Frontend->Granter);
     RingEnable(Frontend->Ring);
 }
-__drv_requiresIRQL(DISPATCH_LEVEL)
+_IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE VOID
 FrontendDisable(
-    __in  PXENVBD_FRONTEND        Frontend
+    _In_ PXENVBD_FRONTEND   Frontend
     )
 {
     Frontend->Caps=2EConnected =3D FALSE;
@@ -1363,10 +1363,10 @@ FrontendDisable(
     RingDisable(Frontend->Ring);
     GranterDisable(Frontend->Granter);
 }
-__drv_requiresIRQL(DISPATCH_LEVEL)
+_IRQL_requires_(DISPATCH_LEVEL)
 static FORCEINLINE BOOLEAN
 FrontendIsPoisoned(
-    __in  PXENVBD_FRONTEND          Frontend
+    _In_ PXENVBD_FRONTEND   Frontend
     )
 {
     return RingIsPoisoned(Frontend->Ring);
@@ -1378,13 +1378,13 @@ _IRQL_requires_(DISPATCH_LEVEL)
 _Requires_lock_held_(Frontend->StateLock)
 static DECLSPEC_NOINLINE NTSTATUS
 __FrontendSetState(
-    __in  PXENVBD_FRONTEND        Frontend,
-    __in  XENVBD_STATE            State
+    _In_ PXENVBD_FRONTEND   Frontend,
+    _In_ XENVBD_STATE       State
     )
 {
-    NTSTATUS    Status;
-    const ULONG TargetId =3D Frontend->TargetId;
-    BOOLEAN     Failed =3D FALSE;
+    NTSTATUS                Status;
+    const ULONG             TargetId =3D Frontend->TargetId;
+    BOOLEAN                 Failed =3D FALSE;
=20
     Trace("Target[%d] @ (%d) =3D=3D=3D=3D=3D>\n", TargetId, KeGetCurrentI=
rql());
     Verbose("Target[%d] : %s ----> %s\n",=20
@@ -1554,10 +1554,10 @@ __FrontendSetState(
     return Failed ? STATUS_UNSUCCESSFUL : STATUS_SUCCESS;
 }
=20
-__drv_requiresIRQL(DISPATCH_LEVEL)
+_IRQL_requires_(DISPATCH_LEVEL)
 static DECLSPEC_NOINLINE VOID
 FrontendSuspendCallback(
-    IN  PVOID           Argument
+    _In_ PVOID          Argument
     )
 {
     PXENVBD_FRONTEND    Frontend =3D Argument;
@@ -1587,8 +1587,8 @@ FrontendSuspendCallback(
=20
 static DECLSPEC_NOINLINE VOID
 FrontendDebugCallback(
-    IN  PVOID           Argument,
-    IN  BOOLEAN         Crashing
+    _In_ PVOID          Argument,
+    _In_ BOOLEAN        Crashing
     )
 {
     PXENVBD_FRONTEND    Frontend =3D Argument;
@@ -1668,11 +1668,11 @@ FrontendDebugCallback(
                  Frontend->DiskInfo=2EDiskInfo);
 }
=20
-__checkReturn
-__drv_maxIRQL(DISPATCH_LEVEL)
+_Check_return_
+_IRQL_requires_max_(DISPATCH_LEVEL)
 NTSTATUS
 FrontendD3ToD0(
-    IN  PXENVBD_FRONTEND    Frontend
+    _In_ PXENVBD_FRONTEND   Frontend
     )
 {
     PXENVBD_ADAPTER         Adapter =3D TargetGetAdapter(Frontend->Target=
);
@@ -1749,10 +1749,10 @@ fail1:
     return status;
 }
=20
-__drv_maxIRQL(DISPATCH_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
 VOID
 FrontendD0ToD3(
-    IN  PXENVBD_FRONTEND    Frontend
+    _In_ PXENVBD_FRONTEND   Frontend
     )
 {
     KIRQL                   Irql;
@@ -1789,11 +1789,11 @@ FrontendD0ToD3(
     KeReleaseSpinLock(&Frontend->StateLock, Irql);
 }
=20
-__checkReturn
+_Check_return_
 NTSTATUS
 FrontendSetState(
-    IN  PXENVBD_FRONTEND    Frontend,
-    IN  XENVBD_STATE        State
+    _In_ PXENVBD_FRONTEND   Frontend,
+    _In_ XENVBD_STATE       State
     )
 {
     KIRQL                   Irql;
@@ -1807,11 +1807,11 @@ FrontendSetState(
     return status;
 }
=20
-__checkReturn
+_Check_return_
 static DECLSPEC_NOINLINE NTSTATUS
 FrontendBackend(
-    __in PXENVBD_THREAD              Thread,
-    __in PVOID                       Context
+    _In_ PXENVBD_THREAD             Thread,
+    _In_ PVOID                      Context
     )
 {
     PXENVBD_FRONTEND                Frontend =3D Context;
@@ -1837,7 +1837,7 @@ FrontendBackend(
=20
 NTSTATUS
 FrontendReset(
-    IN  PXENVBD_FRONTEND    Frontend
+    _In_ PXENVBD_FRONTEND   Frontend
     )
 {
     NTSTATUS                status;
@@ -1863,14 +1863,14 @@ fail1:
=20
 NTSTATUS
 FrontendCreate(
-    IN  PXENVBD_TARGET      Target,
-    IN  PCHAR               DeviceId,
-    IN  ULONG               TargetId,
-    OUT PXENVBD_FRONTEND*   _Frontend
+    _In_ PXENVBD_TARGET         Target,
+    _In_ PCHAR                  DeviceId,
+    _In_ ULONG                  TargetId,
+    _Outptr_ PXENVBD_FRONTEND   *_Frontend
     )
 {
-    PXENVBD_FRONTEND        Frontend;
-    NTSTATUS                status;
+    PXENVBD_FRONTEND            Frontend;
+    NTSTATUS                    status;
=20
     Trace("Target[%d] @ (%d) =3D=3D=3D=3D=3D>\n", TargetId, KeGetCurrentI=
rql());
=20
@@ -1959,7 +1959,7 @@ fail1:
=20
 VOID
 FrontendDestroy(
-    IN  PXENVBD_FRONTEND    Frontend
+    _In_ PXENVBD_FRONTEND   Frontend
     )
 {
     const ULONG             TargetId =3D Frontend->TargetId;
diff --git a/src/xenvbd/frontend=2Eh b/src/xenvbd/frontend=2Eh
index 18cc4fb=2E=2Ea2d8762 100644
--- a/src/xenvbd/frontend=2Eh
+++ b/src/xenvbd/frontend=2Eh
@@ -87,70 +87,70 @@ typedef struct _XENVBD_FRONTEND XENVBD_FRONTEND, *PXEN=
VBD_FRONTEND;
=20
 extern VOID
 FrontendRemoveFeature(
-    IN  PXENVBD_FRONTEND        Frontend,
-    IN  UCHAR                   BlkifOperation
+    _In_ PXENVBD_FRONTEND   Frontend,
+    _In_ UCHAR              BlkifOperation
     );
=20
 extern PVOID
 FrontendGetInquiryOverride(
-    IN  PXENVBD_FRONTEND    Frontend,
-    IN  UCHAR               PageCode,
-    OUT PULONG              Length
+    _In_ PXENVBD_FRONTEND   Frontend,
+    _In_ UCHAR              PageCode,
+    _Out_ PULONG            Length
     );
=20
 extern VOID
 FrontendSetEjected(
-    IN  PXENVBD_FRONTEND    Frontend
+    _In_ PXENVBD_FRONTEND   Frontend
     );
=20
 extern VOID
 FrontendSetEjectFailed(
-    IN  PXENVBD_FRONTEND    Frontend
+    _In_ PXENVBD_FRONTEND   Frontend
     );
=20
 extern VOID
 FrontendSetDeviceUsage(
-    IN  PXENVBD_FRONTEND                Frontend,
-    IN  DEVICE_USAGE_NOTIFICATION_TYPE  Type,
-    IN  BOOLEAN                         Value
+    _In_ PXENVBD_FRONTEND               Frontend,
+    _In_ DEVICE_USAGE_NOTIFICATION_TYPE Type,
+    _In_ BOOLEAN                        Value
     );
=20
-__checkReturn
-__drv_maxIRQL(DISPATCH_LEVEL)
+_Check_return_
+_IRQL_requires_max_(DISPATCH_LEVEL)
 extern NTSTATUS
 FrontendD3ToD0(
-    IN  PXENVBD_FRONTEND    Frontend
+    _In_ PXENVBD_FRONTEND   Frontend
     );
=20
-__drv_maxIRQL(DISPATCH_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
 extern VOID
 FrontendD0ToD3(
-    IN  PXENVBD_FRONTEND    Frontend
+    _In_ PXENVBD_FRONTEND   Frontend
     );
=20
-__checkReturn
+_Check_return_
 extern NTSTATUS
 FrontendSetState(
-    IN  PXENVBD_FRONTEND    Frontend,
-    IN  XENVBD_STATE        State
+    _In_ PXENVBD_FRONTEND   Frontend,
+    _In_ XENVBD_STATE       State
     );
=20
 extern NTSTATUS
 FrontendReset(
-    IN  PXENVBD_FRONTEND    Frontend
+    _In_ PXENVBD_FRONTEND   Frontend
     );
=20
 extern NTSTATUS
 FrontendCreate(
-    IN  PXENVBD_TARGET      Target,
-    IN  PCHAR               DeviceId,
-    IN  ULONG               TargetId,
-    OUT PXENVBD_FRONTEND*   _Frontend
+    _In_ PXENVBD_TARGET         Target,
+    _In_ PCHAR                  DeviceId,
+    _In_ ULONG                  TargetId,
+    _Outptr_ PXENVBD_FRONTEND   *_Frontend
     );
=20
 extern VOID
 FrontendDestroy(
-    IN  PXENVBD_FRONTEND    Frontend
+    _In_ PXENVBD_FRONTEND   Frontend
     );
=20
 #define FRONTEND_GET_PROPERTY(_name, _type)     \
diff --git a/src/xenvbd/granter=2Ec b/src/xenvbd/granter=2Ec
index c258cae=2E=2Ed1cbbfe 100644
--- a/src/xenvbd/granter=2Ec
+++ b/src/xenvbd/granter=2Ec
@@ -63,7 +63,7 @@ struct _XENVBD_GRANTER {
=20
 static FORCEINLINE PVOID
 __GranterAllocate(
-    IN  ULONG   Length
+    _In_ ULONG  Length
     )
 {
     return __AllocatePoolWithTag(NonPagedPool, Length, GRANTER_POOL_TAG);
@@ -71,7 +71,7 @@ __GranterAllocate(
=20
 static FORCEINLINE VOID
 __GranterFree(
-    IN  PVOID   Buffer
+    _In_ PVOID  Buffer
     )
 {
     if (Buffer)
@@ -80,11 +80,11 @@ __GranterFree(
=20
 NTSTATUS
 GranterCreate(
-    IN  PXENVBD_FRONTEND    Frontend,
-    OUT PXENVBD_GRANTER     *Granter
+    _In_ PXENVBD_FRONTEND       Frontend,
+    _Outptr_ PXENVBD_GRANTER    *Granter
     )
 {
-    NTSTATUS                status;
+    NTSTATUS                    status;
=20
     status =3D STATUS_NO_MEMORY;
     *Granter =3D __GranterAllocate(sizeof(XENVBD_GRANTER));
@@ -102,7 +102,7 @@ fail1:
=20
 VOID
 GranterDestroy(
-    IN  PXENVBD_GRANTER Granter
+    _In_ PXENVBD_GRANTER    Granter
     )
 {
     Granter->Frontend =3D NULL;
@@ -114,9 +114,9 @@ GranterDestroy(
 }
=20
 static VOID
-__drv_requiresIRQL(DISPATCH_LEVEL)
+_IRQL_requires_(DISPATCH_LEVEL)
 GranterAcquireLock(
-    IN  PVOID       Argument
+    _In_ PVOID      Argument
     )
 {
     PXENVBD_GRANTER Granter =3D Argument;
@@ -127,9 +127,9 @@ GranterAcquireLock(
 }
=20
 static VOID
-__drv_requiresIRQL(DISPATCH_LEVEL)
+_IRQL_requires_(DISPATCH_LEVEL)
 GranterReleaseLock(
-    IN  PVOID       Argument
+    _In_ PVOID      Argument
     )
 {
     PXENVBD_GRANTER Granter =3D Argument;
@@ -142,8 +142,8 @@ GranterReleaseLock(
=20
 static DECLSPEC_NOINLINE VOID
 GranterDebugCallback(
-    IN  PVOID       Argument,
-    IN  BOOLEAN     Crashing
+    _In_ PVOID      Argument,
+    _In_ BOOLEAN    Crashing
     )
 {
     PXENVBD_GRANTER Granter =3D Argument;
@@ -168,12 +168,12 @@ GranterDebugCallback(
=20
 NTSTATUS
 GranterConnect(
-    IN  PXENVBD_GRANTER Granter
+    _In_ PXENVBD_GRANTER    Granter
     )
 {
-    PXENVBD_ADAPTER     Adapter =3D TargetGetAdapter(FrontendGetTarget(Gr=
anter->Frontend));
-    CHAR                Name[MAXNAMELEN];
-    NTSTATUS            status;
+    PXENVBD_ADAPTER         Adapter =3D TargetGetAdapter(FrontendGetTarge=
t(Granter->Frontend));
+    CHAR                    Name[MAXNAMELEN];
+    NTSTATUS                status;
=20
     ASSERT(Granter->Connected =3D=3D FALSE);
=20
@@ -244,8 +244,8 @@ fail1:
=20
 NTSTATUS
 GranterStoreWrite(
-    IN  PXENVBD_GRANTER Granter,
-    IN  PVOID           Transaction
+    _In_ PXENVBD_GRANTER    Granter,
+    _In_ PVOID              Transaction
     )
 {
     UNREFERENCED_PARAMETER(Granter);
@@ -256,7 +256,7 @@ GranterStoreWrite(
=20
 VOID
 GranterEnable(
-    IN  PXENVBD_GRANTER Granter
+    _In_ PXENVBD_GRANTER    Granter
     )
 {
     ASSERT(Granter->Enabled =3D=3D FALSE);
@@ -266,7 +266,7 @@ GranterEnable(
=20
 VOID
 GranterDisable(
-    IN  PXENVBD_GRANTER Granter
+    _In_ PXENVBD_GRANTER    Granter
     )
 {
     ASSERT(Granter->Enabled =3D=3D TRUE);
@@ -276,7 +276,7 @@ GranterDisable(
=20
 VOID
 GranterDisconnect(
-    IN  PXENVBD_GRANTER Granter
+    _In_ PXENVBD_GRANTER    Granter
     )
 {
     ASSERT(Granter->Connected =3D=3D TRUE);
@@ -305,10 +305,10 @@ GranterDisconnect(
=20
 NTSTATUS
 GranterGet(
-    IN  PXENVBD_GRANTER     Granter,
-    IN  PFN_NUMBER          Pfn,
-    IN  BOOLEAN             ReadOnly,
-    OUT PVOID               *Handle
+    _In_ PXENVBD_GRANTER    Granter,
+    _In_ PFN_NUMBER         Pfn,
+    _In_ BOOLEAN            ReadOnly,
+    _Outptr_ PVOID          *Handle
     )
 {
     PXENBUS_GNTTAB_ENTRY    Entry;
@@ -346,8 +346,8 @@ fail1:
=20
 VOID
 GranterPut(
-    IN  PXENVBD_GRANTER     Granter,
-    IN  PVOID               Handle
+    _In_ PXENVBD_GRANTER    Granter,
+    _In_ PVOID              Handle
     )
 {
     PXENBUS_GNTTAB_ENTRY    Entry =3D Handle;
@@ -368,8 +368,8 @@ GranterPut(
=20
 ULONG
 GranterReference(
-    IN  PXENVBD_GRANTER     Granter,
-    IN  PVOID               Handle
+    _In_ PXENVBD_GRANTER    Granter,
+    _In_ PVOID              Handle
     )
 {
     PXENBUS_GNTTAB_ENTRY    Entry =3D Handle;
diff --git a/src/xenvbd/granter=2Eh b/src/xenvbd/granter=2Eh
index afe41d5=2E=2Ec59e65d 100644
--- a/src/xenvbd/granter=2Eh
+++ b/src/xenvbd/granter=2Eh
@@ -41,59 +41,59 @@ typedef struct _XENVBD_GRANTER XENVBD_GRANTER, *PXENVB=
D_GRANTER;
=20
 extern NTSTATUS
 GranterCreate(
-    IN  PXENVBD_FRONTEND    Frontend,
-    OUT PXENVBD_GRANTER     *Granter
+    _In_ PXENVBD_FRONTEND       Frontend,
+    _Outptr_ PXENVBD_GRANTER    *Granter
     );
=20
 extern VOID
 GranterDestroy(
-    IN  PXENVBD_GRANTER     Granter
+    _In_ PXENVBD_GRANTER    Granter
     );
=20
 extern NTSTATUS
 GranterConnect(
-    IN  PXENVBD_GRANTER     Granter
+    _In_ PXENVBD_GRANTER    Granter
     );
=20
 extern NTSTATUS
 GranterStoreWrite(
-    IN  PXENVBD_GRANTER Granter,
-    IN  PVOID           Transaction
+    _In_ PXENVBD_GRANTER    Granter,
+    _In_ PVOID              Transaction
     );
=20
 extern VOID
 GranterEnable(
-    IN  PXENVBD_GRANTER Granter
+    _In_ PXENVBD_GRANTER    Granter
     );
=20
 extern VOID
 GranterDisable(
-    IN  PXENVBD_GRANTER Granter
+    _In_ PXENVBD_GRANTER    Granter
     );
=20
 extern VOID
 GranterDisconnect(
-    IN  PXENVBD_GRANTER Granter
+    _In_ PXENVBD_GRANTER    Granter
     );
=20
 extern NTSTATUS
 GranterGet(
-    IN  PXENVBD_GRANTER Granter,
-    IN  PFN_NUMBER      Pfn,
-    IN  BOOLEAN         ReadOnly,
-    OUT PVOID           *Handle
+    _In_ PXENVBD_GRANTER    Granter,
+    _In_ PFN_NUMBER         Pfn,
+    _In_ BOOLEAN            ReadOnly,
+    _Outptr_ PVOID          *Handle
     );
=20
 extern VOID
 GranterPut(
-    IN  PXENVBD_GRANTER Granter,
-    IN  PVOID           Handle
+    _In_ PXENVBD_GRANTER    Granter,
+    _In_ PVOID              Handle
     );
=20
 extern ULONG
 GranterReference(
-    IN  PXENVBD_GRANTER Granter,
-    IN  PVOID           Handle
+    _In_ PXENVBD_GRANTER    Granter,
+    _In_ PVOID              Handle
     );
=20
 #endif // _XENVBD_GRANTER_H
diff --git a/src/xenvbd/registry=2Ec b/src/xenvbd/registry=2Ec
index 2275463=2E=2E63498ba 100644
--- a/src/xenvbd/registry=2Ec
+++ b/src/xenvbd/registry=2Ec
@@ -47,7 +47,7 @@ static IOOPENDRIVERREGISTRYKEY __IoOpenDriverRegistryKey=
;
=20
 static FORCEINLINE PVOID
 __RegistryAllocate(
-    IN  ULONG   Length
+    _In_ ULONG  Length
     )
 {
     return __AllocatePoolWithTag(NonPagedPool, Length, REGISTRY_TAG);
@@ -55,7 +55,7 @@ __RegistryAllocate(
=20
 static FORCEINLINE VOID
 __RegistryFree(
-    IN  PVOID   Buffer
+    _In_ PVOID  Buffer
     )
 {
     __FreePoolWithTag(Buffer, REGISTRY_TAG);
@@ -64,13 +64,13 @@ __RegistryFree(
 NTSTATUS
 #pragma prefast(suppress:28101) // unannotated DriverEntry function
 RegistryInitialize(
-    IN  PDRIVER_OBJECT  DriverObject,
-    IN  PUNICODE_STRING Path
+    _In_ PDRIVER_OBJECT     DriverObject,
+    _In_ PUNICODE_STRING    Path
     )
 {
-    UNICODE_STRING      Unicode;
-    PVOID               Func;
-    NTSTATUS            status;
+    UNICODE_STRING          Unicode;
+    PVOID                   Func;
+    NTSTATUS                status;
=20
     ASSERT3P(RegistryPath=2EBuffer, =3D=3D, NULL);
=20
@@ -110,17 +110,17 @@ RegistryTeardown(
     RegistryPath=2EMaximumLength =3D RegistryPath=2ELength =3D 0;
 }
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryOpenKey(
-    IN  HANDLE          Parent,
-    IN  PUNICODE_STRING Path,
-    IN  ACCESS_MASK     DesiredAccess,
-    OUT PHANDLE         Key
+    _In_ HANDLE             Parent,
+    _In_ PUNICODE_STRING    Path,
+    _In_ ACCESS_MASK        DesiredAccess,
+    _Out_ PHANDLE           Key
     )
 {
-    OBJECT_ATTRIBUTES   Attributes;
-    NTSTATUS            status;
+    OBJECT_ATTRIBUTES       Attributes;
+    NTSTATUS                status;
=20
     InitializeObjectAttributes(&Attributes,
                                Path,
@@ -140,12 +140,12 @@ fail1:
     return status;
 }
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 static NTSTATUS
 RegistryOpenRoot(
-    IN  PWCHAR          Path,
-    OUT PHANDLE         Parent,
-    OUT PWCHAR          *ChildPath
+    _In_ PWCHAR         Path,
+    _Out_ PHANDLE       Parent,
+    _Outptr_ PWCHAR     *ChildPath
     )
 {
     const WCHAR         Prefix[] =3D L"\\Registry\\Machine\\";
@@ -174,22 +174,22 @@ fail1:
     return status;
 }
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryCreateKey(
-    IN  HANDLE          Root,
-    IN  PUNICODE_STRING Path,
-    IN  ULONG           Options,
-    OUT PHANDLE         Key
+    _In_ HANDLE             Root,
+    _In_ PUNICODE_STRING    Path,
+    _In_ ULONG              Options,
+    _Out_ PHANDLE           Key
     )
 {
-    PWCHAR              Buffer;
-    HANDLE              Parent;
-    PWCHAR              ChildPath;
-    PWCHAR              ChildName;
-    PWCHAR              Context;
-    HANDLE              Child;
-    NTSTATUS            status;
+    PWCHAR                  Buffer;
+    HANDLE                  Parent;
+    PWCHAR                  ChildPath;
+    PWCHAR                  ChildName;
+    PWCHAR                  Context;
+    HANDLE                  Child;
+    NTSTATUS                status;
=20
     //
     // UNICODE_STRINGs are not guaranteed to have NUL terminated
@@ -274,30 +274,30 @@ fail1:
     return status;
 }
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryOpenServiceKey(
-    IN  ACCESS_MASK     DesiredAccess,
-    OUT PHANDLE         Key
+    _In_ ACCESS_MASK    DesiredAccess,
+    _Out_ PHANDLE       Key
     )
 {
     return RegistryOpenKey(NULL, &RegistryPath, DesiredAccess, Key);
 }
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryCreateServiceKey(
-    OUT PHANDLE         Key
+    _Out_ PHANDLE   Key
     )
 {
     return RegistryCreateKey(NULL, &RegistryPath, REG_OPTION_NON_VOLATILE=
, Key);
 }
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryOpenParametersKey(
-    IN  ACCESS_MASK DesiredAccess,
-    OUT PHANDLE     Key
+    _In_ ACCESS_MASK    DesiredAccess,
+    _Out_ PHANDLE       Key
     )
 {
     HANDLE              ServiceKey;
@@ -342,12 +342,12 @@ fail1:
     return status;
 }
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryOpenSoftwareKey(
-    IN  PDEVICE_OBJECT  DeviceObject,
-    IN  ACCESS_MASK     DesiredAccess,
-    OUT PHANDLE         Key
+    _In_ PDEVICE_OBJECT DeviceObject,
+    _In_ ACCESS_MASK    DesiredAccess,
+    _Out_ PHANDLE       Key
     )
 {
     NTSTATUS            status;
@@ -365,12 +365,12 @@ fail1:
     return status;
 }
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryOpenHardwareKey(
-    IN  PDEVICE_OBJECT      DeviceObject,
-    IN  ACCESS_MASK         DesiredAccess,
-    OUT PHANDLE             Key
+    _In_ PDEVICE_OBJECT     DeviceObject,
+    _In_ ACCESS_MASK        DesiredAccess,
+    _Out_ PHANDLE           Key
     )
 {
     HANDLE                  SubKey;
@@ -443,13 +443,13 @@ fail1:
     return status;
 }
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryOpenSubKey(
-    IN  PHANDLE         Key,
-    IN  PCHAR           Name,
-    IN  ACCESS_MASK     DesiredAccess,
-    OUT PHANDLE         SubKey
+    _In_ PHANDLE        Key,
+    _In_ PCHAR          Name,
+    _In_ ACCESS_MASK    DesiredAccess,
+    _Out_ PHANDLE       SubKey
     )
 {
     ANSI_STRING         Ansi;
@@ -477,13 +477,13 @@ fail1:
     return status;
 }
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryCreateSubKey(
-    IN  PHANDLE         Key,
-    IN  PCHAR           Name,
-    IN  ULONG           Options,
-    OUT PHANDLE         SubKey
+    _In_ PHANDLE        Key,
+    _In_ PCHAR          Name,
+    _In_ ULONG          Options,
+    _Out_ PHANDLE       SubKey
     )
 {
     ANSI_STRING         Ansi;
@@ -511,11 +511,11 @@ fail1:
     return status;
 }
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryDeleteSubKey(
-    IN  PHANDLE         Key,
-    IN  PCHAR           Name
+    _In_ PHANDLE        Key,
+    _In_ PCHAR          Name
     )
 {
     ANSI_STRING         Ansi;
@@ -555,12 +555,12 @@ fail1:
     return status;
 }
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryEnumerateSubKeys(
-    IN  HANDLE              Key,
-    IN  NTSTATUS            (*Callback)(PVOID, HANDLE, PANSI_STRING),
-    IN  PVOID               Context
+    _In_ HANDLE             Key,
+    _In_ NTSTATUS           (*Callback)(PVOID, HANDLE, PANSI_STRING),
+    _In_ PVOID              Context
     )
 {
     ULONG                   Size;
@@ -660,12 +660,12 @@ fail1:
     return status;
 }
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryEnumerateValues(
-    IN  HANDLE                      Key,
-    IN  NTSTATUS                    (*Callback)(PVOID, HANDLE, PANSI_STRI=
NG, ULONG),
-    IN  PVOID                       Context
+    _In_ HANDLE                     Key,
+    _In_ NTSTATUS                   (*Callback)(PVOID, HANDLE, PANSI_STRI=
NG, ULONG),
+    _In_ PVOID                      Context
     )
 {
     ULONG                           Size;
@@ -759,11 +759,11 @@ fail1:
     return status;
 }
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryDeleteValue(
-    IN  PHANDLE         Key,
-    IN  PCHAR           Name
+    _In_ PHANDLE        Key,
+    _In_ PCHAR          Name
     )
 {
     ANSI_STRING         Ansi;
@@ -793,12 +793,12 @@ fail1:
     return status;
 }
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryQueryDwordValue(
-    IN  HANDLE                      Key,
-    IN  PCHAR                       Name,
-    OUT PULONG                      Value
+    _In_ HANDLE                     Key,
+    _In_ PCHAR                      Name,
+    _Out_ PULONG                    Value
     )
 {
     ANSI_STRING                     Ansi;
@@ -864,12 +864,12 @@ fail1:
     return status;
 }
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryUpdateDwordValue(
-    IN  HANDLE                      Key,
-    IN  PCHAR                       Name,
-    IN  ULONG                       Value
+    _In_ HANDLE                     Key,
+    _In_ PCHAR                      Name,
+    _In_ ULONG                      Value
     )
 {
     ANSI_STRING                     Ansi;
@@ -923,10 +923,10 @@ fail1:
     return status;
 }
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 static PANSI_STRING
 RegistrySzToAnsi(
-    IN  PWCHAR      Buffer
+    _In_ PWCHAR     Buffer
     )
 {
     PANSI_STRING    Ansi;
@@ -963,10 +963,10 @@ fail1:
     return NULL;
 }
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 static PANSI_STRING
 RegistryMultiSzToAnsi(
-    IN  PWCHAR      Buffer
+    _In_ PWCHAR     Buffer
     )
 {
     PANSI_STRING    Ansi;
@@ -1026,13 +1026,13 @@ fail1:
     return NULL;
 }
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryQuerySzValue(
-    IN  HANDLE                      Key,
-    IN  PCHAR                       Name,
-    OUT PULONG                      Type OPTIONAL,
-    OUT PANSI_STRING                *Array
+    _In_ HANDLE                     Key,
+    _In_ PCHAR                      Name,
+    _Out_opt_ PULONG                Type,
+    _Outptr_ PANSI_STRING           *Array
     )
 {
     ANSI_STRING                     Ansi;
@@ -1114,13 +1114,13 @@ fail1:
     return status;
 }
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryQueryBinaryValue(
-    IN  HANDLE                      Key,
-    IN  PCHAR                       Name,
-    OUT PVOID                       *Buffer,
-    OUT PULONG                      Length
+    _In_ HANDLE                     Key,
+    _In_ PCHAR                      Name,
+    _Outptr_ PVOID                  *Buffer,
+    _Out_ PULONG                    Length
     )
 {
     ANSI_STRING                     Ansi;
@@ -1200,13 +1200,13 @@ fail1:
     return status;
 }
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryUpdateBinaryValue(
-    IN  HANDLE                      Key,
-    IN  PCHAR                       Name,
-    IN  PVOID                       Buffer,
-    IN  ULONG                       Length
+    _In_ HANDLE                     Key,
+    _In_ PCHAR                      Name,
+    _In_ PVOID                      Buffer,
+    _In_ ULONG                      Length
     )
 {
     ANSI_STRING                     Ansi;
@@ -1260,11 +1260,11 @@ fail1:
     return status;
 }
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryQueryKeyName(
-    IN  HANDLE              Key,
-    OUT PANSI_STRING        *Array
+    _In_ HANDLE             Key,
+    _Outptr_ PANSI_STRING   *Array
     )
 {
     PKEY_NAME_INFORMATION   Value;
@@ -1316,11 +1316,11 @@ fail1:
     return status;
 }
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryQuerySystemStartOption(
-    IN  const CHAR                  *Prefix,
-    OUT PANSI_STRING                *Value
+    _In_ const CHAR                 *Prefix,
+    _Outptr_ PANSI_STRING           *Value
     )
 {
     UNICODE_STRING                  Unicode;
@@ -1395,7 +1395,7 @@ fail1:
     return status;
 }
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 static PKEY_VALUE_PARTIAL_INFORMATION
 RegistryAnsiToSz(
     PANSI_STRING                    Ansi
@@ -1442,7 +1442,7 @@ fail1:
     return NULL;
 }
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 static PKEY_VALUE_PARTIAL_INFORMATION
 RegistryAnsiToMultiSz(
     PANSI_STRING                    Ansi
@@ -1502,13 +1502,13 @@ fail1:
     return NULL;
 }
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryUpdateSzValue(
-    IN  HANDLE                      Key,
-    IN  PCHAR                       Name,
-    IN  ULONG                       Type,
-    IN  PANSI_STRING                Array
+    _In_ HANDLE                     Key,
+    _In_ PCHAR                      Name,
+    _In_ ULONG                      Type,
+    _In_ PANSI_STRING               Array
     )
 {
     ANSI_STRING                     Ansi;
@@ -1571,7 +1571,7 @@ fail1:
=20
 VOID
 RegistryFreeSzValue(
-    IN  PANSI_STRING    Array
+    _In_ PANSI_STRING   Array
     )
 {
     ULONG               Index;
@@ -1587,16 +1587,16 @@ RegistryFreeSzValue(
=20
 VOID
 RegistryFreeBinaryValue(
-    IN  PVOID   Buffer
+    _In_ PVOID  Buffer
     )
 {
     __RegistryFree(Buffer);
 }
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 VOID
 RegistryCloseKey(
-    IN  HANDLE  Key
+    _In_ HANDLE Key
     )
 {
     ZwClose(Key);
diff --git a/src/xenvbd/registry=2Eh b/src/xenvbd/registry=2Eh
index 8dac63e=2E=2E3b463c5 100644
--- a/src/xenvbd/registry=2Eh
+++ b/src/xenvbd/registry=2Eh
@@ -37,8 +37,8 @@
=20
 extern NTSTATUS
 RegistryInitialize(
-    IN  PDRIVER_OBJECT  DriverObject,
-    IN  PUNICODE_STRING Path
+    _In_ PDRIVER_OBJECT     DriverObject,
+    _In_ PUNICODE_STRING    Path
     );
=20
 extern VOID
@@ -46,188 +46,188 @@ RegistryTeardown(
     VOID
     );
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryOpenKey(
-    IN  HANDLE          Parent,
-    IN  PUNICODE_STRING Path,
-    IN  ACCESS_MASK     DesiredAccess,
-    OUT PHANDLE         Key
+    _In_ HANDLE             Parent,
+    _In_ PUNICODE_STRING    Path,
+    _In_ ACCESS_MASK        DesiredAccess,
+    _Out_ PHANDLE           Key
     );
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryCreateKey(
-    IN  HANDLE          Parent,
-    IN  PUNICODE_STRING Path,
-    IN  ULONG           Options,
-    OUT PHANDLE         Key
+    _In_ HANDLE             Parent,
+    _In_ PUNICODE_STRING    Path,
+    _In_ ULONG              Options,
+    _Out_ PHANDLE           Key
     );
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryOpenServiceKey(
-    IN  ACCESS_MASK DesiredAccess,
-    OUT PHANDLE     Key
+    _In_ ACCESS_MASK    DesiredAccess,
+    _Out_ PHANDLE       Key
     );
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryCreateServiceKey(
-    OUT PHANDLE     Key
+    _Out_ PHANDLE   Key
     );
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryOpenParametersKey(
-    IN  ACCESS_MASK DesiredAccess,
-    OUT PHANDLE     Key
+    _In_ ACCESS_MASK    DesiredAccess,
+    _Out_ PHANDLE       Key
     );
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryOpenSoftwareKey(
-    IN  PDEVICE_OBJECT  DeviceObject,
-    IN  ACCESS_MASK     DesiredAccess,
-    OUT PHANDLE         Key
+    _In_ PDEVICE_OBJECT DeviceObject,
+    _In_ ACCESS_MASK    DesiredAccess,
+    _Out_ PHANDLE       Key
     );
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryOpenHardwareKey(
-    IN  PDEVICE_OBJECT  DeviceObject,
-    IN  ACCESS_MASK     DesiredAccess,
-    OUT PHANDLE         Key
+    _In_ PDEVICE_OBJECT DeviceObject,
+    _In_ ACCESS_MASK    DesiredAccess,
+    _Out_ PHANDLE       Key
     );
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryOpenSubKey(
-    IN  HANDLE      Key,
-    IN  PCHAR       Name,
-    IN  ACCESS_MASK DesiredAccess,
-    OUT PHANDLE     SubKey
+    _In_ HANDLE         Key,
+    _In_ PCHAR          Name,
+    _In_ ACCESS_MASK    DesiredAccess,
+    _Out_ PHANDLE       SubKey
     );
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryCreateSubKey(
-    IN  HANDLE      Key,
-    IN  PCHAR       Name,
-    IN  ULONG       Options,
-    OUT PHANDLE     SubKey
+    _In_ HANDLE     Key,
+    _In_ PCHAR      Name,
+    _In_ ULONG      Options,
+    _Out_ PHANDLE   SubKey
     );
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryDeleteSubKey(
-    IN  HANDLE      Key,
-    IN  PCHAR       Name
+    _In_ HANDLE Key,
+    _In_ PCHAR  Name
     );
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryEnumerateSubKeys(
-    IN  HANDLE      Key,
-    IN  NTSTATUS    (*Callback)(PVOID, HANDLE, PANSI_STRING),
-    IN  PVOID       Context
+    _In_ HANDLE     Key,
+    _In_ NTSTATUS   (*Callback)(PVOID, HANDLE, PANSI_STRING),
+    _In_ PVOID      Context
     );
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryEnumerateValues(
-    IN  HANDLE      Key,
-    IN  NTSTATUS    (*Callback)(PVOID, HANDLE, PANSI_STRING, ULONG),
-    IN  PVOID       Context
+    _In_ HANDLE     Key,
+    _In_ NTSTATUS   (*Callback)(PVOID, HANDLE, PANSI_STRING, ULONG),
+    _In_ PVOID      Context
     );
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryDeleteValue(
-    IN  HANDLE      Key,
-    IN  PCHAR       Name
+    _In_ HANDLE Key,
+    _In_ PCHAR  Name
     );
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryQueryDwordValue(
-    IN  HANDLE          Key,
-    IN  PCHAR           Name,
-    OUT PULONG          Value
+    _In_ HANDLE     Key,
+    _In_ PCHAR      Name,
+    _Out_ PULONG    Value
     );
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryUpdateDwordValue(
-    IN  HANDLE          Key,
-    IN  PCHAR           Name,
-    IN  ULONG           Value
+    _In_ HANDLE Key,
+    _In_ PCHAR  Name,
+    _In_ ULONG  Value
     );
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryQuerySzValue(
-    IN  HANDLE          Key,
-    IN  PCHAR           Name,
-    OUT PULONG          Type OPTIONAL,
-    OUT PANSI_STRING    *Array
+    _In_ HANDLE             Key,
+    _In_ PCHAR              Name,
+    _Out_opt_ PULONG        Type,
+    _Outptr_ PANSI_STRING   *Array
     );
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryQueryBinaryValue(
-    IN  HANDLE          Key,
-    IN  PCHAR           Name,
-    OUT PVOID           *Buffer,
-    OUT PULONG          Length
+    _In_ HANDLE     Key,
+    _In_ PCHAR      Name,
+    _Outptr_ PVOID  *Buffer,
+    _Out_ PULONG    Length
     );
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryUpdateBinaryValue(
-    IN  HANDLE          Key,
-    IN  PCHAR           Name,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length
+    _In_ HANDLE Key,
+    _In_ PCHAR  Name,
+    _In_ PVOID  Buffer,
+    _In_ ULONG  Length
     );
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryQueryKeyName(
-    IN  HANDLE              Key,
-    OUT PANSI_STRING        *Array
+    _In_ HANDLE             Key,
+    _Outptr_ PANSI_STRING   *Array
     );
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryQuerySystemStartOption(
-    IN  const CHAR      *Prefix,
-    OUT PANSI_STRING    *Option
+    _In_ const CHAR         *Prefix,
+    _Outptr_ PANSI_STRING   *Option
     );
=20
 extern VOID
 RegistryFreeSzValue(
-    IN  PANSI_STRING    Array
+    _In_ PANSI_STRING   Array
     );
=20
 extern VOID
 RegistryFreeBinaryValue(
-    IN  PVOID           Buffer
+    _In_ PVOID  Buffer
     );
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryUpdateSzValue(
-    IN  HANDLE          Key,
-    IN  PCHAR           Name,
-    IN  ULONG           Type,
-    IN  PANSI_STRING    Array
+    _In_ HANDLE         Key,
+    _In_ PCHAR          Name,
+    _In_ ULONG          Type,
+    _In_ PANSI_STRING   Array
     );
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 extern VOID
 RegistryCloseKey(
-    IN  HANDLE  Key
+    _In_ HANDLE Key
     );
=20
 #endif  // _XENVBD_REGISTRY_H
diff --git a/src/xenvbd/ring=2Ec b/src/xenvbd/ring=2Ec
index 0875ce9=2E=2E3f602ee 100644
--- a/src/xenvbd/ring=2Ec
+++ b/src/xenvbd/ring=2Ec
@@ -130,7 +130,7 @@ struct _XENVBD_RING {
=20
 static FORCEINLINE PVOID
 __RingAllocate(
-    IN  ULONG                       Length
+    _In_ ULONG  Length
     )
 {
     return __AllocatePoolWithTag(NonPagedPool,
@@ -140,7 +140,7 @@ __RingAllocate(
=20
 static FORCEINLINE VOID
 __RingFree(
-    IN  PVOID                       Buffer
+    _In_ PVOID  Buffer
     )
 {
     if (Buffer)
@@ -150,7 +150,7 @@ __RingFree(
=20
 static FORCEINLINE PCHAR
 __BlkifOperationName(
-    IN  UCHAR   Operation
+    _In_ UCHAR  Operation
     )
 {
     switch (Operation) {
@@ -167,7 +167,7 @@ __BlkifOperationName(
=20
 static FORCEINLINE PCHAR
 __StatName(
-    IN  XENVBD_STAT Operation
+    _In_ XENVBD_STAT    Operation
     )
 {
     switch (Operation) {
@@ -186,9 +186,9 @@ __StatName(
=20
 static FORCEINLINE VOID
 __Operation(
-    IN  UCHAR       CdbOp,
-    OUT PUCHAR      RingOp,
-    OUT PBOOLEAN    ReadOnly
+    _In_ UCHAR      CdbOp,
+    _Out_ PUCHAR    RingOp,
+    _Out_ PBOOLEAN  ReadOnly
     )
 {
     switch (CdbOp) {
@@ -207,8 +207,8 @@ __Operation(
=20
 static FORCEINLINE ULONG
 __UseIndirect(
-    IN  ULONG           MaxIndirectSegs,
-    IN  ULONG           SectorsLeft
+    _In_ ULONG  MaxIndirectSegs,
+    _In_ ULONG  SectorsLeft
     )
 {
     if (MaxIndirectSegs <=3D BLKIF_MAX_SEGMENTS_PER_REQUEST)
@@ -222,7 +222,7 @@ __UseIndirect(
=20
 static FORCEINLINE MM_PAGE_PRIORITY
 __Priority(
-    IN  PXENVBD_CAPS    Caps
+    _In_ PXENVBD_CAPS   Caps
     )
 {
     return (Caps->Paging ||
@@ -233,7 +233,7 @@ __Priority(
=20
 static PXENVBD_INDIRECT
 BlkifRingGetIndirect(
-    IN  PXENVBD_BLKIF_RING  BlkifRing
+    _In_ PXENVBD_BLKIF_RING BlkifRing
     )
 {
     PXENVBD_RING            Ring =3D BlkifRing->Ring;
@@ -272,8 +272,8 @@ fail1:
=20
 static VOID
 BlkifRingPutIndirect(
-    IN  PXENVBD_BLKIF_RING  BlkifRing,
-    IN  PXENVBD_INDIRECT    Indirect
+    _In_ PXENVBD_BLKIF_RING BlkifRing,
+    _In_ PXENVBD_INDIRECT   Indirect
     )
 {
     PXENVBD_RING            Ring =3D BlkifRing->Ring;
@@ -295,7 +295,7 @@ BlkifRingPutIndirect(
=20
 static PXENVBD_SEGMENT
 BlkifRingGetSegment(
-    IN  PXENVBD_BLKIF_RING  BlkifRing
+    _In_ PXENVBD_BLKIF_RING BlkifRing
     )
 {
     PXENVBD_RING            Ring =3D BlkifRing->Ring;
@@ -308,8 +308,8 @@ BlkifRingGetSegment(
=20
 static VOID
 BlkifRingPutSegment(
-    IN  PXENVBD_BLKIF_RING  BlkifRing,
-    IN  PXENVBD_SEGMENT     Segment
+    _In_ PXENVBD_BLKIF_RING BlkifRing,
+    _In_ PXENVBD_SEGMENT    Segment
     )
 {
     PXENVBD_RING            Ring =3D BlkifRing->Ring;
@@ -349,7 +349,7 @@ BlkifRingPutSegment(
=20
 static PXENVBD_REQUEST
 BlkifRingGetRequest(
-    IN  PXENVBD_BLKIF_RING  BlkifRing
+    _In_ PXENVBD_BLKIF_RING BlkifRing
     )
 {
     PXENVBD_RING            Ring =3D BlkifRing->Ring;
@@ -362,8 +362,8 @@ BlkifRingGetRequest(
=20
 static VOID
 BlkifRingPutRequest(
-    IN  PXENVBD_BLKIF_RING  BlkifRing,
-    IN  PXENVBD_REQUEST     Request
+    _In_ PXENVBD_BLKIF_RING BlkifRing,
+    _In_ PXENVBD_REQUEST    Request
     )
 {
     PXENVBD_RING            Ring =3D BlkifRing->Ring;
@@ -406,8 +406,8 @@ BlkifRingPutRequest(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 BlkifRingRequestCtor(
-    IN  PVOID       Argument,
-    IN  PVOID       Object
+    _In_ PVOID      Argument,
+    _In_ PVOID      Object
     )
 {
     PXENVBD_REQUEST Request =3D Object;
@@ -421,8 +421,8 @@ BlkifRingRequestCtor(
=20
 static DECLSPEC_NOINLINE VOID
 BlkifRingRequestDtor(
-    IN  PVOID       Argument,
-    IN  PVOID       Object
+    _In_ PVOID  Argument,
+    _In_ PVOID  Object
     )
 {
     UNREFERENCED_PARAMETER(Argument);
@@ -431,8 +431,8 @@ BlkifRingRequestDtor(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 BlkifRingSegmentCtor(
-    IN  PVOID       Argument,
-    IN  PVOID       Object
+    _In_ PVOID  Argument,
+    _In_ PVOID  Object
     )
 {
     UNREFERENCED_PARAMETER(Argument);
@@ -442,8 +442,8 @@ BlkifRingSegmentCtor(
=20
 static DECLSPEC_NOINLINE VOID
 BlkifRingSegmentDtor(
-    IN  PVOID       Argument,
-    IN  PVOID       Object
+    _In_ PVOID  Argument,
+    _In_ PVOID  Object
     )
 {
     UNREFERENCED_PARAMETER(Argument);
@@ -452,8 +452,8 @@ BlkifRingSegmentDtor(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 BlkifRingIndirectCtor(
-    IN  PVOID           Argument,
-    IN  PVOID           Object
+    _In_ PVOID          Argument,
+    _In_ PVOID          Object
     )
 {
     PXENVBD_INDIRECT    Indirect =3D Object;
@@ -479,8 +479,8 @@ fail1:
=20
 static DECLSPEC_NOINLINE VOID
 BlkifRingIndirectDtor(
-    IN  PVOID           Argument,
-    IN  PVOID           Object
+    _In_ PVOID          Argument,
+    _In_ PVOID          Object
     )
 {
     PXENVBD_INDIRECT    Indirect =3D Object;
@@ -494,8 +494,8 @@ BlkifRingIndirectDtor(
=20
 static VOID
 BlkifRingDebugCallback(
-    IN  PVOID           Argument,
-    IN  BOOLEAN         Crashing
+    _In_ PVOID          Argument,
+    _In_ BOOLEAN        Crashing
     )
 {
     PXENVBD_BLKIF_RING  BlkifRing =3D Argument;
@@ -550,8 +550,8 @@ BlkifRingDebugCallback(
=20
 static DECLSPEC_NOINLINE VOID
 __BlkifRingCompleteSrb(
-    IN  PXENVBD_BLKIF_RING  BlkifRing,
-    IN  PXENVBD_SRBEXT      SrbExt
+    _In_ PXENVBD_BLKIF_RING BlkifRing,
+    _In_ PXENVBD_SRBEXT     SrbExt
     )
 {
     PXENVBD_RING            Ring =3D BlkifRing->Ring;
@@ -577,8 +577,8 @@ __BlkifRingCompleteSrb(
=20
 static FORCEINLINE VOID
 BlkifRingUnprepareRequest(
-    IN  PXENVBD_BLKIF_RING  BlkifRing,
-    IN  PLIST_ENTRY         List
+    _In_ PXENVBD_BLKIF_RING BlkifRing,
+    _In_ PLIST_ENTRY        List
     )
 {
     for (;;) {
@@ -599,8 +599,8 @@ BlkifRingUnprepareRequest(
=20
 static FORCEINLINE VOID
 BlkifRingQueueRequests(
-    IN  PXENVBD_BLKIF_RING  BlkifRing,
-    IN  PLIST_ENTRY         List
+    _In_ PXENVBD_BLKIF_RING BlkifRing,
+    _In_ PLIST_ENTRY        List
     )
 {
     for (;;) {
@@ -621,12 +621,12 @@ BlkifRingQueueRequests(
=20
 static BOOLEAN
 BlkifRingPrepareSegment(
-    IN  PXENVBD_BLKIF_RING  BlkifRing,
-    IN  PXENVBD_SEGMENT     Segment,
-    IN  PXENVBD_SRBEXT      SrbExt,
-    IN  BOOLEAN             ReadOnly,
-    IN  ULONG               SectorsLeft,
-    OUT PULONG              SectorsNow
+    _In_ PXENVBD_BLKIF_RING BlkifRing,
+    _In_ PXENVBD_SEGMENT    Segment,
+    _In_ PXENVBD_SRBEXT     SrbExt,
+    _In_ BOOLEAN            ReadOnly,
+    _In_ ULONG              SectorsLeft,
+    _Out_ PULONG            SectorsNow
     )
 {
     PFN_NUMBER              Pfn;
@@ -738,8 +738,8 @@ fail1:
=20
 static NTSTATUS
 BlkifRingPrepareReadWrite(
-    IN  PXENVBD_BLKIF_RING  BlkifRing,
-    IN  PXENVBD_SRBEXT      SrbExt
+    _In_ PXENVBD_BLKIF_RING BlkifRing,
+    _In_ PXENVBD_SRBEXT     SrbExt
     )
 {
     PXENVBD_RING            Ring =3D BlkifRing->Ring;
@@ -841,8 +841,8 @@ fail1:
=20
 static NTSTATUS
 BlkifRingPrepareUnmap(
-    IN  PXENVBD_BLKIF_RING  BlkifRing,
-    IN  PXENVBD_SRBEXT      SrbExt
+    _In_ PXENVBD_BLKIF_RING BlkifRing,
+    _In_ PXENVBD_SRBEXT     SrbExt
     )
 {
     PXENVBD_RING            Ring =3D BlkifRing->Ring;
@@ -899,8 +899,8 @@ fail1:
=20
 static NTSTATUS
 BlkifRingPrepareSyncCache(
-    IN  PXENVBD_BLKIF_RING  BlkifRing,
-    IN  PXENVBD_SRBEXT      SrbExt
+    _In_ PXENVBD_BLKIF_RING BlkifRing,
+    _In_ PXENVBD_SRBEXT     SrbExt
     )
 {
     PXENVBD_RING            Ring =3D BlkifRing->Ring;
@@ -943,8 +943,8 @@ fail1:
=20
 static DECLSPEC_NOINLINE NTSTATUS
 __BlkifRingPrepareSrb(
-    IN  PXENVBD_BLKIF_RING  BlkifRing,
-    IN  PXENVBD_SRBEXT      SrbExt
+    _In_ PXENVBD_BLKIF_RING BlkifRing,
+    _In_ PXENVBD_SRBEXT     SrbExt
     )
 {
     switch (Cdb_OperationEx(SrbExt->Srb)) {
@@ -969,9 +969,9 @@ __BlkifRingPrepareSrb(
=20
 static FORCEINLINE VOID
 __BlkifRingInsertRequest(
-    IN  PXENVBD_BLKIF_RING  BlkifRing,
-    IN  PXENVBD_REQUEST     Request,
-    IN  blkif_request_t     *req
+    _In_ PXENVBD_BLKIF_RING BlkifRing,
+    _In_ PXENVBD_REQUEST    Request,
+    _In_ blkif_request_t    *req
     )
 {
     PXENVBD_RING            Ring =3D BlkifRing->Ring;
@@ -1081,7 +1081,7 @@ __BlkifRingInsertRequest(
=20
 static FORCEINLINE NTSTATUS
 __BlkifRingPostRequests(
-    IN  PXENVBD_BLKIF_RING  BlkifRing
+    _In_ PXENVBD_BLKIF_RING BlkifRing
     )
 {
     for (;;) {
@@ -1118,8 +1118,8 @@ __BlkifRingPostRequests(
=20
 static FORCEINLINE PXENVBD_REQUEST
 __BlkifRingGetSubmittedRequest(
-    IN  PXENVBD_BLKIF_RING  BlkifRing,
-    IN  ULONG64             Id
+    _In_ PXENVBD_BLKIF_RING BlkifRing,
+    _In_ ULONG64            Id
     )
 {
     PLIST_ENTRY             ListEntry;
@@ -1142,9 +1142,9 @@ __BlkifRingGetSubmittedRequest(
=20
 static FORCEINLINE VOID
 __BlkifRingCompleteResponse(
-    IN  PXENVBD_BLKIF_RING  BlkifRing,
-    IN  PXENVBD_REQUEST     Request,
-    IN  SHORT               Status
+    _In_ PXENVBD_BLKIF_RING BlkifRing,
+    _In_ PXENVBD_REQUEST    Request,
+    _In_ SHORT              Status
     )
 {
     PXENVBD_RING            Ring =3D BlkifRing->Ring;
@@ -1211,7 +1211,7 @@ __BlkifRingCompleteResponse(
=20
 static FORCEINLINE BOOLEAN
 BlkifRingPoll(
-    IN  PXENVBD_BLKIF_RING  BlkifRing
+    _In_ PXENVBD_BLKIF_RING BlkifRing
     )
 {
 #define XENVBD_BATCH(_Ring) (RING_SIZE(&(_Ring)->Front) / 4)
@@ -1275,7 +1275,7 @@ done:
=20
 static FORCEINLINE VOID
 __BlkifRingSend(
-    IN  PXENVBD_BLKIF_RING  BlkifRing
+    _In_ PXENVBD_BLKIF_RING BlkifRing
     )
 {
     PXENVBD_RING            Ring =3D BlkifRing->Ring;
@@ -1287,7 +1287,7 @@ __BlkifRingSend(
=20
 static FORCEINLINE VOID
 __BlkifRingPushRequests(
-    IN  PXENVBD_BLKIF_RING  BlkifRing
+    _In_ PXENVBD_BLKIF_RING BlkifRing
     )
 {
     BOOLEAN                 Notify;
@@ -1313,7 +1313,7 @@ __BlkifRingPushRequests(
=20
 static DECLSPEC_NOINLINE VOID
 BlkifRingSwizzle(
-    IN  PXENVBD_BLKIF_RING  BlkifRing
+    _In_ PXENVBD_BLKIF_RING BlkifRing
     )
 {
     ULONG_PTR               Old;
@@ -1410,7 +1410,7 @@ __BlkifRingAbortQueues(
=20
 static DECLSPEC_NOINLINE VOID
 BlkifRingSchedule(
-    IN  PXENVBD_BLKIF_RING  BlkifRing
+    _In_ PXENVBD_BLKIF_RING BlkifRing
     )
 {
     BOOLEAN                 Polled;
@@ -1493,9 +1493,9 @@ BlkifRingSchedule(
 }
=20
 static FORCEINLINE BOOLEAN
-__drv_requiresIRQL(DISPATCH_LEVEL)
+_IRQL_requires_(DISPATCH_LEVEL)
 __BlkifRingTryAcquireLock(
-    IN  PXENVBD_BLKIF_RING  BlkifRing
+    _In_ PXENVBD_BLKIF_RING BlkifRing
     )
 {
     ULONG_PTR               Old;
@@ -1522,9 +1522,9 @@ __BlkifRingTryAcquireLock(
 }
=20
 static FORCEINLINE VOID
-__drv_requiresIRQL(DISPATCH_LEVEL)
+_IRQL_requires_(DISPATCH_LEVEL)
 __BlkifRingAcquireLock(
-    IN  PXENVBD_BLKIF_RING  BlkifRing
+    _In_ PXENVBD_BLKIF_RING BlkifRing
     )
 {
     ASSERT3U(KeGetCurrentIrql(), =3D=3D , DISPATCH_LEVEL);
@@ -1539,16 +1539,16 @@ __BlkifRingAcquireLock(
=20
 static VOID
 BlkifRingAcquireLock(
-    IN  PXENVBD_BLKIF_RING  BlkifRing
+    _In_ PXENVBD_BLKIF_RING BlkifRing
     )
 {
     __BlkifRingAcquireLock(BlkifRing);
 }
=20
 static FORCEINLINE BOOLEAN
-__drv_requiresIRQL(DISPATCH_LEVEL)
+_IRQL_requires_(DISPATCH_LEVEL)
 __BlkifRingTryReleaseLock(
-    IN  PXENVBD_BLKIF_RING  BlkifRing
+    _In_ PXENVBD_BLKIF_RING BlkifRing
     )
 {
     ULONG_PTR               Old;
@@ -1582,9 +1582,9 @@ __BlkifRingTryReleaseLock(
 }
=20
 static FORCEINLINE VOID
-__drv_requiresIRQL(DISPATCH_LEVEL)
+_IRQL_requires_(DISPATCH_LEVEL)
 __BlkifRingReleaseLock(
-    IN  PXENVBD_BLKIF_RING  BlkifRing
+    _In_ PXENVBD_BLKIF_RING BlkifRing
     )
 {
     ASSERT3U(KeGetCurrentIrql(), =3D=3D , DISPATCH_LEVEL);
@@ -1602,7 +1602,7 @@ __BlkifRingReleaseLock(
=20
 static VOID
 BlkifRingReleaseLock(
-    IN  PXENVBD_BLKIF_RING  BlkifRing
+    _In_ PXENVBD_BLKIF_RING BlkifRing
     )
 {
     __BlkifRingReleaseLock(BlkifRing);
@@ -1612,8 +1612,8 @@ KSERVICE_ROUTINE    BlkifRingInterrupt;
=20
 BOOLEAN
 BlkifRingInterrupt(
-    IN  PKINTERRUPT     InterruptObject,
-    IN  PVOID           Argument
+    _In_ PKINTERRUPT    InterruptObject,
+    _In_ PVOID          Argument
     )
 {
     PXENVBD_BLKIF_RING  BlkifRing =3D Argument;
@@ -1630,16 +1630,16 @@ BlkifRingInterrupt(
     return TRUE;
 }
=20
-__drv_functionClass(KDEFERRED_ROUTINE)
-__drv_maxIRQL(DISPATCH_LEVEL)
-__drv_minIRQL(PASSIVE_LEVEL)
-__drv_sameIRQL
+_Function_class_(KDEFERRED_ROUTINE)
+_IRQL_requires_max_(DISPATCH_LEVEL)
+_IRQL_requires_min_(PASSIVE_LEVEL)
+_IRQL_requires_same_
 static VOID
 BlkifRingDpc(
-    IN  PKDPC           Dpc,
-    IN  PVOID           Context,
-    IN  PVOID           Argument1,
-    IN  PVOID           Argument2
+    _In_ PKDPC          Dpc,
+    _In_ PVOID          Context,
+    _In_ PVOID          Argument1,
+    _In_ PVOID          Argument2
     )
 {
     PXENVBD_BLKIF_RING  BlkifRing =3D Context;
@@ -1686,8 +1686,8 @@ BlkifRingDpc(
=20
 static NTSTATUS
 RingWatchdog(
-    IN  PXENVBD_THREAD  Self,
-    IN  PVOID           Context
+    _In_ PXENVBD_THREAD Self,
+    _In_ PVOID          Context
     )
 {
     PXENVBD_BLKIF_RING  BlkifRing =3D Context;
@@ -1759,7 +1759,7 @@ RingWatchdog(
=20
 static FORCEINLINE NTSTATUS
 BlkifRingCacheCreate(
-    IN  PXENVBD_BLKIF_RING  BlkifRing
+    _In_ PXENVBD_BLKIF_RING BlkifRing
     )
 {
     PXENVBD_RING            Ring;
@@ -1874,7 +1874,7 @@ fail1:
=20
 static FORCEINLINE VOID
 BlkifRingCacheDestroy(
-    IN  PXENVBD_BLKIF_RING  BlkifRing
+    _In_ PXENVBD_BLKIF_RING BlkifRing
     )
 {
     PXENVBD_RING            Ring;
@@ -1899,15 +1899,15 @@ BlkifRingCacheDestroy(
=20
 static NTSTATUS
 BlkifRingCreate(
-    IN  PXENVBD_RING        Ring,
-    IN  ULONG               Index,
-    OUT PXENVBD_BLKIF_RING* BlkifRing
+    _In_ PXENVBD_RING           Ring,
+    _In_ ULONG                  Index,
+    _Outptr_ PXENVBD_BLKIF_RING *BlkifRing
     )
 {
-    PXENVBD_FRONTEND        Frontend;
-    ULONG                   Length;
-    PCHAR                   Path;
-    NTSTATUS                status;
+    PXENVBD_FRONTEND            Frontend;
+    ULONG                       Length;
+    PCHAR                       Path;
+    NTSTATUS                    status;
=20
     Frontend =3D Ring->Frontend;
=20
@@ -1984,7 +1984,7 @@ fail1:
=20
 static VOID
 BlkifRingDestroy(
-    IN  PXENVBD_BLKIF_RING  BlkifRing
+    _In_ PXENVBD_BLKIF_RING BlkifRing
     )
 {
     ThreadAlert(BlkifRing->WatchdogThread);
@@ -2020,7 +2020,7 @@ BlkifRingDestroy(
=20
 static NTSTATUS
 BlkifRingConnect(
-    IN  PXENVBD_BLKIF_RING  BlkifRing
+    _In_ PXENVBD_BLKIF_RING BlkifRing
     )
 {
     PXENVBD_RING            Ring =3D BlkifRing->Ring;
@@ -2147,8 +2147,8 @@ fail1:
=20
 static NTSTATUS
 BlkifRingStoreWrite(
-    IN  PXENVBD_BLKIF_RING  BlkifRing,
-    IN  PVOID               Transaction
+    _In_ PXENVBD_BLKIF_RING BlkifRing,
+    _In_ PVOID              Transaction
     )
 {
     PXENVBD_RING            Ring =3D BlkifRing->Ring;
@@ -2219,7 +2219,7 @@ fail1:
=20
 static VOID
 BlkifRingEnable(
-    IN  PXENVBD_BLKIF_RING  BlkifRing
+    _In_ PXENVBD_BLKIF_RING BlkifRing
     )
 {
     Trace("=3D=3D=3D=3D> %u\n", BlkifRing->Index);
@@ -2235,7 +2235,7 @@ BlkifRingEnable(
=20
 static VOID
 BlkifRingDisable(
-    IN  PXENVBD_BLKIF_RING  BlkifRing
+    _In_ PXENVBD_BLKIF_RING BlkifRing
     )
 {
     PXENVBD_RING            Ring;
@@ -2330,7 +2330,7 @@ BlkifRingDisable(
=20
 static VOID
 BlkifRingDisconnect(
-    IN  PXENVBD_BLKIF_RING  BlkifRing
+    _In_ PXENVBD_BLKIF_RING BlkifRing
     )
 {
     PXENVBD_RING            Ring =3D BlkifRing->Ring;
@@ -2380,8 +2380,8 @@ BlkifRingDisconnect(
=20
 static BOOLEAN
 __BlkifRingQueueSrb(
-    IN  PXENVBD_BLKIF_RING  BlkifRing,
-    IN  PXENVBD_SRBEXT      SrbExt
+    _In_ PXENVBD_BLKIF_RING BlkifRing,
+    _In_ PXENVBD_SRBEXT     SrbExt
     )
 {
     PLIST_ENTRY             ListEntry;
@@ -2423,8 +2423,8 @@ fail1:
=20
 static BOOLEAN
 __BlkifRingQueueShutdown(
-    IN  PXENVBD_BLKIF_RING  BlkifRing,
-    IN  PXENVBD_SRBEXT      SrbExt
+    _In_ PXENVBD_BLKIF_RING BlkifRing,
+    _In_ PXENVBD_SRBEXT     SrbExt
     )
 {
     if (!BlkifRing->Enabled)
@@ -2445,8 +2445,8 @@ fail1:
=20
 static DECLSPEC_NOINLINE VOID
 RingDebugCallback(
-    IN  PVOID       Argument,
-    IN  BOOLEAN     Crashing
+    _In_ PVOID      Argument,
+    _In_ BOOLEAN    Crashing
     )
 {
     PXENVBD_RING    Ring =3D Argument;
@@ -2470,8 +2470,8 @@ RingDebugCallback(
=20
 NTSTATUS
 RingCreate(
-    IN  PXENVBD_FRONTEND    Frontend,
-    OUT PXENVBD_RING*       Ring
+    _In_ PXENVBD_FRONTEND   Frontend,
+    _Outptr_ PXENVBD_RING   *Ring
     )
 {
     PXENVBD_TARGET          Target =3D FrontendGetTarget(Frontend);
@@ -2559,7 +2559,7 @@ fail1:
=20
 VOID
 RingDestroy(
-    IN  PXENVBD_RING    Ring
+    _In_ PXENVBD_RING   Ring
     )
 {
     LONG                Index;
@@ -2599,7 +2599,7 @@ RingDestroy(
=20
 NTSTATUS
 RingConnect(
-    IN  PXENVBD_RING    Ring
+    _In_ PXENVBD_RING   Ring
     )
 {
     LONG                MaxQueues;
@@ -2708,8 +2708,8 @@ fail1:
=20
 NTSTATUS
 RingStoreWrite(
-    IN  PXENVBD_RING    Ring,
-    IN  PVOID           Transaction
+    _In_ PXENVBD_RING   Ring,
+    _In_ PVOID          Transaction
     )
 {
     ULONG               NumQueues;
@@ -2770,7 +2770,7 @@ fail1:
=20
 VOID
 RingEnable(
-    IN  PXENVBD_RING    Ring
+    _In_ PXENVBD_RING   Ring
     )
 {
     ULONG               NumQueues;
@@ -2789,7 +2789,7 @@ RingEnable(
=20
 VOID
 RingDisable(
-    IN  PXENVBD_RING    Ring
+    _In_ PXENVBD_RING   Ring
     )
 {
     LONG                Index;
@@ -2804,7 +2804,7 @@ RingDisable(
=20
 VOID
 RingDisconnect(
-    IN  PXENVBD_RING    Ring
+    _In_ PXENVBD_RING   Ring
     )
 {
     LONG                Index;
@@ -2831,7 +2831,7 @@ RingDisconnect(
=20
 BOOLEAN
 RingIsPoisoned(
-    IN  PXENVBD_RING    Ring
+    _In_ PXENVBD_RING   Ring
     )
 {
     ULONG               NumQueues;
@@ -2851,8 +2851,8 @@ RingIsPoisoned(
=20
 static FORCEINLINE PXENVBD_BLKIF_RING
 __RingGetBlkifRing(
-    IN  PXENVBD_RING    Ring,
-    IN  ULONG           Tag
+    _In_ PXENVBD_RING   Ring,
+    _In_ ULONG          Tag
     )
 {
     ULONG               Value;
@@ -2870,8 +2870,8 @@ __RingGetBlkifRing(
=20
 BOOLEAN
 RingQueueRequest(
-    IN  PXENVBD_RING    Ring,
-    IN  PXENVBD_SRBEXT  SrbExt
+    _In_ PXENVBD_RING   Ring,
+    _In_ PXENVBD_SRBEXT SrbExt
     )
 {
     PSCSI_REQUEST_BLOCK Srb =3D SrbExt->Srb;
@@ -2885,8 +2885,8 @@ RingQueueRequest(
=20
 BOOLEAN
 RingQueueShutdown(
-    IN  PXENVBD_RING    Ring,
-    IN  PXENVBD_SRBEXT  SrbExt
+    _In_ PXENVBD_RING   Ring,
+    _In_ PXENVBD_SRBEXT SrbExt
     )
 {
     PSCSI_REQUEST_BLOCK Srb =3D SrbExt->Srb;
diff --git a/src/xenvbd/ring=2Eh b/src/xenvbd/ring=2Eh
index 5644c7c=2E=2Ebcf52f8 100644
--- a/src/xenvbd/ring=2Eh
+++ b/src/xenvbd/ring=2Eh
@@ -40,56 +40,56 @@ typedef struct _XENVBD_RING XENVBD_RING, *PXENVBD_RING=
;
=20
 extern NTSTATUS
 RingCreate(
-    IN  PXENVBD_FRONTEND    Frontend,
-    OUT PXENVBD_RING*       Ring
+    _In_ PXENVBD_FRONTEND   Frontend,
+    _Outptr_ PXENVBD_RING   *Ring
     );
=20
 extern VOID
 RingDestroy(
-    IN  PXENVBD_RING    Ring
+    _In_ PXENVBD_RING   Ring
     );
=20
 extern NTSTATUS
 RingConnect(
-    IN  PXENVBD_RING    Ring
+    _In_ PXENVBD_RING   Ring
     );
=20
 extern NTSTATUS
 RingStoreWrite(
-    IN  PXENVBD_RING    Ring,
-    IN  PVOID           Transaction
+    _In_ PXENVBD_RING   Ring,
+    _In_ PVOID          Transaction
     );
=20
 extern VOID
 RingEnable(
-    IN  PXENVBD_RING    Ring
+    _In_ PXENVBD_RING   Ring
     );
=20
 extern VOID
 RingDisable(
-    IN  PXENVBD_RING    Ring
+    _In_ PXENVBD_RING   Ring
     );
=20
 extern VOID
 RingDisconnect(
-    IN  PXENVBD_RING    Ring
+    _In_ PXENVBD_RING   Ring
     );
=20
 extern BOOLEAN
 RingIsPoisoned(
-    IN  PXENVBD_RING    Ring
+    _In_ PXENVBD_RING   Ring
     );
=20
 extern BOOLEAN
 RingQueueRequest(
-    IN  PXENVBD_RING    Ring,
-    IN  PXENVBD_SRBEXT  SrbExt
+    _In_ PXENVBD_RING   Ring,
+    _In_ PXENVBD_SRBEXT SrbExt
     );
=20
 extern BOOLEAN
 RingQueueShutdown(
-    IN  PXENVBD_RING    Ring,
-    IN  PXENVBD_SRBEXT  SrbExt
+    _In_ PXENVBD_RING   Ring,
+    _In_ PXENVBD_SRBEXT SrbExt
     );
=20
 #endif // _XENVBD_RING_H
diff --git a/src/xenvbd/target=2Ec b/src/xenvbd/target=2Ec
index ce688f5=2E=2E01b2e32 100644
--- a/src/xenvbd/target=2Ec
+++ b/src/xenvbd/target=2Ec
@@ -76,13 +76,13 @@ struct _XENVBD_TARGET {
=20
 #define TARGET_POOL_TAG            'odPX'
=20
-__checkReturn
+_Check_return_
 __drv_allocatesMem(mem)
-__bcount(Size)
+_Writable_bytes_(Size)
 static FORCEINLINE PVOID
 #pragma warning(suppress: 28195)
 __TargetAlloc(
-    __in ULONG  Size
+    _In_ ULONG  Size
     )
 {
     return __AllocatePoolWithTag(NonPagedPool, Size, TARGET_POOL_TAG);
@@ -91,7 +91,7 @@ __TargetAlloc(
 static FORCEINLINE VOID
 #pragma warning(suppress: 28197)
 __TargetFree(
-    __in __drv_freesMem(mem) PVOID Buffer
+    _In_ __drv_freesMem(mem) PVOID  Buffer
     )
 {
     if (Buffer)
@@ -100,7 +100,7 @@ __TargetFree(
=20
 static FORCEINLINE PCHAR
 __PnpStateName(
-    __in DEVICE_PNP_STATE        State
+    _In_ DEVICE_PNP_STATE   State
     )
 {
     switch (State) {
@@ -118,15 +118,15 @@ __PnpStateName(
     }
 }
=20
-__checkReturn
+_Check_return_
 static FORCEINLINE BOOLEAN
 TargetSetDevicePowerState(
-    __in PXENVBD_TARGET             Target,
-    __in DEVICE_POWER_STATE      State
+    _In_ PXENVBD_TARGET     Target,
+    _In_ DEVICE_POWER_STATE State
     )
 {
-    KIRQL       Irql;
-    BOOLEAN     Changed =3D FALSE;
+    KIRQL                   Irql;
+    BOOLEAN                 Changed =3D FALSE;
=20
     KeAcquireSpinLock(&Target->Lock, &Irql);
     if (Target->DevicePowerState !=3D State) {
@@ -141,8 +141,8 @@ TargetSetDevicePowerState(
=20
 VOID
 TargetSetMissing(
-    IN  PXENVBD_TARGET  Target,
-    IN  const CHAR      *Reason
+    _In_ PXENVBD_TARGET Target,
+    _In_ const CHAR     *Reason
     )
 {
     KIRQL               Irql;
@@ -167,8 +167,8 @@ TargetSetMissing(
=20
 VOID
 TargetSetDevicePnpState(
-    IN  PXENVBD_TARGET      Target,
-    IN  DEVICE_PNP_STATE    State
+    _In_ PXENVBD_TARGET     Target,
+    _In_ DEVICE_PNP_STATE   State
     )
 {
     Verbose("Target[%d] : PNP %s to %s\n",
@@ -185,8 +185,8 @@ TargetSetDevicePnpState(
=20
 static FORCEINLINE VOID
 __TargetRestoreDevicePnpState(
-    __in PXENVBD_TARGET             Target,
-    __in DEVICE_PNP_STATE        State
+    _In_ PXENVBD_TARGET     Target,
+    _In_ DEVICE_PNP_STATE   State
     )
 {
     if (Target->DevicePnpState =3D=3D State) {
@@ -197,8 +197,8 @@ __TargetRestoreDevicePnpState(
=20
 VOID
 TargetSetDeviceObject(
-    IN  PXENVBD_TARGET  Target,
-    IN  PDEVICE_OBJECT  DeviceObject
+    _In_ PXENVBD_TARGET Target,
+    _In_ PDEVICE_OBJECT DeviceObject
     )
 {
     Verbose("Target[%d] : Setting DeviceObject =3D 0x%p\n",
@@ -211,14 +211,14 @@ TargetSetDeviceObject(
=20
 static DECLSPEC_NOINLINE BOOLEAN
 TargetReadWrite(
-    IN  PXENVBD_TARGET      Target,
-    IN  PSCSI_REQUEST_BLOCK Srb
+    _In_ PXENVBD_TARGET         Target,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
-    PXENVBD_SRBEXT          SrbExt =3D Srb->SrbExtension;
-    PXENVBD_FRONTEND        Frontend =3D Target->Frontend;
-    PXENVBD_RING            Ring =3D FrontendGetRing(Frontend);
-    PXENVBD_DISKINFO        DiskInfo =3D FrontendGetDiskInfo(Frontend);
+    PXENVBD_SRBEXT              SrbExt =3D Srb->SrbExtension;
+    PXENVBD_FRONTEND            Frontend =3D Target->Frontend;
+    PXENVBD_RING                Ring =3D FrontendGetRing(Frontend);
+    PXENVBD_DISKINFO            DiskInfo =3D FrontendGetDiskInfo(Frontend=
);
=20
     Srb->SrbStatus =3D SRB_STATUS_ERROR;
     if (!FrontendGetCaps(Frontend)->Connected)
@@ -249,14 +249,14 @@ fail1:
=20
 static DECLSPEC_NOINLINE BOOLEAN
 TargetSyncCache(
-    IN  PXENVBD_TARGET      Target,
-    IN  PSCSI_REQUEST_BLOCK Srb
+    _In_ PXENVBD_TARGET         Target,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
-    PXENVBD_SRBEXT          SrbExt =3D Srb->SrbExtension;
-    PXENVBD_FRONTEND        Frontend =3D Target->Frontend;
-    PXENVBD_RING            Ring =3D FrontendGetRing(Frontend);
-    PXENVBD_DISKINFO        DiskInfo =3D FrontendGetDiskInfo(Frontend);
+    PXENVBD_SRBEXT              SrbExt =3D Srb->SrbExtension;
+    PXENVBD_FRONTEND            Frontend =3D Target->Frontend;
+    PXENVBD_RING                Ring =3D FrontendGetRing(Frontend);
+    PXENVBD_DISKINFO            DiskInfo =3D FrontendGetDiskInfo(Frontend=
);
=20
     Srb->SrbStatus =3D SRB_STATUS_ERROR;
     if (!FrontendGetCaps(Frontend)->Connected)
@@ -294,13 +294,13 @@ fail1:
=20
 static DECLSPEC_NOINLINE BOOLEAN
 TargetUnmap(
-    IN  PXENVBD_TARGET      Target,
-    IN  PSCSI_REQUEST_BLOCK Srb
+    _In_ PXENVBD_TARGET         Target,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
-    PXENVBD_SRBEXT          SrbExt =3D Srb->SrbExtension;
-    PXENVBD_FRONTEND        Frontend =3D Target->Frontend;
-    PXENVBD_RING            Ring =3D FrontendGetRing(Frontend);
+    PXENVBD_SRBEXT              SrbExt =3D Srb->SrbExtension;
+    PXENVBD_FRONTEND            Frontend =3D Target->Frontend;
+    PXENVBD_RING                Ring =3D FrontendGetRing(Frontend);
=20
     Srb->SrbStatus =3D SRB_STATUS_ERROR;
     if (!FrontendGetCaps(Frontend)->Connected)
@@ -330,16 +330,16 @@ fail1:
=20
 static FORCEINLINE VOID
 __TargetModeSense(
-    IN  PXENVBD_TARGET      Target,
-    IN  PSCSI_REQUEST_BLOCK Srb,
-    IN  PVOID               Data,
-    IN  ULONG               Length,
-    OUT PULONG              Size,
-    OUT PULONG              ModeDataLength,
-    OUT PULONG              BlockDescrLength
+    _In_ PXENVBD_TARGET         Target,
+    _In_ PSCSI_REQUEST_BLOCK    Srb,
+    _In_ PVOID                  Data,
+    _In_ ULONG                  Length,
+    _Out_ PULONG                Size,
+    _Out_ PULONG                ModeDataLength,
+    _Out_ PULONG                BlockDescrLength
     )
 {
-    const UCHAR             PageCode =3D Cdb_PageCode(Srb);
+    const UCHAR                 PageCode =3D Cdb_PageCode(Srb);
=20
     // Fill in Block Parameters (if Specified and space)
     // when the DBD (Disable Block Descriptor) is set, ignore the block p=
age
@@ -385,17 +385,17 @@ __TargetModeSense(
=20
 static DECLSPEC_NOINLINE VOID
 TargetModeSense(
-    IN  PXENVBD_TARGET      Target,
-    IN  PSCSI_REQUEST_BLOCK Srb
+    _In_ PXENVBD_TARGET         Target,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
-    PXENVBD_FRONTEND        Frontend =3D Target->Frontend;
-    PXENVBD_DISKINFO        DiskInfo =3D FrontendGetDiskInfo(Frontend);
-    PMODE_PARAMETER_HEADER  Data  =3D Srb->DataBuffer;
-    ULONG                   Length =3D Srb->DataTransferLength;
-    ULONG                   BlockDescrLength =3D 0;
-    ULONG                   ModeDataLength =3D 0;
-    ULONG                   Size;
+    PXENVBD_FRONTEND            Frontend =3D Target->Frontend;
+    PXENVBD_DISKINFO            DiskInfo =3D FrontendGetDiskInfo(Frontend=
);
+    PMODE_PARAMETER_HEADER      Data =3D Srb->DataBuffer;
+    ULONG                       Length =3D Srb->DataTransferLength;
+    ULONG                       BlockDescrLength =3D 0;
+    ULONG                       ModeDataLength =3D 0;
+    ULONG                       Size;
=20
=20
     Srb->SrbStatus =3D SRB_STATUS_ERROR;
@@ -433,13 +433,13 @@ TargetModeSense(
=20
 static DECLSPEC_NOINLINE VOID
 TargetModeSense10(
-    IN  PXENVBD_TARGET          Target,
-    IN  PSCSI_REQUEST_BLOCK     Srb
+    _In_ PXENVBD_TARGET         Target,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
     PXENVBD_FRONTEND            Frontend =3D Target->Frontend;
     PXENVBD_DISKINFO            DiskInfo =3D FrontendGetDiskInfo(Frontend=
);
-    PMODE_PARAMETER_HEADER10    Data  =3D Srb->DataBuffer;
+    PMODE_PARAMETER_HEADER10    Data =3D Srb->DataBuffer;
     ULONG                       Length =3D Srb->DataTransferLength;
     ULONG                       BlockDescrLength =3D 0;
     ULONG                       ModeDataLength =3D 0;
@@ -481,12 +481,12 @@ TargetModeSense10(
=20
 static DECLSPEC_NOINLINE VOID
 TargetRequestSense(
-    IN  PXENVBD_TARGET      Target,
-    IN  PSCSI_REQUEST_BLOCK Srb
+    _In_ PXENVBD_TARGET         Target,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
-    PSENSE_DATA             Data =3D Srb->DataBuffer;
-    ULONG                   Length =3D Srb->DataTransferLength;
+    PSENSE_DATA                 Data =3D Srb->DataBuffer;
+    ULONG                       Length =3D Srb->DataTransferLength;
=20
     UNREFERENCED_PARAMETER(Target);
=20
@@ -511,12 +511,12 @@ TargetRequestSense(
=20
 static DECLSPEC_NOINLINE VOID
 TargetReportLuns(
-    IN  PXENVBD_TARGET      Target,
-    IN  PSCSI_REQUEST_BLOCK Srb
+    _In_ PXENVBD_TARGET         Target,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
-    PLUN_LIST               Data =3D Srb->DataBuffer;
-    ULONG                   Length =3D Srb->DataTransferLength;
+    PLUN_LIST                   Data =3D Srb->DataBuffer;
+    ULONG                       Length =3D Srb->DataTransferLength;
=20
     UNREFERENCED_PARAMETER(Target);
=20
@@ -540,16 +540,16 @@ TargetReportLuns(
=20
 static DECLSPEC_NOINLINE VOID
 TargetReadCapacity(
-    IN  PXENVBD_TARGET      Target,
-    IN  PSCSI_REQUEST_BLOCK Srb
+    _In_ PXENVBD_TARGET         Target,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
-    PREAD_CAPACITY_DATA     Data =3D Srb->DataBuffer;
-    ULONG                   Length =3D Srb->DataTransferLength;
-    PXENVBD_DISKINFO        DiskInfo =3D FrontendGetDiskInfo(Target->Fron=
tend);
-    ULONG64                 SectorCount;
-    ULONG                   SectorSize;
-    ULONG                   LastBlock;
+    PREAD_CAPACITY_DATA         Data =3D Srb->DataBuffer;
+    ULONG                       Length =3D Srb->DataTransferLength;
+    PXENVBD_DISKINFO            DiskInfo =3D FrontendGetDiskInfo(Target->=
Frontend);
+    ULONG64                     SectorCount;
+    ULONG                       SectorSize;
+    ULONG                       LastBlock;
=20
     Srb->SrbStatus =3D SRB_STATUS_ERROR;
=20
@@ -589,18 +589,18 @@ fail1:
=20
 static DECLSPEC_NOINLINE VOID
 TargetReadCapacity16(
-    IN  PXENVBD_TARGET      Target,
-    IN  PSCSI_REQUEST_BLOCK Srb
+    _In_ PXENVBD_TARGET         Target,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
-    PREAD_CAPACITY16_DATA   Data =3D Srb->DataBuffer;
-    ULONG                   Length =3D Srb->DataTransferLength;
-    PXENVBD_DISKINFO        DiskInfo =3D FrontendGetDiskInfo(Target->Fron=
tend);
-    ULONG64                 SectorCount;
-    ULONG                   SectorSize;
-    ULONG                   PhysSectorSize;
-    ULONG                   LogicalPerPhysical;
-    ULONG                   LogicalPerPhysicalExponent;
+    PREAD_CAPACITY16_DATA       Data =3D Srb->DataBuffer;
+    ULONG                       Length =3D Srb->DataTransferLength;
+    PXENVBD_DISKINFO            DiskInfo =3D FrontendGetDiskInfo(Target->=
Frontend);
+    ULONG64                     SectorCount;
+    ULONG                       SectorSize;
+    ULONG                       PhysSectorSize;
+    ULONG                       LogicalPerPhysical;
+    ULONG                       LogicalPerPhysicalExponent;
=20
     Srb->SrbStatus =3D SRB_STATUS_ERROR;
=20
@@ -646,11 +646,11 @@ fail1:
=20
 static DECLSPEC_NOINLINE VOID
 TargetServiceActionIn16(
-    IN  PXENVBD_TARGET      Target,
-    IN  PSCSI_REQUEST_BLOCK Srb
+    _In_ PXENVBD_TARGET         Target,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
-    UCHAR                   ServiceAction =3D Cdb_ServiceAction(Srb);
+    UCHAR                       ServiceAction =3D Cdb_ServiceAction(Srb);
=20
     switch (ServiceAction){
     case SERVICE_ACTION_READ_CAPACITY16:
@@ -668,13 +668,13 @@ TargetServiceActionIn16(
=20
 static FORCEINLINE VOID
 TargetInquiryStd(
-    IN  PXENVBD_TARGET      Target,
-    IN  PSCSI_REQUEST_BLOCK Srb
+    _In_ PXENVBD_TARGET         Target,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
-    PXENVBD_DISKINFO        DiskInfo =3D FrontendGetDiskInfo(Target->Fron=
tend);
-    PINQUIRYDATA            Data =3D Srb->DataBuffer;
-    ULONG                   Length =3D Srb->DataTransferLength;
+    PXENVBD_DISKINFO            DiskInfo =3D FrontendGetDiskInfo(Target->=
Frontend);
+    PINQUIRYDATA                Data =3D Srb->DataBuffer;
+    ULONG                       Length =3D Srb->DataTransferLength;
=20
     Srb->SrbStatus =3D SRB_STATUS_ERROR;
=20
@@ -715,8 +715,8 @@ static const UCHAR SupportedPages[] =3D {
=20
 static FORCEINLINE VOID
 TargetInquiry00(
-    IN  PXENVBD_TARGET          Target,
-    IN  PSCSI_REQUEST_BLOCK     Srb
+    _In_ PXENVBD_TARGET         Target,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
     PVPD_SUPPORTED_PAGES_PAGE   Data =3D Srb->DataBuffer;
@@ -745,14 +745,14 @@ TargetInquiry00(
=20
 static FORCEINLINE VOID
 TargetInquiry80(
-    IN  PXENVBD_TARGET      Target,
-    IN  PSCSI_REQUEST_BLOCK Srb
+    _In_ PXENVBD_TARGET         Target,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
-    PVPD_SERIAL_NUMBER_PAGE Data =3D Srb->DataBuffer;
-    ULONG                   Length =3D Srb->DataTransferLength;
-    PVOID                   Page;
-    ULONG                   Size;
+    PVPD_SERIAL_NUMBER_PAGE     Data =3D Srb->DataBuffer;
+    ULONG                       Length =3D Srb->DataTransferLength;
+    PVOID                       Page;
+    ULONG                       Size;
=20
     Srb->SrbStatus =3D SRB_STATUS_ERROR;
=20
@@ -789,8 +789,8 @@ TargetInquiry80(
=20
 static FORCEINLINE VOID
 TargetInquiry83(
-    IN  PXENVBD_TARGET          Target,
-    IN  PSCSI_REQUEST_BLOCK     Srb
+    _In_ PXENVBD_TARGET         Target,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
     PVPD_IDENTIFICATION_PAGE    Data =3D Srb->DataBuffer;
@@ -840,14 +840,14 @@ TargetInquiry83(
=20
 static FORCEINLINE VOID
 TargetInquiryB0(
-    IN  PXENVBD_TARGET      Target,
-    IN  PSCSI_REQUEST_BLOCK Srb
+    _In_ PXENVBD_TARGET         Target,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
-    PXENVBD_FEATURES        Features =3D FrontendGetFeatures(Target->Fron=
tend);
-    PXENVBD_DISKINFO        DiskInfo =3D FrontendGetDiskInfo(Target->Fron=
tend);
-    PVPD_BLOCK_LIMITS_PAGE  Data =3D Srb->DataBuffer;
-    ULONG                   Length =3D Srb->DataTransferLength;
+    PXENVBD_FEATURES            Features =3D FrontendGetFeatures(Target->=
Frontend);
+    PXENVBD_DISKINFO            DiskInfo =3D FrontendGetDiskInfo(Target->=
Frontend);
+    PVPD_BLOCK_LIMITS_PAGE      Data =3D Srb->DataBuffer;
+    ULONG                       Length =3D Srb->DataTransferLength;
=20
     Srb->SrbStatus =3D SRB_STATUS_ERROR;
=20
@@ -884,12 +884,12 @@ TargetInquiryB0(
=20
 static FORCEINLINE VOID
 TargetInquiryB1(
-    IN  PXENVBD_TARGET                     Target,
-    IN  PSCSI_REQUEST_BLOCK                Srb
+    _In_ PXENVBD_TARGET                     Target,
+    _In_ PSCSI_REQUEST_BLOCK                Srb
     )
 {
-    PVPD_BLOCK_DEVICE_CHARACTERISTICS_PAGE Data =3D Srb->DataBuffer;
-    ULONG                                  Length =3D Srb->DataTransferLe=
ngth;
+    PVPD_BLOCK_DEVICE_CHARACTERISTICS_PAGE  Data =3D Srb->DataBuffer;
+    ULONG                                   Length =3D Srb->DataTransferL=
ength;
=20
     UNREFERENCED_PARAMETER(Target);
=20
@@ -915,8 +915,8 @@ TargetInquiryB1(
=20
 static VOID
 TargetInquiryB2(
-    IN  PXENVBD_TARGET                      Target,
-    IN  PSCSI_REQUEST_BLOCK                 Srb
+    _In_ PXENVBD_TARGET                     Target,
+    _In_ PSCSI_REQUEST_BLOCK                Srb
     )
 {
     PVPD_LOGICAL_BLOCK_PROVISIONING_PAGE    Data =3D Srb->DataBuffer;
@@ -948,8 +948,8 @@ TargetInquiryB2(
=20
 static DECLSPEC_NOINLINE VOID
 TargetInquiry(
-    IN  PXENVBD_TARGET      Target,
-    IN  PSCSI_REQUEST_BLOCK Srb
+    _In_ PXENVBD_TARGET         Target,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
     if (Cdb_EVPD(Srb)) {
@@ -990,11 +990,11 @@ TargetInquiry(
=20
 static FORCEINLINE BOOLEAN
 __ValidateSrbForTarget(
-    IN  PXENVBD_TARGET      Target,
-    IN  PSCSI_REQUEST_BLOCK Srb
+    _In_ PXENVBD_TARGET         Target,
+    _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
-    const UCHAR             Operation =3D Cdb_OperationEx(Srb);
+    const UCHAR                 Operation =3D Cdb_OperationEx(Srb);
=20
     if (Srb->PathId !=3D 0) {
         Error("Target[%d] : Invalid PathId(%d) (%02x:%s)\n",
@@ -1032,8 +1032,8 @@ __ValidateSrbForTarget(
=20
 VOID
 TargetPrepareIo(
-    IN  PXENVBD_TARGET  Target,
-    IN  PXENVBD_SRBEXT  SrbExt
+    _In_ PXENVBD_TARGET Target,
+    _In_ PXENVBD_SRBEXT SrbExt
     )
 {
     PSCSI_REQUEST_BLOCK Srb =3D SrbExt->Srb;
@@ -1046,8 +1046,8 @@ TargetPrepareIo(
=20
 BOOLEAN
 TargetStartIo(
-    IN  PXENVBD_TARGET  Target,
-    IN  PXENVBD_SRBEXT  SrbExt
+    _In_ PXENVBD_TARGET Target,
+    _In_ PXENVBD_SRBEXT SrbExt
     )
 {
     PSCSI_REQUEST_BLOCK Srb =3D SrbExt->Srb;
@@ -1125,7 +1125,7 @@ TargetStartIo(
=20
 VOID
 TargetReset(
-    IN  PXENVBD_TARGET  Target
+    _In_ PXENVBD_TARGET Target
     )
 {
     Verbose("[%u] =3D=3D=3D=3D=3D>\n", TargetGetTargetId(Target));
@@ -1137,8 +1137,8 @@ TargetReset(
=20
 BOOLEAN
 TargetFlush(
-    IN  PXENVBD_TARGET  Target,
-    IN  PXENVBD_SRBEXT  SrbExt
+    _In_ PXENVBD_TARGET Target,
+    _In_ PXENVBD_SRBEXT SrbExt
     )
 {
     return RingQueueShutdown(FrontendGetRing(Target->Frontend), SrbExt);
@@ -1146,8 +1146,8 @@ TargetFlush(
=20
 BOOLEAN
 TargetShutdown(
-    IN  PXENVBD_TARGET  Target,
-    IN  PXENVBD_SRBEXT  SrbExt
+    _In_ PXENVBD_TARGET Target,
+    _In_ PXENVBD_SRBEXT SrbExt
     )
 {
     return RingQueueShutdown(FrontendGetRing(Target->Frontend), SrbExt);
@@ -1155,8 +1155,8 @@ TargetShutdown(
=20
 VOID
 TargetIssueDeviceEject(
-    IN  PXENVBD_TARGET  Target,
-    IN  const CHAR      *Reason
+    _In_ PXENVBD_TARGET Target,
+    _In_ const CHAR     *Reason
     )
 {
     KIRQL               Irql;
@@ -1193,8 +1193,8 @@ TargetIssueDeviceEject(
=20
 static FORCEINLINE VOID
 __TargetDeviceUsageNotification(
-    IN  PXENVBD_TARGET              Target,
-    IN  PIRP                        Irp
+    _In_ PXENVBD_TARGET             Target,
+    _In_ PIRP                       Irp
     )
 {
     PIO_STACK_LOCATION              StackLocation;
@@ -1212,7 +1212,7 @@ __TargetDeviceUsageNotification(
=20
 static FORCEINLINE VOID
 __TargetCheckEjectPending(
-    IN  PXENVBD_TARGET  Target
+    _In_ PXENVBD_TARGET Target
     )
 {
     KIRQL               Irql;
@@ -1236,7 +1236,7 @@ __TargetCheckEjectPending(
=20
 static FORCEINLINE VOID
 __TargetCheckEjectFailed(
-    IN  PXENVBD_TARGET  Target
+    _In_ PXENVBD_TARGET Target
     )
 {
     KIRQL               Irql;
@@ -1258,7 +1258,7 @@ __TargetCheckEjectFailed(
=20
 static FORCEINLINE VOID
 __TargetRemoveDevice(
-    IN  PXENVBD_TARGET  Target
+    _In_ PXENVBD_TARGET Target
     )
 {
     TargetD0ToD3(Target);
@@ -1279,7 +1279,7 @@ __TargetRemoveDevice(
=20
 static FORCEINLINE VOID
 __TargetEject(
-    IN  PXENVBD_TARGET  Target
+    _In_ PXENVBD_TARGET Target
     )
 {
     TargetSetMissing(Target, "Ejected");
@@ -1289,9 +1289,9 @@ __TargetEject(
=20
 NTSTATUS
 TargetDispatchPnp(
-    IN  PXENVBD_TARGET  Target,
-    IN  PDEVICE_OBJECT  DeviceObject,
-    IN  PIRP            Irp
+    _In_ PXENVBD_TARGET Target,
+    _In_ PDEVICE_OBJECT DeviceObject,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -1352,8 +1352,8 @@ TargetDispatchPnp(
=20
 static DECLSPEC_NOINLINE VOID
 TargetDebugCallback(
-    IN  PVOID       Argument,
-    IN  BOOLEAN     Crashing
+    _In_ PVOID      Argument,
+    _In_ BOOLEAN    Crashing
     )
 {
     PXENVBD_TARGET  Target =3D Argument;
@@ -1382,7 +1382,7 @@ TargetDebugCallback(
=20
 NTSTATUS
 TargetD3ToD0(
-    IN  PXENVBD_TARGET  Target
+    _In_ PXENVBD_TARGET Target
     )
 {
     NTSTATUS            status;
@@ -1447,7 +1447,7 @@ fail1:
=20
 VOID
 TargetD0ToD3(
-    IN  PXENVBD_TARGET  Target
+    _In_ PXENVBD_TARGET Target
     )
 {
     const ULONG         TargetId =3D TargetGetTargetId(Target);
@@ -1475,7 +1475,7 @@ TargetD0ToD3(
=20
 static FORCEINLINE ULONG
 __ParseVbd(
-    IN  PCHAR   DeviceIdStr
+    _In_ PCHAR  DeviceIdStr
     )
 {
     ULONG       DeviceId =3D strtoul(DeviceIdStr, NULL, 10);
@@ -1502,14 +1502,14 @@ __ParseVbd(
=20
 NTSTATUS
 TargetCreate(
-    IN  PXENVBD_ADAPTER Adapter,
-    IN  PCHAR           DeviceId,
-    OUT PXENVBD_TARGET* _Target
+    _In_ PXENVBD_ADAPTER    Adapter,
+    _In_ PCHAR              DeviceId,
+    _Outptr_ PXENVBD_TARGET *_Target
     )
 {
-    NTSTATUS            status;
-    PXENVBD_TARGET      Target;
-    ULONG               TargetId;
+    NTSTATUS                status;
+    PXENVBD_TARGET          Target;
+    ULONG                   TargetId;
=20
     TargetId =3D __ParseVbd(DeviceId);
     if (TargetId >=3D XENVBD_MAX_TARGETS)
@@ -1564,7 +1564,7 @@ fail1:
=20
 VOID
 TargetDestroy(
-    IN  PXENVBD_TARGET  Target
+    _In_ PXENVBD_TARGET Target
     )
 {
     const ULONG         TargetId =3D TargetGetTargetId(Target);
@@ -1599,7 +1599,7 @@ TARGET_GET_PROPERTY(DeviceObject, PDEVICE_OBJECT)
 //TARGET_GET_PROPERTY(TargetId, ULONG)
 ULONG
 TargetGetTargetId(
-    IN  PXENVBD_TARGET  Target
+    _In_ PXENVBD_TARGET Target
     )
 {
     return FrontendGetTargetId(Target->Frontend);
@@ -1607,7 +1607,7 @@ TargetGetTargetId(
 //TARGET_GET_PROPERTY(DeviceId, ULONG)
 ULONG
 TargetGetDeviceId(
-    IN  PXENVBD_TARGET  Target
+    _In_ PXENVBD_TARGET Target
     )
 {
     return FrontendGetDeviceId(Target->Frontend);
@@ -1616,7 +1616,7 @@ TargetGetDeviceId(
 //TARGET_GET_PROPERTY(Removable, BOOLEAN)
 BOOLEAN
 TargetGetRemovable(
-    IN  PXENVBD_TARGET  Target
+    _In_ PXENVBD_TARGET Target
     )
 {
     return FrontendGetFeatures(Target->Frontend)->Removable;
@@ -1627,7 +1627,7 @@ TARGET_GET_PROPERTY(DevicePnpState, DEVICE_PNP_STATE=
)
=20
 BOOLEAN
 TargetGetMissing(
-    IN  PXENVBD_TARGET  Target
+    _In_ PXENVBD_TARGET Target
     )
 {
     KIRQL               Irql;
diff --git a/src/xenvbd/target=2Eh b/src/xenvbd/target=2Eh
index 7faae5e=2E=2E8843367 100644
--- a/src/xenvbd/target=2Eh
+++ b/src/xenvbd/target=2Eh
@@ -43,84 +43,84 @@ typedef struct _XENVBD_TARGET XENVBD_TARGET, *PXENVBD_=
TARGET;
=20
 extern NTSTATUS
 TargetCreate(
-    IN  PXENVBD_ADAPTER Adapter,
-    IN  PCHAR           DeviceId,
-    OUT PXENVBD_TARGET* _Target
+    _In_ PXENVBD_ADAPTER    Adapter,
+    _In_ PCHAR              DeviceId,
+    _Outptr_ PXENVBD_TARGET *_Target
     );
=20
 extern VOID
 TargetDestroy(
-    IN  PXENVBD_TARGET  Target
+    _In_ PXENVBD_TARGET Target
     );
=20
 extern NTSTATUS
 TargetD3ToD0(
-    IN  PXENVBD_TARGET  Target
+    _In_ PXENVBD_TARGET Target
     );
=20
 extern VOID
 TargetD0ToD3(
-    IN  PXENVBD_TARGET  Target
+    _In_ PXENVBD_TARGET Target
     );
=20
 extern NTSTATUS
 TargetDispatchPnp(
-    IN  PXENVBD_TARGET  Target,
-    IN  PDEVICE_OBJECT  DeviceObject,
-    IN  PIRP            Irp
+    _In_ PXENVBD_TARGET Target,
+    _In_ PDEVICE_OBJECT DeviceObject,
+    _In_ PIRP           Irp
     );
=20
 extern VOID
 TargetIssueDeviceEject(
-    IN  PXENVBD_TARGET  Target,
-    IN  const CHAR      *Reason
+    _In_ PXENVBD_TARGET Target,
+    _In_ const CHAR     *Reason
     );
=20
 extern VOID
 TargetSetMissing(
-    IN  PXENVBD_TARGET  Target,
-    IN  const CHAR      *Reason
+    _In_ PXENVBD_TARGET Target,
+    _In_ const CHAR     *Reason
     );
=20
 extern VOID
 TargetSetDevicePnpState(
-    IN  PXENVBD_TARGET      Target,
-    IN  DEVICE_PNP_STATE    State
+    _In_ PXENVBD_TARGET     Target,
+    _In_ DEVICE_PNP_STATE   State
     );
=20
 extern VOID
 TargetSetDeviceObject(
-    IN  PXENVBD_TARGET  Target,
-    IN  PDEVICE_OBJECT  DeviceObject
+    _In_ PXENVBD_TARGET Target,
+    _In_ PDEVICE_OBJECT DeviceObject
     );
=20
 extern VOID
 TargetPrepareIo(
-    IN  PXENVBD_TARGET  Target,
-    IN  PXENVBD_SRBEXT  SrbExt
+    _In_ PXENVBD_TARGET Target,
+    _In_ PXENVBD_SRBEXT SrbExt
     );
=20
 extern BOOLEAN
 TargetStartIo(
-    IN  PXENVBD_TARGET  Target,
-    IN  PXENVBD_SRBEXT  SrbExt
+    _In_ PXENVBD_TARGET Target,
+    _In_ PXENVBD_SRBEXT SrbExt
     );
=20
 extern VOID
 TargetReset(
-    IN  PXENVBD_TARGET  Target
+    _In_ PXENVBD_TARGET Target
     );
=20
 extern BOOLEAN
 TargetFlush(
-    IN  PXENVBD_TARGET  Target,
-    IN  PXENVBD_SRBEXT  SrbExt
+    _In_ PXENVBD_TARGET Target,
+    _In_ PXENVBD_SRBEXT SrbExt
     );
=20
 extern BOOLEAN
 TargetShutdown(
-    IN  PXENVBD_TARGET  Target,
-    IN  PXENVBD_SRBEXT  SrbExt
+    _In_ PXENVBD_TARGET Target,
+    _In_ PXENVBD_SRBEXT SrbExt
     );
=20
 #define TARGET_GET_PROPERTY(_name, _type)       \
diff --git a/src/xenvbd/thread=2Ec b/src/xenvbd/thread=2Ec
index a9ea316=2E=2Eb8924b9 100644
--- a/src/xenvbd/thread=2Ec
+++ b/src/xenvbd/thread=2Ec
@@ -49,13 +49,13 @@ struct _XENVBD_THREAD {
     PKTHREAD                Thread;
 };
=20
-__checkReturn
+_Check_return_
 __drv_allocatesMem(mem)
-__bcount(Length)
+_Writable_bytes_(Length)
 static FORCEINLINE PVOID
 #pragma warning(suppress: 28195)
 __ThreadAllocate(
-    __in ULONG  Length
+    _In_ ULONG  Length
     )
 {
     return __AllocatePoolWithTag(NonPagedPool, Length, THREAD_POOL_TAG);
@@ -64,7 +64,7 @@ __ThreadAllocate(
 static FORCEINLINE VOID
 #pragma warning(suppress: 28197)
 __ThreadFree(
-    __in __drv_freesMem(mem) PVOID Buffer
+    _In_ __drv_freesMem(mem) PVOID  Buffer
     )
 {
     if (Buffer)
@@ -73,7 +73,7 @@ __ThreadFree(
=20
 static FORCEINLINE VOID
 __ThreadWake(
-    __in PXENVBD_THREAD  Thread
+    _In_ PXENVBD_THREAD Thread
     )
 {
     ASSERT((Thread->Thread =3D=3D NULL) || (Thread->Thread !=3D KeGetCurr=
entThread()));
@@ -82,7 +82,7 @@ __ThreadWake(
=20
 VOID
 ThreadWake(
-    __in PXENVBD_THREAD  Thread
+    _In_ PXENVBD_THREAD Thread
     )
 {
     __ThreadWake(Thread);
@@ -90,7 +90,7 @@ ThreadWake(
=20
 static FORCEINLINE VOID
 __ThreadAlert(
-    __in PXENVBD_THREAD  Thread
+    _In_ PXENVBD_THREAD Thread
     )
 {
     Thread->Alerted =3D TRUE;
@@ -99,17 +99,17 @@ __ThreadAlert(
=20
 VOID
 ThreadAlert(
-    __in PXENVBD_THREAD  Thread
+    _In_ PXENVBD_THREAD Thread
     )
 {
     __ThreadAlert(Thread);
 }
=20
-__checkReturn
-__drv_maxIRQL(PASSIVE_LEVEL)
+_Check_return_
+_IRQL_requires_max_(PASSIVE_LEVEL)
 BOOLEAN
 ThreadWait(
-    __in PXENVBD_THREAD  Thread
+    _In_ PXENVBD_THREAD Thread
     )
 {
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, PASSIVE_LEVEL);
@@ -128,7 +128,7 @@ KSTART_ROUTINE  ThreadFunction;
=20
 VOID
 ThreadFunction(
-    __in PVOID       Argument
+    _In_ PVOID      Argument
     )
 {
     PXENVBD_THREAD  Self =3D Argument;
@@ -146,13 +146,13 @@ ThreadFunction(
     // NOT REACHED
 }
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 _ThreadCreate(
-    __in  PCHAR                   Name,
-    __in  XENVBD_THREAD_FUNCTION  Function,
-    __in_opt PVOID                Context,
-    __out PXENVBD_THREAD          *_Thread
+    _In_ PCHAR                  Name,
+    _In_ XENVBD_THREAD_FUNCTION Function,
+    _In_opt_ PVOID              Context,
+    _Outptr_ PXENVBD_THREAD     *_Thread
     )
 {
     HANDLE                      Handle;
@@ -223,25 +223,25 @@ fail1:
=20
 PKEVENT
 ThreadGetEvent(
-    __in PXENVBD_THREAD  Thread
+    _In_ PXENVBD_THREAD Thread
     )
 {
     return &Thread->WorkEvent;
 }
=20
-__checkReturn
+_Check_return_
 BOOLEAN
 ThreadIsAlerted(
-    __in PXENVBD_THREAD  Thread
+    _In_ PXENVBD_THREAD Thread
     )
 {
     return Thread->Alerted;
 }
=20
-__drv_maxIRQL(PASSIVE_LEVEL)
+_IRQL_requires_max_(PASSIVE_LEVEL)
 VOID
 ThreadJoin(
-    __in PXENVBD_THREAD  Thread
+    _In_ PXENVBD_THREAD Thread
     )
 {
     LONG                References;
diff --git a/src/xenvbd/thread=2Eh b/src/xenvbd/thread=2Eh
index 598bcb2=2E=2Ee6aba66 100644
--- a/src/xenvbd/thread=2Eh
+++ b/src/xenvbd/thread=2Eh
@@ -39,13 +39,13 @@ typedef struct _XENVBD_THREAD XENVBD_THREAD, *PXENVBD_=
THREAD;
=20
 typedef NTSTATUS (*XENVBD_THREAD_FUNCTION)(PXENVBD_THREAD, PVOID);
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 _ThreadCreate(
-    __in  PCHAR                   Name,
-    __in  XENVBD_THREAD_FUNCTION  Function,
-    __in_opt PVOID                Context,
-    __out PXENVBD_THREAD          *Thread
+    _In_ PCHAR                  Name,
+    _In_ XENVBD_THREAD_FUNCTION Function,
+    _In_opt_ PVOID              Context,
+    _Outptr_ PXENVBD_THREAD     *Thread
     );
=20
 #define ThreadCreate(_f, _c, _t)    \
@@ -53,36 +53,36 @@ _ThreadCreate(
=20
 extern PKEVENT
 ThreadGetEvent(
-    __in PXENVBD_THREAD  Self
+    _In_ PXENVBD_THREAD Self
     );
=20
-__checkReturn
+_Check_return_
 extern BOOLEAN
 ThreadIsAlerted(
-    __in PXENVBD_THREAD  Self
+    _In_ PXENVBD_THREAD Self
     );
=20
 extern VOID
 ThreadWake(
-    __in PXENVBD_THREAD  Thread
+    _In_ PXENVBD_THREAD Thread
     );
=20
 extern VOID
 ThreadAlert(
-    __in PXENVBD_THREAD  Thread
+    _In_ PXENVBD_THREAD Thread
     );
=20
-__checkReturn
-__drv_maxIRQL(PASSIVE_LEVEL)
+_Check_return_
+_IRQL_requires_max_(PASSIVE_LEVEL)
 extern BOOLEAN
 ThreadWait(
-    __in PXENVBD_THREAD  Thread
+    _In_ PXENVBD_THREAD Thread
     );
=20
-__drv_maxIRQL(PASSIVE_LEVEL)
+_IRQL_requires_max_(PASSIVE_LEVEL)
 extern VOID
 ThreadJoin(
-    __in PXENVBD_THREAD  Thread
+    _In_ PXENVBD_THREAD Thread
     );
=20
 #endif  // _XENVBD_THREAD_H
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.2cb.ff8d434b954ef7a9.1a144e5105c.7d288c2a6d3c2f45=---


From win-pv-devel-bounces@lists.xenproject.org Fri Oct 16 13:27:09 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 16 Oct 2026 13:27:09 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1451853.1666694 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHhxl-0006BL-MW; Fri, 16 Oct 2026 13:27:09 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1451853.1666694; Fri, 16 Oct 2026 13:27:09 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHhxl-0006BC-IR; Fri, 16 Oct 2026 13:27:09 +0000
Received: by outflank-mailman (input) for mailman id 1451853;
 Fri, 16 Oct 2026 13:27:08 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e516480008425@swg.vates.tech>)
 id 1xHhxk-00068k-Gq
 for win-pv-devel@lists.xenproject.org; Fri, 16 Oct 2026 13:27:08 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xHhxj-00BNGh-Te
 for win-pv-devel@lists.xenproject.org; Fri, 16 Oct 2026 15:27:07 +0200
Received: from [10.42.69.1] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e516480008425@swg.vates.tech>)
 id 6ad2262a-e002-0a2a0a5209dd-0a2a4501e862-0
 for <win-pv-devel@lists.xenproject.org>; Fri, 16 Oct 2026 15:27:06 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e516480008425@swg.vates.tech>)
 id 6ad2262a-5984-0a2a45010019-b9ff1c228703-4
 for <win-pv-devel@lists.xenproject.org>; Fri, 16 Oct 2026 15:27:06 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a144e516480008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Fri, 16 Oct 2026 13:27:06 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 0E27782814;
 Fri, 16 Oct 2026 15:27:06 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=Oiq9z8y1fDZOJx92kwdt8u2SwNB4mIwJlu9WUkTXhKM=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=K08IW2GHd8hU9hyOiaDwcF0kImFk97xcyZrtR9Ovzy3x5VuScLhkeJGS9U/CaBXjoHlE4qqcQ
 beJhpanIO1nAkbAPW8Dwcr7pqF32QvS9Qlc9DWyyOMyKirO18nZ/bwpKIFFIYO3wf1J19GRgd5M
 no8eyuzE6bFKvdB4mRS9aCzaR0UC7Rkaz57RvwV/oRJfj5/yGOnrhfrf9cjyz/ASuAZX12mA3jz
 2SIu96RcH7up1w963PFP1oXlZEzjtrOIoXo3cpqvgIsexxDpvEy1xJtGBtO0sYY42zR1gokjlX0
 dVo117lyHfAPIgpf6qxk89aahjU9X2h65aDjTyo2Dodw==
X-Zone-Loop: 9547179cfd3c0d2b2fd21827494a14d2088c3685c227
x-campaign-type: default
x-transaction-id: c19e5ecc-8f37-4ddd-b316-95a359c4c638
x-swg-uid: 01-c2649acc-d5be-4c79-993e-f4b1b0013ffd
X-Mailer: Sweego
Message-ID:
 <1792157226.8631fc262581453bbf619ec5b2062170.1a144e516480008425@vates.tech>
x-swg-bid: 1792157226.8631fc262581453bbf619ec5b2062170.1a144e516480008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 07/18] Add size annotations to buffer parameters
Date: Fri, 16 Oct 2026 15:26:44 +0200
In-Reply-To: <1792157073.8631fc262581453bbf619ec5b2062170.1a144e2bf7f0008425@vates.tech>
References: <1792157073.8631fc262581453bbf619ec5b2062170.1a144e2bf7f0008425@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.2cf.6d1a30f114c216cd.1a144e5149d.fa1a46be0f561106=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792157226141
X-purgate-ID: tlsNG-d62444/1792157226-BDA7E757-130837CD/0/0
X-purgate-type: clean
X-purgate-size: 10990

---=Part.2cf.6d1a30f114c216cd.1a144e5149d.fa1a46be0f561106=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Some buffer parameters with a size parameter had no size annotation=2E
Annotate them with their actual size=2E

No functional change=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xencrsh/assert=2Eh     | 16 ++++++++--------
 src/xencrsh/buffer=2Ec     | 12 ++++++------
 src/xencrsh/buffer=2Eh     | 12 ++++++------
 src/xencrsh/pdoinquiry=2Ec | 18 +++++++++---------
 src/xencrsh/store=2Ec      |  2 +-
 src/xencrsh/store=2Eh      |  8 ++++----
 src/xenvbd/base64=2Ec      |  6 +++---
 src/xenvbd/base64=2Eh      |  6 +++---
 src/xenvbd/registry=2Ec    | 24 ++++++++++++------------
 src/xenvbd/registry=2Eh    | 16 ++++++++--------
 src/xenvbd/target=2Ec      | 14 +++++++-------
 11 files changed, 67 insertions(+), 67 deletions(-)

diff --git a/src/xencrsh/assert=2Eh b/src/xencrsh/assert=2Eh
index d5b64d6=2E=2E3692e94 100644
--- a/src/xencrsh/assert=2Eh
+++ b/src/xencrsh/assert=2Eh
@@ -154,10 +154,10 @@ __Bug(
=20
 static __inline BOOLEAN
 _IsZeroMemory(
-    _In_ PCSTR      Caller,
-    _In_ PCSTR      Name,
-    _In_ PVOID      Buffer,
-    _In_ ULONG      Length
+    _In_ PCSTR                      Caller,
+    _In_ PCSTR                      Name,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Length
     )
 {
     ULONG           Offset;
@@ -178,10 +178,10 @@ _IsZeroMemory(
=20
 static __inline BOOLEAN
 _IsZeroMemory(
-    _In_ PCSTR  Caller,
-    _In_ PCSTR  Name,
-    _In_ PVOID  Buffer,
-    _In_ ULONG  Length
+    _In_ PCSTR                      Caller,
+    _In_ PCSTR                      Name,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Length
     )
 {
     UNREFERENCED_PARAMETER(Caller);
diff --git a/src/xencrsh/buffer=2Ec b/src/xencrsh/buffer=2Ec
index 7d27342=2E=2Eef897f1 100644
--- a/src/xencrsh/buffer=2Ec
+++ b/src/xencrsh/buffer=2Ec
@@ -150,9 +150,9 @@ BufferPut(
=20
 VOID
 BufferCopyIn(
-    _In_ ULONG      BufferId,
-    _In_ PVOID      Input,
-    _In_ ULONG      Length
+    _In_ ULONG                      BufferId,
+    _In_reads_bytes_(Length) PVOID  Input,
+    _In_ ULONG                      Length
     )
 {
     PXENVBD_BUFFER  Buf;
@@ -170,9 +170,9 @@ BufferCopyIn(
=20
 VOID
 BufferCopyOut(
-    _In_ ULONG      BufferId,
-    _Out_ PVOID     Output,
-    _In_ ULONG      Length
+    _In_ ULONG                          BufferId,
+    _Out_writes_bytes_(Length) PVOID    Output,
+    _In_ ULONG                          Length
     )
 {
     PXENVBD_BUFFER  Buf;
diff --git a/src/xencrsh/buffer=2Eh b/src/xencrsh/buffer=2Eh
index 148009f=2E=2E39df51d 100644
--- a/src/xencrsh/buffer=2Eh
+++ b/src/xencrsh/buffer=2Eh
@@ -58,16 +58,16 @@ BufferPut(
=20
 extern VOID
 BufferCopyIn(
-    _In_ ULONG  BufferId,
-    _In_ PVOID  Input,
-    _In_ ULONG  Length
+    _In_ ULONG                      BufferId,
+    _In_reads_bytes_(Length) PVOID  Input,
+    _In_ ULONG                      Length
     );
=20
 extern VOID
 BufferCopyOut(
-    _In_ ULONG  BufferId,
-    _Out_ PVOID Output,
-    _In_ ULONG  Length
+    _In_ ULONG                          BufferId,
+    _Out_writes_bytes_(Length) PVOID    Output,
+    _In_ ULONG                          Length
     );
    =20
 #endif // _XENVBD_BUFFER_H
diff --git a/src/xencrsh/pdoinquiry=2Ec b/src/xencrsh/pdoinquiry=2Ec
index 666eb89=2E=2E9726043 100644
--- a/src/xencrsh/pdoinquiry=2Ec
+++ b/src/xencrsh/pdoinquiry=2Ec
@@ -233,9 +233,9 @@ __DecodeChar(
 }
 static FORCEINLINE UCHAR
 __Decode(
-    _Out_ PUCHAR    Dest,
-    _In_ PSTR       Src,
-    _In_ ULONG      RemainingChars
+    _Out_writes_(3) PUCHAR              Dest,
+    _In_reads_(RemainingChars) PSTR     Src,
+    _In_ ULONG                          RemainingChars
     )
 {
     UCHAR           Values[4];
@@ -267,10 +267,10 @@ __Decode(
 }
 static NTSTATUS
 __DecodeBase64(
-    _In_ PSTR       Base64,
-    _In_ ULONG      Base64Length,
-    _Outptr_ PVOID  *_Buffer,
-    _Out_ PULONG    BufferLength
+    _In_ PSTR                                       Base64,
+    _In_ ULONG                                      Base64Length,
+    _Outptr_result_bytebuffer_(*BufferLength) PVOID *_Buffer,
+    _Out_ PULONG                                    BufferLength
     )
 {
     // convert Base64(4chars) into Buffer(3bytes)
@@ -628,8 +628,8 @@ __Min(
 }
 static FORCEINLINE VOID
 __DumpBytes(
-    _In_ PUCHAR Bytes,
-    _In_ ULONG  Length
+    _In_reads_(Length) PUCHAR   Bytes,
+    _In_ ULONG                  Length
     )
 {
     ULONG       ThisTime, Index;
diff --git a/src/xencrsh/store=2Ec b/src/xencrsh/store=2Ec
index dbdf818=2E=2Eaa22465 100644
--- a/src/xencrsh/store=2Ec
+++ b/src/xencrsh/store=2Ec
@@ -605,7 +605,7 @@ StoreRead(
     _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
     _In_opt_ PSTR                       Prefix,
     _In_ PSTR                           Node,
-    _Outptr_ PCHAR                      *Value
+    _Outptr_result_z_ PCHAR             *Value
     )
 {
     STORE_REQUEST                       Request;
diff --git a/src/xencrsh/store=2Eh b/src/xencrsh/store=2Eh
index b4a4de4=2E=2E7adca20 100644
--- a/src/xencrsh/store=2Eh
+++ b/src/xencrsh/store=2Eh
@@ -43,10 +43,10 @@ StoreTerminate();
=20
 NTSTATUS
 StoreRead(
-    _In_opt_ PVOID  Transaction,
-    _In_opt_ PSTR   Prefix,
-    _In_ PSTR       Node,
-    _Outptr_ PCHAR  *Value
+    _In_opt_ PVOID              Transaction,
+    _In_opt_ PSTR               Prefix,
+    _In_ PSTR                   Node,
+    _Outptr_result_z_ PCHAR     *Value
     );
=20
 NTSTATUS
diff --git a/src/xenvbd/base64=2Ec b/src/xenvbd/base64=2Ec
index c3dbf30=2E=2Edf398aa 100644
--- a/src/xenvbd/base64=2Ec
+++ b/src/xenvbd/base64=2Ec
@@ -113,9 +113,9 @@ __Decode(
=20
 NTSTATUS
 Base64Decode(
-    _In_ PSTR       String,
-    _Outptr_ PVOID  *Binary,
-    _Out_ PULONG    Length
+    _In_ PSTR                                   String,
+    _Outptr_result_bytebuffer_(*Length) PVOID   *Binary,
+    _Out_ PULONG                                Length
     )
 {
     ULONG           StringLength;
diff --git a/src/xenvbd/base64=2Eh b/src/xenvbd/base64=2Eh
index 1806813=2E=2Eb8eab49 100644
--- a/src/xenvbd/base64=2Eh
+++ b/src/xenvbd/base64=2Eh
@@ -42,9 +42,9 @@ Base64Free(
=20
 extern NTSTATUS
 Base64Decode(
-    _In_ PSTR       String,
-    _Outptr_ PVOID  *Binary,
-    _Out_ PULONG    Length
+    _In_ PSTR                                   String,
+    _Outptr_result_bytebuffer_(*Length) PVOID   *Binary,
+    _Out_ PULONG                                Length
     );
=20
 #endif // _XENVBD_BASE64_H
diff --git a/src/xenvbd/registry=2Ec b/src/xenvbd/registry=2Ec
index 3efff22=2E=2Ed949460 100644
--- a/src/xenvbd/registry=2Ec
+++ b/src/xenvbd/registry=2Ec
@@ -143,15 +143,15 @@ fail1:
 _IRQL_requires_(PASSIVE_LEVEL)
 static NTSTATUS
 RegistryOpenRoot(
-    _In_ PWSTR          Path,
-    _Out_ PHANDLE       Parent,
-    _Outptr_ PWCHAR     *ChildPath
+    _In_ PWSTR              Path,
+    _Out_ PHANDLE           Parent,
+    _Outptr_result_z_ PWSTR *ChildPath
     )
 {
-    const WCHAR         Prefix[] =3D L"\\Registry\\Machine\\";
-    ULONG               Length;
-    UNICODE_STRING      Unicode;
-    NTSTATUS            status;
+    const WCHAR             Prefix[] =3D L"\\Registry\\Machine\\";
+    ULONG                   Length;
+    UNICODE_STRING          Unicode;
+    NTSTATUS                status;
=20
     Length =3D (ULONG)wcslen(Prefix);
=20
@@ -1117,10 +1117,10 @@ fail1:
 _IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryQueryBinaryValue(
-    _In_ HANDLE                     Key,
-    _In_ PSTR                       Name,
-    _Outptr_ PVOID                  *Buffer,
-    _Out_ PULONG                    Length
+    _In_ HANDLE                                 Key,
+    _In_ PSTR                                   Name,
+    _Outptr_result_bytebuffer_(*Length) PVOID   *Buffer,
+    _Out_ PULONG                                Length
     )
 {
     ANSI_STRING                     Ansi;
@@ -1205,7 +1205,7 @@ NTSTATUS
 RegistryUpdateBinaryValue(
     _In_ HANDLE                     Key,
     _In_ PSTR                       Name,
-    _In_ PVOID                      Buffer,
+    _In_reads_bytes_(Length) PVOID  Buffer,
     _In_ ULONG                      Length
     )
 {
diff --git a/src/xenvbd/registry=2Eh b/src/xenvbd/registry=2Eh
index b8f80ba=2E=2E557ab2c 100644
--- a/src/xenvbd/registry=2Eh
+++ b/src/xenvbd/registry=2Eh
@@ -176,19 +176,19 @@ RegistryQuerySzValue(
 _IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryQueryBinaryValue(
-    _In_ HANDLE     Key,
-    _In_ PSTR       Name,
-    _Outptr_ PVOID  *Buffer,
-    _Out_ PULONG    Length
+    _In_ HANDLE                                 Key,
+    _In_ PSTR                                   Name,
+    _Outptr_result_bytebuffer_(*Length) PVOID   *Buffer,
+    _Out_ PULONG                                Length
     );
=20
 _IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryUpdateBinaryValue(
-    _In_ HANDLE Key,
-    _In_ PSTR   Name,
-    _In_ PVOID  Buffer,
-    _In_ ULONG  Length
+    _In_ HANDLE                     Key,
+    _In_ PSTR                       Name,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Length
     );
=20
 _IRQL_requires_(PASSIVE_LEVEL)
diff --git a/src/xenvbd/target=2Ec b/src/xenvbd/target=2Ec
index 0fe3412=2E=2Ecfbcb02 100644
--- a/src/xenvbd/target=2Ec
+++ b/src/xenvbd/target=2Ec
@@ -330,13 +330,13 @@ fail1:
=20
 static FORCEINLINE VOID
 __TargetModeSense(
-    _In_ PXENVBD_TARGET         Target,
-    _In_ PSCSI_REQUEST_BLOCK    Srb,
-    _In_ PVOID                  Data,
-    _In_ ULONG                  Length,
-    _Out_ PULONG                Size,
-    _Out_ PULONG                ModeDataLength,
-    _Out_ PULONG                BlockDescrLength
+    _In_ PXENVBD_TARGET                     Target,
+    _In_ PSCSI_REQUEST_BLOCK                Srb,
+    _Inout_updates_bytes_(Length) PVOID     Data,
+    _In_ ULONG                              Length,
+    _Inout_ PULONG                          Size,
+    _Inout_ PULONG                          ModeDataLength,
+    _Inout_ PULONG                          BlockDescrLength
     )
 {
     const UCHAR                 PageCode =3D Cdb_PageCode(Srb);
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.2cf.6d1a30f114c216cd.1a144e5149d.fa1a46be0f561106=---


From win-pv-devel-bounces@lists.xenproject.org Fri Oct 16 13:27:11 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 16 Oct 2026 13:27:11 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1451854.1666699 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHhxm-0006Ez-TC; Fri, 16 Oct 2026 13:27:10 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1451854.1666699; Fri, 16 Oct 2026 13:27:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHhxm-0006Eo-OE; Fri, 16 Oct 2026 13:27:10 +0000
Received: by outflank-mailman (input) for mailman id 1451854;
 Fri, 16 Oct 2026 13:27:08 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e515740008425@swg.vates.tech>)
 id 1xHhxk-00068l-IP
 for win-pv-devel@lists.xenproject.org; Fri, 16 Oct 2026 13:27:08 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xHhxj-00BNGh-Ux
 for win-pv-devel@lists.xenproject.org; Fri, 16 Oct 2026 15:27:07 +0200
Received: from [10.42.69.4] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e515740008425@swg.vates.tech>)
 id 6ad2261c-e002-0a2a0a5209dd-0a2a4504ab44-30
 for <win-pv-devel@lists.xenproject.org>; Fri, 16 Oct 2026 15:27:07 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-ebf023.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e515740008425@swg.vates.tech>)
 id 6ad2262a-b57f-0a2a45040019-b9ff1c129969-3
 for <win-pv-devel@lists.xenproject.org>; Fri, 16 Oct 2026 15:27:07 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a144e515740008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Fri, 16 Oct 2026 13:27:06 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id AA451827B9;
 Fri, 16 Oct 2026 15:27:05 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=kcDBK0ALmR0TeH6NyW5HdTdr+VoVPttpm+UOXkBsWJ8=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=MxBoZussZhf1vJdinkiiTC7zbDqRqqk7Ifuqeg9DVpeMm0KuSutQMe775NweqYAT6dmgS7/w7
 CRVKVC5y5vuzx5pb8ou8KAWysCYvjOdDdh8zjE4Sq+61IpMfhE3aLmBRWSbYSojj0yL8YLhx1Cw
 Ii5XQO/CiwnhJETNc/e1FdJOY1/cC/s07lBrbSgIuPCgFUn86phgZImQvCNu1+nbF/1/zJQTsfp
 32YpP6o55EPf/kTaDmR5hXxAICN+i57/n1N4OFLc38/Wv12Uq/SaYCITq9VaqylnQft45y1JrbB
 tnI9opgtXe/dU0x5A/qoSfZJz+NYX91KthJ0+Vxm64Cg==
X-Zone-Loop: 71475c2614785d77608ee3a227e0673d26096b11029b
x-campaign-type: default
x-transaction-id: 88b64b65-67b1-4b02-b7e1-82773353dd2e
x-swg-uid: 01-176019e9-12b8-425e-b608-515833221e74
X-Mailer: Sweego
Message-ID:
 <1792157226.8631fc262581453bbf619ec5b2062170.1a144e515740008425@vates.tech>
x-swg-bid: 1792157226.8631fc262581453bbf619ec5b2062170.1a144e515740008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 06/18] Fix direction annotations on written parameters
Date: Fri, 16 Oct 2026 15:26:43 +0200
In-Reply-To: <1792157073.8631fc262581453bbf619ec5b2062170.1a144e2bf7f0008425@vates.tech>
References: <1792157073.8631fc262581453bbf619ec5b2062170.1a144e2bf7f0008425@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.2ce.504b60872557d497.1a144e51393.8337f73e58c47943=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792157225875
X-purgate-ID: tlsNG-ebf023/1792157227-C1AD08F0-5387C36D/0/0
X-purgate-type: clean
X-purgate-size: 71078

---=Part.2ce.504b60872557d497.1a144e51393.8337f73e58c47943=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Several parameters were annotated as _In_ although the corresponding functi=
ons
write them=2E
Change them to match what the functions actually do:

- _Out_ where the function fully initializes the pointee and does not
  depend on its previous contents=2E
- _Inout_ where the function reads or partially updates existing
  content=2E

No functional change=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xencrsh/austere=2Ec    |   8 +-
 src/xencrsh/buffer=2Ec     |   2 +-
 src/xencrsh/buffer=2Eh     |   2 +-
 src/xencrsh/fdo=2Ec        |   6 +-
 src/xencrsh/fdo=2Eh        |   2 +-
 src/xencrsh/frontend=2Ec   |  88 +++++++-------
 src/xencrsh/frontend=2Eh   |  20 +--
 src/xencrsh/log=2Ec        |   2 +-
 src/xencrsh/pdo=2Ec        |  40 +++---
 src/xencrsh/pdo=2Eh        |  22 ++--
 src/xencrsh/pdoinquiry=2Ec |  22 ++--
 src/xencrsh/pdoinquiry=2Eh |   2 +-
 src/xencrsh/queue=2Ec      |  18 +--
 src/xencrsh/queue=2Eh      |  12 +-
 src/xencrsh/store=2Ec      |  14 +--
 src/xencrsh/store=2Eh      |   2 +-
 src/xenvbd/adapter=2Ec     |  30 ++---
 src/xenvbd/adapter=2Eh     |   8 +-
 src/xenvbd/base64=2Ec      |   8 +-
 src/xenvbd/frontend=2Ec    |  86 ++++++-------
 src/xenvbd/frontend=2Eh    |  16 +--
 src/xenvbd/granter=2Ec     |  14 +--
 src/xenvbd/granter=2Eh     |  14 +--
 src/xenvbd/ring=2Ec        | 254 +++++++++++++++++++--------------------
 src/xenvbd/ring=2Eh        |   6 +-
 src/xenvbd/target=2Ec      |  70 +++++------
 src/xenvbd/target=2Eh      |  26 ++--
 src/xenvbd/thread=2Ec      |  14 +--
 src/xenvbd/thread=2Eh      |   8 +-
 29 files changed, 408 insertions(+), 408 deletions(-)

diff --git a/src/xencrsh/austere=2Ec b/src/xencrsh/austere=2Ec
index 052e4f6=2E=2Ee6bec1b 100644
--- a/src/xencrsh/austere=2Ec
+++ b/src/xencrsh/austere=2Ec
@@ -156,12 +156,12 @@ __FreeBig(
 }
 static PVOID
 __TrySmall(
-    _In_ PXENCRSH_SUBHEAP   SubHeap,
-    _In_ ULONG              Size
+    _Inout_ PXENCRSH_SUBHEAP    SubHeap,
+    _In_ ULONG                  Size
     )
 {
-    PUCHAR                  Ptr;
-    ULONG                   ThisSize;
+    PUCHAR                      Ptr;
+    ULONG                       ThisSize;
    =20
     if (SubHeap->Free < Size)
         return NULL;
diff --git a/src/xencrsh/buffer=2Ec b/src/xencrsh/buffer=2Ec
index 8fd1702=2E=2E7d27342 100644
--- a/src/xencrsh/buffer=2Ec
+++ b/src/xencrsh/buffer=2Ec
@@ -171,7 +171,7 @@ BufferCopyIn(
 VOID
 BufferCopyOut(
     _In_ ULONG      BufferId,
-    _In_ PVOID      Output,
+    _Out_ PVOID     Output,
     _In_ ULONG      Length
     )
 {
diff --git a/src/xencrsh/buffer=2Eh b/src/xencrsh/buffer=2Eh
index 5c54c03=2E=2E148009f 100644
--- a/src/xencrsh/buffer=2Eh
+++ b/src/xencrsh/buffer=2Eh
@@ -66,7 +66,7 @@ BufferCopyIn(
 extern VOID
 BufferCopyOut(
     _In_ ULONG  BufferId,
-    _In_ PVOID  Output,
+    _Out_ PVOID Output,
     _In_ ULONG  Length
     );
    =20
diff --git a/src/xencrsh/fdo=2Ec b/src/xencrsh/fdo=2Ec
index 68d5263=2E=2E8aea390 100644
--- a/src/xencrsh/fdo=2Ec
+++ b/src/xencrsh/fdo=2Ec
@@ -138,7 +138,7 @@ FdoGetFeatureFlag(
 }
 static FORCEINLINE NTSTATUS
 FdoCreateTarget(
-    _In_ PXENVBD_FDO    Fdo,
+    _Inout_ PXENVBD_FDO Fdo,
     _In_ PSTR           DeviceId,
     _In_ ULONG          TargetId
     )
@@ -158,7 +158,7 @@ FdoCreateTarget(
 }
 static NTSTATUS
 FdoFindTarget(
-    _In_ PXENVBD_FDO    Fdo
+    _Inout_ PXENVBD_FDO Fdo
     )
 {
     NTSTATUS            Status;
@@ -264,7 +264,7 @@ fail:
=20
 VOID
 FdoTerminate(
-    _In_ PXENVBD_FDO    Fdo
+    _Inout_ PXENVBD_FDO Fdo
     )
 {
     LogTrace("=3D=3D=3D=3D>\n");
diff --git a/src/xencrsh/fdo=2Eh b/src/xencrsh/fdo=2Eh
index 2ecfb28=2E=2Ed9c2357 100644
--- a/src/xencrsh/fdo=2Eh
+++ b/src/xencrsh/fdo=2Eh
@@ -43,7 +43,7 @@ typedef struct _XENVBD_FDO XENVBD_FDO, *PXENVBD_FDO;
=20
 extern VOID
 FdoTerminate(
-    _In_ PXENVBD_FDO    Fdo
+    _Inout_ PXENVBD_FDO Fdo
     );
=20
 // Query Methods
diff --git a/src/xencrsh/frontend=2Ec b/src/xencrsh/frontend=2Ec
index 00dfcd3=2E=2E72115c2 100644
--- a/src/xencrsh/frontend=2Ec
+++ b/src/xencrsh/frontend=2Ec
@@ -160,7 +160,7 @@ __Idx(
 }
 static FORCEINLINE VOID
 FrontendCompleteResponses(
-    _In_ PXENVBD_FRONTEND   Frontend
+    _Inout_ PXENVBD_FRONTEND    Frontend
     )
 {
     for (;;) {
@@ -202,7 +202,7 @@ FrontendCompleteResponses(
=20
 VOID
 FrontendEvtchnCallback(
-    _In_ PXENVBD_FRONTEND   Frontend
+    _Inout_ PXENVBD_FRONTEND    Frontend
     )
 {
     // complete responses
@@ -234,12 +234,12 @@ FrontendCanSubmitRequest(
=20
 VOID
 FrontendInsertRequestOnRing(
-    _In_ PXENVBD_FRONTEND   Frontend,
-    _In_ PXENVBD_REQUEST    Request
+    _Inout_ PXENVBD_FRONTEND    Frontend,
+    _In_ PXENVBD_REQUEST        Request
     )
 {
-    ULONG                   Index;
-    blkif_request_t*        RingReq;
+    ULONG                       Index;
+    blkif_request_t*            RingReq;
     //blkif_request_discard_t*    Discard;
=20
     RingReq =3D RING_GET_REQUEST(&Frontend->FrontRing, Frontend->FrontRin=
g=2Ereq_prod_pvt);
@@ -326,11 +326,11 @@ __Min(
 }
 static FORCEINLINE NTSTATUS
 __UpdateBackendPath(
-    _In_ PXENVBD_FRONTEND   Frontend
+    _Inout_ PXENVBD_FRONTEND    Frontend
     )
 {
-    NTSTATUS                Status;
-    PCHAR                   Path;
+    NTSTATUS                    Status;
+    PCHAR                       Path;
=20
     if (Frontend->BackendPath) {
         LogTrace("<< %s\n", Frontend->BackendPath);
@@ -456,11 +456,11 @@ out:
 }
 static VOID
 __ReadFeatures(
-    _In_ PXENVBD_FRONTEND   Frontend
+    _Inout_ PXENVBD_FRONTEND    Frontend
     )
 {
-    NTSTATUS                Status;
-    PCHAR                   Buffer;
+    NTSTATUS                    Status;
+    PCHAR                       Buffer;
=20
     Status =3D StoreRead(NULL, Frontend->BackendPath,
                         "feature-barrier", &Buffer);
@@ -497,12 +497,12 @@ __ReadFeatures(
 }
 static VOID
 __ReadDiskInfo(
-    _In_ PXENVBD_FRONTEND   Frontend
+    _Inout_ PXENVBD_FRONTEND    Frontend
     )
 {
-    NTSTATUS                Status;
-    PCHAR                   Buffer;
-    BOOLEAN                 Updated =3D FALSE;
+    NTSTATUS                    Status;
+    PCHAR                       Buffer;
+    BOOLEAN                     Updated =3D FALSE;
=20
     Status =3D StoreRead(NULL, Frontend->BackendPath,=20
                         "info", &Buffer);
@@ -556,12 +556,12 @@ __ReadDiskInfo(
 }
 static FORCEINLINE NTSTATUS
 __AllocRing(
-    _In_ PXENVBD_FRONTEND   Frontend
+    _Inout_ PXENVBD_FRONTEND    Frontend
     )
 {
-    NTSTATUS                Status;
-    ULONG                   RingRef;
-    PFN_NUMBER              Pfn;
+    NTSTATUS                    Status;
+    ULONG                       RingRef;
+    PFN_NUMBER                  Pfn;
=20
     // SharedRing
     ASSERT3P(Frontend->SharedRing, =3D=3D, NULL);
@@ -615,7 +615,7 @@ fail1:
 }
 static FORCEINLINE VOID
 __FreeRing(
-    _In_ PXENVBD_FRONTEND   Frontend
+    _Inout_ PXENVBD_FRONTEND    Frontend
     )
 {
     // EVTCHN
@@ -698,11 +698,11 @@ abort:
 //=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D
 static NTSTATUS
 FrontendClose(
-    _In_ PXENVBD_FRONTEND   Frontend
+    _Inout_ PXENVBD_FRONTEND    Frontend
     )
 {
-    NTSTATUS                Status;
-    XENBUS_STATE            BackendState;
+    NTSTATUS                    Status;
+    XENBUS_STATE                BackendState;
=20
     // get/update backend path
     Status =3D __UpdateBackendPath(Frontend);
@@ -774,11 +774,11 @@ fail1:
 }
 static NTSTATUS
 FrontendPrepare(
-    _In_ PXENVBD_FRONTEND   Frontend
+    _Inout_ PXENVBD_FRONTEND    Frontend
     )
 {
-    NTSTATUS                Status;
-    XENBUS_STATE            BackendState;
+    NTSTATUS                    Status;
+    XENBUS_STATE                BackendState;
=20
     // ASSERT(Backend : CLOSED)
     //__AssertBackendState(Frontend, XENBUS_STATE_CLOSED);
@@ -825,11 +825,11 @@ fail1:
 }
 static NTSTATUS
 FrontendConnect(
-    _In_ PXENVBD_FRONTEND   Frontend
+    _Inout_ PXENVBD_FRONTEND    Frontend
     )
 {
-    NTSTATUS                Status;
-    XENBUS_STATE            BackendState;
+    NTSTATUS                    Status;
+    XENBUS_STATE                BackendState;
=20
     // ASSERT(Backend: INITWAIT)
     //__AssertBackendState(Frontend, XENBUS_STATE_INITWAIT);
@@ -889,7 +889,7 @@ fail1:
 }
 static FORCEINLINE VOID
 FrontendDisconnect(
-    _In_ PXENVBD_FRONTEND   Frontend
+    _Inout_ PXENVBD_FRONTEND    Frontend
     )
 {
     // Free Ring, Close Evtchn, Gnttab unmap
@@ -897,14 +897,14 @@ FrontendDisconnect(
 }
 static FORCEINLINE VOID
 FrontendEnable(
-    _In_ PXENVBD_FRONTEND   Frontend
+    _Inout_ PXENVBD_FRONTEND    Frontend
     )
 {
     Frontend->Connected =3D TRUE;
 }
 static FORCEINLINE VOID
 FrontendDisable(
-    _In_ PXENVBD_FRONTEND   Frontend
+    _Inout_ PXENVBD_FRONTEND    Frontend
     )
 {
     Frontend->Connected =3D FALSE;
@@ -913,10 +913,10 @@ FrontendDisable(
 // Init/Term
 NTSTATUS
 FrontendCreate(
-    _In_ PXENVBD_FRONTEND   Frontend,
-    _In_ PSTR               DeviceId,
-    _In_ ULONG              TargetId,
-    _In_ PXENVBD_PDO        Pdo
+    _Inout_ PXENVBD_FRONTEND    Frontend,
+    _In_ PSTR                   DeviceId,
+    _In_ ULONG                  TargetId,
+    _In_ PXENVBD_PDO            Pdo
     )
 {
     LogTrace("Target[%d] @ (%d) =3D=3D=3D=3D=3D>\n", TargetId, KeGetCurre=
ntIrql());
@@ -950,10 +950,10 @@ fail1:
=20
 VOID
 FrontendDestroy(
-    _In_ PXENVBD_FRONTEND   Frontend
+    _Inout_ PXENVBD_FRONTEND    Frontend
     )
 {
-    const ULONG             TargetId =3D Frontend->TargetId;
+    const ULONG                 TargetId =3D Frontend->TargetId;
=20
     LogTrace("Target[%d] @ (%d) =3D=3D=3D=3D=3D>\n", TargetId, KeGetCurre=
ntIrql());
=20
@@ -979,13 +979,13 @@ FrontendDestroy(
=20
 NTSTATUS
 FrontendSetState(
-    _In_ PXENVBD_FRONTEND   Frontend,
-    _In_ XENVBD_STATE       State
+    _Inout_ PXENVBD_FRONTEND    Frontend,
+    _In_ XENVBD_STATE           State
     )
 {
-    NTSTATUS                Status;
-    const ULONG             TargetId =3D Frontend->TargetId;
-    BOOLEAN                 Failed =3D FALSE;
+    NTSTATUS                    Status;
+    const ULONG                 TargetId =3D Frontend->TargetId;
+    BOOLEAN                     Failed =3D FALSE;
=20
     LogTrace("Target[%d] @ (%d) =3D=3D=3D=3D=3D>\n", TargetId, KeGetCurre=
ntIrql());
     LogVerbose("Target[%d] : %s ----> %s\n", TargetId, __XenvbdStateName(=
Frontend->State),=20
diff --git a/src/xencrsh/frontend=2Eh b/src/xencrsh/frontend=2Eh
index 80ee861=2E=2Ea93f8a9 100644
--- a/src/xencrsh/frontend=2Eh
+++ b/src/xencrsh/frontend=2Eh
@@ -94,21 +94,21 @@ typedef struct _XENVBD_FRONTEND {
 // Init/Term
 extern NTSTATUS
 FrontendCreate(
-    _In_ PXENVBD_FRONTEND   Frontend,
-    _In_ PSTR               DeviceId,
-    _In_ ULONG              TargetId,
-    _In_ PXENVBD_PDO        Pdo
+    _Inout_ PXENVBD_FRONTEND    Frontend,
+    _In_ PSTR                   DeviceId,
+    _In_ ULONG                  TargetId,
+    _In_ PXENVBD_PDO            Pdo
     );
=20
 extern VOID
 FrontendDestroy(
-    _In_ PXENVBD_FRONTEND   Frontend
+    _Inout_ PXENVBD_FRONTEND    Frontend
     );
=20
 extern NTSTATUS
 FrontendSetState(
-    _In_ PXENVBD_FRONTEND   Frontend,
-    _In_ XENVBD_STATE       State
+    _Inout_ PXENVBD_FRONTEND    Frontend,
+    _In_ XENVBD_STATE           State
     );
=20
 extern NTSTATUS
@@ -120,7 +120,7 @@ FrontendCloseTarget(
 // Ring Slots
 extern VOID
 FrontendEvtchnCallback(
-    _In_ PXENVBD_FRONTEND   Frontend
+    _Inout_ PXENVBD_FRONTEND    Frontend
     );
=20
 extern BOOLEAN
@@ -131,8 +131,8 @@ FrontendCanSubmitRequest(
=20
 extern VOID
 FrontendInsertRequestOnRing(
-    _In_ PXENVBD_FRONTEND   Frontend,
-    _In_ PXENVBD_REQUEST    Request
+    _Inout_ PXENVBD_FRONTEND    Frontend,
+    _In_ PXENVBD_REQUEST        Request
     );
=20
 extern VOID
diff --git a/src/xencrsh/log=2Ec b/src/xencrsh/log=2Ec
index a2da155=2E=2Edbff879 100644
--- a/src/xencrsh/log=2Ec
+++ b/src/xencrsh/log=2Ec
@@ -48,7 +48,7 @@ LogQemuPut(
=20
 static DECLSPEC_NOINLINE PCHAR
 LogFormatNumber(
-    _In_ PSTR       Buffer,
+    _Out_ PSTR      Buffer,
     _In_ ULONGLONG  Value,
     _In_ UCHAR      Base,
     _In_ BOOLEAN    UpperCase
diff --git a/src/xencrsh/pdo=2Ec b/src/xencrsh/pdo=2Ec
index fa66172=2E=2Ed130fc8 100644
--- a/src/xencrsh/pdo=2Ec
+++ b/src/xencrsh/pdo=2Ec
@@ -136,7 +136,7 @@ fail1:
=20
 VOID
 PdoDestroy(
-    _In_ PXENVBD_PDO    Pdo
+    _Inout_ PXENVBD_PDO Pdo
     )
 {
     LARGE_INTEGER       Timeout;
@@ -156,7 +156,7 @@ PdoDestroy(
=20
 DECLSPEC_NOINLINE VOID
 PdoD3ToD0(
-    _In_ PXENVBD_PDO    Pdo
+    _Inout_ PXENVBD_PDO Pdo
     )
 {
     LogTrace("Target[%d] =3D=3D=3D=3D=3D> (Irql=3D%d)\n", Pdo->Frontend=
=2ETargetId, KeGetCurrentIrql());
@@ -169,7 +169,7 @@ PdoD3ToD0(
=20
 DECLSPEC_NOINLINE VOID
 PdoD0ToD3(
-    _In_ PXENVBD_PDO    Pdo
+    _Inout_ PXENVBD_PDO Pdo
     )
 {
     LogTrace("Target[%d] =3D=3D=3D=3D=3D> (Irql=3D%d)\n", Pdo->Frontend=
=2ETargetId, KeGetCurrentIrql());
@@ -185,7 +185,7 @@ PdoD0ToD3(
 // Reference Counting
 VOID
 PdoReference(
-    _In_ PXENVBD_PDO    Pdo
+    _Inout_ PXENVBD_PDO Pdo
     )
 {
     if (Pdo)
@@ -194,7 +194,7 @@ PdoReference(
=20
 VOID
 PdoDereference(
-    _In_ PXENVBD_PDO    Pdo
+    _Inout_ PXENVBD_PDO Pdo
     )
 {
     if (Pdo)
@@ -217,7 +217,7 @@ PdoSectorSize(
 // REQUEST related
 static VOID
 __CleanupRequest(
-    _In_ PXENVBD_REQUEST    Request,
+    _Inout_ PXENVBD_REQUEST Request,
     _In_ BOOLEAN            CopyOut
     )
 {
@@ -266,7 +266,7 @@ __CleanupSrb(
 // Preparing Requests
 static FORCEINLINE VOID
 __UpdateStats(
-    _In_ PXENVBD_PDO    Pdo,
+    _Inout_ PXENVBD_PDO Pdo,
     _In_ UCHAR          Operation
     )
 {
@@ -386,7 +386,7 @@ __Pfn(
 }
 static NTSTATUS
 PrepareReadWrite(
-    _In_ PXENVBD_PDO            Pdo,
+    _Inout_ PXENVBD_PDO         Pdo,
     _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
@@ -558,7 +558,7 @@ done:
 }
 static VOID
 PrepareSyncCache(
-    _In_ PXENVBD_PDO            Pdo,
+    _Inout_ PXENVBD_PDO         Pdo,
     _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
@@ -597,7 +597,7 @@ PrepareSyncCache(
=20
 VOID
 PdoPrepareFresh(
-    _In_ PXENVBD_PDO        Pdo
+    _Inout_ PXENVBD_PDO     Pdo
     )
 {
     PSCSI_REQUEST_BLOCK     Srb;
@@ -623,7 +623,7 @@ PdoPrepareFresh(
=20
 VOID
 PdoSubmitPrepared(
-    _In_ PXENVBD_PDO    Pdo
+    _Inout_ PXENVBD_PDO Pdo
     )
 {
     for (;;) {
@@ -655,7 +655,7 @@ PdoSubmitPrepared(
=20
 VOID
 PdoCompleteShutdown(
-    _In_ PXENVBD_PDO        Pdo
+    _Inout_ PXENVBD_PDO     Pdo
     )
 {
     PSCSI_REQUEST_BLOCK     Srb;
@@ -676,8 +676,8 @@ PdoCompleteShutdown(
=20
 VOID
 PdoCompleteSubmittedRequest(
-    _In_ PXENVBD_PDO        Pdo,
-    _In_ PXENVBD_REQUEST    Request,
+    _Inout_ PXENVBD_PDO     Pdo,
+    _Inout_ PXENVBD_REQUEST Request,
     _In_ SHORT              Status
     )
 {
@@ -767,8 +767,8 @@ __ValidateSectors(
 }
 static BOOLEAN
 PdoReadWrite(
-    _In_ PXENVBD_PDO            Pdo,
-    _In_ PSCSI_REQUEST_BLOCK    Srb
+    _Inout_ PXENVBD_PDO         Pdo,
+    _Out_ PSCSI_REQUEST_BLOCK   Srb
     )
 {
     NTSTATUS                    Status;
@@ -1041,7 +1041,7 @@ PdoReadCapacity16(
 // StorPort Methods
 static FORCEINLINE VOID
 __DisplayStats(
-    _In_ PXENVBD_PDO    Pdo
+    _Inout_ PXENVBD_PDO Pdo
     )
 {
     LogVerbose("Target[%d] : BLKIF_OP_'s Reads %d / Writes %d / Others %d=
\n",
@@ -1051,7 +1051,7 @@ __DisplayStats(
 }
 static VOID
 __AbortSrbQueue(
-    _In_ PSRB_QUEUE     Queue,
+    _Inout_ PSRB_QUEUE  Queue,
     _In_ PXENVBD_PDO    Pdo,
     _In_ BOOLEAN        Free,
     _In_ PSTR           Name
@@ -1133,7 +1133,7 @@ PdoExecuteScsi(
 }
 static FORCEINLINE VOID
 PdoQueueShutdown(
-    _In_ PXENVBD_PDO            Pdo,
+    _Inout_ PXENVBD_PDO         Pdo,
     _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
@@ -1144,7 +1144,7 @@ PdoQueueShutdown(
=20
 VOID
 PdoReset(
-    _In_ PXENVBD_PDO        Pdo
+    _Inout_ PXENVBD_PDO     Pdo
     )
 {
     PSCSI_REQUEST_BLOCK     Srb;
diff --git a/src/xencrsh/pdo=2Eh b/src/xencrsh/pdo=2Eh
index d0f2f3a=2E=2E7a0d394 100644
--- a/src/xencrsh/pdo=2Eh
+++ b/src/xencrsh/pdo=2Eh
@@ -53,28 +53,28 @@ PdoCreate(
=20
 extern VOID
 PdoDestroy(
-    _In_ PXENVBD_PDO    Pdo
+    _Inout_ PXENVBD_PDO Pdo
     );
=20
 extern VOID
 PdoD3ToD0(
-    _In_ PXENVBD_PDO    Pdo
+    _Inout_ PXENVBD_PDO Pdo
     );
=20
 extern VOID
 PdoD0ToD3(
-    _In_ PXENVBD_PDO    Pdo
+    _Inout_ PXENVBD_PDO Pdo
     );
=20
 // Reference Counting
 extern VOID
 PdoReference(
-    _In_ PXENVBD_PDO    Pdo
+    _Inout_ PXENVBD_PDO Pdo
     );
=20
 extern VOID
 PdoDereference(
-    _In_ PXENVBD_PDO    Pdo
+    _Inout_ PXENVBD_PDO Pdo
     );
=20
 // Query Methods
@@ -86,30 +86,30 @@ PdoSectorSize(
 // Queue-Related
 extern VOID
 PdoPrepareFresh(
-    _In_ PXENVBD_PDO    Pdo
+    _Inout_ PXENVBD_PDO Pdo
     );
=20
 extern VOID
 PdoSubmitPrepared(
-    _In_ PXENVBD_PDO    Pdo
+    _Inout_ PXENVBD_PDO Pdo
     );
=20
 extern VOID
 PdoCompleteShutdown(
-    _In_ PXENVBD_PDO    Pdo
+    _Inout_ PXENVBD_PDO Pdo
     );
=20
 extern VOID
 PdoCompleteSubmittedRequest(
-    _In_ PXENVBD_PDO        Pdo,
-    _In_ PXENVBD_REQUEST    Request,
+    _Inout_ PXENVBD_PDO     Pdo,
+    _Inout_ PXENVBD_REQUEST Request,
     _In_ SHORT              Status
     );
=20
 // StorPort Methods
 extern VOID
 PdoReset(
-    _In_ PXENVBD_PDO    Pdo
+    _Inout_ PXENVBD_PDO Pdo
     );
=20
 extern BOOLEAN
diff --git a/src/xencrsh/pdoinquiry=2Ec b/src/xencrsh/pdoinquiry=2Ec
index f889ffd=2E=2E666eb89 100644
--- a/src/xencrsh/pdoinquiry=2Ec
+++ b/src/xencrsh/pdoinquiry=2Ec
@@ -169,7 +169,7 @@ __FindPage(
=20
 static VOID
 __FreeInquiryData(
-    _In_ PXENVBD_INQUIRY    Inquiry
+    _Inout_ PXENVBD_INQUIRY Inquiry
     )
 {
     PLIST_ENTRY             Entry;
@@ -233,12 +233,12 @@ __DecodeChar(
 }
 static FORCEINLINE UCHAR
 __Decode(
-    _In_ PUCHAR Dest,
-    _In_ PSTR   Src,
-    _In_ ULONG  RemainingChars
+    _Out_ PUCHAR    Dest,
+    _In_ PSTR       Src,
+    _In_ ULONG      RemainingChars
     )
 {
-    UCHAR       Values[4];
+    UCHAR           Values[4];
=20
     if (RemainingChars < 4)
         return 0xFF;
@@ -308,7 +308,7 @@ fail1:
 }
 static NTSTATUS
 __ReadPage(
-    _In_ PXENVBD_INQUIRY    Inquiry,
+    _Inout_ PXENVBD_INQUIRY Inquiry,
     _In_ PSTR               BasePath,
     _In_ PSTR               PageCode
     )
@@ -373,7 +373,7 @@ fail1:
 }
 static NTSTATUS
 __GeneratePage83(
-    _In_ PXENVBD_INQUIRY    Inquiry
+    _Inout_ PXENVBD_INQUIRY Inquiry
     )
 {
     PXENVBD_PAGE            Page;
@@ -408,7 +408,7 @@ fail1:
 }
 static NTSTATUS
 __GeneratePage80(
-    _In_ PXENVBD_INQUIRY    Inquiry
+    _Inout_ PXENVBD_INQUIRY Inquiry
     )
 {
     PXENVBD_PAGE            Page;
@@ -445,7 +445,7 @@ fail1:
 }
 static FORCEINLINE NTSTATUS
 __GeneratePageStd(
-    _In_ PXENVBD_INQUIRY    Inquiry
+    _Inout_ PXENVBD_INQUIRY Inquiry
     )
 {
     INQUIRYDATA             *Data;
@@ -478,7 +478,7 @@ fail1:
 }
 static NTSTATUS
 __GeneratePage00(
-    _In_ PXENVBD_INQUIRY    Inquiry
+    _Inout_ PXENVBD_INQUIRY Inquiry
     )
 {
     PUCHAR                  Buffer;
@@ -732,7 +732,7 @@ fail:
=20
 VOID
 PdoFreeInquiryData(
-    _In_ PVOID  Inquiry
+    _Inout_ PVOID   Inquiry
     )
 {
     __FreeInquiryData((PXENVBD_INQUIRY)Inquiry);
diff --git a/src/xencrsh/pdoinquiry=2Eh b/src/xencrsh/pdoinquiry=2Eh
index 2f3e89e=2E=2Effa32ef 100644
--- a/src/xencrsh/pdoinquiry=2Eh
+++ b/src/xencrsh/pdoinquiry=2Eh
@@ -47,7 +47,7 @@ PdoReadInquiryData(
=20
 extern VOID
 PdoFreeInquiryData(
-    _In_ PVOID  Inquiry
+    _Inout_ PVOID   Inquiry
     );
=20
 extern VOID
diff --git a/src/xencrsh/queue=2Ec b/src/xencrsh/queue=2Ec
index d69838d=2E=2Ec5b78dd 100644
--- a/src/xencrsh/queue=2Ec
+++ b/src/xencrsh/queue=2Ec
@@ -51,7 +51,7 @@ __QueueValid(
 }
 static VOID
 __QueueRemoveLocked(
-    _In_ PSRB_QUEUE             Queue,
+    _Inout_ PSRB_QUEUE          Queue,
     _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
@@ -86,7 +86,7 @@ __QueueRemoveLocked(
=20
 static FORCEINLINE VOID
 __QueueInsertHeadLocked(
-    _In_ PSRB_QUEUE             Queue,
+    _Inout_ PSRB_QUEUE          Queue,
     _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
@@ -117,7 +117,7 @@ __QueueInsertHeadLocked(
=20
 static FORCEINLINE VOID
 __QueueInsertTailLocked(
-    _In_ PSRB_QUEUE             Queue,
+    _Inout_ PSRB_QUEUE          Queue,
     _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
@@ -157,7 +157,7 @@ QueuePeek(
=20
 PSCSI_REQUEST_BLOCK
 QueuePop(
-    _In_ PSRB_QUEUE     Queue
+    _Inout_ PSRB_QUEUE  Queue
     )
 {
     PSCSI_REQUEST_BLOCK Srb =3D NULL;
@@ -170,7 +170,7 @@ QueuePop(
=20
 VOID
 QueueInsertHead(
-    _In_ PSRB_QUEUE             Queue,
+    _Inout_ PSRB_QUEUE          Queue,
     _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
@@ -179,7 +179,7 @@ QueueInsertHead(
=20
 VOID
 QueueInsertTail(
-    _In_ PSRB_QUEUE             Queue,
+    _Inout_ PSRB_QUEUE          Queue,
     _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
@@ -188,7 +188,7 @@ QueueInsertTail(
=20
 VOID
 QueueRemove(
-    _In_ PSRB_QUEUE             Queue,
+    _Inout_ PSRB_QUEUE          Queue,
     _In_ PSCSI_REQUEST_BLOCK    Srb
     )
 {
@@ -197,8 +197,8 @@ QueueRemove(
=20
 VOID
 QueueDebugCallback(
-    _In_ PSRB_QUEUE Queue,
-    _In_ PSTR       Name
+    _Inout_ PSRB_QUEUE  Queue,
+    _In_ PSTR           Name
     )
 {
     LogTrace("=3D=3D=3D=3D=3D> %s\n", Name);
diff --git a/src/xencrsh/queue=2Eh b/src/xencrsh/queue=2Eh
index 3926995=2E=2E27eca09 100644
--- a/src/xencrsh/queue=2Eh
+++ b/src/xencrsh/queue=2Eh
@@ -55,31 +55,31 @@ QueuePeek(
=20
 PSCSI_REQUEST_BLOCK
 QueuePop(
-    _In_ PSRB_QUEUE Queue
+    _Inout_ PSRB_QUEUE  Queue
     );
=20
 VOID
 QueueInsertHead(
-    _In_ PSRB_QUEUE             Queue,
+    _Inout_ PSRB_QUEUE          Queue,
     _In_ PSCSI_REQUEST_BLOCK    Srb
     );
=20
 VOID
 QueueInsertTail(
-    _In_ PSRB_QUEUE             Queue,
+    _Inout_ PSRB_QUEUE          Queue,
     _In_ PSCSI_REQUEST_BLOCK    Srb
     );
=20
 VOID
 QueueRemove(
-    _In_ PSRB_QUEUE             Queue,
+    _Inout_ PSRB_QUEUE          Queue,
     _In_ PSCSI_REQUEST_BLOCK    Srb
     );
=20
 VOID
 QueueDebugCallback(
-    _In_ PSRB_QUEUE Queue,
-    _In_ PSTR       Name
+    _Inout_ PSRB_QUEUE  Queue,
+    _In_ PSTR           Name
     );
=20
 #endif // _XENVBD_QUEUE_H
diff --git a/src/xencrsh/store=2Ec b/src/xencrsh/store=2Ec
index 8da61e8=2E=2Edbdf818 100644
--- a/src/xencrsh/store=2Ec
+++ b/src/xencrsh/store=2Ec
@@ -511,7 +511,7 @@ StorePoll()
=20
 static PSTORE_RESPONSE
 StoreSubmitRequest(
-    _In_ PSTORE_REQUEST         Request
+    _Inout_ PSTORE_REQUEST      Request
     )
 {
     PSTORE_RESPONSE             Response;
@@ -587,7 +587,7 @@ __StorePayloadData(
=20
 static FORCEINLINE VOID
 StoreFreeResponse(
-    _In_ PSTORE_RESPONSE    Response
+    _Inout_ PSTORE_RESPONSE Response
     )
 {
     PSTORE_SEGMENT          Segment;
@@ -999,13 +999,13 @@ fail1:
=20
 NTSTATUS
 StoreTransactionEnd(
-    _In_ PXENBUS_STORE_TRANSACTION  Transaction,
-    _In_ BOOLEAN                    Commit
+    _Inout_ PXENBUS_STORE_TRANSACTION   Transaction,
+    _In_ BOOLEAN                        Commit
     )
 {
-    STORE_REQUEST                   Request;
-    PSTORE_RESPONSE                 Response;
-    NTSTATUS                        status;
+    STORE_REQUEST                       Request;
+    PSTORE_RESPONSE                     Response;
+    NTSTATUS                            status;
=20
     RtlZeroMemory(&Request, sizeof (STORE_REQUEST));
=20
diff --git a/src/xencrsh/store=2Eh b/src/xencrsh/store=2Eh
index 8722a79=2E=2Eb4a4de4 100644
--- a/src/xencrsh/store=2Eh
+++ b/src/xencrsh/store=2Eh
@@ -88,7 +88,7 @@ StoreTransactionStart(
=20
 NTSTATUS
 StoreTransactionEnd(                                                    =
=20
-    _In_ PVOID      Transaction,
+    _Inout_ PVOID   Transaction,
     _In_ BOOLEAN    Commit
     );
=20
diff --git a/src/xenvbd/adapter=2Ec b/src/xenvbd/adapter=2Ec
index 8eab1f2=2E=2E5dafe07 100644
--- a/src/xenvbd/adapter=2Ec
+++ b/src/xenvbd/adapter=2Ec
@@ -181,7 +181,7 @@ fail1:
=20
 static FORCEINLINE PANSI_STRING
 __AdapterMultiSzToUpcaseAnsi(
-    _In_ PSTR       Buffer
+    _Inout_ PSTR    Buffer
     )
 {
     PANSI_STRING    Ansi;
@@ -258,7 +258,7 @@ __AdapterFreeAnsi(
=20
 static FORCEINLINE BOOLEAN
 __AdapterSetDevicePowerState(
-    _In_ PXENVBD_ADAPTER    Adapter,
+    _Inout_ PXENVBD_ADAPTER Adapter,
     _In_ DEVICE_POWER_STATE State
     )
 {
@@ -438,7 +438,7 @@ AdapterRequestReboot(
=20
 static FORCEINLINE VOID
 __AdapterEnumerate(
-    _In_ PXENVBD_ADAPTER    Adapter,
+    _Inout_ PXENVBD_ADAPTER Adapter,
     _In_ PANSI_STRING       Devices
     )
 {
@@ -592,7 +592,7 @@ done:
 static FORCEINLINE BOOLEAN
 __AdapterMatchDistribution(
     _In_ PXENVBD_ADAPTER    Adapter,
-    _In_ PSTR               Buffer
+    _Inout_ PZZSTR          Buffer
     )
 {
     PCHAR                   Vendor;
@@ -808,7 +808,7 @@ fail1:
=20
 static FORCEINLINE NTSTATUS
 __AdapterD3ToD0(
-    _In_ PXENVBD_ADAPTER    Adapter
+    _Inout_ PXENVBD_ADAPTER Adapter
     )
 {
     NTSTATUS                status;
@@ -854,7 +854,7 @@ fail1:
=20
 static FORCEINLINE VOID
 __AdapterD0ToD3(
-    _In_ PXENVBD_ADAPTER    Adapter
+    _Inout_ PXENVBD_ADAPTER Adapter
     )
 {
     Trace("=3D=3D=3D=3D=3D>\n");
@@ -939,7 +939,7 @@ AdapterDebugCallback(
=20
 static NTSTATUS
 AdapterD3ToD0(
-    _In_ PXENVBD_ADAPTER    Adapter
+    _Inout_ PXENVBD_ADAPTER Adapter
     )
 {
     NTSTATUS                status;
@@ -1034,7 +1034,7 @@ fail1:
=20
 static VOID
 AdapterD0ToD3(
-    _In_ PXENVBD_ADAPTER    Adapter
+    _Inout_ PXENVBD_ADAPTER Adapter
     )
 {
     ULONG                   TargetId;
@@ -1205,7 +1205,7 @@ AdapterReleaseLock(
=20
 static FORCEINLINE VOID
 __AdapterSetBootEmulated(
-    _In_ PXENVBD_ADAPTER    Adapter
+    _Inout_ PXENVBD_ADAPTER Adapter
     )
 {
     NTSTATUS                status;
@@ -1306,7 +1306,7 @@ fail1:
 _IRQL_requires_(PASSIVE_LEVEL)
 static NTSTATUS
 AdapterInitialize(
-    _In_ PXENVBD_ADAPTER    Adapter,
+    _Inout_ PXENVBD_ADAPTER Adapter,
     _In_ PDEVICE_OBJECT     DeviceObject,
     _In_ PDEVICE_OBJECT     PhysicalDeviceObject,
     _In_ PDEVICE_OBJECT     LowerDeviceObject
@@ -1480,7 +1480,7 @@ fail1:
=20
 static VOID
 AdapterTeardown(
-    _In_ PXENVBD_ADAPTER    Adapter
+    _Inout_ PXENVBD_ADAPTER Adapter
     )
 {
     ULONG                   TargetId;
@@ -1563,7 +1563,7 @@ AdapterTeardown(
=20
 VOID
 AdapterCompleteSrb(
-    _In_ PXENVBD_ADAPTER    Adapter,
+    _Inout_ PXENVBD_ADAPTER Adapter,
     _In_ PXENVBD_SRBEXT     SrbExt
     )
 {
@@ -1607,7 +1607,7 @@ AdapterSetDeviceQueueDepth(
 PFN_NUMBER
 AdapterGetNextSGEntry(
     _In_ PXENVBD_ADAPTER            Adapter,
-    _In_ PXENVBD_SRBEXT             SrbExt,
+    _Inout_ PXENVBD_SRBEXT          SrbExt,
     _In_ ULONG                      Existing,
     _Out_ PULONG                    Offset,
     _Out_ PULONG                    Length
@@ -1811,7 +1811,7 @@ AdapterForwardPnp(
=20
 NTSTATUS
 AdapterDispatchPnp(
-    _In_ PXENVBD_ADAPTER    Adapter,
+    _Inout_ PXENVBD_ADAPTER Adapter,
     _In_ PDEVICE_OBJECT     DeviceObject,
     _In_ PIRP               Irp
     )
@@ -1854,7 +1854,7 @@ AdapterDispatchPnp(
=20
 NTSTATUS
 AdapterDispatchPower(
-    _In_ PXENVBD_ADAPTER    Adapter,
+    _Inout_ PXENVBD_ADAPTER Adapter,
     _In_ PDEVICE_OBJECT     DeviceObject,
     _In_ PIRP               Irp
     )
diff --git a/src/xenvbd/adapter=2Eh b/src/xenvbd/adapter=2Eh
index f57168a=2E=2E41ad012 100644
--- a/src/xenvbd/adapter=2Eh
+++ b/src/xenvbd/adapter=2Eh
@@ -80,7 +80,7 @@ AdapterRequestReboot(
=20
 extern VOID
 AdapterCompleteSrb(
-    _In_ PXENVBD_ADAPTER    Adapter,
+    _Inout_ PXENVBD_ADAPTER Adapter,
     _In_ PXENVBD_SRBEXT     SrbExt
     );
=20
@@ -98,7 +98,7 @@ AdapterSetDeviceQueueDepth(
 extern PFN_NUMBER
 AdapterGetNextSGEntry(
     _In_ PXENVBD_ADAPTER    Adapter,
-    _In_ PXENVBD_SRBEXT     SrbExt,
+    _Inout_ PXENVBD_SRBEXT  SrbExt,
     _In_ ULONG              Existing,
     _Out_ PULONG            Offset,
     _Out_ PULONG            Length
@@ -117,14 +117,14 @@ AdapterPutBounce(
=20
 extern NTSTATUS
 AdapterDispatchPnp(
-    _In_ PXENVBD_ADAPTER    Adapter,
+    _Inout_ PXENVBD_ADAPTER Adapter,
     _In_ PDEVICE_OBJECT     DeviceObject,
     _In_ PIRP               Irp
     );
=20
 extern NTSTATUS
 AdapterDispatchPower(
-    _In_ PXENVBD_ADAPTER    Adapter,
+    _Inout_ PXENVBD_ADAPTER Adapter,
     _In_ PDEVICE_OBJECT     DeviceObject,
     _In_ PIRP               Irp
     );
diff --git a/src/xenvbd/base64=2Ec b/src/xenvbd/base64=2Ec
index dd8e87a=2E=2Ec3dbf30 100644
--- a/src/xenvbd/base64=2Ec
+++ b/src/xenvbd/base64=2Ec
@@ -74,12 +74,12 @@ __DecodeChar(
=20
 static DECLSPEC_NOINLINE CHAR
 __Decode(
-    _In_ PUCHAR Dst,
-    _In_ PSTR   Src,
-    _In_ ULONG  Left
+    _Out_ PUCHAR    Dst,
+    _In_ PSTR       Src,
+    _In_ ULONG      Left
     )
 {
-    UCHAR       Values[4];
+    UCHAR           Values[4];
=20
     if (Left < 4)
         return -1;
diff --git a/src/xenvbd/frontend=2Ec b/src/xenvbd/frontend=2Ec
index d75e702=2E=2E06c7295 100644
--- a/src/xenvbd/frontend=2Ec
+++ b/src/xenvbd/frontend=2Ec
@@ -191,8 +191,8 @@ __FrontendFree(
=20
 VOID
 FrontendRemoveFeature(
-    _In_ PXENVBD_FRONTEND   Frontend,
-    _In_ UCHAR              BlkifOperation
+    _Inout_ PXENVBD_FRONTEND    Frontend,
+    _In_ UCHAR                  BlkifOperation
     )
 {
     switch (BlkifOperation) {
@@ -265,7 +265,7 @@ FrontendSetEjectFailed(
=20
 VOID
 FrontendSetDeviceUsage(
-    _In_ PXENVBD_FRONTEND               Frontend,
+    _Inout_ PXENVBD_FRONTEND            Frontend,
     _In_ DEVICE_USAGE_NOTIFICATION_TYPE Type,
     _In_ BOOLEAN                        Value
     )
@@ -590,7 +590,7 @@ static FORCEINLINE BOOLEAN
 FrontendReadFeature(
     _In_ PXENVBD_FRONTEND   Frontend,
     _In_ XENVBD_FEATURE     Feature,
-    _In_ PBOOLEAN           Value
+    _Inout_ PBOOLEAN        Value
 )
 {
     NTSTATUS                status;
@@ -631,7 +631,7 @@ static FORCEINLINE BOOLEAN
 FrontendReadDiskFeature(
     _In_ PXENVBD_FRONTEND   Frontend,
     _In_ PSTR               Name,
-    _In_ PBOOLEAN           Value
+    _Inout_ PBOOLEAN        Value
     )
 {
     NTSTATUS                status;
@@ -661,7 +661,7 @@ FrontendReadValue32(
     _In_ PXENVBD_FRONTEND   Frontend,
     _In_ XENVBD_FEATURE     Feature,
     _In_ BOOLEAN            AllowOverride,
-    _In_ PULONG             Value
+    _Inout_ PULONG          Value
 )
 {
     NTSTATUS                status;
@@ -703,7 +703,7 @@ static FORCEINLINE BOOLEAN
 FrontendReadDiskValue32(
     _In_ PXENVBD_FRONTEND   Frontend,
     _In_ PSTR               Name,
-    _In_ PULONG             Value
+    _Inout_ PULONG          Value
 )
 {
     NTSTATUS                status;
@@ -784,11 +784,11 @@ __Units(
=20
 static FORCEINLINE VOID
 FrontendReadFeatures(
-    _In_ PXENVBD_FRONTEND   Frontend
+    _Inout_ PXENVBD_FRONTEND    Frontend
     )
 {
-    BOOLEAN                 DiscardFeature =3D FALSE;
-    BOOLEAN                 DiscardEnable =3D TRUE;
+    BOOLEAN                     DiscardFeature =3D FALSE;
+    BOOLEAN                     DiscardEnable =3D TRUE;
=20
     FrontendReadFeature(Frontend,
                         FeatureRemovable,
@@ -853,11 +853,11 @@ FrontendReadFeatures(
=20
 static FORCEINLINE VOID
 FrontendReadDiskInfo(
-    _In_ PXENVBD_FRONTEND   Frontend
+    _Inout_ PXENVBD_FRONTEND    Frontend
     )
 {
-    BOOLEAN                 Changed;
-    PXENVBD_DISKINFO        DiskInfo =3D &Frontend->DiskInfo;
+    BOOLEAN                     Changed;
+    PXENVBD_DISKINFO            DiskInfo =3D &Frontend->DiskInfo;
=20
     Changed =3D FrontendReadDiskValue32(Frontend,
                                       "info",
@@ -928,11 +928,11 @@ FrontendReadDiskInfo(
=20
 static FORCEINLINE VOID
 FrontendReadInquiryOverrides(
-    _In_ PXENVBD_FRONTEND   Frontend
+    _Inout_ PXENVBD_FRONTEND    Frontend
     )
 {
-    PCHAR                   Buffer;
-    NTSTATUS                status;
+    PCHAR                       Buffer;
+    NTSTATUS                    status;
=20
     status =3D XENBUS_STORE(Read,
                           &Frontend->StoreInterface,
@@ -1035,11 +1035,11 @@ fail1:
 _IRQL_requires_(DISPATCH_LEVEL)
 static NTSTATUS
 FrontendPrepare(
-    _In_ PXENVBD_FRONTEND   Frontend
+    _Inout_ PXENVBD_FRONTEND    Frontend
     )
 {
-    NTSTATUS                Status;
-    XenbusState             BackendState;
+    NTSTATUS                    Status;
+    XenbusState                 BackendState;
=20
     // get/update backend path
     Status =3D __UpdateBackendPath(Frontend);
@@ -1133,12 +1133,12 @@ fail1:
 }
 static VOID
 FrontendSetNumQueues(
-    _In_ PXENVBD_FRONTEND   Frontend
+    _Inout_ PXENVBD_FRONTEND    Frontend
     )
 {
-    PCHAR                   Buffer;
-    ULONG                   BackendMaxQueues;
-    NTSTATUS                status;
+    PCHAR                       Buffer;
+    ULONG                       BackendMaxQueues;
+    NTSTATUS                    status;
=20
     status =3D XENBUS_STORE(Read,
                           &Frontend->StoreInterface,
@@ -1166,11 +1166,11 @@ FrontendSetNumQueues(
 _IRQL_requires_(DISPATCH_LEVEL)
 static NTSTATUS
 FrontendConnect(
-    _In_ PXENVBD_FRONTEND   Frontend
+    _Inout_ PXENVBD_FRONTEND    Frontend
     )
 {
-    NTSTATUS                Status;
-    XenbusState             BackendState;
+    NTSTATUS                    Status;
+    XenbusState                 BackendState;
=20
     FrontendSetNumQueues(Frontend);
=20
@@ -1378,13 +1378,13 @@ _IRQL_requires_(DISPATCH_LEVEL)
 _Requires_lock_held_(Frontend->StateLock)
 static DECLSPEC_NOINLINE NTSTATUS
 __FrontendSetState(
-    _In_ PXENVBD_FRONTEND   Frontend,
-    _In_ XENVBD_STATE       State
+    _Inout_ PXENVBD_FRONTEND    Frontend,
+    _In_ XENVBD_STATE           State
     )
 {
-    NTSTATUS                Status;
-    const ULONG             TargetId =3D Frontend->TargetId;
-    BOOLEAN                 Failed =3D FALSE;
+    NTSTATUS                    Status;
+    const ULONG                 TargetId =3D Frontend->TargetId;
+    BOOLEAN                     Failed =3D FALSE;
=20
     Trace("Target[%d] @ (%d) =3D=3D=3D=3D=3D>\n", TargetId, KeGetCurrentI=
rql());
     Verbose("Target[%d] : %s ----> %s\n",=20
@@ -1672,12 +1672,12 @@ _Check_return_
 _IRQL_requires_max_(DISPATCH_LEVEL)
 NTSTATUS
 FrontendD3ToD0(
-    _In_ PXENVBD_FRONTEND   Frontend
+    _Inout_ PXENVBD_FRONTEND    Frontend
     )
 {
-    PXENVBD_ADAPTER         Adapter =3D TargetGetAdapter(Frontend->Target=
);
-    KIRQL                   Irql;
-    NTSTATUS                status;
+    PXENVBD_ADAPTER             Adapter =3D TargetGetAdapter(Frontend->Ta=
rget);
+    KIRQL                       Irql;
+    NTSTATUS                    status;
=20
     KeAcquireSpinLock(&Frontend->StateLock, &Irql);
=20
@@ -1752,10 +1752,10 @@ fail1:
 _IRQL_requires_max_(DISPATCH_LEVEL)
 VOID
 FrontendD0ToD3(
-    _In_ PXENVBD_FRONTEND   Frontend
+    _Inout_ PXENVBD_FRONTEND    Frontend
     )
 {
-    KIRQL                   Irql;
+    KIRQL                       Irql;
=20
     KeAcquireSpinLock(&Frontend->StateLock, &Irql);
=20
@@ -1792,12 +1792,12 @@ FrontendD0ToD3(
 _Check_return_
 NTSTATUS
 FrontendSetState(
-    _In_ PXENVBD_FRONTEND   Frontend,
-    _In_ XENVBD_STATE       State
+    _Inout_ PXENVBD_FRONTEND    Frontend,
+    _In_ XENVBD_STATE           State
     )
 {
-    KIRQL                   Irql;
-    NTSTATUS                status;
+    KIRQL                       Irql;
+    NTSTATUS                    status;
=20
     KeAcquireSpinLock(&Frontend->StateLock, &Irql);
=20
@@ -1837,10 +1837,10 @@ FrontendBackend(
=20
 NTSTATUS
 FrontendReset(
-    _In_ PXENVBD_FRONTEND   Frontend
+    _Inout_ PXENVBD_FRONTEND    Frontend
     )
 {
-    NTSTATUS                status;
+    NTSTATUS                    status;
=20
     if (Frontend->State !=3D XENVBD_ENABLED)
         goto done;
diff --git a/src/xenvbd/frontend=2Eh b/src/xenvbd/frontend=2Eh
index 1117b8d=2E=2Ebb2c57f 100644
--- a/src/xenvbd/frontend=2Eh
+++ b/src/xenvbd/frontend=2Eh
@@ -87,8 +87,8 @@ typedef struct _XENVBD_FRONTEND XENVBD_FRONTEND, *PXENVB=
D_FRONTEND;
=20
 extern VOID
 FrontendRemoveFeature(
-    _In_ PXENVBD_FRONTEND   Frontend,
-    _In_ UCHAR              BlkifOperation
+    _Inout_ PXENVBD_FRONTEND    Frontend,
+    _In_ UCHAR                  BlkifOperation
     );
=20
 extern PVOID
@@ -110,7 +110,7 @@ FrontendSetEjectFailed(
=20
 extern VOID
 FrontendSetDeviceUsage(
-    _In_ PXENVBD_FRONTEND               Frontend,
+    _Inout_ PXENVBD_FRONTEND            Frontend,
     _In_ DEVICE_USAGE_NOTIFICATION_TYPE Type,
     _In_ BOOLEAN                        Value
     );
@@ -119,25 +119,25 @@ _Check_return_
 _IRQL_requires_max_(DISPATCH_LEVEL)
 extern NTSTATUS
 FrontendD3ToD0(
-    _In_ PXENVBD_FRONTEND   Frontend
+    _Inout_ PXENVBD_FRONTEND    Frontend
     );
=20
 _IRQL_requires_max_(DISPATCH_LEVEL)
 extern VOID
 FrontendD0ToD3(
-    _In_ PXENVBD_FRONTEND   Frontend
+    _Inout_ PXENVBD_FRONTEND    Frontend
     );
=20
 _Check_return_
 extern NTSTATUS
 FrontendSetState(
-    _In_ PXENVBD_FRONTEND   Frontend,
-    _In_ XENVBD_STATE       State
+    _Inout_ PXENVBD_FRONTEND    Frontend,
+    _In_ XENVBD_STATE           State
     );
=20
 extern NTSTATUS
 FrontendReset(
-    _In_ PXENVBD_FRONTEND   Frontend
+    _Inout_ PXENVBD_FRONTEND    Frontend
     );
=20
 extern NTSTATUS
diff --git a/src/xenvbd/granter=2Ec b/src/xenvbd/granter=2Ec
index d1cbbfe=2E=2Efd90965 100644
--- a/src/xenvbd/granter=2Ec
+++ b/src/xenvbd/granter=2Ec
@@ -102,7 +102,7 @@ fail1:
=20
 VOID
 GranterDestroy(
-    _In_ PXENVBD_GRANTER    Granter
+    _Inout_ PXENVBD_GRANTER Granter
     )
 {
     Granter->Frontend =3D NULL;
@@ -168,7 +168,7 @@ GranterDebugCallback(
=20
 NTSTATUS
 GranterConnect(
-    _In_ PXENVBD_GRANTER    Granter
+    _Inout_ PXENVBD_GRANTER Granter
     )
 {
     PXENVBD_ADAPTER         Adapter =3D TargetGetAdapter(FrontendGetTarge=
t(Granter->Frontend));
@@ -256,7 +256,7 @@ GranterStoreWrite(
=20
 VOID
 GranterEnable(
-    _In_ PXENVBD_GRANTER    Granter
+    _Inout_ PXENVBD_GRANTER Granter
     )
 {
     ASSERT(Granter->Enabled =3D=3D FALSE);
@@ -266,7 +266,7 @@ GranterEnable(
=20
 VOID
 GranterDisable(
-    _In_ PXENVBD_GRANTER    Granter
+    _Inout_ PXENVBD_GRANTER Granter
     )
 {
     ASSERT(Granter->Enabled =3D=3D TRUE);
@@ -276,7 +276,7 @@ GranterDisable(
=20
 VOID
 GranterDisconnect(
-    _In_ PXENVBD_GRANTER    Granter
+    _Inout_ PXENVBD_GRANTER Granter
     )
 {
     ASSERT(Granter->Connected =3D=3D TRUE);
@@ -305,7 +305,7 @@ GranterDisconnect(
=20
 NTSTATUS
 GranterGet(
-    _In_ PXENVBD_GRANTER    Granter,
+    _Inout_ PXENVBD_GRANTER Granter,
     _In_ PFN_NUMBER         Pfn,
     _In_ BOOLEAN            ReadOnly,
     _Outptr_ PVOID          *Handle
@@ -346,7 +346,7 @@ fail1:
=20
 VOID
 GranterPut(
-    _In_ PXENVBD_GRANTER    Granter,
+    _Inout_ PXENVBD_GRANTER Granter,
     _In_ PVOID              Handle
     )
 {
diff --git a/src/xenvbd/granter=2Eh b/src/xenvbd/granter=2Eh
index c59e65d=2E=2Ee8d0899 100644
--- a/src/xenvbd/granter=2Eh
+++ b/src/xenvbd/granter=2Eh
@@ -47,12 +47,12 @@ GranterCreate(
=20
 extern VOID
 GranterDestroy(
-    _In_ PXENVBD_GRANTER    Granter
+    _Inout_ PXENVBD_GRANTER Granter
     );
=20
 extern NTSTATUS
 GranterConnect(
-    _In_ PXENVBD_GRANTER    Granter
+    _Inout_ PXENVBD_GRANTER Granter
     );
=20
 extern NTSTATUS
@@ -63,22 +63,22 @@ GranterStoreWrite(
=20
 extern VOID
 GranterEnable(
-    _In_ PXENVBD_GRANTER    Granter
+    _Inout_ PXENVBD_GRANTER Granter
     );
=20
 extern VOID
 GranterDisable(
-    _In_ PXENVBD_GRANTER    Granter
+    _Inout_ PXENVBD_GRANTER Granter
     );
=20
 extern VOID
 GranterDisconnect(
-    _In_ PXENVBD_GRANTER    Granter
+    _Inout_ PXENVBD_GRANTER Granter
     );
=20
 extern NTSTATUS
 GranterGet(
-    _In_ PXENVBD_GRANTER    Granter,
+    _Inout_ PXENVBD_GRANTER Granter,
     _In_ PFN_NUMBER         Pfn,
     _In_ BOOLEAN            ReadOnly,
     _Outptr_ PVOID          *Handle
@@ -86,7 +86,7 @@ GranterGet(
=20
 extern VOID
 GranterPut(
-    _In_ PXENVBD_GRANTER    Granter,
+    _Inout_ PXENVBD_GRANTER Granter,
     _In_ PVOID              Handle
     );
=20
diff --git a/src/xenvbd/ring=2Ec b/src/xenvbd/ring=2Ec
index 3f602ee=2E=2Ecd5093c 100644
--- a/src/xenvbd/ring=2Ec
+++ b/src/xenvbd/ring=2Ec
@@ -272,13 +272,13 @@ fail1:
=20
 static VOID
 BlkifRingPutIndirect(
-    _In_ PXENVBD_BLKIF_RING BlkifRing,
-    _In_ PXENVBD_INDIRECT   Indirect
+    _In_ PXENVBD_BLKIF_RING     BlkifRing,
+    _Inout_ PXENVBD_INDIRECT    Indirect
     )
 {
-    PXENVBD_RING            Ring =3D BlkifRing->Ring;
-    PXENVBD_FRONTEND        Frontend =3D Ring->Frontend;
-    PXENVBD_GRANTER         Granter =3D FrontendGetGranter(Frontend);
+    PXENVBD_RING                Ring =3D BlkifRing->Ring;
+    PXENVBD_FRONTEND            Frontend =3D Ring->Frontend;
+    PXENVBD_GRANTER             Granter =3D FrontendGetGranter(Frontend);
=20
     if (Indirect->Grant)
         GranterPut(Granter, Indirect->Grant);
@@ -309,7 +309,7 @@ BlkifRingGetSegment(
 static VOID
 BlkifRingPutSegment(
     _In_ PXENVBD_BLKIF_RING BlkifRing,
-    _In_ PXENVBD_SEGMENT    Segment
+    _Inout_ PXENVBD_SEGMENT Segment
     )
 {
     PXENVBD_RING            Ring =3D BlkifRing->Ring;
@@ -363,7 +363,7 @@ BlkifRingGetRequest(
 static VOID
 BlkifRingPutRequest(
     _In_ PXENVBD_BLKIF_RING BlkifRing,
-    _In_ PXENVBD_REQUEST    Request
+    _Inout_ PXENVBD_REQUEST Request
     )
 {
     PXENVBD_RING            Ring =3D BlkifRing->Ring;
@@ -550,15 +550,15 @@ BlkifRingDebugCallback(
=20
 static DECLSPEC_NOINLINE VOID
 __BlkifRingCompleteSrb(
-    _In_ PXENVBD_BLKIF_RING BlkifRing,
-    _In_ PXENVBD_SRBEXT     SrbExt
+    _Inout_ PXENVBD_BLKIF_RING  BlkifRing,
+    _In_ PXENVBD_SRBEXT         SrbExt
     )
 {
-    PXENVBD_RING            Ring =3D BlkifRing->Ring;
-    PXENVBD_FRONTEND        Frontend =3D Ring->Frontend;
-    PXENVBD_TARGET          Target =3D FrontendGetTarget(Frontend);
-    PXENVBD_ADAPTER         Adapter =3D TargetGetAdapter(Target);
-    PSCSI_REQUEST_BLOCK     Srb =3D SrbExt->Srb;
+    PXENVBD_RING                Ring =3D BlkifRing->Ring;
+    PXENVBD_FRONTEND            Frontend =3D Ring->Frontend;
+    PXENVBD_TARGET              Target =3D FrontendGetTarget(Frontend);
+    PXENVBD_ADAPTER             Adapter =3D TargetGetAdapter(Target);
+    PSCSI_REQUEST_BLOCK         Srb =3D SrbExt->Srb;
=20
     if (Srb->SrbStatus =3D=3D SRB_STATUS_PENDING) {
         // SRB has not hit a failure condition (BLKIF_RSP_ERROR | BLKIF_R=
SP_EOPNOTSUPP)
@@ -599,8 +599,8 @@ BlkifRingUnprepareRequest(
=20
 static FORCEINLINE VOID
 BlkifRingQueueRequests(
-    _In_ PXENVBD_BLKIF_RING BlkifRing,
-    _In_ PLIST_ENTRY        List
+    _Inout_ PXENVBD_BLKIF_RING  BlkifRing,
+    _In_ PLIST_ENTRY            List
     )
 {
     for (;;) {
@@ -622,8 +622,8 @@ BlkifRingQueueRequests(
 static BOOLEAN
 BlkifRingPrepareSegment(
     _In_ PXENVBD_BLKIF_RING BlkifRing,
-    _In_ PXENVBD_SEGMENT    Segment,
-    _In_ PXENVBD_SRBEXT     SrbExt,
+    _Inout_ PXENVBD_SEGMENT Segment,
+    _Inout_ PXENVBD_SRBEXT  SrbExt,
     _In_ BOOLEAN            ReadOnly,
     _In_ ULONG              SectorsLeft,
     _Out_ PULONG            SectorsNow
@@ -738,20 +738,20 @@ fail1:
=20
 static NTSTATUS
 BlkifRingPrepareReadWrite(
-    _In_ PXENVBD_BLKIF_RING BlkifRing,
-    _In_ PXENVBD_SRBEXT     SrbExt
+    _Inout_ PXENVBD_BLKIF_RING  BlkifRing,
+    _Inout_ PXENVBD_SRBEXT      SrbExt
     )
 {
-    PXENVBD_RING            Ring =3D BlkifRing->Ring;
-    PXENVBD_FRONTEND        Frontend =3D Ring->Frontend;
-    PSCSI_REQUEST_BLOCK     Srb =3D SrbExt->Srb;
-    UCHAR                   Operation;
-    BOOLEAN                 ReadOnly;
-    LIST_ENTRY              List;
-    const ULONG             MaxIndirect =3D FrontendGetFeatures(Frontend)=
->Indirect;
-    const ULONG             SectorShift =3D FrontendGetDiskInfo(Frontend)=
->SectorShift;
-    ULONG64                 SectorStart =3D Cdb_LogicalBlock(Srb) << Sect=
orShift;
-    ULONG                   SectorsLeft =3D Cdb_TransferBlock(Srb) << Sec=
torShift;
+    PXENVBD_RING                Ring =3D BlkifRing->Ring;
+    PXENVBD_FRONTEND            Frontend =3D Ring->Frontend;
+    PSCSI_REQUEST_BLOCK         Srb =3D SrbExt->Srb;
+    UCHAR                       Operation;
+    BOOLEAN                     ReadOnly;
+    LIST_ENTRY                  List;
+    const ULONG                 MaxIndirect =3D FrontendGetFeatures(Front=
end)->Indirect;
+    const ULONG                 SectorShift =3D FrontendGetDiskInfo(Front=
end)->SectorShift;
+    ULONG64                     SectorStart =3D Cdb_LogicalBlock(Srb) << =
SectorShift;
+    ULONG                       SectorsLeft =3D Cdb_TransferBlock(Srb) <<=
 SectorShift;
=20
     InitializeListHead(&List);
=20
@@ -841,18 +841,18 @@ fail1:
=20
 static NTSTATUS
 BlkifRingPrepareUnmap(
-    _In_ PXENVBD_BLKIF_RING BlkifRing,
-    _In_ PXENVBD_SRBEXT     SrbExt
+    _Inout_ PXENVBD_BLKIF_RING  BlkifRing,
+    _Inout_ PXENVBD_SRBEXT      SrbExt
     )
 {
-    PXENVBD_RING            Ring =3D BlkifRing->Ring;
-    PXENVBD_FRONTEND        Frontend =3D Ring->Frontend;
-    PXENVBD_DISKINFO        DiskInfo =3D FrontendGetDiskInfo(Frontend);
-    PSCSI_REQUEST_BLOCK     Srb =3D SrbExt->Srb;
-    PUNMAP_LIST_HEADER      Unmap =3D Srb->DataBuffer;
-    ULONG                   Count;
-    ULONG                   Index;
-    LIST_ENTRY              List;
+    PXENVBD_RING                Ring =3D BlkifRing->Ring;
+    PXENVBD_FRONTEND            Frontend =3D Ring->Frontend;
+    PXENVBD_DISKINFO            DiskInfo =3D FrontendGetDiskInfo(Frontend=
);
+    PSCSI_REQUEST_BLOCK         Srb =3D SrbExt->Srb;
+    PUNMAP_LIST_HEADER          Unmap =3D Srb->DataBuffer;
+    ULONG                       Count;
+    ULONG                       Index;
+    LIST_ENTRY                  List;
=20
     InitializeListHead(&List);
=20
@@ -899,17 +899,17 @@ fail1:
=20
 static NTSTATUS
 BlkifRingPrepareSyncCache(
-    _In_ PXENVBD_BLKIF_RING BlkifRing,
-    _In_ PXENVBD_SRBEXT     SrbExt
+    _Inout_ PXENVBD_BLKIF_RING  BlkifRing,
+    _Inout_ PXENVBD_SRBEXT      SrbExt
     )
 {
-    PXENVBD_RING            Ring =3D BlkifRing->Ring;
-    PXENVBD_FRONTEND        Frontend =3D Ring->Frontend;
-    PSCSI_REQUEST_BLOCK     Srb =3D SrbExt->Srb;
-    PXENVBD_REQUEST         Request;
-    UCHAR                   Operation;
-    LIST_ENTRY              List;
-    const ULONG             SectorShift =3D FrontendGetDiskInfo(Frontend)=
->SectorShift;
+    PXENVBD_RING                Ring =3D BlkifRing->Ring;
+    PXENVBD_FRONTEND            Frontend =3D Ring->Frontend;
+    PSCSI_REQUEST_BLOCK         Srb =3D SrbExt->Srb;
+    PXENVBD_REQUEST             Request;
+    UCHAR                       Operation;
+    LIST_ENTRY                  List;
+    const ULONG                 SectorShift =3D FrontendGetDiskInfo(Front=
end)->SectorShift;
=20
     InitializeListHead(&List);
     Srb->SrbStatus =3D SRB_STATUS_PENDING;
@@ -943,8 +943,8 @@ fail1:
=20
 static DECLSPEC_NOINLINE NTSTATUS
 __BlkifRingPrepareSrb(
-    _In_ PXENVBD_BLKIF_RING BlkifRing,
-    _In_ PXENVBD_SRBEXT     SrbExt
+    _Inout_ PXENVBD_BLKIF_RING  BlkifRing,
+    _Inout_ PXENVBD_SRBEXT      SrbExt
     )
 {
     switch (Cdb_OperationEx(SrbExt->Srb)) {
@@ -971,7 +971,7 @@ static FORCEINLINE VOID
 __BlkifRingInsertRequest(
     _In_ PXENVBD_BLKIF_RING BlkifRing,
     _In_ PXENVBD_REQUEST    Request,
-    _In_ blkif_request_t    *req
+    _Out_ blkif_request_t   *req
     )
 {
     PXENVBD_RING            Ring =3D BlkifRing->Ring;
@@ -1081,7 +1081,7 @@ __BlkifRingInsertRequest(
=20
 static FORCEINLINE NTSTATUS
 __BlkifRingPostRequests(
-    _In_ PXENVBD_BLKIF_RING BlkifRing
+    _Inout_ PXENVBD_BLKIF_RING  BlkifRing
     )
 {
     for (;;) {
@@ -1142,16 +1142,16 @@ __BlkifRingGetSubmittedRequest(
=20
 static FORCEINLINE VOID
 __BlkifRingCompleteResponse(
-    _In_ PXENVBD_BLKIF_RING BlkifRing,
-    _In_ PXENVBD_REQUEST    Request,
-    _In_ SHORT              Status
+    _Inout_ PXENVBD_BLKIF_RING  BlkifRing,
+    _Inout_ PXENVBD_REQUEST     Request,
+    _In_ SHORT                  Status
     )
 {
-    PXENVBD_RING            Ring =3D BlkifRing->Ring;
-    PXENVBD_FRONTEND        Frontend =3D Ring->Frontend;
-    PSCSI_REQUEST_BLOCK     Srb;
-    PXENVBD_SRBEXT          SrbExt;
-    PLIST_ENTRY             ListEntry;
+    PXENVBD_RING                Ring =3D BlkifRing->Ring;
+    PXENVBD_FRONTEND            Frontend =3D Ring->Frontend;
+    PSCSI_REQUEST_BLOCK         Srb;
+    PXENVBD_SRBEXT              SrbExt;
+    PLIST_ENTRY                 ListEntry;
=20
     SrbExt =3D Request->SrbExt;
     Srb =3D SrbExt->Srb;
@@ -1211,7 +1211,7 @@ __BlkifRingCompleteResponse(
=20
 static FORCEINLINE BOOLEAN
 BlkifRingPoll(
-    _In_ PXENVBD_BLKIF_RING BlkifRing
+    _Inout_ PXENVBD_BLKIF_RING  BlkifRing
     )
 {
 #define XENVBD_BATCH(_Ring) (RING_SIZE(&(_Ring)->Front) / 4)
@@ -1287,10 +1287,10 @@ __BlkifRingSend(
=20
 static FORCEINLINE VOID
 __BlkifRingPushRequests(
-    _In_ PXENVBD_BLKIF_RING BlkifRing
+    _Inout_ PXENVBD_BLKIF_RING  BlkifRing
     )
 {
-    BOOLEAN                 Notify;
+    BOOLEAN                     Notify;
=20
     if (BlkifRing->RequestsPosted =3D=3D BlkifRing->RequestsPushed)
         return;
@@ -1313,14 +1313,14 @@ __BlkifRingPushRequests(
=20
 static DECLSPEC_NOINLINE VOID
 BlkifRingSwizzle(
-    _In_ PXENVBD_BLKIF_RING BlkifRing
+    _Inout_ PXENVBD_BLKIF_RING  BlkifRing
     )
 {
-    ULONG_PTR               Old;
-    ULONG_PTR               New;
-    PLIST_ENTRY             ListEntry;
-    LIST_ENTRY              List;
-    ULONG                   Count;
+    ULONG_PTR                   Old;
+    ULONG_PTR                   New;
+    PLIST_ENTRY                 ListEntry;
+    LIST_ENTRY                  List;
+    ULONG                       Count;
=20
 #if DBG
     ASSERT3P(BlkifRing->LockThread, =3D=3D , KeGetCurrentThread());
@@ -1364,7 +1364,7 @@ BlkifRingSwizzle(
=20
 static FORCEINLINE VOID
 __BlkifRingAbortQueues(
-    _In_ PXENVBD_BLKIF_RING BlkifRing
+    _Inout_ PXENVBD_BLKIF_RING  BlkifRing
     )
 {
     ASSERT(!BlkifRing->Enabled);
@@ -1410,10 +1410,10 @@ __BlkifRingAbortQueues(
=20
 static DECLSPEC_NOINLINE VOID
 BlkifRingSchedule(
-    _In_ PXENVBD_BLKIF_RING BlkifRing
+    _Inout_ PXENVBD_BLKIF_RING  BlkifRing
     )
 {
-    BOOLEAN                 Polled;
+    BOOLEAN                     Polled;
=20
     if (!BlkifRing->Enabled) {
         __BlkifRingAbortQueues(BlkifRing);
@@ -1495,12 +1495,12 @@ BlkifRingSchedule(
 static FORCEINLINE BOOLEAN
 _IRQL_requires_(DISPATCH_LEVEL)
 __BlkifRingTryAcquireLock(
-    _In_ PXENVBD_BLKIF_RING BlkifRing
+    _Inout_ PXENVBD_BLKIF_RING  BlkifRing
     )
 {
-    ULONG_PTR               Old;
-    ULONG_PTR               New;
-    BOOLEAN                 Acquired;
+    ULONG_PTR                   Old;
+    ULONG_PTR                   New;
+    BOOLEAN                     Acquired;
=20
     ASSERT3U(KeGetCurrentIrql(), =3D=3D , DISPATCH_LEVEL);
=20
@@ -1524,7 +1524,7 @@ __BlkifRingTryAcquireLock(
 static FORCEINLINE VOID
 _IRQL_requires_(DISPATCH_LEVEL)
 __BlkifRingAcquireLock(
-    _In_ PXENVBD_BLKIF_RING BlkifRing
+    _Inout_ PXENVBD_BLKIF_RING  BlkifRing
     )
 {
     ASSERT3U(KeGetCurrentIrql(), =3D=3D , DISPATCH_LEVEL);
@@ -1539,7 +1539,7 @@ __BlkifRingAcquireLock(
=20
 static VOID
 BlkifRingAcquireLock(
-    _In_ PXENVBD_BLKIF_RING BlkifRing
+    _Inout_ PXENVBD_BLKIF_RING  BlkifRing
     )
 {
     __BlkifRingAcquireLock(BlkifRing);
@@ -1548,12 +1548,12 @@ BlkifRingAcquireLock(
 static FORCEINLINE BOOLEAN
 _IRQL_requires_(DISPATCH_LEVEL)
 __BlkifRingTryReleaseLock(
-    _In_ PXENVBD_BLKIF_RING BlkifRing
+    _Inout_ PXENVBD_BLKIF_RING  BlkifRing
     )
 {
-    ULONG_PTR               Old;
-    ULONG_PTR               New;
-    BOOLEAN                 Released;
+    ULONG_PTR                   Old;
+    ULONG_PTR                   New;
+    BOOLEAN                     Released;
=20
 #if DBG
     ASSERT3U(KeGetCurrentIrql(), =3D=3D , DISPATCH_LEVEL);
@@ -1584,7 +1584,7 @@ __BlkifRingTryReleaseLock(
 static FORCEINLINE VOID
 _IRQL_requires_(DISPATCH_LEVEL)
 __BlkifRingReleaseLock(
-    _In_ PXENVBD_BLKIF_RING BlkifRing
+    _Inout_ PXENVBD_BLKIF_RING  BlkifRing
     )
 {
     ASSERT3U(KeGetCurrentIrql(), =3D=3D , DISPATCH_LEVEL);
@@ -1602,7 +1602,7 @@ __BlkifRingReleaseLock(
=20
 static VOID
 BlkifRingReleaseLock(
-    _In_ PXENVBD_BLKIF_RING BlkifRing
+    _Inout_ PXENVBD_BLKIF_RING  BlkifRing
     )
 {
     __BlkifRingReleaseLock(BlkifRing);
@@ -1759,13 +1759,13 @@ RingWatchdog(
=20
 static FORCEINLINE NTSTATUS
 BlkifRingCacheCreate(
-    _In_ PXENVBD_BLKIF_RING BlkifRing
+    _Inout_ PXENVBD_BLKIF_RING  BlkifRing
     )
 {
-    PXENVBD_RING            Ring;
-    PXENVBD_FRONTEND        Frontend;
-    CHAR                    Name[MAX_NAME_LEN];
-    NTSTATUS                status;
+    PXENVBD_RING                Ring;
+    PXENVBD_FRONTEND            Frontend;
+    CHAR                        Name[MAX_NAME_LEN];
+    NTSTATUS                    status;
=20
     Ring =3D BlkifRing->Ring;
     Frontend =3D Ring->Frontend;
@@ -1874,10 +1874,10 @@ fail1:
=20
 static FORCEINLINE VOID
 BlkifRingCacheDestroy(
-    _In_ PXENVBD_BLKIF_RING BlkifRing
+    _Inout_ PXENVBD_BLKIF_RING  BlkifRing
     )
 {
-    PXENVBD_RING            Ring;
+    PXENVBD_RING                Ring;
=20
     Ring =3D BlkifRing->Ring;
=20
@@ -1984,7 +1984,7 @@ fail1:
=20
 static VOID
 BlkifRingDestroy(
-    _In_ PXENVBD_BLKIF_RING BlkifRing
+    _Inout_ PXENVBD_BLKIF_RING  BlkifRing
     )
 {
     ThreadAlert(BlkifRing->WatchdogThread);
@@ -2020,15 +2020,15 @@ BlkifRingDestroy(
=20
 static NTSTATUS
 BlkifRingConnect(
-    _In_ PXENVBD_BLKIF_RING BlkifRing
+    _Inout_ PXENVBD_BLKIF_RING  BlkifRing
     )
 {
-    PXENVBD_RING            Ring =3D BlkifRing->Ring;
-    PXENVBD_FRONTEND        Frontend =3D Ring->Frontend;
-    PXENVBD_GRANTER         Granter =3D FrontendGetGranter(Frontend);
-    CHAR                    Name[MAX_NAME_LEN];
-    ULONG                   Index;
-    NTSTATUS                status;
+    PXENVBD_RING                Ring =3D BlkifRing->Ring;
+    PXENVBD_FRONTEND            Frontend =3D Ring->Frontend;
+    PXENVBD_GRANTER             Granter =3D FrontendGetGranter(Frontend);
+    CHAR                        Name[MAX_NAME_LEN];
+    ULONG                       Index;
+    NTSTATUS                    status;
=20
     Trace("=3D=3D=3D=3D> %u\n", BlkifRing->Index);
     ASSERT(!BlkifRing->Connected);
@@ -2219,7 +2219,7 @@ fail1:
=20
 static VOID
 BlkifRingEnable(
-    _In_ PXENVBD_BLKIF_RING BlkifRing
+    _Inout_ PXENVBD_BLKIF_RING  BlkifRing
     )
 {
     Trace("=3D=3D=3D=3D> %u\n", BlkifRing->Index);
@@ -2235,13 +2235,13 @@ BlkifRingEnable(
=20
 static VOID
 BlkifRingDisable(
-    _In_ PXENVBD_BLKIF_RING BlkifRing
+    _Inout_ PXENVBD_BLKIF_RING  BlkifRing
     )
 {
-    PXENVBD_RING            Ring;
-    PCHAR                   Buffer;
-    XenbusState             State;
-    NTSTATUS                status;
+    PXENVBD_RING                Ring;
+    PCHAR                       Buffer;
+    XenbusState                 State;
+    NTSTATUS                    status;
=20
     Ring =3D BlkifRing->Ring;
=20
@@ -2330,12 +2330,12 @@ BlkifRingDisable(
=20
 static VOID
 BlkifRingDisconnect(
-    _In_ PXENVBD_BLKIF_RING BlkifRing
+    _Inout_ PXENVBD_BLKIF_RING  BlkifRing
     )
 {
-    PXENVBD_RING            Ring =3D BlkifRing->Ring;
-    PXENVBD_GRANTER         Granter =3D FrontendGetGranter(Ring->Frontend=
);
-    ULONG                   Index;
+    PXENVBD_RING                Ring =3D BlkifRing->Ring;
+    PXENVBD_GRANTER             Granter =3D FrontendGetGranter(Ring->Fron=
tend);
+    ULONG                       Index;
=20
     Trace("=3D=3D=3D=3D> %u\n", BlkifRing->Index);
     ASSERT(BlkifRing->Connected);
@@ -2380,14 +2380,14 @@ BlkifRingDisconnect(
=20
 static BOOLEAN
 __BlkifRingQueueSrb(
-    _In_ PXENVBD_BLKIF_RING BlkifRing,
-    _In_ PXENVBD_SRBEXT     SrbExt
+    _Inout_ PXENVBD_BLKIF_RING  BlkifRing,
+    _In_ PXENVBD_SRBEXT         SrbExt
     )
 {
-    PLIST_ENTRY             ListEntry;
-    ULONG_PTR               Old;
-    ULONG_PTR               LockBit;
-    ULONG_PTR               New;
+    PLIST_ENTRY                 ListEntry;
+    ULONG_PTR                   Old;
+    ULONG_PTR                   LockBit;
+    ULONG_PTR                   New;
=20
     if (!BlkifRing->Enabled)
         goto fail1;
@@ -2423,8 +2423,8 @@ fail1:
=20
 static BOOLEAN
 __BlkifRingQueueShutdown(
-    _In_ PXENVBD_BLKIF_RING BlkifRing,
-    _In_ PXENVBD_SRBEXT     SrbExt
+    _Inout_ PXENVBD_BLKIF_RING  BlkifRing,
+    _Inout_ PXENVBD_SRBEXT      SrbExt
     )
 {
     if (!BlkifRing->Enabled)
@@ -2559,10 +2559,10 @@ fail1:
=20
 VOID
 RingDestroy(
-    _In_ PXENVBD_RING   Ring
+    _Inout_ PXENVBD_RING    Ring
     )
 {
-    LONG                Index;
+    LONG                    Index;
=20
     Index =3D (LONG) FrontendGetMaxQueues(Ring->Frontend);
     ASSERT3U(Index, !=3D, 0);
@@ -2599,13 +2599,13 @@ RingDestroy(
=20
 NTSTATUS
 RingConnect(
-    _In_ PXENVBD_RING   Ring
+    _Inout_ PXENVBD_RING    Ring
     )
 {
-    LONG                MaxQueues;
-    LONG                Index;
-    PCHAR               Buffer;
-    NTSTATUS            status;
+    LONG                    MaxQueues;
+    LONG                    Index;
+    PCHAR                   Buffer;
+    NTSTATUS                status;
=20
     status =3D XENBUS_DEBUG(Acquire, &Ring->DebugInterface);
     if (!NT_SUCCESS(status))
@@ -2804,10 +2804,10 @@ RingDisable(
=20
 VOID
 RingDisconnect(
-    _In_ PXENVBD_RING   Ring
+    _Inout_ PXENVBD_RING    Ring
     )
 {
-    LONG                Index;
+    LONG                    Index;
=20
     XENBUS_DEBUG(Deregister,
                  &Ring->DebugInterface,
diff --git a/src/xenvbd/ring=2Eh b/src/xenvbd/ring=2Eh
index bcf52f8=2E=2E6dfdb74 100644
--- a/src/xenvbd/ring=2Eh
+++ b/src/xenvbd/ring=2Eh
@@ -46,12 +46,12 @@ RingCreate(
=20
 extern VOID
 RingDestroy(
-    _In_ PXENVBD_RING   Ring
+    _Inout_ PXENVBD_RING    Ring
     );
=20
 extern NTSTATUS
 RingConnect(
-    _In_ PXENVBD_RING   Ring
+    _Inout_ PXENVBD_RING    Ring
     );
=20
 extern NTSTATUS
@@ -72,7 +72,7 @@ RingDisable(
=20
 extern VOID
 RingDisconnect(
-    _In_ PXENVBD_RING   Ring
+    _Inout_ PXENVBD_RING    Ring
     );
=20
 extern BOOLEAN
diff --git a/src/xenvbd/target=2Ec b/src/xenvbd/target=2Ec
index 0ba09cb=2E=2E0fe3412 100644
--- a/src/xenvbd/target=2Ec
+++ b/src/xenvbd/target=2Ec
@@ -121,7 +121,7 @@ __PnpStateName(
 _Check_return_
 static FORCEINLINE BOOLEAN
 TargetSetDevicePowerState(
-    _In_ PXENVBD_TARGET     Target,
+    _Inout_ PXENVBD_TARGET  Target,
     _In_ DEVICE_POWER_STATE State
     )
 {
@@ -141,11 +141,11 @@ TargetSetDevicePowerState(
=20
 VOID
 TargetSetMissing(
-    _In_ PXENVBD_TARGET Target,
-    _In_ PCSTR          Reason
+    _Inout_ PXENVBD_TARGET  Target,
+    _In_ PCSTR              Reason
     )
 {
-    KIRQL               Irql;
+    KIRQL                   Irql;
=20
     ASSERT3P(Reason, !=3D, NULL);
=20
@@ -167,7 +167,7 @@ TargetSetMissing(
=20
 VOID
 TargetSetDevicePnpState(
-    _In_ PXENVBD_TARGET     Target,
+    _Inout_ PXENVBD_TARGET  Target,
     _In_ DEVICE_PNP_STATE   State
     )
 {
@@ -185,7 +185,7 @@ TargetSetDevicePnpState(
=20
 static FORCEINLINE VOID
 __TargetRestoreDevicePnpState(
-    _In_ PXENVBD_TARGET     Target,
+    _Inout_ PXENVBD_TARGET  Target,
     _In_ DEVICE_PNP_STATE   State
     )
 {
@@ -197,8 +197,8 @@ __TargetRestoreDevicePnpState(
=20
 VOID
 TargetSetDeviceObject(
-    _In_ PXENVBD_TARGET Target,
-    _In_ PDEVICE_OBJECT DeviceObject
+    _Inout_ PXENVBD_TARGET  Target,
+    _In_ PDEVICE_OBJECT     DeviceObject
     )
 {
     Verbose("Target[%d] : Setting DeviceObject =3D 0x%p\n",
@@ -1155,12 +1155,12 @@ TargetShutdown(
=20
 VOID
 TargetIssueDeviceEject(
-    _In_ PXENVBD_TARGET Target,
-    _In_ PCSTR          Reason
+    _Inout_ PXENVBD_TARGET  Target,
+    _In_ PCSTR              Reason
     )
 {
-    KIRQL               Irql;
-    BOOLEAN             DoEject =3D FALSE;
+    KIRQL                   Irql;
+    BOOLEAN                 DoEject =3D FALSE;
=20
     KeAcquireSpinLock(&Target->Lock, &Irql);
     if (Target->DeviceObject) {
@@ -1193,7 +1193,7 @@ TargetIssueDeviceEject(
=20
 static FORCEINLINE VOID
 __TargetDeviceUsageNotification(
-    _In_ PXENVBD_TARGET             Target,
+    _Inout_ PXENVBD_TARGET          Target,
     _In_ PIRP                       Irp
     )
 {
@@ -1212,11 +1212,11 @@ __TargetDeviceUsageNotification(
=20
 static FORCEINLINE VOID
 __TargetCheckEjectPending(
-    _In_ PXENVBD_TARGET Target
+    _Inout_ PXENVBD_TARGET  Target
     )
 {
-    KIRQL               Irql;
-    BOOLEAN             EjectPending =3D FALSE;
+    KIRQL                   Irql;
+    BOOLEAN                 EjectPending =3D FALSE;
=20
     KeAcquireSpinLock(&Target->Lock, &Irql);
     if (Target->EjectPending) {
@@ -1236,11 +1236,11 @@ __TargetCheckEjectPending(
=20
 static FORCEINLINE VOID
 __TargetCheckEjectFailed(
-    _In_ PXENVBD_TARGET Target
+    _Inout_ PXENVBD_TARGET  Target
     )
 {
-    KIRQL               Irql;
-    BOOLEAN             EjectFailed =3D FALSE;
+    KIRQL                   Irql;
+    BOOLEAN                 EjectFailed =3D FALSE;
=20
     KeAcquireSpinLock(&Target->Lock, &Irql);
     if (Target->EjectRequested) {
@@ -1258,7 +1258,7 @@ __TargetCheckEjectFailed(
=20
 static FORCEINLINE VOID
 __TargetRemoveDevice(
-    _In_ PXENVBD_TARGET Target
+    _Inout_ PXENVBD_TARGET  Target
     )
 {
     TargetD0ToD3(Target);
@@ -1279,7 +1279,7 @@ __TargetRemoveDevice(
=20
 static FORCEINLINE VOID
 __TargetEject(
-    _In_ PXENVBD_TARGET Target
+    _Inout_ PXENVBD_TARGET  Target
     )
 {
     TargetSetMissing(Target, "Ejected");
@@ -1289,12 +1289,12 @@ __TargetEject(
=20
 NTSTATUS
 TargetDispatchPnp(
-    _In_ PXENVBD_TARGET Target,
-    _In_ PDEVICE_OBJECT DeviceObject,
-    _In_ PIRP           Irp
+    _Inout_ PXENVBD_TARGET  Target,
+    _In_ PDEVICE_OBJECT     DeviceObject,
+    _In_ PIRP               Irp
     )
 {
-    PIO_STACK_LOCATION  StackLocation;
+    PIO_STACK_LOCATION      StackLocation;
=20
     StackLocation =3D IoGetCurrentIrpStackLocation(Irp);
=20
@@ -1382,11 +1382,11 @@ TargetDebugCallback(
=20
 NTSTATUS
 TargetD3ToD0(
-    _In_ PXENVBD_TARGET Target
+    _Inout_ PXENVBD_TARGET  Target
     )
 {
-    NTSTATUS            status;
-    const ULONG         TargetId =3D TargetGetTargetId(Target);
+    NTSTATUS                status;
+    const ULONG             TargetId =3D TargetGetTargetId(Target);
=20
     if (!TargetSetDevicePowerState(Target, PowerDeviceD0))
         return STATUS_SUCCESS;
@@ -1447,10 +1447,10 @@ fail1:
=20
 VOID
 TargetD0ToD3(
-    _In_ PXENVBD_TARGET Target
+    _Inout_ PXENVBD_TARGET  Target
     )
 {
-    const ULONG         TargetId =3D TargetGetTargetId(Target);
+    const ULONG             TargetId =3D TargetGetTargetId(Target);
=20
     if (!TargetSetDevicePowerState(Target, PowerDeviceD3))
         return;
@@ -1564,10 +1564,10 @@ fail1:
=20
 VOID
 TargetDestroy(
-    _In_ PXENVBD_TARGET Target
+    _Inout_ PXENVBD_TARGET  Target
     )
 {
-    const ULONG         TargetId =3D TargetGetTargetId(Target);
+    const ULONG             TargetId =3D TargetGetTargetId(Target);
=20
     Verbose("Target[%d] : Destroying\n", TargetId);
=20
@@ -1627,11 +1627,11 @@ TARGET_GET_PROPERTY(DevicePnpState, DEVICE_PNP_STA=
TE)
=20
 BOOLEAN
 TargetGetMissing(
-    _In_ PXENVBD_TARGET Target
+    _Inout_ PXENVBD_TARGET  Target
     )
 {
-    KIRQL               Irql;
-    BOOLEAN             Missing;
+    KIRQL                   Irql;
+    BOOLEAN                 Missing;
=20
     KeAcquireSpinLock(&Target->Lock, &Irql);
     Missing =3D Target->Missing;
diff --git a/src/xenvbd/target=2Eh b/src/xenvbd/target=2Eh
index ee24736=2E=2Ee7cf2c6 100644
--- a/src/xenvbd/target=2Eh
+++ b/src/xenvbd/target=2Eh
@@ -50,48 +50,48 @@ TargetCreate(
=20
 extern VOID
 TargetDestroy(
-    _In_ PXENVBD_TARGET Target
+    _Inout_ PXENVBD_TARGET  Target
     );
=20
 extern NTSTATUS
 TargetD3ToD0(
-    _In_ PXENVBD_TARGET Target
+    _Inout_ PXENVBD_TARGET  Target
     );
=20
 extern VOID
 TargetD0ToD3(
-    _In_ PXENVBD_TARGET Target
+    _Inout_ PXENVBD_TARGET  Target
     );
=20
 extern NTSTATUS
 TargetDispatchPnp(
-    _In_ PXENVBD_TARGET Target,
-    _In_ PDEVICE_OBJECT DeviceObject,
-    _In_ PIRP           Irp
+    _Inout_ PXENVBD_TARGET  Target,
+    _In_ PDEVICE_OBJECT     DeviceObject,
+    _In_ PIRP               Irp
     );
=20
 extern VOID
 TargetIssueDeviceEject(
-    _In_ PXENVBD_TARGET Target,
-    _In_ PCSTR          Reason
+    _Inout_ PXENVBD_TARGET  Target,
+    _In_ PCSTR              Reason
     );
=20
 extern VOID
 TargetSetMissing(
-    _In_ PXENVBD_TARGET Target,
-    _In_ PCSTR          Reason
+    _Inout_ PXENVBD_TARGET  Target,
+    _In_ PCSTR              Reason
     );
=20
 extern VOID
 TargetSetDevicePnpState(
-    _In_ PXENVBD_TARGET     Target,
+    _Inout_ PXENVBD_TARGET  Target,
     _In_ DEVICE_PNP_STATE   State
     );
=20
 extern VOID
 TargetSetDeviceObject(
-    _In_ PXENVBD_TARGET Target,
-    _In_ PDEVICE_OBJECT DeviceObject
+    _Inout_ PXENVBD_TARGET  Target,
+    _In_ PDEVICE_OBJECT     DeviceObject
     );
=20
 extern VOID
diff --git a/src/xenvbd/thread=2Ec b/src/xenvbd/thread=2Ec
index 8eded16=2E=2E22baf10 100644
--- a/src/xenvbd/thread=2Ec
+++ b/src/xenvbd/thread=2Ec
@@ -73,7 +73,7 @@ __ThreadFree(
=20
 static FORCEINLINE VOID
 __ThreadWake(
-    _In_ PXENVBD_THREAD Thread
+    _Inout_ PXENVBD_THREAD  Thread
     )
 {
     ASSERT((Thread->Thread =3D=3D NULL) || (Thread->Thread !=3D KeGetCurr=
entThread()));
@@ -82,7 +82,7 @@ __ThreadWake(
=20
 VOID
 ThreadWake(
-    _In_ PXENVBD_THREAD Thread
+    _Inout_ PXENVBD_THREAD  Thread
     )
 {
     __ThreadWake(Thread);
@@ -90,7 +90,7 @@ ThreadWake(
=20
 static FORCEINLINE VOID
 __ThreadAlert(
-    _In_ PXENVBD_THREAD Thread
+    _Inout_ PXENVBD_THREAD  Thread
     )
 {
     Thread->Alerted =3D TRUE;
@@ -99,7 +99,7 @@ __ThreadAlert(
=20
 VOID
 ThreadAlert(
-    _In_ PXENVBD_THREAD Thread
+    _Inout_ PXENVBD_THREAD  Thread
     )
 {
     __ThreadAlert(Thread);
@@ -109,7 +109,7 @@ _Check_return_
 _IRQL_requires_max_(PASSIVE_LEVEL)
 BOOLEAN
 ThreadWait(
-    _In_ PXENVBD_THREAD Thread
+    _Inout_ PXENVBD_THREAD  Thread
     )
 {
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, PASSIVE_LEVEL);
@@ -241,10 +241,10 @@ ThreadIsAlerted(
 _IRQL_requires_max_(PASSIVE_LEVEL)
 VOID
 ThreadJoin(
-    _In_ PXENVBD_THREAD Thread
+    _Inout_ PXENVBD_THREAD  Thread
     )
 {
-    LONG                References;
+    LONG                    References;
=20
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, PASSIVE_LEVEL);
     ASSERT3P(KeGetCurrentThread(), !=3D, Thread->Thread);
diff --git a/src/xenvbd/thread=2Eh b/src/xenvbd/thread=2Eh
index eaa3cab=2E=2Ec878246 100644
--- a/src/xenvbd/thread=2Eh
+++ b/src/xenvbd/thread=2Eh
@@ -64,25 +64,25 @@ ThreadIsAlerted(
=20
 extern VOID
 ThreadWake(
-    _In_ PXENVBD_THREAD Thread
+    _Inout_ PXENVBD_THREAD  Thread
     );
=20
 extern VOID
 ThreadAlert(
-    _In_ PXENVBD_THREAD Thread
+    _Inout_ PXENVBD_THREAD  Thread
     );
=20
 _Check_return_
 _IRQL_requires_max_(PASSIVE_LEVEL)
 extern BOOLEAN
 ThreadWait(
-    _In_ PXENVBD_THREAD Thread
+    _Inout_ PXENVBD_THREAD  Thread
     );
=20
 _IRQL_requires_max_(PASSIVE_LEVEL)
 extern VOID
 ThreadJoin(
-    _In_ PXENVBD_THREAD Thread
+    _Inout_ PXENVBD_THREAD  Thread
     );
=20
 #endif  // _XENVBD_THREAD_H
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.2ce.504b60872557d497.1a144e51393.8337f73e58c47943=---


From win-pv-devel-bounces@lists.xenproject.org Fri Oct 16 13:27:11 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 16 Oct 2026 13:27:11 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1451855.1666703 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHhxn-0006FL-6F; Fri, 16 Oct 2026 13:27:11 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1451855.1666703; Fri, 16 Oct 2026 13:27:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHhxm-0006F3-QK; Fri, 16 Oct 2026 13:27:10 +0000
Received: by outflank-mailman (input) for mailman id 1451855;
 Fri, 16 Oct 2026 13:27:08 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e50eff0008425@swg.vates.tech>)
 id 1xHhxk-000693-Me
 for win-pv-devel@lists.xenproject.org; Fri, 16 Oct 2026 13:27:08 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xHhxk-00BNGh-27
 for win-pv-devel@lists.xenproject.org; Fri, 16 Oct 2026 15:27:08 +0200
Received: from [10.42.69.7] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e50eff0008425@swg.vates.tech>)
 id 6ad22604-e002-0a2a0a5209dd-0a2a4507d45c-46
 for <win-pv-devel@lists.xenproject.org>; Fri, 16 Oct 2026 15:27:07 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-ef75cf.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e50eff0008425@swg.vates.tech>)
 id 6ad2262a-b4ea-0a2a45070019-b9ff1c23a0e7-3
 for <win-pv-devel@lists.xenproject.org>; Fri, 16 Oct 2026 15:27:06 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a144e50eff0008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Fri, 16 Oct 2026 13:27:04 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id EF15D81CD5;
 Fri, 16 Oct 2026 15:27:03 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=PKkokwTIwDJtqJDTVkUFgaWV2VSuZtz8fHLxeYPEwEM=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=i1XHjSE/GK8Kfq6Pg0ihX/pkck5bgVLEDCk7FS/TqI5unUfKgxg3fFFq2sbZPk3UX7M8GrrRy
 AziVKW7fwbr3DcGEQavGREtFUpRKXhiCSOIOAlfLDxOn3cV/4f4crBxkSYStr9qlcXNwyBORYrz
 DnFwoS1A867PQp0maocngHwRFyXglbMjNqXXCMxqehazuHu/bfoj6B/7dwGnbxpTFBYqvPZWxWY
 /F4pST6rIo6NRXEkbnnmz+TbsjMU8QLpPFQO/ZnD8qgtDBHMfE0pnHMa5mwh3Rp56h9dWoRwGyO
 yL9LFQ6jhSeF9OsslwLlg5fXun8jHW/FEt/L/Uc+d0rw==
X-Zone-Loop: ee5864d843568c8a7d4638bc5d6e4cf8f02eabcd8bce
x-campaign-type: default
x-transaction-id: 70e59821-2b80-404d-a626-ed714efa2eb0
x-swg-uid: 01-6bcc5e9d-dbf9-4075-b4ff-3b9df6b839f3
X-Mailer: Sweego
Message-ID:
 <1792157224.8631fc262581453bbf619ec5b2062170.1a144e50eff0008425@vates.tech>
x-swg-bid: 1792157224.8631fc262581453bbf619ec5b2062170.1a144e50eff0008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 01/18] Update common files with xenbus
Date: Fri, 16 Oct 2026 15:26:38 +0200
In-Reply-To: <1792157073.8631fc262581453bbf619ec5b2062170.1a144e2bf7f0008425@vates.tech>
References: <1792157073.8631fc262581453bbf619ec5b2062170.1a144e2bf7f0008425@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.2c9.da0ff49a4869f8dd.1a144e50c9b.a1a2335430b1eb56=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792157224091
X-purgate-ID: tlsNG-ef75cf/1792157226-352CCAE4-43952E89/0/0
X-purgate-type: clean
X-purgate-size: 25848

---=Part.2c9.da0ff49a4869f8dd.1a144e50c9b.a1a2335430b1eb56=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

We sync these files with with xenbus which has up-to-date annotations and f=
ixes
as xenvbd and xencrsh ones are old=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/common/util=2Eh    |  87 ++++++++++++-----------
 src/xencrsh/assert=2Eh | 158 ++++++++++++++++++++++++++++-------------
 src/xenvbd/assert=2Eh  | 165 +++++++++++++++++--------------------------
 3 files changed, 220 insertions(+), 190 deletions(-)

diff --git a/src/common/util=2Eh b/src/common/util=2Eh
index e60ebbf=2E=2Eb197b14 100644
--- a/src/common/util=2Eh
+++ b/src/common/util=2Eh
@@ -38,12 +38,12 @@
=20
 #include "assert=2Eh"
=20
-#define	P2ROUNDUP(_x, _a)   \
-        (-(-(_x) & -(_a)))
+#define	P2ROUNDUP(_t, _x, _a)   \
+        (-(-((_t)(_x)) & -(((_t)(_a)))))
=20
 static FORCEINLINE LONG
 __ffs(
-    IN  unsigned long long  mask
+    _In_ unsigned long long mask
     )
 {
     unsigned char           *array =3D (unsigned char *)&mask;
@@ -82,14 +82,14 @@ __ffs(
=20
 static FORCEINLINE VOID
 __CpuId(
-    IN  ULONG   Leaf,
-    OUT PULONG  EAX OPTIONAL,
-    OUT PULONG  EBX OPTIONAL,
-    OUT PULONG  ECX OPTIONAL,
-    OUT PULONG  EDX OPTIONAL
+    _In_ ULONG          Leaf,
+    _Out_opt_ PULONG    EAX,
+    _Out_opt_ PULONG    EBX,
+    _Out_opt_ PULONG    ECX,
+    _Out_opt_ PULONG    EDX
     )
 {
-    int         Value[4] =3D {0};
+    int                 Value[4] =3D {0};
=20
     __cpuid(Value, Leaf);
=20
@@ -108,12 +108,12 @@ __CpuId(
=20
 static FORCEINLINE LONG
 __InterlockedAdd(
-    IN  LONG    *Value,
-    IN  LONG    Delta
+    _Inout_ LONG    *Value,
+    _In_ LONG       Delta
     )
 {
-    LONG        New;
-    LONG        Old;
+    LONG            New;
+    LONG            Old;
=20
     do {
         Old =3D *Value;
@@ -125,12 +125,12 @@ __InterlockedAdd(
=20
 static FORCEINLINE LONG
 __InterlockedSubtract(
-    IN  LONG    *Value,
-    IN  LONG    Delta
+    _Inout_ LONG    *Value,
+    _In_ LONG       Delta
     )
 {
-    LONG        New;
-    LONG        Old;
+    LONG            New;
+    LONG            Old;
=20
     do {
         Old =3D *Value;
@@ -140,23 +140,24 @@ __InterlockedSubtract(
     return New;
 }
=20
-__checkReturn
+_Check_return_
 static FORCEINLINE PVOID
 __AllocatePoolWithTag(
-    IN  POOL_TYPE   PoolType,
-    IN  SIZE_T      NumberOfBytes,
-    IN  ULONG       Tag
+    _In_ POOL_TYPE  PoolType,
+    _In_ SIZE_T     NumberOfBytes,
+    _In_ ULONG      Tag
     )
 {
     PUCHAR          Buffer;
=20
-    __analysis_assume(PoolType =3D=3D NonPagedPool ||
+    _Analysis_assume_(PoolType =3D=3D NonPagedPool ||
                       PoolType =3D=3D PagedPool);
=20
     if (NumberOfBytes =3D=3D 0)
         return NULL;
=20
 #if (_MSC_VER >=3D 1928) // VS 16=2E9 (EWDK 20344 or later)
+#pragma warning(suppress:28160) // annotation error
     Buffer =3D ExAllocatePoolUninitialized(PoolType, NumberOfBytes, Tag);
 #else
 #pragma warning(suppress:28160) // annotation error
@@ -171,8 +172,8 @@ __AllocatePoolWithTag(
=20
 static FORCEINLINE VOID
 __FreePoolWithTag(
-    IN  PVOID   Buffer,
-    IN  ULONG   Tag
+    _In_ PVOID  Buffer,
+    _In_ ULONG  Tag
     )
 {
     ExFreePoolWithTag(Buffer, Tag);
@@ -180,7 +181,7 @@ __FreePoolWithTag(
=20
 static FORCEINLINE PMDL
 __AllocatePages(
-    IN  ULONG           Count
+    _In_ ULONG          Count
     )
 {
     PHYSICAL_ADDRESS    LowAddress;
@@ -249,10 +250,10 @@ fail1:
=20
 static FORCEINLINE VOID
 __FreePages(
-    IN	PMDL	Mdl
+    _In_ PMDL   Mdl
     )
 {
-    PUCHAR	MdlMappedSystemVa;
+    PUCHAR      MdlMappedSystemVa;
=20
     ASSERT(Mdl->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA);
     MdlMappedSystemVa =3D Mdl->MappedSystemVa;
@@ -265,15 +266,17 @@ __FreePages(
=20
 #define __FreePage(_Mdl)    __FreePages(_Mdl)
=20
-static FORCEINLINE PCHAR
+static FORCEINLINE PSTR
 __strtok_r(
-    IN      PCHAR   Buffer,
-    IN      PCHAR   Delimiter,
-    IN OUT  PCHAR   *Context
+    _Inout_opt_ PSTR    Buffer,
+    _In_ PSTR           Delimiter,
+    _When_(Buffer !=3D NULL, _Outptr_)
+    _When_(Buffer =3D=3D NULL, _Inout_)
+    PSTR                *Context
     )
 {
-    PCHAR           Token;
-    PCHAR           End;
+    PSTR                Token;
+    PSTR                End;
=20
     if (Buffer !=3D NULL)
         *Context =3D Buffer;
@@ -303,15 +306,17 @@ __strtok_r(
     return Token;
 }
=20
-static FORCEINLINE PWCHAR
+static FORCEINLINE PWSTR
 __wcstok_r(
-    IN      PWCHAR  Buffer,
-    IN      PWCHAR  Delimiter,
-    IN OUT  PWCHAR  *Context
+    _Inout_opt_ PWSTR   Buffer,
+    _In_ PWSTR          Delimiter,
+    _When_(Buffer !=3D NULL, _Outptr_)
+    _When_(Buffer =3D=3D NULL, _Inout_)
+    PWSTR               *Context
     )
 {
-    PWCHAR          Token;
-    PWCHAR          End;
+    PWSTR               Token;
+    PWSTR               End;
=20
     if (Buffer !=3D NULL)
         *Context =3D Buffer;
@@ -343,7 +348,7 @@ __wcstok_r(
=20
 static FORCEINLINE CHAR
 __toupper(
-    IN  CHAR    Character
+    _In_ CHAR   Character
     )
 {
     if (Character < 'a' || Character > 'z')
@@ -354,7 +359,7 @@ __toupper(
=20
 static FORCEINLINE CHAR
 __tolower(
-    IN  CHAR    Character
+    _In_ CHAR   Character
     )
 {
     if (Character < 'A' || Character > 'Z')
diff --git a/src/xencrsh/assert=2Eh b/src/xencrsh/assert=2Eh
index b709a19=2E=2E72ae0cc 100644
--- a/src/xencrsh/assert=2Eh
+++ b/src/xencrsh/assert=2Eh
@@ -1,34 +1,34 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
- */=20
+ */
=20
 #ifndef _XENCRSH_ASSERT_H
 #define _XENCRSH_ASSERT_H
@@ -38,12 +38,12 @@
 #include "log=2Eh"
=20
 static FORCEINLINE VOID
-__BugCheck(
-    IN  ULONG       Code,
-    IN  ULONG_PTR   Parameter1,
-    IN  ULONG_PTR   Parameter2,
-    IN  ULONG_PTR   Parameter3,
-    IN  ULONG_PTR   Parameter4
+__Bug(
+    _In_ ULONG      Code,
+    _In_ ULONG_PTR  Parameter1,
+    _In_ ULONG_PTR  Parameter2,
+    _In_ ULONG_PTR  Parameter3,
+    _In_ ULONG_PTR  Parameter4
     )
 {
 #pragma prefast(suppress:28159)
@@ -58,16 +58,16 @@ __BugCheck(
=20
 #define BUG(_TEXT)                                              \
         do {                                                    \
-            const CHAR  *_Text =3D (_TEXT);                       \
-            const CHAR  *_File =3D __FILE__;                      \
+            PCSTR       _Text =3D (_TEXT);                       \
+            PCSTR       _File =3D __FILE__;                      \
             ULONG       _Line =3D __LINE__;                       \
                                                                 \
-            LogError("BUG: " _TEXT "\n");                       \
-            __BugCheck(ASSERTION_FAILURE,                       \
-                       (ULONG_PTR)_Text,                        \
-                       (ULONG_PTR)_File,                        \
-                       (ULONG_PTR)_Line,                        \
-                       0);                                      \
+            LogError("BUG: " _TEXT "\n");                          \
+            __Bug(ASSERTION_FAILURE,                            \
+                  (ULONG_PTR)_Text,                             \
+                  (ULONG_PTR)_File,                             \
+                  (ULONG_PTR)_Line,                             \
+                  0);                                           \
         } while (FALSE)
=20
 #define BUG_ON(_EXP)                \
@@ -75,10 +75,21 @@ __BugCheck(
=20
 #undef  ASSERT
=20
+#if DBG
+
+#define __NT_ASSERT(_EXP)                                       \
+        ((!(_EXP)) ?                                            \
+        (LogError("ASSERTION FAILED: " #_EXP "\n"),                \
+         __annotation(L"Debug", L"AssertFail", L#_EXP),         \
+         DbgRaiseAssertionFailure(), FALSE) :                   \
+        TRUE)
+
+#define __ASSERT(_EXP)  __NT_ASSERT(_EXP)
+
 #define ASSERT(_EXP)                    \
         do {                            \
-            BUG_ON(_EXP);               \
-            __analysis_assume(_EXP);    \
+            __ASSERT(_EXP);             \
+            _Analysis_assume_(_EXP);    \
         } while (FALSE)
=20
 #define ASSERT3U(_X, _OP, _Y)                       \
@@ -86,8 +97,8 @@ __BugCheck(
             ULONGLONG   _Lval =3D (ULONGLONG)(_X);    \
             ULONGLONG   _Rval =3D (ULONGLONG)(_Y);    \
             if (!(_Lval _OP _Rval)) {               \
-                LogError("%s =3D %llu\n", #_X, _Lval);\
-                LogError("%s =3D %llu\n", #_Y, _Rval);\
+                LogError("%s =3D %llu\n", #_X, _Lval);   \
+                LogError("%s =3D %llu\n", #_Y, _Rval);   \
                 ASSERT((_X) _OP (_Y));              \
             }                                       \
         } while (FALSE)
@@ -97,8 +108,8 @@ __BugCheck(
             LONGLONG    _Lval =3D (LONGLONG)(_X);     \
             LONGLONG    _Rval =3D (LONGLONG)(_Y);     \
             if (!(_Lval _OP _Rval)) {               \
-                LogError("%s =3D %lld\n", #_X, _Lval);\
-                LogError("%s =3D %lld\n", #_Y, _Rval);\
+                LogError("%s =3D %lld\n", #_X, _Lval);   \
+                LogError("%s =3D %lld\n", #_Y, _Rval);   \
                 ASSERT((_X) _OP (_Y));              \
             }                                       \
         } while (FALSE)
@@ -108,18 +119,45 @@ __BugCheck(
             PVOID   _Lval =3D (PVOID)(_X);            \
             PVOID   _Rval =3D (PVOID)(_Y);            \
             if (!(_Lval _OP _Rval)) {               \
-                LogError("%s =3D %p\n", #_X, _Lval);  \
-                LogError("%s =3D %p\n", #_Y, _Rval);  \
+                LogError("%s =3D %p\n", #_X, _Lval);     \
+                LogError("%s =3D %p\n", #_Y, _Rval);     \
                 ASSERT((_X) _OP (_Y));              \
             }                                       \
         } while (FALSE)
=20
+#else   // DBG
+
+#pragma warning(disable:4100)
+#pragma warning(disable:4189)
+
+#define ASSERT(_EXP)                    \
+        do {                            \
+            _Analysis_assume_(_EXP);    \
+        } while (FALSE)
+
+#define ASSERT3U(_X, _OP, _Y)           \
+        ASSERT((_X) _OP (_Y))
+
+#define ASSERT3S(_X, _OP, _Y)           \
+        ASSERT((_X) _OP (_Y))
+
+#define ASSERT3P(_X, _OP, _Y)           \
+        ASSERT((_X) _OP (_Y))
+
+#endif  // DBG
+
+#ifndef TEST_MEMORY
+#define TEST_MEMORY DBG
+#endif
+
+#if TEST_MEMORY
+
 static __inline BOOLEAN
 _IsZeroMemory(
-    IN  const PCHAR Caller,
-    IN  const PCHAR Name,
-    IN  PVOID       Buffer,
-    IN  ULONG       Length
+    _In_ PCSTR          Caller,
+    _In_ PCSTR          Name,
+    _In_ PVOID          Buffer,
+    _In_ ULONG          Length
     )
 {
     ULONG           Offset;
@@ -136,6 +174,26 @@ _IsZeroMemory(
     return TRUE;
 }
=20
+#else   // TEST_MEMORY
+
+static __inline BOOLEAN
+_IsZeroMemory(
+    _In_ PCSTR          Caller,
+    _In_ PCSTR          Name,
+    _In_ PVOID          Buffer,
+    _In_ ULONG          Length
+    )
+{
+    UNREFERENCED_PARAMETER(Caller);
+    UNREFERENCED_PARAMETER(Name);
+    UNREFERENCED_PARAMETER(Buffer);
+    UNREFERENCED_PARAMETER(Length);
+
+    return TRUE;
+}
+
+#endif  // TEST_MEMORY
+
 #define IsZeroMemory(_Buffer, _Length) \
         _IsZeroMemory(__FUNCTION__, #_Buffer, (_Buffer), (_Length))
=20
diff --git a/src/xenvbd/assert=2Eh b/src/xenvbd/assert=2Eh
index 94e81fb=2E=2Efe64a91 100644
--- a/src/xenvbd/assert=2Eh
+++ b/src/xenvbd/assert=2Eh
@@ -1,34 +1,34 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
- */=20
+ */
=20
 #ifndef _XENVBD_ASSERT_H
 #define _XENVBD_ASSERT_H
@@ -38,12 +38,12 @@
 #include "debug=2Eh"
=20
 static FORCEINLINE VOID
-__BugCheck(
-    __in  ULONG       Code,
-    __in_opt ULONG_PTR   Parameter1,
-    __in_opt ULONG_PTR   Parameter2,
-    __in_opt ULONG_PTR   Parameter3,
-    __in_opt ULONG_PTR   Parameter4
+__Bug(
+    _In_ ULONG      Code,
+    _In_ ULONG_PTR  Parameter1,
+    _In_ ULONG_PTR  Parameter2,
+    _In_ ULONG_PTR  Parameter3,
+    _In_ ULONG_PTR  Parameter4
     )
 {
 #pragma prefast(suppress:28159)
@@ -59,39 +59,21 @@ __BugCheck(
=20
 #define BUG(_TEXT)                                              \
         do {                                                    \
-            const CHAR  *_Text =3D (_TEXT);                       \
-            const CHAR  *_File =3D __FILE__;                      \
+            PCSTR       _Text =3D (_TEXT);                       \
+            PCSTR       _File =3D __FILE__;                      \
             ULONG       _Line =3D __LINE__;                       \
                                                                 \
             Error("BUG: " _TEXT "\n");                          \
-            __BugCheck(ASSERTION_FAILURE,                       \
-                       (ULONG_PTR)_Text,                        \
-                       (ULONG_PTR)_File,                        \
-                       (ULONG_PTR)_Line,                        \
-                       0);                                      \
+            __Bug(ASSERTION_FAILURE,                            \
+                  (ULONG_PTR)_Text,                             \
+                  (ULONG_PTR)_File,                             \
+                  (ULONG_PTR)_Line,                             \
+                  0);                                           \
         } while (FALSE)
=20
-#define BUG_MSG(_TEXT1, _TEXT2)                                 \
-        do {                                                    \
-            const CHAR  *_Text1 =3D (_TEXT1);                     \
-            const CHAR  *_Text2 =3D (_TEXT2);                     \
-            const CHAR  *_File =3D __FILE__;                      \
-            ULONG       _Line =3D __LINE__;                       \
-                                                                \
-            Error("BUG: " _TEXT1 " %s\n", _Text2);              \
-            __BugCheck(ASSERTION_FAILURE,                       \
-                       (ULONG_PTR)_Text1,                       \
-                       (ULONG_PTR)_File,                        \
-                       (ULONG_PTR)_Line,                        \
-                       (ULONG_PTR)_Text2);                      \
-        } while (FALSE)
-
-#define BUG_ON(_EXP)                           \
+#define BUG_ON(_EXP)                \
         if (_EXP) BUG(#_EXP)
=20
-#define BUG_ON_MSG(_EXP, _TEXT)                \
-        if (_EXP) BUG_MSG(#_EXP, _TEXT)
-
 #undef  ASSERT
=20
 #if DBG
@@ -103,26 +85,12 @@ __BugCheck(
          DbgRaiseAssertionFailure(), FALSE) :                   \
         TRUE)
=20
-#define __NT_ASSERT_MSG(_EXP, _TEXT)                            \
-        ((!(_EXP)) ?                                            \
-        (Error("ASSERTION FAILED: " #_EXP " " #_TEXT "\n"),     \
-         __annotation(L"Debug", L"AssertFail", L#_EXP),         \
-         DbgRaiseAssertionFailure(), FALSE) :                   \
-        TRUE)
-
-#define __ASSERT(_EXP)              __NT_ASSERT(_EXP)
-#define __ASSERT_MSG(_EXP, _TEXT)   __NT_ASSERT_MSG(_EXP, _TEXT)
+#define __ASSERT(_EXP)  __NT_ASSERT(_EXP)
=20
 #define ASSERT(_EXP)                    \
         do {                            \
             __ASSERT(_EXP);             \
-            __analysis_assume(_EXP);    \
-        } while (FALSE)
-
-#define ASSERT_MSG(_EXP, _TEXT)         \
-        do {                            \
-            __ASSERT_MSG(_EXP, _TEXT);  \
-            __analysis_assume(_EXP);    \
+            _Analysis_assume_(_EXP);    \
         } while (FALSE)
=20
 #define ASSERT3U(_X, _OP, _Y)                       \
@@ -132,7 +100,7 @@ __BugCheck(
             if (!(_Lval _OP _Rval)) {               \
                 Error("%s =3D %llu\n", #_X, _Lval);   \
                 Error("%s =3D %llu\n", #_Y, _Rval);   \
-                ASSERT(_X _OP _Y);                  \
+                ASSERT((_X) _OP (_Y));              \
             }                                       \
         } while (FALSE)
=20
@@ -143,7 +111,7 @@ __BugCheck(
             if (!(_Lval _OP _Rval)) {               \
                 Error("%s =3D %lld\n", #_X, _Lval);   \
                 Error("%s =3D %lld\n", #_Y, _Rval);   \
-                ASSERT(_X _OP _Y);                  \
+                ASSERT((_X) _OP (_Y));              \
             }                                       \
         } while (FALSE)
=20
@@ -154,18 +122,7 @@ __BugCheck(
             if (!(_Lval _OP _Rval)) {               \
                 Error("%s =3D %p\n", #_X, _Lval);     \
                 Error("%s =3D %p\n", #_Y, _Rval);     \
-                ASSERT(_X _OP _Y);                  \
-            }                                       \
-        } while (FALSE)
-
-#define ASSERTREFCOUNT(_X, _OP, _Y, _Z)             \
-        do {                                        \
-            LONG    _L =3D (LONG)(_X);                \
-            LONG    _R =3D (LONG)(_Y);                \
-            if (!(_L _OP _R)) {                     \
-                Error("%s:%s =3D %d\n", (_Z), #_X, _L); \
-                Error("%s:%s =3D %d\n", (_Z), #_Y, _R); \
-                ASSERT_MSG(_X _OP _Y, (_Z));        \
+                ASSERT((_X) _OP (_Y));              \
             }                                       \
         } while (FALSE)
=20
@@ -176,7 +133,7 @@ __BugCheck(
=20
 #define ASSERT(_EXP)                    \
         do {                            \
-            __analysis_assume(_EXP);    \
+            _Analysis_assume_(_EXP);    \
         } while (FALSE)
=20
 #define ASSERT3U(_X, _OP, _Y)           \
@@ -188,9 +145,6 @@ __BugCheck(
 #define ASSERT3P(_X, _OP, _Y)           \
         ASSERT((_X) _OP (_Y))
=20
-#define ASSERTREFCOUNT(_X, _OP, _Y, _Z) \
-        ASSERT((_X) _OP (_Y))
-
 #endif  // DBG
=20
 #ifndef TEST_MEMORY
@@ -199,13 +153,12 @@ __BugCheck(
=20
 #if TEST_MEMORY
=20
-__checkReturn
 static __inline BOOLEAN
 _IsZeroMemory(
-    __in const PCHAR Caller,
-    __in const PCHAR Name,
-    __in PVOID       Buffer,
-    __in ULONG       Length
+    _In_ PCSTR          Caller,
+    _In_ PCSTR          Name,
+    _In_ PVOID          Buffer,
+    _In_ ULONG          Length
     )
 {
     ULONG           Offset;
@@ -222,15 +175,29 @@ _IsZeroMemory(
     return TRUE;
 }
=20
-#define IsZeroMemory(_Buffer, _Length) \
-        _IsZeroMemory(__FUNCTION__, #_Buffer, (_Buffer), (_Length))
-
 #else   // TEST_MEMORY
=20
-#define IsZeroMemory(_Buffer, _Length)  TRUE
+static __inline BOOLEAN
+_IsZeroMemory(
+    _In_ PCSTR          Caller,
+    _In_ PCSTR          Name,
+    _In_ PVOID          Buffer,
+    _In_ ULONG          Length
+    )
+{
+    UNREFERENCED_PARAMETER(Caller);
+    UNREFERENCED_PARAMETER(Name);
+    UNREFERENCED_PARAMETER(Buffer);
+    UNREFERENCED_PARAMETER(Length);
+
+    return TRUE;
+}
=20
 #endif  // TEST_MEMORY
=20
+#define IsZeroMemory(_Buffer, _Length) \
+        _IsZeroMemory(__FUNCTION__, #_Buffer, (_Buffer), (_Length))
+
 #define IMPLY(_X, _Y)   (!(_X) || (_Y))
 #define EQUIV(_X, _Y)   (IMPLY((_X), (_Y)) && IMPLY((_Y), (_X)))
=20
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.2c9.da0ff49a4869f8dd.1a144e50c9b.a1a2335430b1eb56=---


From win-pv-devel-bounces@lists.xenproject.org Fri Oct 16 13:27:11 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 16 Oct 2026 13:27:11 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1451856.1666709 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHhxn-0006Fp-Ih; Fri, 16 Oct 2026 13:27:11 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1451856.1666709; Fri, 16 Oct 2026 13:27:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHhxm-0006FJ-SD; Fri, 16 Oct 2026 13:27:10 +0000
Received: by outflank-mailman (input) for mailman id 1451856;
 Fri, 16 Oct 2026 13:27:08 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e5191b0008425@swg.vates.tech>)
 id 1xHhxk-0006AC-Tq
 for win-pv-devel@lists.xenproject.org; Fri, 16 Oct 2026 13:27:08 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xHhxk-0060cn-97
 for win-pv-devel@lists.xenproject.org; Fri, 16 Oct 2026 15:27:08 +0200
Received: from [10.42.69.7] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e5191b0008425@swg.vates.tech>)
 id 6ad2262c-8faa-0a2a0a5109dd-0a2a45078f76-0
 for <win-pv-devel@lists.xenproject.org>; Fri, 16 Oct 2026 15:27:08 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-ef75cf.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e5191b0008425@swg.vates.tech>)
 id 6ad2262a-b4ea-0a2a45070019-b9ff1c23a0e7-4
 for <win-pv-devel@lists.xenproject.org>; Fri, 16 Oct 2026 15:27:08 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a144e5191b0008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Fri, 16 Oct 2026 13:27:07 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id BDCAB82814;
 Fri, 16 Oct 2026 15:27:06 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=5JfvXyOKyVeHobnZZ0RlBzPrNDmw19/RaiG7BthNX8Y=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=TLVlVCC70XW9QiakNfqr7iiW4bD8dchW5Zh0//Ao1iOXdyWlsmR5dbnAfuQ4hr04I2Ikz8xS1
 8yqhlKN3rNQtnPb/GbM8NPPG9NQkZTNUU9KGCofuwxAfVBYxJcYpX6BbHZReUjitLWjS57ywKE6
 gJyLhqGmOgBaKNsruJ0F9E8Gh5zECE9pXobdWUkHsbnLkJkCdDrdYmb4NMh9RgDONTvj0qm3g06
 byMVhaG29Gkf3hyTKtkFvvbAFb0p03aYksoUjE7fhkFiYJF7EqeZyCSss1i1dgiKDdH4FWEcBch
 8FJWRJjFfBR2+QT88RPcjSGUzMN8Fd3RX2Ovewx0xJKQ==
X-Zone-Loop: 11d510d66b4305aa6a8b6c88fb55e8ddde8588c0b7d0
x-campaign-type: default
x-transaction-id: 99a911ce-69e6-4748-ab06-07b647db9269
x-swg-uid: 01-c1d71177-daa0-4943-a459-c986a7e5ba51
X-Mailer: Sweego
Message-ID:
 <1792157227.8631fc262581453bbf619ec5b2062170.1a144e5191b0008425@vates.tech>
x-swg-bid: 1792157227.8631fc262581453bbf619ec5b2062170.1a144e5191b0008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 10/18] xenvbd: Fix out-of-bounds read on empty StoreDirectory results
Date: Fri, 16 Oct 2026 15:26:47 +0200
In-Reply-To: <1792157073.8631fc262581453bbf619ec5b2062170.1a144e2bf7f0008425@vates.tech>
References: <1792157073.8631fc262581453bbf619ec5b2062170.1a144e2bf7f0008425@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.2d2.be7ad0aca87291c6.1a144e51772.ac80ead2eaacc322=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792157226866
X-purgate-ID: tlsNG-ef75cf/1792157228-348C9AE4-0A347E17/0/0
X-purgate-type: clean
X-purgate-size: 1426

---=Part.2d2.be7ad0aca87291c6.1a144e51772.ac80ead2eaacc322=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

StoreDirectory returns a list of NUL-separated names ending with an
empty string, but only allocated one byte after the payload=2E For an
empty directory the result was a single NUL, so callers walking the
list (e=2Eg=2E __Next in fdo=2Ec) read one byte past the allocation=2E

Allocate two extra bytes (the allocation is zeroed) so the list is
always double-NUL terminated=2E

Assisted-by: Claude:Claude-opus-5=2E5
Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xencrsh/store=2Ec | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/xencrsh/store=2Ec b/src/xencrsh/store=2Ec
index 03c9e2c=2E=2Eef92238 100644
--- a/src/xencrsh/store=2Ec
+++ b/src/xencrsh/store=2Ec
@@ -913,7 +913,7 @@ StoreDirectory(
         goto fail1;
=20
     Length =3D __StorePayloadLength(Response);
-    Buffer =3D AustereAllocate(Length + sizeof (CHAR));
+    Buffer =3D AustereAllocate(Length + 2 *sizeof (CHAR));
=20
     status =3D STATUS_NO_MEMORY;
     if (Buffer =3D=3D NULL)
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.2d2.be7ad0aca87291c6.1a144e51772.ac80ead2eaacc322=---


From win-pv-devel-bounces@lists.xenproject.org Fri Oct 16 13:27:11 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 16 Oct 2026 13:27:11 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1451857.1666711 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHhxn-0006GO-Ka; Fri, 16 Oct 2026 13:27:11 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1451857.1666711; Fri, 16 Oct 2026 13:27:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHhxm-0006FZ-U1; Fri, 16 Oct 2026 13:27:10 +0000
Received: by outflank-mailman (input) for mailman id 1451857;
 Fri, 16 Oct 2026 13:27:09 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e513030008425@swg.vates.tech>)
 id 1xHhxk-00069x-PE
 for win-pv-devel@lists.xenproject.org; Fri, 16 Oct 2026 13:27:08 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xHhxk-00BNGh-5L
 for win-pv-devel@lists.xenproject.org; Fri, 16 Oct 2026 15:27:08 +0200
Received: from [10.42.69.7] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e513030008425@swg.vates.tech>)
 id 6ad22604-e002-0a2a0a5209dd-0a2a4507d45c-48
 for <win-pv-devel@lists.xenproject.org>; Fri, 16 Oct 2026 15:27:08 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-ef75cf.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e513030008425@swg.vates.tech>)
 id 6ad2262a-b4ea-0a2a45070019-b9ff1c23a8d5-3
 for <win-pv-devel@lists.xenproject.org>; Fri, 16 Oct 2026 15:27:06 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a144e513030008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Fri, 16 Oct 2026 13:27:05 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 2C71F82239;
 Fri, 16 Oct 2026 15:27:05 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=V6T+V9Xe4yyeIf+pNqzmMVsf5xz7i5PKzJb3Zz80/ik=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=sFJVjtfY59VGIZzbWV0WB2gR9DZSXKwLyCapeF0oVGDz3LEQ+io9kXpx3szYVL3FJok3l4Dp1
 ZYb5aGGGvbEjbzDkX1WtiBpM23MVw/k7TOXJGJmIYGYt5FqzI9ol0E9D9EN3t0BIUXkKcgPHVaF
 ryBP0k96HpzrYNgnwMarjLVa5j+cN1wDRytzS+qQLsT0XS16Jk2gvNELYkYuWUfoX2n+XjYaSgx
 wQtm/E/R8u7W5/kK+sutqNa9i9qTGb6pJzN1inHGI4ncPT3+StW7SiZFabXW7qFeefXiHiuaaLe
 04of6i4WOSabhcDkOi8/4GN5tinVzrawmNeGptGKnmgQ==
X-Zone-Loop: a78eda03e6f757266d8fbf367332604b1964653ac0da
x-campaign-type: default
x-transaction-id: 156a5bc9-a2f0-4644-8691-4437277cf620
x-swg-uid: 01-5110aced-7d10-4ade-931a-c6ba2aa6c8de
X-Mailer: Sweego
Message-ID:
 <1792157225.8631fc262581453bbf619ec5b2062170.1a144e513030008425@vates.tech>
x-swg-bid: 1792157225.8631fc262581453bbf619ec5b2062170.1a144e513030008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 04/18] Update string typedefs
Date: Fri, 16 Oct 2026 15:26:41 +0200
In-Reply-To: <1792157073.8631fc262581453bbf619ec5b2062170.1a144e2bf7f0008425@vates.tech>
References: <1792157073.8631fc262581453bbf619ec5b2062170.1a144e2bf7f0008425@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.2cc.e2ead2797fd9a9c.1a144e5114b.130e4c0a9b0f082d=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792157225291
X-purgate-ID: tlsNG-ef75cf/1792157226-376D2AE4-D318DD4E/0/0
X-purgate-type: clean
X-purgate-size: 30149

---=Part.2cc.e2ead2797fd9a9c.1a144e5114b.130e4c0a9b0f082d=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Mechanical pass, no functional change=2E

Types:
  const CHAR */CHAR * -> PCSTR/PSTR
  const WCHAR /WCHAR -> PCWSTR
  const PCHAR -> PCSTR
  PCHAR -> PSTR

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xencrsh/austere=2Ec    |  8 ++++----
 src/xencrsh/austere=2Eh    |  4 ++--
 src/xencrsh/driver=2Ec     | 10 +++++-----
 src/xencrsh/driver=2Eh     |  2 +-
 src/xencrsh/fdo=2Ec        |  8 ++++----
 src/xencrsh/frontend=2Ec   | 12 ++++++------
 src/xencrsh/frontend=2Eh   |  6 +++---
 src/xencrsh/log=2Ec        | 12 ++++++------
 src/xencrsh/pdo=2Ec        |  4 ++--
 src/xencrsh/pdo=2Eh        |  2 +-
 src/xencrsh/pdoinquiry=2Ec | 12 ++++++------
 src/xencrsh/queue=2Ec      |  2 +-
 src/xencrsh/queue=2Eh      |  2 +-
 src/xencrsh/store=2Ec      | 34 +++++++++++++++++-----------------
 src/xencrsh/store=2Eh      | 24 ++++++++++++------------
 src/xenvbd/adapter=2Ec     | 10 +++++-----
 src/xenvbd/base64=2Ec      |  4 ++--
 src/xenvbd/base64=2Eh      |  2 +-
 src/xenvbd/frontend=2Ec    | 10 +++++-----
 src/xenvbd/frontend=2Eh    |  2 +-
 src/xenvbd/registry=2Ec    | 28 ++++++++++++++--------------
 src/xenvbd/registry=2Eh    | 22 +++++++++++-----------
 src/xenvbd/target=2Ec      |  8 ++++----
 src/xenvbd/target=2Eh      |  6 +++---
 src/xenvbd/thread=2Ec      |  2 +-
 src/xenvbd/thread=2Eh      |  2 +-
 26 files changed, 119 insertions(+), 119 deletions(-)

diff --git a/src/xencrsh/austere=2Ec b/src/xencrsh/austere=2Ec
index 631a930=2E=2E052e4f6 100644
--- a/src/xencrsh/austere=2Ec
+++ b/src/xencrsh/austere=2Ec
@@ -99,7 +99,7 @@ __CompactBigHeap()
 }
 static PVOID
 __AllocBig(
-    _In_ PCHAR  Caller,
+    _In_ PSTR   Caller,
     _In_ ULONG  Size
     )
 {
@@ -226,7 +226,7 @@ __NewSubHeap(
 }
 static PVOID
 __AllocSmall(
-    _In_ PCHAR          Caller,
+    _In_ PSTR           Caller,
     _In_ ULONG          Size
     )
 {
@@ -376,7 +376,7 @@ __SubHeapSize()
 }
 PVOID
 __AustereAllocate(
-    _In_ PCHAR  Caller,
+    _In_ PSTR   Caller,
     _In_ ULONG  Size
     )
 {
@@ -406,7 +406,7 @@ __AustereAllocate(
=20
 VOID
 __AustereFree(
-    _In_ PCHAR      Caller,
+    _In_ PSTR       Caller,
     _In_ PVOID      Buffer
     )
 {  =20
diff --git a/src/xencrsh/austere=2Eh b/src/xencrsh/austere=2Eh
index b5b8f8c=2E=2E4248644 100644
--- a/src/xencrsh/austere=2Eh
+++ b/src/xencrsh/austere=2Eh
@@ -43,13 +43,13 @@ AustereInitialize();
=20
 PVOID
 __AustereAllocate(
-    _In_ PCHAR  Caller,
+    _In_ PSTR   Caller,
     _In_ ULONG  Size
     );
=20
 VOID
 __AustereFree(
-    _In_ PCHAR  Caller,
+    _In_ PSTR   Caller,
     _In_ PVOID  Buffer
     );
=20
diff --git a/src/xencrsh/driver=2Ec b/src/xencrsh/driver=2Ec
index 1bf6950=2E=2E70589b1 100644
--- a/src/xencrsh/driver=2Ec
+++ b/src/xencrsh/driver=2Ec
@@ -91,7 +91,7 @@ DriverUnlinkFdo(
 // Global Functions
 static FORCEINLINE PCHAR
 __DriverFormatV(
-    _In_ PCHAR      Fmt,
+    _In_ PSTR       Fmt,
     _In_ va_list    Args
     )
 {
@@ -124,7 +124,7 @@ __DriverFormatV(
=20
 PCHAR
 DriverFormat(
-    _In_ PCHAR  Format,
+    _In_ PSTR   Format,
     =2E=2E=2E
     )
 {
@@ -196,7 +196,7 @@ HwFindAdapter(
     _In_ PVOID                              HwDeviceExtension,
     _In_ PVOID                              Context,
     _In_ PVOID                              BusInformation,
-    _In_ PCHAR                              ArgumentString,
+    _In_ PSTR                               ArgumentString,
     _Inout_ PPORT_CONFIGURATION_INFORMATION ConfigInfo,
     _Out_ PBOOLEAN                          Again
     )
@@ -302,8 +302,8 @@ __ToUpper(
=20
 static FORCEINLINE BOOLEAN
 __StrStarts(
-    _In_ PWCHAR Str,
-    _In_ PWCHAR Starts
+    _In_ PWSTR  Str,
+    _In_ PWSTR  Starts
     )
 {
     while (*Str !=3D L'\0' && *Starts !=3D L'\0') {
diff --git a/src/xencrsh/driver=2Eh b/src/xencrsh/driver=2Eh
index a0043ca=2E=2E2c02551 100644
--- a/src/xencrsh/driver=2Eh
+++ b/src/xencrsh/driver=2Eh
@@ -82,7 +82,7 @@ DriverUnlinkFdo(
 // Global Functions
 PCHAR
 DriverFormat(
-    _In_ PCHAR  Format,
+    _In_ PSTR   Format,
     =2E=2E=2E
     );
=20
diff --git a/src/xencrsh/fdo=2Ec b/src/xencrsh/fdo=2Ec
index 79b57d1=2E=2E68d5263 100644
--- a/src/xencrsh/fdo=2Ec
+++ b/src/xencrsh/fdo=2Ec
@@ -61,7 +61,7 @@ struct _XENVBD_FDO {
 // Initialize, Start, Stop
 static FORCEINLINE PCHAR
 __Next(
-    _In_ PCHAR  Ptr
+    _In_ PSTR   Ptr
     )
 {
     if (Ptr =3D=3D NULL)
@@ -117,8 +117,8 @@ fail1:
 }
 static BOOLEAN
 FdoGetFeatureFlag(
-    _In_ PCHAR  Path,
-    _In_ PCHAR  Feature
+    _In_ PSTR   Path,
+    _In_ PSTR   Feature
     )
 {
     BOOLEAN     Ret =3D FALSE;
@@ -139,7 +139,7 @@ FdoGetFeatureFlag(
 static FORCEINLINE NTSTATUS
 FdoCreateTarget(
     _In_ PXENVBD_FDO    Fdo,
-    _In_ PCHAR          DeviceId,
+    _In_ PSTR           DeviceId,
     _In_ ULONG          TargetId
     )
 {
diff --git a/src/xencrsh/frontend=2Ec b/src/xencrsh/frontend=2Ec
index 3a269a1=2E=2E00dfcd3 100644
--- a/src/xencrsh/frontend=2Ec
+++ b/src/xencrsh/frontend=2Ec
@@ -359,7 +359,7 @@ __UpdateBackendPath(
 static FORCEINLINE NTSTATUS
 __ReadState(
     _In_ PXENVBD_FRONTEND   Frontend,
-    _In_ PCHAR              Path,
+    _In_ PSTR               Path,
     _Out_ PXENBUS_STATE     State
     )
 {
@@ -914,7 +914,7 @@ FrontendDisable(
 NTSTATUS
 FrontendCreate(
     _In_ PXENVBD_FRONTEND   Frontend,
-    _In_ PCHAR              DeviceId,
+    _In_ PSTR               DeviceId,
     _In_ ULONG              TargetId,
     _In_ PXENVBD_PDO        Pdo
     )
@@ -1115,7 +1115,7 @@ FrontendSetState(
=20
 static FORCEINLINE NTSTATUS
 __WaitState2(
-    _In_ PCHAR              BackendPath,
+    _In_ PSTR               BackendPath,
     _Inout_ PXENBUS_STATE   State
     )
 {
@@ -1142,7 +1142,7 @@ fail:
 }
 static FORCEINLINE NTSTATUS
 ___SetState2(
-    _In_ PCHAR          FrontendPath,
+    _In_ PSTR           FrontendPath,
     _In_ XENBUS_STATE   State
     )
 {
@@ -1158,8 +1158,8 @@ ___SetState2(
 }
 NTSTATUS
 FrontendCloseTarget(
-    _In_ PCHAR      FrontendPath,
-    _In_ PCHAR      BackendPath
+    _In_ PSTR       FrontendPath,
+    _In_ PSTR       BackendPath
     )
 {
     NTSTATUS        Status;
diff --git a/src/xencrsh/frontend=2Eh b/src/xencrsh/frontend=2Eh
index af2c71a=2E=2E80ee861 100644
--- a/src/xencrsh/frontend=2Eh
+++ b/src/xencrsh/frontend=2Eh
@@ -95,7 +95,7 @@ typedef struct _XENVBD_FRONTEND {
 extern NTSTATUS
 FrontendCreate(
     _In_ PXENVBD_FRONTEND   Frontend,
-    _In_ PCHAR              DeviceId,
+    _In_ PSTR               DeviceId,
     _In_ ULONG              TargetId,
     _In_ PXENVBD_PDO        Pdo
     );
@@ -113,8 +113,8 @@ FrontendSetState(
=20
 extern NTSTATUS
 FrontendCloseTarget(
-    _In_ PCHAR  FrontendPath,
-    _In_ PCHAR  BackendPath
+    _In_ PSTR   FrontendPath,
+    _In_ PSTR   BackendPath
     );
=20
 // Ring Slots
diff --git a/src/xencrsh/log=2Ec b/src/xencrsh/log=2Ec
index 43d5b0b=2E=2Ea2da155 100644
--- a/src/xencrsh/log=2Ec
+++ b/src/xencrsh/log=2Ec
@@ -48,7 +48,7 @@ LogQemuPut(
=20
 static DECLSPEC_NOINLINE PCHAR
 LogFormatNumber(
-    _In_ PCHAR      Buffer,
+    _In_ PSTR       Buffer,
     _In_ ULONGLONG  Value,
     _In_ UCHAR      Base,
     _In_ BOOLEAN    UpperCase
@@ -109,7 +109,7 @@ LogFormatNumber(
 static DECLSPEC_NOINLINE VOID
 LogVPrintf(
     _In_ VOID       (*Put)(CHAR),
-    _In_ const CHAR *Format,
+    _In_ PCSTR      Format,
     _In_ va_list    Arguments
     )
 {
@@ -222,7 +222,7 @@ LogVPrintf(
 static DECLSPEC_NOINLINE VOID
 LogPrintf(
     _In_ VOID       (*Put)(CHAR),
-    _In_ const CHAR *Format,
+    _In_ PCSTR      Format,
     =2E=2E=2E
     )
 {
@@ -247,9 +247,9 @@ __Mode()
 static FORCEINLINE VOID
 LogVDebug(
     _In_ ULONG      Level,
-    _In_ const CHAR *Module,
-    _In_ const CHAR *Function,
-    _In_ const CHAR *Format,
+    _In_ PCSTR      Module,
+    _In_ PCSTR      Function,
+    _In_ PCSTR      Format,
     _In_ va_list    Args
     )
 {
diff --git a/src/xencrsh/pdo=2Ec b/src/xencrsh/pdo=2Ec
index 14eca16=2E=2E3ab4ba0 100644
--- a/src/xencrsh/pdo=2Ec
+++ b/src/xencrsh/pdo=2Ec
@@ -106,7 +106,7 @@ __PdoFree(
 NTSTATUS
 PdoCreate(
     _In_ PXENVBD_FDO        Fdo,
-    _In_ PCHAR              DeviceId,
+    _In_ PSTR               DeviceId,
     _In_ ULONG              TargetId,
     _Outptr_ PXENVBD_PDO    *_Pdo
     )
@@ -1053,7 +1053,7 @@ __AbortSrbQueue(
     _In_ PSRB_QUEUE     Queue,
     _In_ PXENVBD_PDO    Pdo,
     _In_ BOOLEAN        Free,
-    _In_ PCHAR          Name
+    _In_ PSTR           Name
     )
 {
     PSCSI_REQUEST_BLOCK Srb;
diff --git a/src/xencrsh/pdo=2Eh b/src/xencrsh/pdo=2Eh
index 03fc84f=2E=2Ed0f2f3a 100644
--- a/src/xencrsh/pdo=2Eh
+++ b/src/xencrsh/pdo=2Eh
@@ -46,7 +46,7 @@ typedef struct _XENVBD_PDO XENVBD_PDO, *PXENVBD_PDO;
 extern NTSTATUS
 PdoCreate(
     _In_ PXENVBD_FDO        Fdo,
-    _In_ PCHAR              DeviceId,
+    _In_ PSTR               DeviceId,
     _In_ ULONG              TargetId,
     _Outptr_ PXENVBD_PDO    *_Pdo
     );
diff --git a/src/xencrsh/pdoinquiry=2Ec b/src/xencrsh/pdoinquiry=2Ec
index 7d4c5d6=2E=2Ef889ffd 100644
--- a/src/xencrsh/pdoinquiry=2Ec
+++ b/src/xencrsh/pdoinquiry=2Ec
@@ -200,7 +200,7 @@ __FreeInquiryData(
=20
 static FORCEINLINE UCHAR
 __PageCode(
-    _In_ PCHAR  PageCode
+    _In_ PSTR   PageCode
     )
 {
     ULONG       Ret;
@@ -234,7 +234,7 @@ __DecodeChar(
 static FORCEINLINE UCHAR
 __Decode(
     _In_ PUCHAR Dest,
-    _In_ PCHAR  Src,
+    _In_ PSTR   Src,
     _In_ ULONG  RemainingChars
     )
 {
@@ -267,7 +267,7 @@ __Decode(
 }
 static NTSTATUS
 __DecodeBase64(
-    _In_ PCHAR      Base64,
+    _In_ PSTR       Base64,
     _In_ ULONG      Base64Length,
     _Outptr_ PVOID  *_Buffer,
     _Out_ PULONG    BufferLength
@@ -309,8 +309,8 @@ fail1:
 static NTSTATUS
 __ReadPage(
     _In_ PXENVBD_INQUIRY    Inquiry,
-    _In_ PCHAR              BasePath,
-    _In_ PCHAR              PageCode
+    _In_ PSTR               BasePath,
+    _In_ PSTR               PageCode
     )
 {
     NTSTATUS                Status;
@@ -529,7 +529,7 @@ fail1:
 }
 static NTSTATUS
 __ReadInquiry(
-    _In_ PCHAR      Path,
+    _In_ PSTR       Path,
     _Outptr_ PVOID  *_Inquiry
     )
 {
diff --git a/src/xencrsh/queue=2Ec b/src/xencrsh/queue=2Ec
index 4bd3339=2E=2Ed69838d 100644
--- a/src/xencrsh/queue=2Ec
+++ b/src/xencrsh/queue=2Ec
@@ -198,7 +198,7 @@ QueueRemove(
 VOID
 QueueDebugCallback(
     _In_ PSRB_QUEUE Queue,
-    _In_ PCHAR      Name
+    _In_ PSTR       Name
     )
 {
     LogTrace("=3D=3D=3D=3D=3D> %s\n", Name);
diff --git a/src/xencrsh/queue=2Eh b/src/xencrsh/queue=2Eh
index c53b3e6=2E=2E3926995 100644
--- a/src/xencrsh/queue=2Eh
+++ b/src/xencrsh/queue=2Eh
@@ -79,7 +79,7 @@ QueueRemove(
 VOID
 QueueDebugCallback(
     _In_ PSRB_QUEUE Queue,
-    _In_ PCHAR      Name
+    _In_ PSTR       Name
     );
=20
 #endif // _XENVBD_QUEUE_H
diff --git a/src/xencrsh/store=2Ec b/src/xencrsh/store=2Ec
index fc945a6=2E=2E1f64dfd 100644
--- a/src/xencrsh/store=2Ec
+++ b/src/xencrsh/store=2Ec
@@ -176,7 +176,7 @@ StorePrepareRequest(
=20
 static FORCEINLINE ULONG
 __StoreCopyToRing(
-    _In_ PCHAR                          Data,
+    _In_ PSTR                           Data,
     _In_ ULONG                          Length
     )
 {
@@ -285,7 +285,7 @@ StoreSendRequests(
=20
 static FORCEINLINE ULONG
 __StoreCopyFromRing(
-    _In_ PCHAR                          Data,
+    _In_ PSTR                           Data,
     _In_ ULONG                          Length
     )
 {
@@ -603,8 +603,8 @@ StoreFreeResponse(
 NTSTATUS
 StoreRead(
     _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
-    _In_opt_ PCHAR                      Prefix,
-    _In_ PCHAR                          Node,
+    _In_opt_ PSTR                       Prefix,
+    _In_ PSTR                           Node,
     _Outptr_ PCHAR                      *Value
     )
 {
@@ -676,9 +676,9 @@ fail1:
 NTSTATUS
 StoreWrite(
     _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
-    _In_opt_ PCHAR                      Prefix,
-    _In_ PCHAR                          Node,
-    _In_ PCHAR                          Value
+    _In_opt_ PSTR                       Prefix,
+    _In_ PSTR                           Node,
+    _In_ PSTR                           Value
     )
 {
     STORE_REQUEST                       Request;
@@ -730,9 +730,9 @@ fail1:
 static FORCEINLINE NTSTATUS
 StoreVPrintf(
     _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
-    _In_opt_ PCHAR                      Prefix,
-    _In_ PCHAR                          Node,
-    _In_ const CHAR                     *Format,
+    _In_opt_ PSTR                       Prefix,
+    _In_ PSTR                           Node,
+    _In_ PCSTR                          Format,
     _In_ va_list                        Arguments
     )
 {
@@ -795,9 +795,9 @@ fail1:
 NTSTATUS
 StorePrintf(
     _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
-    _In_opt_ PCHAR                      Prefix,
-    _In_ PCHAR                          Node,
-    _In_ const CHAR                     *Format,
+    _In_opt_ PSTR                       Prefix,
+    _In_ PSTR                           Node,
+    _In_ PCSTR                          Format,
     =2E=2E=2E
     )
 {
@@ -818,8 +818,8 @@ StorePrintf(
 NTSTATUS
 StoreRemove(
     _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
-    _In_opt_ PCHAR                      Prefix,
-    _In_ PCHAR                          Node
+    _In_opt_ PSTR                       Prefix,
+    _In_ PSTR                           Node
     )
 {
     STORE_REQUEST                       Request;
@@ -872,8 +872,8 @@ fail1:
 NTSTATUS
 StoreDirectory(
     _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
-    _In_opt_ PCHAR                      Prefix,
-    _In_ PCHAR                          Node,
+    _In_opt_ PSTR                       Prefix,
+    _In_ PSTR                           Node,
     _Outptr_ PCHAR                      *Value
     )
 {
diff --git a/src/xencrsh/store=2Eh b/src/xencrsh/store=2Eh
index fa9b2ec=2E=2E8722a79 100644
--- a/src/xencrsh/store=2Eh
+++ b/src/xencrsh/store=2Eh
@@ -44,40 +44,40 @@ StoreTerminate();
 NTSTATUS
 StoreRead(
     _In_opt_ PVOID  Transaction,
-    _In_opt_ PCHAR  Prefix,
-    _In_ PCHAR      Node,
+    _In_opt_ PSTR   Prefix,
+    _In_ PSTR       Node,
     _Outptr_ PCHAR  *Value
     );
=20
 NTSTATUS
 StoreWrite(
     _In_opt_ PVOID  Transaction,
-    _In_opt_ PCHAR  Prefix,
-    _In_ PCHAR      Node,
-    _In_ PCHAR      Value
+    _In_opt_ PSTR   Prefix,
+    _In_ PSTR       Node,
+    _In_ PSTR       Value
     );
=20
 NTSTATUS
 StorePrintf(
     _In_opt_ PVOID  Transaction,
-    _In_opt_ PCHAR  Prefix,
-    _In_ PCHAR      Node,
-    _In_ const CHAR *Format,
+    _In_opt_ PSTR   Prefix,
+    _In_ PSTR       Node,
+    _In_ PCSTR      Format,
     =2E=2E=2E                                                  =20
     );
=20
 NTSTATUS
 StoreRemove(                                                    =20
     _In_opt_ PVOID  Transaction,
-    _In_opt_ PCHAR  Prefix,
-    _In_ PCHAR      Node
+    _In_opt_ PSTR   Prefix,
+    _In_ PSTR       Node
     );
=20
 NTSTATUS
 StoreDirectory(                                                    =20
     _In_opt_ PVOID  Transaction,
-    _In_opt_ PCHAR  Prefix,
-    _In_ PCHAR      Node,
+    _In_opt_ PSTR   Prefix,
+    _In_ PSTR       Node,
     _Outptr_ PCHAR  *Value
     );
=20
diff --git a/src/xenvbd/adapter=2Ec b/src/xenvbd/adapter=2Ec
index 360cf50=2E=2Ebeffcff 100644
--- a/src/xenvbd/adapter=2Ec
+++ b/src/xenvbd/adapter=2Ec
@@ -118,7 +118,7 @@ __AdapterFree(
=20
 static FORCEINLINE PANSI_STRING
 __AdapterMultiSzToAnsi(
-    _In_ PCHAR      Buffer
+    _In_ PSTR       Buffer
     )
 {
     PANSI_STRING    Ansi;
@@ -181,7 +181,7 @@ fail1:
=20
 static FORCEINLINE PANSI_STRING
 __AdapterMultiSzToUpcaseAnsi(
-    _In_ PCHAR      Buffer
+    _In_ PSTR       Buffer
     )
 {
     PANSI_STRING    Ansi;
@@ -314,7 +314,7 @@ AdapterGetTarget(
 static FORCEINLINE BOOLEAN
 __AdapterHiddenTarget(
     _In_ PXENVBD_ADAPTER    Adapter,
-    _In_ PCHAR              DeviceId
+    _In_ PSTR               DeviceId
     )
 {
     NTSTATUS                status;
@@ -592,7 +592,7 @@ done:
 static FORCEINLINE BOOLEAN
 __AdapterMatchDistribution(
     _In_ PXENVBD_ADAPTER    Adapter,
-    _In_ PCHAR              Buffer
+    _In_ PSTR               Buffer
     )
 {
     PCHAR                   Vendor;
@@ -2101,7 +2101,7 @@ AdapterHwFindAdapter(
     _In_ PVOID                              DevExt,
     _In_ PVOID                              Context,
     _In_ PVOID                              BusInformation,
-    _In_ PCHAR                              ArgumentString,
+    _In_ PSTR                               ArgumentString,
     _Inout_ PPORT_CONFIGURATION_INFORMATION ConfigInfo,
     _Out_ PBOOLEAN                          Again
     )
diff --git a/src/xenvbd/base64=2Ec b/src/xenvbd/base64=2Ec
index 0d37d22=2E=2Edd8e87a 100644
--- a/src/xenvbd/base64=2Ec
+++ b/src/xenvbd/base64=2Ec
@@ -75,7 +75,7 @@ __DecodeChar(
 static DECLSPEC_NOINLINE CHAR
 __Decode(
     _In_ PUCHAR Dst,
-    _In_ PCHAR  Src,
+    _In_ PSTR   Src,
     _In_ ULONG  Left
     )
 {
@@ -113,7 +113,7 @@ __Decode(
=20
 NTSTATUS
 Base64Decode(
-    _In_ PCHAR      String,
+    _In_ PSTR       String,
     _Outptr_ PVOID  *Binary,
     _Out_ PULONG    Length
     )
diff --git a/src/xenvbd/base64=2Eh b/src/xenvbd/base64=2Eh
index 73159ce=2E=2E1806813 100644
--- a/src/xenvbd/base64=2Eh
+++ b/src/xenvbd/base64=2Eh
@@ -42,7 +42,7 @@ Base64Free(
=20
 extern NTSTATUS
 Base64Decode(
-    _In_ PCHAR      String,
+    _In_ PSTR       String,
     _Outptr_ PVOID  *Binary,
     _Out_ PULONG    Length
     );
diff --git a/src/xenvbd/frontend=2Ec b/src/xenvbd/frontend=2Ec
index 98bedb3=2E=2Ea5e2236 100644
--- a/src/xenvbd/frontend=2Ec
+++ b/src/xenvbd/frontend=2Ec
@@ -365,7 +365,7 @@ static NTSTATUS
 __ReadState(
     _In_ PXENVBD_FRONTEND               Frontend,
     _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
-    _In_ PCHAR                          Path,
+    _In_ PSTR                           Path,
     _Out_ XenbusState                   *State
     )
 {
@@ -630,7 +630,7 @@ FrontendReadFeature(
 static FORCEINLINE BOOLEAN
 FrontendReadDiskFeature(
     _In_ PXENVBD_FRONTEND   Frontend,
-    _In_ PCHAR              Name,
+    _In_ PSTR               Name,
     _In_ PBOOLEAN           Value
     )
 {
@@ -702,7 +702,7 @@ FrontendReadValue32(
 static FORCEINLINE BOOLEAN
 FrontendReadDiskValue32(
     _In_ PXENVBD_FRONTEND   Frontend,
-    _In_ PCHAR              Name,
+    _In_ PSTR               Name,
     _In_ PULONG             Value
 )
 {
@@ -731,7 +731,7 @@ FrontendReadDiskValue32(
 static FORCEINLINE BOOLEAN
 FrontendReadValue64(
     _In_ PXENVBD_FRONTEND   Frontend,
-    _In_ PCHAR              Name,
+    _In_ PSTR               Name,
     _Inout_ PULONG64        Value
     )
 {
@@ -1864,7 +1864,7 @@ fail1:
 NTSTATUS
 FrontendCreate(
     _In_ PXENVBD_TARGET         Target,
-    _In_ PCHAR                  DeviceId,
+    _In_ PSTR                   DeviceId,
     _In_ ULONG                  TargetId,
     _Outptr_ PXENVBD_FRONTEND   *_Frontend
     )
diff --git a/src/xenvbd/frontend=2Eh b/src/xenvbd/frontend=2Eh
index a2d8762=2E=2E1117b8d 100644
--- a/src/xenvbd/frontend=2Eh
+++ b/src/xenvbd/frontend=2Eh
@@ -143,7 +143,7 @@ FrontendReset(
 extern NTSTATUS
 FrontendCreate(
     _In_ PXENVBD_TARGET         Target,
-    _In_ PCHAR                  DeviceId,
+    _In_ PSTR                   DeviceId,
     _In_ ULONG                  TargetId,
     _Outptr_ PXENVBD_FRONTEND   *_Frontend
     );
diff --git a/src/xenvbd/registry=2Ec b/src/xenvbd/registry=2Ec
index 63498ba=2E=2E080b200 100644
--- a/src/xenvbd/registry=2Ec
+++ b/src/xenvbd/registry=2Ec
@@ -143,7 +143,7 @@ fail1:
 _IRQL_requires_(PASSIVE_LEVEL)
 static NTSTATUS
 RegistryOpenRoot(
-    _In_ PWCHAR         Path,
+    _In_ PWSTR          Path,
     _Out_ PHANDLE       Parent,
     _Outptr_ PWCHAR     *ChildPath
     )
@@ -447,7 +447,7 @@ _IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryOpenSubKey(
     _In_ PHANDLE        Key,
-    _In_ PCHAR          Name,
+    _In_ PSTR           Name,
     _In_ ACCESS_MASK    DesiredAccess,
     _Out_ PHANDLE       SubKey
     )
@@ -481,7 +481,7 @@ _IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryCreateSubKey(
     _In_ PHANDLE        Key,
-    _In_ PCHAR          Name,
+    _In_ PSTR           Name,
     _In_ ULONG          Options,
     _Out_ PHANDLE       SubKey
     )
@@ -515,7 +515,7 @@ _IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryDeleteSubKey(
     _In_ PHANDLE        Key,
-    _In_ PCHAR          Name
+    _In_ PSTR           Name
     )
 {
     ANSI_STRING         Ansi;
@@ -763,7 +763,7 @@ _IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryDeleteValue(
     _In_ PHANDLE        Key,
-    _In_ PCHAR          Name
+    _In_ PSTR           Name
     )
 {
     ANSI_STRING         Ansi;
@@ -797,7 +797,7 @@ _IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryQueryDwordValue(
     _In_ HANDLE                     Key,
-    _In_ PCHAR                      Name,
+    _In_ PSTR                       Name,
     _Out_ PULONG                    Value
     )
 {
@@ -868,7 +868,7 @@ _IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryUpdateDwordValue(
     _In_ HANDLE                     Key,
-    _In_ PCHAR                      Name,
+    _In_ PSTR                       Name,
     _In_ ULONG                      Value
     )
 {
@@ -926,7 +926,7 @@ fail1:
 _IRQL_requires_(PASSIVE_LEVEL)
 static PANSI_STRING
 RegistrySzToAnsi(
-    _In_ PWCHAR     Buffer
+    _In_ PWSTR      Buffer
     )
 {
     PANSI_STRING    Ansi;
@@ -966,7 +966,7 @@ fail1:
 _IRQL_requires_(PASSIVE_LEVEL)
 static PANSI_STRING
 RegistryMultiSzToAnsi(
-    _In_ PWCHAR     Buffer
+    _In_ PWSTR      Buffer
     )
 {
     PANSI_STRING    Ansi;
@@ -1030,7 +1030,7 @@ _IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryQuerySzValue(
     _In_ HANDLE                     Key,
-    _In_ PCHAR                      Name,
+    _In_ PSTR                       Name,
     _Out_opt_ PULONG                Type,
     _Outptr_ PANSI_STRING           *Array
     )
@@ -1118,7 +1118,7 @@ _IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryQueryBinaryValue(
     _In_ HANDLE                     Key,
-    _In_ PCHAR                      Name,
+    _In_ PSTR                       Name,
     _Outptr_ PVOID                  *Buffer,
     _Out_ PULONG                    Length
     )
@@ -1204,7 +1204,7 @@ _IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryUpdateBinaryValue(
     _In_ HANDLE                     Key,
-    _In_ PCHAR                      Name,
+    _In_ PSTR                       Name,
     _In_ PVOID                      Buffer,
     _In_ ULONG                      Length
     )
@@ -1319,7 +1319,7 @@ fail1:
 _IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryQuerySystemStartOption(
-    _In_ const CHAR                 *Prefix,
+    _In_ PCSTR                      Prefix,
     _Outptr_ PANSI_STRING           *Value
     )
 {
@@ -1506,7 +1506,7 @@ _IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryUpdateSzValue(
     _In_ HANDLE                     Key,
-    _In_ PCHAR                      Name,
+    _In_ PSTR                       Name,
     _In_ ULONG                      Type,
     _In_ PANSI_STRING               Array
     )
diff --git a/src/xenvbd/registry=2Eh b/src/xenvbd/registry=2Eh
index 3b463c5=2E=2Eb8f80ba 100644
--- a/src/xenvbd/registry=2Eh
+++ b/src/xenvbd/registry=2Eh
@@ -104,7 +104,7 @@ _IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryOpenSubKey(
     _In_ HANDLE         Key,
-    _In_ PCHAR          Name,
+    _In_ PSTR           Name,
     _In_ ACCESS_MASK    DesiredAccess,
     _Out_ PHANDLE       SubKey
     );
@@ -113,7 +113,7 @@ _IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryCreateSubKey(
     _In_ HANDLE     Key,
-    _In_ PCHAR      Name,
+    _In_ PSTR       Name,
     _In_ ULONG      Options,
     _Out_ PHANDLE   SubKey
     );
@@ -122,7 +122,7 @@ _IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryDeleteSubKey(
     _In_ HANDLE Key,
-    _In_ PCHAR  Name
+    _In_ PSTR   Name
     );
=20
 _IRQL_requires_(PASSIVE_LEVEL)
@@ -145,14 +145,14 @@ _IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryDeleteValue(
     _In_ HANDLE Key,
-    _In_ PCHAR  Name
+    _In_ PSTR   Name
     );
=20
 _IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryQueryDwordValue(
     _In_ HANDLE     Key,
-    _In_ PCHAR      Name,
+    _In_ PSTR       Name,
     _Out_ PULONG    Value
     );
=20
@@ -160,7 +160,7 @@ _IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryUpdateDwordValue(
     _In_ HANDLE Key,
-    _In_ PCHAR  Name,
+    _In_ PSTR   Name,
     _In_ ULONG  Value
     );
=20
@@ -168,7 +168,7 @@ _IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryQuerySzValue(
     _In_ HANDLE             Key,
-    _In_ PCHAR              Name,
+    _In_ PSTR               Name,
     _Out_opt_ PULONG        Type,
     _Outptr_ PANSI_STRING   *Array
     );
@@ -177,7 +177,7 @@ _IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryQueryBinaryValue(
     _In_ HANDLE     Key,
-    _In_ PCHAR      Name,
+    _In_ PSTR       Name,
     _Outptr_ PVOID  *Buffer,
     _Out_ PULONG    Length
     );
@@ -186,7 +186,7 @@ _IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryUpdateBinaryValue(
     _In_ HANDLE Key,
-    _In_ PCHAR  Name,
+    _In_ PSTR   Name,
     _In_ PVOID  Buffer,
     _In_ ULONG  Length
     );
@@ -201,7 +201,7 @@ RegistryQueryKeyName(
 _IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryQuerySystemStartOption(
-    _In_ const CHAR         *Prefix,
+    _In_ PCSTR              Prefix,
     _Outptr_ PANSI_STRING   *Option
     );
=20
@@ -219,7 +219,7 @@ _IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryUpdateSzValue(
     _In_ HANDLE         Key,
-    _In_ PCHAR          Name,
+    _In_ PSTR           Name,
     _In_ ULONG          Type,
     _In_ PANSI_STRING   Array
     );
diff --git a/src/xenvbd/target=2Ec b/src/xenvbd/target=2Ec
index 01b2e32=2E=2E0051e90 100644
--- a/src/xenvbd/target=2Ec
+++ b/src/xenvbd/target=2Ec
@@ -142,7 +142,7 @@ TargetSetDevicePowerState(
 VOID
 TargetSetMissing(
     _In_ PXENVBD_TARGET Target,
-    _In_ const CHAR     *Reason
+    _In_ PCSTR          Reason
     )
 {
     KIRQL               Irql;
@@ -1156,7 +1156,7 @@ TargetShutdown(
 VOID
 TargetIssueDeviceEject(
     _In_ PXENVBD_TARGET Target,
-    _In_ const CHAR     *Reason
+    _In_ PCSTR          Reason
     )
 {
     KIRQL               Irql;
@@ -1475,7 +1475,7 @@ TargetD0ToD3(
=20
 static FORCEINLINE ULONG
 __ParseVbd(
-    _In_ PCHAR  DeviceIdStr
+    _In_ PSTR   DeviceIdStr
     )
 {
     ULONG       DeviceId =3D strtoul(DeviceIdStr, NULL, 10);
@@ -1503,7 +1503,7 @@ __ParseVbd(
 NTSTATUS
 TargetCreate(
     _In_ PXENVBD_ADAPTER    Adapter,
-    _In_ PCHAR              DeviceId,
+    _In_ PSTR               DeviceId,
     _Outptr_ PXENVBD_TARGET *_Target
     )
 {
diff --git a/src/xenvbd/target=2Eh b/src/xenvbd/target=2Eh
index 8843367=2E=2Eee24736 100644
--- a/src/xenvbd/target=2Eh
+++ b/src/xenvbd/target=2Eh
@@ -44,7 +44,7 @@ typedef struct _XENVBD_TARGET XENVBD_TARGET, *PXENVBD_TA=
RGET;
 extern NTSTATUS
 TargetCreate(
     _In_ PXENVBD_ADAPTER    Adapter,
-    _In_ PCHAR              DeviceId,
+    _In_ PSTR               DeviceId,
     _Outptr_ PXENVBD_TARGET *_Target
     );
=20
@@ -73,13 +73,13 @@ TargetDispatchPnp(
 extern VOID
 TargetIssueDeviceEject(
     _In_ PXENVBD_TARGET Target,
-    _In_ const CHAR     *Reason
+    _In_ PCSTR          Reason
     );
=20
 extern VOID
 TargetSetMissing(
     _In_ PXENVBD_TARGET Target,
-    _In_ const CHAR     *Reason
+    _In_ PCSTR          Reason
     );
=20
 extern VOID
diff --git a/src/xenvbd/thread=2Ec b/src/xenvbd/thread=2Ec
index b8924b9=2E=2E8eded16 100644
--- a/src/xenvbd/thread=2Ec
+++ b/src/xenvbd/thread=2Ec
@@ -149,7 +149,7 @@ ThreadFunction(
 _IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 _ThreadCreate(
-    _In_ PCHAR                  Name,
+    _In_ PSTR                   Name,
     _In_ XENVBD_THREAD_FUNCTION Function,
     _In_opt_ PVOID              Context,
     _Outptr_ PXENVBD_THREAD     *_Thread
diff --git a/src/xenvbd/thread=2Eh b/src/xenvbd/thread=2Eh
index e6aba66=2E=2Eeaa3cab 100644
--- a/src/xenvbd/thread=2Eh
+++ b/src/xenvbd/thread=2Eh
@@ -42,7 +42,7 @@ typedef NTSTATUS (*XENVBD_THREAD_FUNCTION)(PXENVBD_THREA=
D, PVOID);
 _IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 _ThreadCreate(
-    _In_ PCHAR                  Name,
+    _In_ PSTR                   Name,
     _In_ XENVBD_THREAD_FUNCTION Function,
     _In_opt_ PVOID              Context,
     _Outptr_ PXENVBD_THREAD     *Thread
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.2cc.e2ead2797fd9a9c.1a144e5114b.130e4c0a9b0f082d=---


From win-pv-devel-bounces@lists.xenproject.org Fri Oct 16 13:27:11 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 16 Oct 2026 13:27:11 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1451858.1666717 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHhxn-0006Gi-Lh; Fri, 16 Oct 2026 13:27:11 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1451858.1666717; Fri, 16 Oct 2026 13:27:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHhxn-0006GF-06; Fri, 16 Oct 2026 13:27:11 +0000
Received: by outflank-mailman (input) for mailman id 1451858;
 Fri, 16 Oct 2026 13:27:09 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e51a1e0008425@swg.vates.tech>)
 id 1xHhxk-0006AE-W7
 for win-pv-devel@lists.xenproject.org; Fri, 16 Oct 2026 13:27:08 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xHhxk-001Ytu-CR
 for win-pv-devel@lists.xenproject.org; Fri, 16 Oct 2026 15:27:08 +0200
Received: from [10.42.69.12] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e51a1e0008425@swg.vates.tech>)
 id 6ad22629-2eae-0a2a0a5409dd-0a2a450c86aa-4
 for <win-pv-devel@lists.xenproject.org>; Fri, 16 Oct 2026 15:27:08 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-d25034.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e51a1e0008425@swg.vates.tech>)
 id 6ad2262a-f479-0a2a450c0019-b9ff1c128479-4
 for <win-pv-devel@lists.xenproject.org>; Fri, 16 Oct 2026 15:27:08 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a144e51a1e0008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Fri, 16 Oct 2026 13:27:07 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 0984482A13;
 Fri, 16 Oct 2026 15:27:07 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=lMN2e+GueP5D7pKrx69q7pgKyCKQ3c2hLAAg6fLXRoY=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=Utifq/uJeQRutywYDyyce4Ba6oOAv9jwBNyhqBr8U+G+rJ0W9cMtyEpCxnHdVCkMMscjZSMdT
 MeO35rMxAW48y9DxIbOsetOCAQKupg/1j7aZTYBEgs/FDFG5526uXhZ0aFGrOaK7LB9qpHlbmAi
 ZjHaYGtriF1D145DkAZieJutG9k4PXuBTHeJiJlcy9/NVHL6hOSW5GchNYdmN3kc4Txt68iwvma
 nzQTJvOvHWntVBCATnFSXneMOplMOzGsKrsAQl30USMVkpUHq+TicO0867oOwgowgxm9yu8eC/k
 N9ZJpmAof7DEHFM/UHHcyQ80mgvMhhil6uzBNEwvp4Tw==
X-Zone-Loop: 07d76442b718d8320ef60fbcadfea6e113ac39edb963
x-campaign-type: default
x-transaction-id: a99b24a1-2f5a-4312-b9e0-b0b31cc15685
x-swg-uid: 01-2525c515-35c9-4980-9754-6c8e960f4648
X-Mailer: Sweego
Message-ID:
 <1792157227.8631fc262581453bbf619ec5b2062170.1a144e51a1e0008425@vates.tech>
x-swg-bid: 1792157227.8631fc262581453bbf619ec5b2062170.1a144e51a1e0008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 11/18] Annotate conditional output parameters with _Success_
Date: Fri, 16 Oct 2026 15:26:48 +0200
In-Reply-To: <1792157073.8631fc262581453bbf619ec5b2062170.1a144e2bf7f0008425@vates.tech>
References: <1792157073.8631fc262581453bbf619ec5b2062170.1a144e2bf7f0008425@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.2d3.1c5087fba0adfc2.1a144e51876.f4038f4d86ce4110=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792157227126
X-purgate-ID: tlsNG-d25034/1792157228-770D9A5B-C1744494/0/0
X-purgate-type: clean
X-purgate-size: 4318

---=Part.2d3.1c5087fba0adfc2.1a144e51876.f4038f4d86ce4110=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Some functions that return a success flag only write their output
parameters on success=2E Annotate them with _Success_ so that code analysi=
s
does not assume the outputs are valid on failure=2E

Also fix annotations found on the way: the HW_FIND_ADAPTER Again
parameter is _In_ in storport=2Eh, BufferGet's Pfn is not a pointer, the
xenvbd Base64 __Decode writes up to three bytes, and PdoReadWrite reads
its Srb=2E

No functional change=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xencrsh/buffer=2Ec | 3 ++-
 src/xencrsh/buffer=2Eh | 3 ++-
 src/xencrsh/driver=2Ec | 2 +-
 src/xencrsh/pdo=2Ec    | 2 +-
 src/xenvbd/adapter=2Ec | 2 +-
 src/xenvbd/base64=2Ec  | 7 ++++---
 src/xenvbd/ring=2Ec    | 1 +
 7 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/src/xencrsh/buffer=2Ec b/src/xencrsh/buffer=2Ec
index ef897f1=2E=2E5a0c84d 100644
--- a/src/xencrsh/buffer=2Ec
+++ b/src/xencrsh/buffer=2Ec
@@ -98,10 +98,11 @@ BufferTerminate(
     __Buffer=2ENext =3D 0;
 }
=20
+_Success_(return)
 BOOLEAN
 BufferGet(
     _Out_ PULONG        BufferId,
-    _Outptr_ PFN_NUMBER *Pfn
+    _Out_ PFN_NUMBER    *Pfn
     )
 {
     ULONG               BufId;
diff --git a/src/xencrsh/buffer=2Eh b/src/xencrsh/buffer=2Eh
index 39df51d=2E=2E86294ac 100644
--- a/src/xencrsh/buffer=2Eh
+++ b/src/xencrsh/buffer=2Eh
@@ -45,10 +45,11 @@ extern VOID
 BufferTerminate(
     );
=20
+_Success_(return)
 extern BOOLEAN
 BufferGet(
     _Out_ PULONG        BufferId,
-    _Outptr_ PFN_NUMBER *Pfn
+    _Out_ PFN_NUMBER    *Pfn
     );
=20
 extern VOID
diff --git a/src/xencrsh/driver=2Ec b/src/xencrsh/driver=2Ec
index 70589b1=2E=2E5874dea 100644
--- a/src/xencrsh/driver=2Ec
+++ b/src/xencrsh/driver=2Ec
@@ -198,7 +198,7 @@ HwFindAdapter(
     _In_ PVOID                              BusInformation,
     _In_ PSTR                               ArgumentString,
     _Inout_ PPORT_CONFIGURATION_INFORMATION ConfigInfo,
-    _Out_ PBOOLEAN                          Again
+    _In_ PBOOLEAN                           Again
     )
 {
     UNREFERENCED_PARAMETER(Context);
diff --git a/src/xencrsh/pdo=2Ec b/src/xencrsh/pdo=2Ec
index d130fc8=2E=2Eb0c77bc 100644
--- a/src/xencrsh/pdo=2Ec
+++ b/src/xencrsh/pdo=2Ec
@@ -768,7 +768,7 @@ __ValidateSectors(
 static BOOLEAN
 PdoReadWrite(
     _Inout_ PXENVBD_PDO         Pdo,
-    _Out_ PSCSI_REQUEST_BLOCK   Srb
+    _Inout_ PSCSI_REQUEST_BLOCK Srb
     )
 {
     NTSTATUS                    Status;
diff --git a/src/xenvbd/adapter=2Ec b/src/xenvbd/adapter=2Ec
index 5dafe07=2E=2E5809af7 100644
--- a/src/xenvbd/adapter=2Ec
+++ b/src/xenvbd/adapter=2Ec
@@ -2103,7 +2103,7 @@ AdapterHwFindAdapter(
     _In_ PVOID                              BusInformation,
     _In_ PSTR                               ArgumentString,
     _Inout_ PPORT_CONFIGURATION_INFORMATION ConfigInfo,
-    _Out_ PBOOLEAN                          Again
+    _In_ PBOOLEAN                           Again
     )
 {
     UNREFERENCED_PARAMETER(DevExt);
diff --git a/src/xenvbd/base64=2Ec b/src/xenvbd/base64=2Ec
index df398aa=2E=2E7f20c40 100644
--- a/src/xenvbd/base64=2Ec
+++ b/src/xenvbd/base64=2Ec
@@ -72,11 +72,12 @@ __DecodeChar(
     return 0xFF;
 }
=20
+_Success_(return >=3D 0)
 static DECLSPEC_NOINLINE CHAR
 __Decode(
-    _Out_ PUCHAR    Dst,
-    _In_ PSTR       Src,
-    _In_ ULONG      Left
+    _Out_writes_(3) PUCHAR      Dst,
+    _In_reads_(Left) PSTR       Src,
+    _In_ ULONG                  Left
     )
 {
     UCHAR           Values[4];
diff --git a/src/xenvbd/ring=2Ec b/src/xenvbd/ring=2Ec
index cd5093c=2E=2E1d8df78 100644
--- a/src/xenvbd/ring=2Ec
+++ b/src/xenvbd/ring=2Ec
@@ -619,6 +619,7 @@ BlkifRingQueueRequests(
     }
 }
=20
+_Success_(return)
 static BOOLEAN
 BlkifRingPrepareSegment(
     _In_ PXENVBD_BLKIF_RING BlkifRing,
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.2d3.1c5087fba0adfc2.1a144e51876.f4038f4d86ce4110=---


From win-pv-devel-bounces@lists.xenproject.org Fri Oct 16 13:27:11 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 16 Oct 2026 13:27:11 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1451859.1666719 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHhxn-0006Hi-OS; Fri, 16 Oct 2026 13:27:11 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1451859.1666719; Fri, 16 Oct 2026 13:27:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHhxn-0006Gf-2u; Fri, 16 Oct 2026 13:27:11 +0000
Received: by outflank-mailman (input) for mailman id 1451859;
 Fri, 16 Oct 2026 13:27:09 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e51c0a0008425@swg.vates.tech>)
 id 1xHhxl-0006Af-9w
 for win-pv-devel@lists.xenproject.org; Fri, 16 Oct 2026 13:27:09 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xHhxk-001Ytu-Mm
 for win-pv-devel@lists.xenproject.org; Fri, 16 Oct 2026 15:27:08 +0200
Received: from [10.42.69.12] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e51c0a0008425@swg.vates.tech>)
 id 6ad22629-2eae-0a2a0a5409dd-0a2a450c86aa-8
 for <win-pv-devel@lists.xenproject.org>; Fri, 16 Oct 2026 15:27:08 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-d25034.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e51c0a0008425@swg.vates.tech>)
 id 6ad2262a-f479-0a2a450c0019-b9ff1c128479-5
 for <win-pv-devel@lists.xenproject.org>; Fri, 16 Oct 2026 15:27:08 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a144e51c0a0008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Fri, 16 Oct 2026 13:27:08 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 8266082B3E;
 Fri, 16 Oct 2026 15:27:07 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=69384d0Bi+O6KwRy16svimqCXOydnnKEwwZPBgOdD/w=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=OZ0X89aQHZLLiW8v6mSl5D5LJWEnGO2PB7o8p0Slz4hfxuSJKEx6aHPTk/W1shHNN1U3xkR6l
 8qnwrTFGD5yc3KHcwnONsSRCjxp27b2011tj+VQo+iQgEXSXGEzs6ldLilyc6PG2PghkDXC5Xpj
 AwbeqcHeRmjs2+aNmdKV117nnNikQ1qctSmcwkUsUet0VadnO12Rx9VBXdNyv2APPRTowXHFdjM
 K2+w2ZuMI+6NGRyPqOfbCdcYGyvTKw2JyDQbHhDHw1Pn6asCA3cZw+7omnG3cFs+l6f60+70sJm
 RV8SnA6VIhROTNCqvyIvN8BecvsKsotKqySVAqpbZQ4w==
X-Zone-Loop: 296aa358af060fff78a8566ab09ddcfc07ea91ea56c7
x-campaign-type: default
x-transaction-id: c0758387-b4f3-4354-906b-863600c96070
x-swg-uid: 01-adace085-5d0f-4b19-adc2-b0093d7cf347
X-Mailer: Sweego
Message-ID:
 <1792157228.8631fc262581453bbf619ec5b2062170.1a144e51c0a0008425@vates.tech>
x-swg-bid: 1792157228.8631fc262581453bbf619ec5b2062170.1a144e51c0a0008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 13/18] Fix inconsistent annotations
Date: Fri, 16 Oct 2026 15:26:50 +0200
In-Reply-To: <1792157073.8631fc262581453bbf619ec5b2062170.1a144e2bf7f0008425@vates.tech>
References: <1792157073.8631fc262581453bbf619ec5b2062170.1a144e2bf7f0008425@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.2d5.dd674e408fb607a1.1a144e51a67.aad2fc0a9fa05c0=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792157227623
X-purgate-ID: tlsNG-d25034/1792157228-76CDBA5B-9F3362F9/0/0
X-purgate-type: clean
X-purgate-size: 4305

---=Part.2d5.dd674e408fb607a1.1a144e51a67.aad2fc0a9fa05c0=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Warnings are raised on some functions that have inconsistent annotations wi=
th
types defined in wdm=2Eh=2E
We trust wdm=2Eh annotations and annotate them with _Use_decl_annotations_=
 to
sync the annotations=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xencrsh/driver=2Ec | 13 +++++++------
 src/xenvbd/adapter=2Ec | 13 +++++++------
 src/xenvbd/driver=2Ec  | 10 ++++++----
 src/xenvbd/ring=2Ec    |  5 +++--
 4 files changed, 23 insertions(+), 18 deletions(-)

diff --git a/src/xencrsh/driver=2Ec b/src/xencrsh/driver=2Ec
index 5874dea=2E=2E743d942 100644
--- a/src/xencrsh/driver=2Ec
+++ b/src/xencrsh/driver=2Ec
@@ -191,14 +191,15 @@ HwAdapterControl(
=20
 HW_FIND_ADAPTER     HwFindAdapter;
=20
+_Use_decl_annotations_
 ULONG
 HwFindAdapter(
-    _In_ PVOID                              HwDeviceExtension,
-    _In_ PVOID                              Context,
-    _In_ PVOID                              BusInformation,
-    _In_ PSTR                               ArgumentString,
-    _Inout_ PPORT_CONFIGURATION_INFORMATION ConfigInfo,
-    _In_ PBOOLEAN                           Again
+    PVOID                           HwDeviceExtension,
+    PVOID                           Context,
+    PVOID                           BusInformation,
+    PSTR                            ArgumentString,
+    PPORT_CONFIGURATION_INFORMATION ConfigInfo,
+    PBOOLEAN                        Again
     )
 {
     UNREFERENCED_PARAMETER(Context);
diff --git a/src/xenvbd/adapter=2Ec b/src/xenvbd/adapter=2Ec
index 5809af7=2E=2E7158db0 100644
--- a/src/xenvbd/adapter=2Ec
+++ b/src/xenvbd/adapter=2Ec
@@ -2096,14 +2096,15 @@ AdapterHwAdapterControl(
=20
 HW_FIND_ADAPTER     AdapterHwFindAdapter;
=20
+_Use_decl_annotations_
 ULONG
 AdapterHwFindAdapter(
-    _In_ PVOID                              DevExt,
-    _In_ PVOID                              Context,
-    _In_ PVOID                              BusInformation,
-    _In_ PSTR                               ArgumentString,
-    _Inout_ PPORT_CONFIGURATION_INFORMATION ConfigInfo,
-    _In_ PBOOLEAN                           Again
+    PVOID                           DevExt,
+    PVOID                           Context,
+    PVOID                           BusInformation,
+    PSTR                            ArgumentString,
+    PPORT_CONFIGURATION_INFORMATION ConfigInfo,
+    PBOOLEAN                        Again
     )
 {
     UNREFERENCED_PARAMETER(DevExt);
diff --git a/src/xenvbd/driver=2Ec b/src/xenvbd/driver=2Ec
index 1b6b191=2E=2E44c660d 100644
--- a/src/xenvbd/driver=2Ec
+++ b/src/xenvbd/driver=2Ec
@@ -114,10 +114,11 @@ DriverDispatchPower(
 _Dispatch_type_(IRP_MJ_PNP)
 DRIVER_DISPATCH             DispatchPnp;
=20
+_Use_decl_annotations_
 NTSTATUS=20
 DispatchPnp(
-    _In_ PDEVICE_OBJECT DeviceObject,
-    _In_ PIRP           Irp
+    PDEVICE_OBJECT  DeviceObject,
+    PIRP            Irp
     )
 {
     if (Driver=2EAdapter =3D=3D NULL)
@@ -129,10 +130,11 @@ DispatchPnp(
 _Dispatch_type_(IRP_MJ_POWER)
 DRIVER_DISPATCH             DispatchPower;
=20
+_Use_decl_annotations_
 NTSTATUS=20
 DispatchPower(
-    _In_ PDEVICE_OBJECT DeviceObject,
-    _In_ PIRP           Irp
+    PDEVICE_OBJECT  DeviceObject,
+    PIRP            Irp
     )
 {
     if (Driver=2EAdapter =3D=3D NULL)
diff --git a/src/xenvbd/ring=2Ec b/src/xenvbd/ring=2Ec
index 1d8df78=2E=2E31c8b65 100644
--- a/src/xenvbd/ring=2Ec
+++ b/src/xenvbd/ring=2Ec
@@ -1611,10 +1611,11 @@ BlkifRingReleaseLock(
=20
 KSERVICE_ROUTINE    BlkifRingInterrupt;
=20
+_Use_decl_annotations_
 BOOLEAN
 BlkifRingInterrupt(
-    _In_ PKINTERRUPT    InterruptObject,
-    _In_ PVOID          Argument
+    PKINTERRUPT         InterruptObject,
+    PVOID               Argument
     )
 {
     PXENVBD_BLKIF_RING  BlkifRing =3D Argument;
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.2d5.dd674e408fb607a1.1a144e51a67.aad2fc0a9fa05c0=---


From win-pv-devel-bounces@lists.xenproject.org Fri Oct 16 13:27:11 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 16 Oct 2026 13:27:11 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1451860.1666720 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHhxn-0006IT-Nh; Fri, 16 Oct 2026 13:27:11 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1451860.1666720; Fri, 16 Oct 2026 13:27:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHhxn-0006HK-6I; Fri, 16 Oct 2026 13:27:11 +0000
Received: by outflank-mailman (input) for mailman id 1451860;
 Fri, 16 Oct 2026 13:27:09 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e51cfa0008425@swg.vates.tech>)
 id 1xHhxl-0006BN-Q1
 for win-pv-devel@lists.xenproject.org; Fri, 16 Oct 2026 13:27:09 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xHhxl-00BNGh-63
 for win-pv-devel@lists.xenproject.org; Fri, 16 Oct 2026 15:27:09 +0200
Received: from [10.42.69.1] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e51cfa0008425@swg.vates.tech>)
 id 6ad2262a-e002-0a2a0a5209dd-0a2a4501e862-4
 for <win-pv-devel@lists.xenproject.org>; Fri, 16 Oct 2026 15:27:08 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e51cfa0008425@swg.vates.tech>)
 id 6ad2262a-5984-0a2a45010019-b9ff1c228703-5
 for <win-pv-devel@lists.xenproject.org>; Fri, 16 Oct 2026 15:27:08 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a144e51cfa0008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Fri, 16 Oct 2026 13:27:08 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id BD10382A13;
 Fri, 16 Oct 2026 15:27:07 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=8VsymTp6UKCKVrV0VwrSu0iavkZ/EfPA5oNjabSQgEM=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=jDbsAZQtjShOiVpuqaDwM2loqZ8UlY/ZPHw/LXc2R+0BfH+lw92Prx+aSu3JHmLnfctZFl22b
 BNtTHShGntyNvKewuv9DtfsS8ha8goMr1XWtXGeZzffpw0GuToQb5U7Wbk0YCDQ6+f09UAaW270
 7hypwF3qIZ8gmplvwXNvb/AfsEPidHUWOqS9Elt1VpInFD/qt8rpzfvBcckgkd2D/XzJVI8PExB
 lmcmllpieMRAR/0nHrTzLeLPTbOcMwozl5t+utNKlt/O7bY0fXUHSETyAD3vNTUD9YfKlwRI0Yr
 TwlLkvjaV2+EzxEwwbGirIAI8+kWrEig/PzOt0eTiTfQ==
X-Zone-Loop: 5ab7f20572d04b41ec4bb438f77a830dca9ea88a7136
x-campaign-type: default
x-transaction-id: 5167bf3f-af39-44e6-bd5c-2454e6855e0c
x-swg-uid: 01-4a1957bf-e3ab-4d4c-889a-3361f7da485c
X-Mailer: Sweego
Message-ID:
 <1792157228.8631fc262581453bbf619ec5b2062170.1a144e51cfa0008425@vates.tech>
x-swg-bid: 1792157228.8631fc262581453bbf619ec5b2062170.1a144e51cfa0008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 14/18] xenvbd: Fix the Interface annotation of __AdapterQueryInterface
Date: Fri, 16 Oct 2026 15:26:51 +0200
In-Reply-To: <1792157073.8631fc262581453bbf619ec5b2062170.1a144e2bf7f0008425@vates.tech>
References: <1792157073.8631fc262581453bbf619ec5b2062170.1a144e2bf7f0008425@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.2d6.5cdbfabe43f74f2b.1a144e51b59.a4e9b9c8d8f2ba1c=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792157227865
X-purgate-ID: tlsNG-d62444/1792157228-BFA6E757-7E56D7C6/0/0
X-purgate-type: clean
X-purgate-size: 2238

---=Part.2d6.5cdbfabe43f74f2b.1a144e51b59.a4e9b9c8d8f2ba1c=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Interface is a buffer of Size bytes filled by the lower driver, and it
is left untouched when an optional interface is not supported=2E Annotate
it _Inout_updates_bytes_(Size) instead of _Out_=2E
No functional change=2E

Assisted-by: claude:claude-opus-5=2E5
Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xenvbd/adapter=2Ec | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/src/xenvbd/adapter=2Ec b/src/xenvbd/adapter=2Ec
index 7158db0=2E=2E5b787d1 100644
--- a/src/xenvbd/adapter=2Ec
+++ b/src/xenvbd/adapter=2Ec
@@ -1225,19 +1225,19 @@ __AdapterSetBootEmulated(
 _IRQL_requires_(PASSIVE_LEVEL)
 static NTSTATUS
 __AdapterQueryInterface(
-    _In_ PXENVBD_ADAPTER    Adapter,
-    _In_ const GUID         *Guid,
-    _In_ ULONG              Version,
-    _Out_ PINTERFACE        Interface,
-    _In_ ULONG              Size,
-    _In_ BOOLEAN            Optional
+    _In_ PXENVBD_ADAPTER                    Adapter,
+    _In_ const GUID                         *Guid,
+    _In_ ULONG                              Version,
+    _Inout_updates_bytes_(Size) PINTERFACE  Interface,
+    _In_ ULONG                              Size,
+    _In_ BOOLEAN                            Optional
     )
 {
-    KEVENT                  Event;
-    IO_STATUS_BLOCK         StatusBlock;
-    PIRP                    Irp;
-    PIO_STACK_LOCATION      StackLocation;
-    NTSTATUS                status;
+    KEVENT                                  Event;
+    IO_STATUS_BLOCK                         StatusBlock;
+    PIRP                                    Irp;
+    PIO_STACK_LOCATION                      StackLocation;
+    NTSTATUS                                status;
=20
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, PASSIVE_LEVEL);
=20
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.2d6.5cdbfabe43f74f2b.1a144e51b59.a4e9b9c8d8f2ba1c=---


From win-pv-devel-bounces@lists.xenproject.org Fri Oct 16 13:27:12 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 16 Oct 2026 13:27:12 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1451861.1666726 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHhxo-0006PW-4s; Fri, 16 Oct 2026 13:27:12 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1451861.1666726; Fri, 16 Oct 2026 13:27:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHhxn-0006OP-TP; Fri, 16 Oct 2026 13:27:11 +0000
Received: by outflank-mailman (input) for mailman id 1451861;
 Fri, 16 Oct 2026 13:27:10 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e51b100008425@swg.vates.tech>)
 id 1xHhxl-0006Cz-V6
 for win-pv-devel@lists.xenproject.org; Fri, 16 Oct 2026 13:27:09 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xHhxl-00BNGh-Bc
 for win-pv-devel@lists.xenproject.org; Fri, 16 Oct 2026 15:27:09 +0200
Received: from [10.42.69.6] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e51b100008425@swg.vates.tech>)
 id 6ad22623-e002-0a2a0a5209dd-0a2a4506e9d2-24
 for <win-pv-devel@lists.xenproject.org>; Fri, 16 Oct 2026 15:27:09 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-16d1c6.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e51b100008425@swg.vates.tech>)
 id 6ad2262c-195a-0a2a45060019-b9ff1c12ac23-3
 for <win-pv-devel@lists.xenproject.org>; Fri, 16 Oct 2026 15:27:08 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a144e51b100008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Fri, 16 Oct 2026 13:27:07 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 46DB2827B9;
 Fri, 16 Oct 2026 15:27:07 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=eV0h8359xpncbXjvT8blqfORNNuQw6q9DWBYAnYDqCU=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=M6Drsr5bx97tBO3Vqr6i7+E2YHl9sjD2+CJlQJxErS3IbThCK4r6rNoGZf0wgiAjWePty1XTs
 8+2TWj3HIvE1tGkZCUuzfbRyW7D4/PGWmbP0GVyX9VcpBeatw9ary3pQmqDmskjixtBdMpMKpl/
 9nK0KPWmhS05oyr0aTQCtOTyQppyG2FShS8U6m8DvjDCxNbM1kzRsp27nI8ioxFMTeXUwO5qlJi
 lFNUfiG8q/3F8FcpU3QqXTq/Vk+Win5llcxB7GVXOglODVIfE3y9KIUDvTAw6NAMKTqF5WqAU5O
 okoq/uqIUOPA3z+sWgiSOetFkHiSzwza0IF/G3Hm8YLA==
X-Zone-Loop: be5831270c00768e741441f1b4c5c34b7d8b0c0106ad
x-campaign-type: default
x-transaction-id: 1453ffb3-b09c-47f0-8055-a0547875337b
x-swg-uid: 01-d61f0e6f-3a0e-4eac-b705-cc7933a56085
X-Mailer: Sweego
Message-ID:
 <1792157227.8631fc262581453bbf619ec5b2062170.1a144e51b100008425@vates.tech>
x-swg-bid: 1792157227.8631fc262581453bbf619ec5b2062170.1a144e51b100008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 12/18] Fix annotations in macros
Date: Fri, 16 Oct 2026 15:26:49 +0200
In-Reply-To: <1792157073.8631fc262581453bbf619ec5b2062170.1a144e2bf7f0008425@vates.tech>
References: <1792157073.8631fc262581453bbf619ec5b2062170.1a144e2bf7f0008425@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.2d4.2064dc01654fa1c5.1a144e51972.4138dad187ed4160=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792157227379
X-purgate-ID: tlsNG-16d1c6/1792157229-FD40B77B-CCC4C640/0/0
X-purgate-type: clean
X-purgate-size: 3059

---=Part.2d4.2064dc01654fa1c5.1a144e51972.4138dad187ed4160=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

- Some annotations in macros were missed by mechanical conversion=2E
Fix them=2E
- TargetGetMissing() function in xenvbd:target=2Eh call functions with sid=
e
effects (KeSpinLock|Unlock) annotated as _Inout_ on Target=2E
Fix this by explicitly defining TargetGetMissing() with the correct annota=
tion=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xenvbd/adapter=2Eh  | 4 ++--
 src/xenvbd/frontend=2Eh | 2 +-
 src/xenvbd/target=2Eh   | 8 ++++++--
 3 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/src/xenvbd/adapter=2Eh b/src/xenvbd/adapter=2Eh
index 41ad012=2E=2Ef319ae1 100644
--- a/src/xenvbd/adapter=2Eh
+++ b/src/xenvbd/adapter=2Eh
@@ -49,8 +49,8 @@ typedef struct _XENVBD_ADAPTER XENVBD_ADAPTER, *PXENVBD_=
ADAPTER;
 #define ADAPTER_GET_INTERFACE(_name, _type)     \
 extern VOID                                     \
 AdapterGet ## _name ## Interface(               \
-    IN  PXENVBD_ADAPTER Adapter,                \
-    OUT _type           _name ## Interface      \
+    _In_ PXENVBD_ADAPTER Adapter,               \
+    _Out_ _type           _name ## Interface    \
     );
=20
 ADAPTER_GET_INTERFACE(Cache, PXENBUS_CACHE_INTERFACE)
diff --git a/src/xenvbd/frontend=2Eh b/src/xenvbd/frontend=2Eh
index bb2c57f=2E=2E8b0ad8c 100644
--- a/src/xenvbd/frontend=2Eh
+++ b/src/xenvbd/frontend=2Eh
@@ -156,7 +156,7 @@ FrontendDestroy(
 #define FRONTEND_GET_PROPERTY(_name, _type)     \
 extern _type                                    \
 FrontendGet ## _name ## (                       \
-    IN  PXENVBD_FRONTEND    Frontend            \
+    _In_ PXENVBD_FRONTEND    Frontend           \
     );
=20
 FRONTEND_GET_PROPERTY(Target, PXENVBD_TARGET)
diff --git a/src/xenvbd/target=2Eh b/src/xenvbd/target=2Eh
index e7cf2c6=2E=2E05447ab 100644
--- a/src/xenvbd/target=2Eh
+++ b/src/xenvbd/target=2Eh
@@ -123,10 +123,15 @@ TargetShutdown(
     _In_ PXENVBD_SRBEXT SrbExt
     );
=20
+extern BOOLEAN
+TargetGetMissing(
+    _Inout_ PXENVBD_TARGET  Target
+    );
+
 #define TARGET_GET_PROPERTY(_name, _type)       \
 extern _type                                    \
 TargetGet ## _name ## (                         \
-    IN  PXENVBD_TARGET  Target                  \
+    _In_ PXENVBD_TARGET  Target                 \
     );
=20
 TARGET_GET_PROPERTY(Adapter, PXENVBD_ADAPTER)
@@ -135,7 +140,6 @@ TARGET_GET_PROPERTY(TargetId, ULONG)
 TARGET_GET_PROPERTY(DeviceId, ULONG)
 TARGET_GET_PROPERTY(Removable, BOOLEAN)
 TARGET_GET_PROPERTY(DevicePnpState, DEVICE_PNP_STATE)
-TARGET_GET_PROPERTY(Missing, BOOLEAN)
=20
 #undef TARGET_GET_PROPERTY
=20
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.2d4.2064dc01654fa1c5.1a144e51972.4138dad187ed4160=---


From win-pv-devel-bounces@lists.xenproject.org Fri Oct 16 13:27:12 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 16 Oct 2026 13:27:12 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1451862.1666730 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHhxo-0006Qf-AL; Fri, 16 Oct 2026 13:27:12 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1451862.1666730; Fri, 16 Oct 2026 13:27:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHhxo-0006QH-3n; Fri, 16 Oct 2026 13:27:12 +0000
Received: by outflank-mailman (input) for mailman id 1451862;
 Fri, 16 Oct 2026 13:27:10 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e51ddf0008425@swg.vates.tech>)
 id 1xHhxm-0006E2-0e
 for win-pv-devel@lists.xenproject.org; Fri, 16 Oct 2026 13:27:10 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xHhxl-001Ytu-Da
 for win-pv-devel@lists.xenproject.org; Fri, 16 Oct 2026 15:27:09 +0200
Received: from [10.42.69.12] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e51ddf0008425@swg.vates.tech>)
 id 6ad22629-2eae-0a2a0a5409dd-0a2a450c86aa-10
 for <win-pv-devel@lists.xenproject.org>; Fri, 16 Oct 2026 15:27:09 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-d25034.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e51ddf0008425@swg.vates.tech>)
 id 6ad2262a-f479-0a2a450c0019-b9ff1c128479-6
 for <win-pv-devel@lists.xenproject.org>; Fri, 16 Oct 2026 15:27:09 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a144e51ddf0008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Fri, 16 Oct 2026 13:27:08 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 02E3F827B9;
 Fri, 16 Oct 2026 15:27:07 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=yE7lMoKOa81sdVCQwW7a6AQM4ludhPF+RwqrRWm9f8k=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=SzWfRA9lAVblwmcsocq5BdcwWeXW1K0QXc91PCtPqAmE4hedw9v53jhVqyHyjtr9z6Zn7l/e0
 pWXBvmdbFlDHH0ZQKNC4yM8qSIRqvsz2HgC0jOh1P7hEKMGT7wDuTr9STj1A9Wn1XQsc7lRHfef
 w6lRfxYCyCNouEfVZ/HGkLoeAWHJU0ckjV3w0jnEANMte3E++5BnCwvvBBxkYK0brSyEoSJ90Im
 0XyrCo1sWJJLdKu8XlwE5MzSD/5lOru/fJq/UaA+aBkHL3GFsJ4BAKNNZqLbiS5EHAzdrH+RPkN
 SssA988o8EP5o2Bp+sI73tHOBYC1PximJKUiSIwlo11A==
X-Zone-Loop: 0f6f9f1649e724a8014004d92ecf4b65a76c66edc8ec
x-campaign-type: default
x-transaction-id: 334f854e-f05f-400a-8304-78393177bb99
x-swg-uid: 01-c4980686-a50c-4666-92a6-fa4c5ec2edc9
X-Mailer: Sweego
Message-ID:
 <1792157228.8631fc262581453bbf619ec5b2062170.1a144e51ddf0008425@vates.tech>
x-swg-bid: 1792157228.8631fc262581453bbf619ec5b2062170.1a144e51ddf0008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 15/18] xenvbd: Accept NULL in RegistryOpenKey, RegistryCreateKey and __RingFree
Date: Fri, 16 Oct 2026 15:26:52 +0200
In-Reply-To: <1792157073.8631fc262581453bbf619ec5b2062170.1a144e2bf7f0008425@vates.tech>
References: <1792157073.8631fc262581453bbf619ec5b2062170.1a144e2bf7f0008425@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.2d7.e61626f56a003840.1a144e51c45.21546b9e4e223243=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792157228101
X-purgate-ID: tlsNG-d25034/1792157229-028DDA5B-DA906D15/0/0
X-purgate-type: clean
X-purgate-size: 2707

---=Part.2d7.e61626f56a003840.1a144e51c45.21546b9e4e223243=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

A NULL Parent is how RegistryOpenKey and RegistryCreateKey open a key by
its full path, and __RingFree already returns early on a NULL buffer
(BlkifRingCreate relies on this after it moves Path to the ring)=2E
Annotate these parameters _In_opt_ instead of _In_=2E
No functional change=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xenvbd/registry=2Ec | 4 ++--
 src/xenvbd/registry=2Eh | 4 ++--
 src/xenvbd/ring=2Ec     | 2 +-
 3 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/src/xenvbd/registry=2Ec b/src/xenvbd/registry=2Ec
index d949460=2E=2Ea11d562 100644
--- a/src/xenvbd/registry=2Ec
+++ b/src/xenvbd/registry=2Ec
@@ -113,7 +113,7 @@ RegistryTeardown(
 _IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryOpenKey(
-    _In_ HANDLE             Parent,
+    _In_opt_ HANDLE         Parent,
     _In_ PUNICODE_STRING    Path,
     _In_ ACCESS_MASK        DesiredAccess,
     _Out_ PHANDLE           Key
@@ -177,7 +177,7 @@ fail1:
 _IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryCreateKey(
-    _In_ HANDLE             Root,
+    _In_opt_ HANDLE         Root,
     _In_ PUNICODE_STRING    Path,
     _In_ ULONG              Options,
     _Out_ PHANDLE           Key
diff --git a/src/xenvbd/registry=2Eh b/src/xenvbd/registry=2Eh
index 557ab2c=2E=2E654c919 100644
--- a/src/xenvbd/registry=2Eh
+++ b/src/xenvbd/registry=2Eh
@@ -49,7 +49,7 @@ RegistryTeardown(
 _IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryOpenKey(
-    _In_ HANDLE             Parent,
+    _In_opt_ HANDLE         Parent,
     _In_ PUNICODE_STRING    Path,
     _In_ ACCESS_MASK        DesiredAccess,
     _Out_ PHANDLE           Key
@@ -58,7 +58,7 @@ RegistryOpenKey(
 _IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryCreateKey(
-    _In_ HANDLE             Parent,
+    _In_opt_ HANDLE         Parent,
     _In_ PUNICODE_STRING    Path,
     _In_ ULONG              Options,
     _Out_ PHANDLE           Key
diff --git a/src/xenvbd/ring=2Ec b/src/xenvbd/ring=2Ec
index 31c8b65=2E=2E339679b 100644
--- a/src/xenvbd/ring=2Ec
+++ b/src/xenvbd/ring=2Ec
@@ -140,7 +140,7 @@ __RingAllocate(
=20
 static FORCEINLINE VOID
 __RingFree(
-    _In_ PVOID  Buffer
+    _In_opt_ PVOID  Buffer
     )
 {
     if (Buffer)
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.2d7.e61626f56a003840.1a144e51c45.21546b9e4e223243=---


From win-pv-devel-bounces@lists.xenproject.org Fri Oct 16 13:27:12 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 16 Oct 2026 13:27:12 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1451863.1666733 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHhxo-0006Ro-I1; Fri, 16 Oct 2026 13:27:12 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1451863.1666733; Fri, 16 Oct 2026 13:27:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHhxo-0006Qq-6d; Fri, 16 Oct 2026 13:27:12 +0000
Received: by outflank-mailman (input) for mailman id 1451863;
 Fri, 16 Oct 2026 13:27:10 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e50f6d0008425@swg.vates.tech>)
 id 1xHhxl-0006Bg-R7
 for win-pv-devel@lists.xenproject.org; Fri, 16 Oct 2026 13:27:10 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xHhxl-00BNGh-7L
 for win-pv-devel@lists.xenproject.org; Fri, 16 Oct 2026 15:27:09 +0200
Received: from [10.42.69.8] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e50f6d0008425@swg.vates.tech>)
 id 6ad2260f-e002-0a2a0a5209dd-0a2a4508d1b8-44
 for <win-pv-devel@lists.xenproject.org>; Fri, 16 Oct 2026 15:27:09 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-c1860d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e50f6d0008425@swg.vates.tech>)
 id 6ad2262a-f659-0a2a45080019-b9ff1c12968d-3
 for <win-pv-devel@lists.xenproject.org>; Fri, 16 Oct 2026 15:27:06 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a144e50f6d0008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Fri, 16 Oct 2026 13:27:04 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 419BD82239;
 Fri, 16 Oct 2026 15:27:04 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=50KMgokiRLUQbP92e0JFCYATzFr45hxyZFd9YJqDZOE=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=a/DsBeDdLXAGmQ7s8eycCKeCQrjjpnpQ9eKTXY/3XY5KFTN1a8uKlL4XqTBsClxC7ycO144Ax
 jYu3uSBQgEhQzwr/QAmDIoI/xmT/o5vC3hZjay5HeCb0jul37+wCW5txEo6zO+04D9Sd/F0Ojmd
 EjWUNNhZbMQRcl87BN2vuZJjObpjq/JzzFRRUAVOrln0SWGNtqzDRkg+L7KgXug8s3KKsXWJOi9
 rv1cbX7Lx5MFRhmpfivu9dS2DlDL/G/Owk5lSXd59DlMpqCUwEBxoIeKkxjiJlr4DCbarr6vbNB
 53P4zEab/Y7G2Lnkng9Slwm4ox5SrpAUuyE0PG4njqhw==
X-Zone-Loop: 9efe7649ff228851d47af627efa48b7262444d24dade
x-campaign-type: default
x-transaction-id: 5c5bb902-c75d-46f2-b5b0-c949f5228e37
x-swg-uid: 01-40164347-2b62-4d20-b15a-3a52fc616405
X-Mailer: Sweego
Message-ID:
 <1792157224.8631fc262581453bbf619ec5b2062170.1a144e50f6d0008425@vates.tech>
x-swg-bid: 1792157224.8631fc262581453bbf619ec5b2062170.1a144e50f6d0008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 02/18] Sync shared headers with xenbus
Date: Fri, 16 Oct 2026 15:26:39 +0200
In-Reply-To: <1792157073.8631fc262581453bbf619ec5b2062170.1a144e2bf7f0008425@vates.tech>
References: <1792157073.8631fc262581453bbf619ec5b2062170.1a144e2bf7f0008425@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.2ca.bee731b950e2b74.1a144e50de7.7ef97b955ae765ae=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792157224424
X-purgate-ID: tlsNG-c1860d/1792157226-D437587B-606B3535/0/0
X-purgate-type: clean
X-purgate-size: 61731

---=Part.2ca.bee731b950e2b74.1a144e50de7.7ef97b955ae765ae=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

xenbus is already correctly annotated so we sync the interfaces headers=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 include/cache_interface=2Eh    | 130 ++++++++++++++---------------
 include/debug_interface=2Eh    |  88 ++++++++++----------
 include/emulated_interface=2Eh | 137 +++++++++++++++++++-----------
 include/evtchn_interface=2Eh   | 136 +++++++++++++++---------------
 include/gnttab_interface=2Eh   | 148 ++++++++++++++++-----------------
 include/store_interface=2Eh    | 156 +++++++++++++++++------------------
 include/suspend_interface=2Eh  |  80 +++++++++---------
 include/unplug_interface=2Eh   |  20 ++---
 8 files changed, 469 insertions(+), 426 deletions(-)

diff --git a/include/cache_interface=2Eh b/include/cache_interface=2Eh
index 97fa315=2E=2Ee5f4ce9 100644
--- a/include/cache_interface=2Eh
+++ b/include/cache_interface=2Eh
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -51,20 +51,20 @@ typedef struct _XENBUS_CACHE    XENBUS_CACHE, *PXENBUS=
_CACHE;
     \brief Acquire a reference to the CACHE interface
=20
     \param Interface The interface header
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_CACHE_ACQUIRE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_CACHE_RELEASE
     \brief Release a reference to the CACHE interface
=20
     \param Interface The interface header
-*/ =20
+*/
 typedef VOID
 (*XENBUS_CACHE_RELEASE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_CACHE_CTOR
@@ -79,8 +79,8 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENBUS_CACHE_CTOR)(
-    IN  PVOID   Argument,
-    IN  PVOID   Object
+    _In_ PVOID  Argument,
+    _In_ PVOID  Object
     );
=20
 /*! \typedef XENBUS_CACHE_DTOR
@@ -94,8 +94,8 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENBUS_CACHE_DTOR)(
-    IN  PVOID   Argument,
-    IN  PVOID   Object
+    _In_ PVOID  Argument,
+    _In_ PVOID  Object
     );
=20
 /*! \typedef XENBUS_CACHE_ACQUIRE_LOCK
@@ -108,7 +108,7 @@ typedef VOID
 */
 typedef VOID
 (*XENBUS_CACHE_ACQUIRE_LOCK)(
-    IN  PVOID   Argument
+    _In_ PVOID  Argument
     );
=20
 /*! \typedef XENBUS_CACHE_RELEASE_LOCK
@@ -121,21 +121,21 @@ typedef VOID
 */
 typedef VOID
 (*XENBUS_CACHE_RELEASE_LOCK)(
-    IN  PVOID   Argument
+    _In_ PVOID  Argument
     );
=20
 typedef NTSTATUS
 (*XENBUS_CACHE_CREATE_V1)(
-    IN  PINTERFACE                  Interface,
-    IN  const CHAR                  *Name,
-    IN  ULONG                       Size,
-    IN  ULONG                       Reservation,
-    IN  XENBUS_CACHE_CTOR           Ctor,
-    IN  XENBUS_CACHE_DTOR           Dtor,
-    IN  XENBUS_CACHE_ACQUIRE_LOCK   AcquireLock,
-    IN  XENBUS_CACHE_RELEASE_LOCK   ReleaseLock,
-    IN  PVOID                       Argument OPTIONAL,
-    OUT PXENBUS_CACHE               *Cache
+    _In_ PINTERFACE                 Interface,
+    _In_ PCSTR                      Name,
+    _In_ ULONG                      Size,
+    _In_ ULONG                      Reservation,
+    _In_ XENBUS_CACHE_CTOR          Ctor,
+    _In_ XENBUS_CACHE_DTOR          Dtor,
+    _In_ XENBUS_CACHE_ACQUIRE_LOCK  AcquireLock,
+    _In_ XENBUS_CACHE_RELEASE_LOCK  ReleaseLock,
+    _In_opt_ PVOID                  Argument,
+    _Outptr_ PXENBUS_CACHE          *Cache
     );
=20
 /*! \typedef XENBUS_CACHE_CREATE
@@ -155,20 +155,20 @@ typedef NTSTATUS
=20
     If a non-zero \a Reservation is specified then this method will fail
     unless that number of objects can be immediately created=2E
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_CACHE_CREATE)(
-    IN  PINTERFACE                  Interface,
-    IN  const CHAR                  *Name,
-    IN  ULONG                       Size,
-    IN  ULONG                       Reservation,
-    IN  ULONG                       Cap,
-    IN  XENBUS_CACHE_CTOR           Ctor,
-    IN  XENBUS_CACHE_DTOR           Dtor,
-    IN  XENBUS_CACHE_ACQUIRE_LOCK   AcquireLock,
-    IN  XENBUS_CACHE_RELEASE_LOCK   ReleaseLock,
-    IN  PVOID                       Argument OPTIONAL,
-    OUT PXENBUS_CACHE               *Cache
+    _In_ PINTERFACE                 Interface,
+    _In_ PCSTR                      Name,
+    _In_ ULONG                      Size,
+    _In_ ULONG                      Reservation,
+    _In_ ULONG                      Cap,
+    _In_ XENBUS_CACHE_CTOR          Ctor,
+    _In_ XENBUS_CACHE_DTOR          Dtor,
+    _In_ XENBUS_CACHE_ACQUIRE_LOCK  AcquireLock,
+    _In_ XENBUS_CACHE_RELEASE_LOCK  ReleaseLock,
+    _In_opt_ PVOID                  Argument,
+    _Outptr_ PXENBUS_CACHE          *Cache
     );
=20
 /*! \typedef XENBUS_CACHE_GET
@@ -181,9 +181,9 @@ typedef NTSTATUS
 */
 typedef PVOID
 (*XENBUS_CACHE_GET)(
-    IN  PINTERFACE      Interface,
-    IN  PXENBUS_CACHE   Cache,
-    IN  BOOLEAN         Locked
+    _In_ PINTERFACE     Interface,
+    _In_ PXENBUS_CACHE  Cache,
+    _In_ BOOLEAN        Locked
     );
=20
 /*! \typedef XENBUS_CACHE_PUT
@@ -196,10 +196,10 @@ typedef PVOID
 */
 typedef VOID
 (*XENBUS_CACHE_PUT)(
-    IN  PINTERFACE      Interface,
-    IN  PXENBUS_CACHE   Cache,
-    IN  PVOID           Object,
-    IN  BOOLEAN         Locked
+    _In_ PINTERFACE     Interface,
+    _In_ PXENBUS_CACHE  Cache,
+    _In_ PVOID          Object,
+    _In_ BOOLEAN        Locked
     );
=20
 /*! \typedef XENBUS_CACHE_DESTROY
@@ -212,12 +212,12 @@ typedef VOID
 */
 typedef VOID
 (*XENBUS_CACHE_DESTROY)(
-    IN  PINTERFACE      Interface,
-    IN  PXENBUS_CACHE   Cache
+    _In_ PINTERFACE     Interface,
+    _In_ PXENBUS_CACHE  Cache
     );
=20
 // {A98DFD78-416A-4949-92A5-E084F2F4B44E}
-DEFINE_GUID(GUID_XENBUS_CACHE_INTERFACE,=20
+DEFINE_GUID(GUID_XENBUS_CACHE_INTERFACE,
 0xa98dfd78, 0x416a, 0x4949, 0x92, 0xa5, 0xe0, 0x84, 0xf2, 0xf4, 0xb4, 0x4=
e);
=20
 /*! \struct _XENBUS_CACHE_INTERFACE_V1
diff --git a/include/debug_interface=2Eh b/include/debug_interface=2Eh
index 79729c7=2E=2E251902c 100644
--- a/include/debug_interface=2Eh
+++ b/include/debug_interface=2Eh
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -50,20 +50,20 @@ typedef struct _XENBUS_DEBUG_CALLBACK   XENBUS_DEBUG_C=
ALLBACK, *PXENBUS_DEBUG_CA
     \brief Acquire a reference to the DEBUG interface
=20
     \param Interface The interface header
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_DEBUG_ACQUIRE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_DEBUG_RELEASE
     \brief Release a reference to the DEBUG interface
=20
     \param Interface The interface header
-*/ =20
+*/
 typedef VOID
 (*XENBUS_DEBUG_RELEASE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_DEBUG_FUNCTION
@@ -74,11 +74,11 @@ typedef VOID
     part of pre-crash logging
=20
     Debug callback functions are always invoked with IRQL =3D=3D HIGH_LEV=
EL
-*/ =20
+*/
 typedef VOID
 (*XENBUS_DEBUG_FUNCTION)(
-    IN  PVOID   Argument,
-    IN  BOOLEAN Crashing
+    _In_ PVOID      Argument,
+    _In_ BOOLEAN    Crashing
     );
=20
 /*! \typedef XENBUS_DEBUG_REGISTER
@@ -89,14 +89,14 @@ typedef VOID
     \param Function The callback function
     \param Argument An optional context argument passed to the callback
     \param Callback A pointer to a callback handle to be initialized
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_DEBUG_REGISTER)(
-    IN  PINTERFACE              Interface,
-    IN  PCHAR                   Prefix,
-    IN  XENBUS_DEBUG_FUNCTION   Function,
-    IN  PVOID                   Argument OPTIONAL,
-    OUT PXENBUS_DEBUG_CALLBACK  *Callback
+    _In_ PINTERFACE                 Interface,
+    _In_ PSTR                       Prefix,
+    _In_ XENBUS_DEBUG_FUNCTION      Function,
+    _In_opt_ PVOID                  Argument,
+    _Outptr_ PXENBUS_DEBUG_CALLBACK *Callback
     );
=20
 /*! \typedef XENBUS_DEBUG_PRINTF
@@ -108,11 +108,11 @@ typedef NTSTATUS
=20
     This method must only be invoked from the context of a debug
     callback
-*/ =20
+*/
 typedef VOID
 (*XENBUS_DEBUG_PRINTF)(
-    IN  PINTERFACE              Interface,
-    IN  const CHAR              *Format,
+    _In_ PINTERFACE             Interface,
+    _In_ PCSTR                  Format,
     =2E=2E=2E
     );
=20
@@ -124,8 +124,8 @@ typedef VOID
 */
 typedef VOID
 (*XENBUS_DEBUG_DEREGISTER)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_DEBUG_CALLBACK  Callback
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_DEBUG_CALLBACK Callback
     );
=20
 /*! \typedef XENBUS_DEBUG_TRIGGER
@@ -137,12 +137,12 @@ typedef VOID
 */
 typedef VOID
 (*XENBUS_DEBUG_TRIGGER)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_DEBUG_CALLBACK  Callback OPTIONAL
+    _In_ PINTERFACE                 Interface,
+    _In_opt_ PXENBUS_DEBUG_CALLBACK Callback
     );
=20
 // {0DF600AE-6B20-4227-BF94-03DA9A26A114}
-DEFINE_GUID(GUID_XENBUS_DEBUG_INTERFACE,=20
+DEFINE_GUID(GUID_XENBUS_DEBUG_INTERFACE,
 0xdf600ae, 0x6b20, 0x4227, 0xbf, 0x94, 0x3, 0xda, 0x9a, 0x26, 0xa1, 0x14)=
;
=20
 /*! \struct _XENBUS_DEBUG_INTERFACE_V1
diff --git a/include/emulated_interface=2Eh b/include/emulated_interface=
=2Eh
index ad5975d=2E=2E7d47707 100644
--- a/include/emulated_interface=2Eh
+++ b/include/emulated_interface=2Eh
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -42,27 +42,37 @@
=20
 #ifndef _WINDLL
=20
+/*! \typedef XENBUS_EMULATED_ACTIVATION_STATUS
+    \brief If the device was force-activated, force-deactivated or
+           otherwise=2E
+*/
+typedef enum _XENBUS_EMULATED_ACTIVATION_STATUS {
+    XENBUS_EMULATED_ACTIVATE_NEUTRAL =3D 0,
+    XENBUS_EMULATED_FORCE_ACTIVATED =3D 1,
+    XENBUS_EMULATED_FORCE_DEACTIVATED =3D 2,
+} XENBUS_EMULATED_ACTIVATION_STATUS, *PXENBUS_EMULATED_ACTIVATION_STATUS;
+
 /*! \typedef XENFILT_EMULATED_ACQUIRE
     \brief Acquire a reference to the EMULATED interface
=20
     \param Interface The interface header
-*/ =20
+*/
 typedef NTSTATUS
 (*XENFILT_EMULATED_ACQUIRE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENFILT_EMULATED_RELEASE
     \brief Release a reference to the EMULATED interface
=20
     \param Interface The interface header
-*/ =20
+*/
 typedef VOID
 (*XENFILT_EMULATED_RELEASE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
-/*! \typedef XENFILT_EMULATED_IS_DEVICE_PRESENT
+/*! \typedef XENFILT_EMULATED_IS_DEVICE_PRESENT_V1
     \brief Determine whether a given device is present in the VM
=20
     \param Interface The interface header
@@ -71,20 +81,41 @@ typedef VOID
            NULL to match any device instance
     \return TRUE if the specified device is present in the system or
     FALSE if it is not
-*/ =20
+*/
+typedef BOOLEAN
+(*XENFILT_EMULATED_IS_DEVICE_PRESENT_V1)(
+    _In_ PVOID      Context,
+    _In_ PSTR       DeviceID,
+    _In_opt_ PSTR   InstanceID
+    );
+
+/*! \typedef XENFILT_EMULATED_IS_DEVICE_PRESENT
+    \brief Determine whether a given device is present in the VM
+
+    \param Interface The interface header
+    \param DeviceID The DeviceID of the device, or NULL to query the forc=
e-
+           activated device
+    \param InstanceID The (un-prefixed) InstanceID of the device or
+           NULL to match any device instance
+    \param IsForceActivated If the device was force-activated, force-deac=
tivated
+           or otherwise=2E
+    \return TRUE if the specified device is present in the system or
+            FALSE if it is not
+*/
 typedef BOOLEAN
 (*XENFILT_EMULATED_IS_DEVICE_PRESENT)(
-    IN  PVOID   Context,
-    IN  PCHAR   DeviceID,
-    IN  PCHAR   InstanceID OPTIONAL
+    _In_ PVOID                                      Context,
+    _In_opt_ PSTR                                   DeviceID,
+    _In_opt_ PSTR                                   InstanceID,
+    _Out_opt_ PXENBUS_EMULATED_ACTIVATION_STATUS    IsForceActivated
     );
=20
 typedef BOOLEAN
 (*XENFILT_EMULATED_IS_DISK_PRESENT_V1)(
-    IN  PVOID   Context,
-    IN  ULONG   Controller,
-    IN  ULONG   Target,
-    IN  ULONG   Lun
+    _In_ PVOID  Context,
+    _In_ ULONG  Controller,
+    _In_ ULONG  Target,
+    _In_ ULONG  Lun
     );
 /*! \typedef XENFILT_EMULATED_IS_DISK_PRESENT
     \brief Determine whether a given emulated disk is present in the VM
@@ -94,15 +125,15 @@ typedef BOOLEAN
                  emulated device is aliasing
     \return TRUE if an emulated disk aliasing the specified paravirtual
     disk index is present in the system or FALSE if not
-*/ =20
+*/
 typedef BOOLEAN
 (*XENFILT_EMULATED_IS_DISK_PRESENT)(
-    IN  PVOID   Context,
-    IN  ULONG   Index
+    _In_ PVOID  Context,
+    _In_ ULONG  Index
     );
=20
 // {959027A1-FCCE-4E78-BCF4-637384F499C5}
-DEFINE_GUID(GUID_XENFILT_EMULATED_INTERFACE,=20
+DEFINE_GUID(GUID_XENFILT_EMULATED_INTERFACE,
 0x959027a1, 0xfcce, 0x4e78, 0xbc, 0xf4, 0x63, 0x73, 0x84, 0xf4, 0x99, 0xc=
5);
=20
 /*! \struct _XENFILT_EMULATED_INTERFACE_V1
@@ -110,11 +141,11 @@ DEFINE_GUID(GUID_XENFILT_EMULATED_INTERFACE,
     \ingroup interfaces
 */
 struct _XENFILT_EMULATED_INTERFACE_V1 {
-    INTERFACE                           Interface;
-    XENFILT_EMULATED_ACQUIRE            EmulatedAcquire;
-    XENFILT_EMULATED_RELEASE            EmulatedRelease;
-    XENFILT_EMULATED_IS_DEVICE_PRESENT  EmulatedIsDevicePresent;
-    XENFILT_EMULATED_IS_DISK_PRESENT_V1 EmulatedIsDiskPresentVersion1;
+    INTERFACE                               Interface;
+    XENFILT_EMULATED_ACQUIRE                EmulatedAcquire;
+    XENFILT_EMULATED_RELEASE                EmulatedRelease;
+    XENFILT_EMULATED_IS_DEVICE_PRESENT_V1   EmulatedIsDevicePresentVersio=
n1;
+    XENFILT_EMULATED_IS_DISK_PRESENT_V1     EmulatedIsDiskPresentVersion1=
;
 };
=20
 /*! \struct _XENFILT_EMULATED_INTERFACE_V2
@@ -122,6 +153,18 @@ struct _XENFILT_EMULATED_INTERFACE_V1 {
     \ingroup interfaces
 */
 struct _XENFILT_EMULATED_INTERFACE_V2 {
+    INTERFACE                               Interface;
+    XENFILT_EMULATED_ACQUIRE                EmulatedAcquire;
+    XENFILT_EMULATED_RELEASE                EmulatedRelease;
+    XENFILT_EMULATED_IS_DEVICE_PRESENT_V1   EmulatedIsDevicePresentVersio=
n1;
+    XENFILT_EMULATED_IS_DISK_PRESENT        EmulatedIsDiskPresent;
+};
+
+/*! \struct _XENFILT_EMULATED_INTERFACE_V3
+    \brief EMULATED interface version 3
+    \ingroup interfaces
+*/
+struct _XENFILT_EMULATED_INTERFACE_V3 {
     INTERFACE                           Interface;
     XENFILT_EMULATED_ACQUIRE            EmulatedAcquire;
     XENFILT_EMULATED_RELEASE            EmulatedRelease;
@@ -129,7 +172,7 @@ struct _XENFILT_EMULATED_INTERFACE_V2 {
     XENFILT_EMULATED_IS_DISK_PRESENT    EmulatedIsDiskPresent;
 };
=20
-typedef struct _XENFILT_EMULATED_INTERFACE_V2 XENFILT_EMULATED_INTERFACE,=
 *PXENFILT_EMULATED_INTERFACE;
+typedef struct _XENFILT_EMULATED_INTERFACE_V3 XENFILT_EMULATED_INTERFACE,=
 *PXENFILT_EMULATED_INTERFACE;
=20
 /*! \def XENFILT_EMULATED
     \brief Macro at assist in method invocation
@@ -140,6 +183,6 @@ typedef struct _XENFILT_EMULATED_INTERFACE_V2 XENFILT_=
EMULATED_INTERFACE, *PXENF
 #endif  // _WINDLL
=20
 #define XENFILT_EMULATED_INTERFACE_VERSION_MIN  1
-#define XENFILT_EMULATED_INTERFACE_VERSION_MAX  2
+#define XENFILT_EMULATED_INTERFACE_VERSION_MAX  3
=20
 #endif  // _XENFILT_EMULATED_INTERFACE_H
diff --git a/include/evtchn_interface=2Eh b/include/evtchn_interface=2Eh
index ef67487=2E=2E5c46f97 100644
--- a/include/evtchn_interface=2Eh
+++ b/include/evtchn_interface=2Eh
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -54,27 +54,27 @@ typedef enum _XENBUS_EVTCHN_TYPE {
=20
 /*! \typedef XENBUS_EVTCHN_CHANNEL
     \brief Event channel handle
-*/ =20
+*/
 typedef struct _XENBUS_EVTCHN_CHANNEL XENBUS_EVTCHN_CHANNEL, *PXENBUS_EVT=
CHN_CHANNEL;
=20
 /*! \typedef XENBUS_EVTCHN_ACQUIRE
     \brief Acquire a reference to the EVTCHN interface
=20
     \param Interface The interface header
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_EVTCHN_ACQUIRE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_EVTCHN_RELEASE
     \brief Release a reference to the EVTCHN interface
=20
     \param Interface The interface header
-*/ =20
+*/
 typedef VOID
 (*XENBUS_EVTCHN_RELEASE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_EVTCHN_OPEN
@@ -105,13 +105,13 @@ typedef VOID
     \param Number The relative number of the CPU that should handle the V=
IRQ
=20
     \return Event channel handle
-*/ =20
+*/
 typedef PXENBUS_EVTCHN_CHANNEL
 (*XENBUS_EVTCHN_OPEN)(
-    IN  PINTERFACE          Interface,
-    IN  XENBUS_EVTCHN_TYPE  Type,
-    IN  PKSERVICE_ROUTINE   Function,
-    IN  PVOID               Argument OPTIONAL,
+    _In_ PINTERFACE         Interface,
+    _In_ XENBUS_EVTCHN_TYPE Type,
+    _In_ PKSERVICE_ROUTINE  Function,
+    _In_opt_ PVOID          Argument,
     =2E=2E=2E
     );
=20
@@ -125,17 +125,17 @@ typedef PXENBUS_EVTCHN_CHANNEL
 */
 typedef NTSTATUS
 (*XENBUS_EVTCHN_BIND)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_EVTCHN_CHANNEL  Channel,
-    IN  USHORT                  Group,
-    IN  UCHAR                   Number
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_EVTCHN_CHANNEL Channel,
+    _In_ USHORT                 Group,
+    _In_ UCHAR                  Number
     );
=20
 typedef VOID
 (*XENBUS_EVTCHN_UNMASK_V4)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_EVTCHN_CHANNEL  Channel,
-    IN  BOOLEAN                 InCallback
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_EVTCHN_CHANNEL Channel,
+    _In_ BOOLEAN                InCallback
     );
=20
 /*! \typedef XENBUS_EVTCHN_UNMASK
@@ -148,16 +148,16 @@ typedef VOID
 */
 typedef BOOLEAN
 (*XENBUS_EVTCHN_UNMASK)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_EVTCHN_CHANNEL  Channel,
-    IN  BOOLEAN                 InCallback,
-    IN  BOOLEAN                 Force
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_EVTCHN_CHANNEL Channel,
+    _In_ BOOLEAN                InCallback,
+    _In_ BOOLEAN                Force
     );
=20
 typedef VOID
 (*XENBUS_EVTCHN_SEND_V1)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_EVTCHN_CHANNEL  Channel
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_EVTCHN_CHANNEL Channel
     );
=20
 /*! \typedef XENBUS_EVTCHN_SEND
@@ -168,11 +168,11 @@ typedef VOID
=20
     \param Interface The interface header
     \param Channel The channel handle
-*/ =20
+*/
 typedef VOID
 (*XENBUS_EVTCHN_SEND)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_EVTCHN_CHANNEL  Channel
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_EVTCHN_CHANNEL Channel
     );
=20
 /*! \typedef XENBUS_EVTCHN_TRIGGER
@@ -180,11 +180,11 @@ typedef VOID
=20
     \param Interface The interface header
     \param Channel The channel handle
-*/ =20
+*/
 typedef VOID
 (*XENBUS_EVTCHN_TRIGGER)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_EVTCHN_CHANNEL  Channel
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_EVTCHN_CHANNEL Channel
     );
=20
 /*! \typedef XENBUS_EVTCHN_GET_COUNT
@@ -196,15 +196,15 @@ typedef VOID
 */
 typedef ULONG
 (*XENBUS_EVTCHN_GET_COUNT)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_EVTCHN_CHANNEL  Channel
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_EVTCHN_CHANNEL Channel
     );
=20
 typedef NTSTATUS
 (*XENBUS_EVTCHN_WAIT_V5)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_EVTCHN_CHANNEL  Channel,
-    IN  PLARGE_INTEGER          Timeout OPTIONAL
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_EVTCHN_CHANNEL Channel,
+    _In_opt_ PLARGE_INTEGER     Timeout
     );
=20
 /*! \typedef XENBUS_EVTCHN_WAIT
@@ -217,10 +217,10 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENBUS_EVTCHN_WAIT)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_EVTCHN_CHANNEL  Channel,
-    IN  ULONG                   Count,
-    IN  PLARGE_INTEGER          Timeout OPTIONAL
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_EVTCHN_CHANNEL Channel,
+    _In_ ULONG                  Count,
+    _In_opt_ PLARGE_INTEGER     Timeout
     );
=20
 /*! \typedef XENBUS_EVTCHN_GET_PORT
@@ -229,11 +229,11 @@ typedef NTSTATUS
     \param Interface The interface header
     \param Channel The channel handle
     \return The port number
-*/ =20
+*/
 typedef ULONG
 (*XENBUS_EVTCHN_GET_PORT)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_EVTCHN_CHANNEL  Channel
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_EVTCHN_CHANNEL Channel
     );
=20
 /*! \typedef XENBUS_EVTCHN_CLOSE
@@ -241,15 +241,15 @@ typedef ULONG
=20
     \param Interface The interface header
     \param Channel The channel handle
-*/ =20
+*/
 typedef VOID
 (*XENBUS_EVTCHN_CLOSE)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_EVTCHN_CHANNEL  Channel
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_EVTCHN_CHANNEL Channel
     );
=20
 // {BE2440AC-1098-4150-AF4D-452FADCEF923}
-DEFINE_GUID(GUID_XENBUS_EVTCHN_INTERFACE,=20
+DEFINE_GUID(GUID_XENBUS_EVTCHN_INTERFACE,
 0xbe2440ac, 0x1098, 0x4150, 0xaf, 0x4d, 0x45, 0x2f, 0xad, 0xce, 0xf9, 0x2=
3);
=20
 /*! \struct _XENBUS_EVTCHN_INTERFACE_V5
diff --git a/include/gnttab_interface=2Eh b/include/gnttab_interface=2Eh
index 4fc8f1f=2E=2E92a95a7 100644
--- a/include/gnttab_interface=2Eh
+++ b/include/gnttab_interface=2Eh
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -57,31 +57,31 @@ typedef struct _XENBUS_GNTTAB_CACHE XENBUS_GNTTAB_CACH=
E, *PXENBUS_GNTTAB_CACHE;
     \brief Acquire a reference to the GNTTAB interface
=20
     \param Interface The interface header
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_GNTTAB_ACQUIRE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_GNTTAB_RELEASE
     \brief Release a reference to the GNTTAB interface
=20
     \param Interface The interface header
-*/ =20
+*/
 typedef VOID
 (*XENBUS_GNTTAB_RELEASE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 typedef NTSTATUS
 (*XENBUS_GNTTAB_CREATE_CACHE_V1)(
-    IN  PINTERFACE                  Interface,
-    IN  const CHAR                  *Name,
-    IN  ULONG                       Reservation,
-    IN  XENBUS_CACHE_ACQUIRE_LOCK   AcquireLock,
-    IN  XENBUS_CACHE_RELEASE_LOCK   ReleaseLock,
-    IN  PVOID                       Argument OPTIONAL,
-    OUT PXENBUS_GNTTAB_CACHE        *Cache
+    _In_ PINTERFACE                 Interface,
+    _In_ PCSTR                      Name,
+    _In_ ULONG                      Reservation,
+    _In_ XENBUS_CACHE_ACQUIRE_LOCK  AcquireLock,
+    _In_ XENBUS_CACHE_RELEASE_LOCK  ReleaseLock,
+    _In_opt_ PVOID                  Argument,
+    _Outptr_ PXENBUS_GNTTAB_CACHE   *Cache
     );
=20
 /*! \typedef XENBUS_GNTTAB_CREATE_CACHE
@@ -95,17 +95,17 @@ typedef NTSTATUS
     \param ReleaseLock A callback invoked to release the spinlock
     \param Argument An optional context argument passed to the callbacks
     \param Cache A pointer to a grant table cache handle to be initialize=
d
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_GNTTAB_CREATE_CACHE)(
-    IN  PINTERFACE                  Interface,
-    IN  const CHAR                  *Name,
-    IN  ULONG                       Reservation,
-    IN  ULONG                       Cap,
-    IN  XENBUS_CACHE_ACQUIRE_LOCK   AcquireLock,
-    IN  XENBUS_CACHE_RELEASE_LOCK   ReleaseLock,
-    IN  PVOID                       Argument OPTIONAL,
-    OUT PXENBUS_GNTTAB_CACHE        *Cache
+    _In_ PINTERFACE                 Interface,
+    _In_ PCSTR                      Name,
+    _In_ ULONG                      Reservation,
+    _In_ ULONG                      Cap,
+    _In_ XENBUS_CACHE_ACQUIRE_LOCK  AcquireLock,
+    _In_ XENBUS_CACHE_RELEASE_LOCK  ReleaseLock,
+    _In_opt_ PVOID                  Argument,
+    _Outptr_ PXENBUS_GNTTAB_CACHE   *Cache
     );
=20
 /*! \typedef XENBUS_GNTTAB_PERMIT_FOREIGN_ACCESS
@@ -123,13 +123,13 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENBUS_GNTTAB_PERMIT_FOREIGN_ACCESS)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_GNTTAB_CACHE        Cache,
-    IN  BOOLEAN                     Locked,
-    IN  USHORT                      Domain,
-    IN  PFN_NUMBER                  Pfn,
-    IN  BOOLEAN                     ReadOnly,
-    OUT PXENBUS_GNTTAB_ENTRY        *Entry
+    _In_ PINTERFACE                 Interface,
+    _In_ PXENBUS_GNTTAB_CACHE       Cache,
+    _In_ BOOLEAN                    Locked,
+    _In_ USHORT                     Domain,
+    _In_ PFN_NUMBER                 Pfn,
+    _In_ BOOLEAN                    ReadOnly,
+    _Outptr_ PXENBUS_GNTTAB_ENTRY   *Entry
     );
=20
 /*! \typedef XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS
@@ -143,10 +143,10 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_GNTTAB_CACHE        Cache,
-    IN  BOOLEAN                     Locked,
-    IN  PXENBUS_GNTTAB_ENTRY        Entry
+    _In_ PINTERFACE                 Interface,
+    _In_ PXENBUS_GNTTAB_CACHE       Cache,
+    _In_ BOOLEAN                    Locked,
+    _In_ PXENBUS_GNTTAB_ENTRY       Entry
     );
=20
 /*! \typedef XENBUS_GNTTAB_GET_REFERENCE
@@ -155,11 +155,11 @@ typedef NTSTATUS
     \param Interface The interface header
     \param Entry The grant table entry handle
     \return The reference number
-*/ =20
+*/
 typedef ULONG
 (*XENBUS_GNTTAB_GET_REFERENCE)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_GNTTAB_ENTRY        Entry
+    _In_ PINTERFACE                 Interface,
+    _In_ PXENBUS_GNTTAB_ENTRY       Entry
     );
=20
 /*! \typedef XENBUS_GNTTAB_QUERY_REFERENCE
@@ -172,10 +172,10 @@ typedef ULONG
 */
 typedef NTSTATUS
 (*XENBUS_GNTTAB_QUERY_REFERENCE)(
-    IN  PINTERFACE  Interface,
-    IN  ULONG       Reference,
-    OUT PPFN_NUMBER Pfn OPTIONAL,
-    OUT PBOOLEAN    ReadOnly OPTIONAL
+    _In_ PINTERFACE         Interface,
+    _In_ ULONG              Reference,
+    _Out_opt_ PPFN_NUMBER   Pfn,
+    _Out_opt_ PBOOLEAN      ReadOnly
     );
=20
 #define XENBUS_GNTTAB_CONSOLE_REFERENCE 0
@@ -189,12 +189,12 @@ typedef NTSTATUS
     \param Cache The grant table cache handle
=20
     All grant table entries must have been revoked prior to destruction
-    of the cache=20
-*/ =20
+    of the cache
+*/
 typedef VOID
 (*XENBUS_GNTTAB_DESTROY_CACHE)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_GNTTAB_CACHE    Cache
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_GNTTAB_CACHE   Cache
     );
=20
 /*! \typedef XENBUS_GNTTAB_MAP_FOREIGN_PAGES
@@ -210,12 +210,12 @@ typedef VOID
=20
 typedef NTSTATUS
 (*XENBUS_GNTTAB_MAP_FOREIGN_PAGES)(
-    IN  PINTERFACE              Interface,
-    IN  USHORT                  Domain,
-    IN  ULONG                   NumberPages,
-    IN  PULONG                  References,
-    IN  BOOLEAN                 ReadOnly,
-    OUT PHYSICAL_ADDRESS        *Address
+    _In_ PINTERFACE             Interface,
+    _In_ USHORT                 Domain,
+    _In_ ULONG                  NumberPages,
+    _In_ PULONG                 References,
+    _In_ BOOLEAN                ReadOnly,
+    _Out_ PHYSICAL_ADDRESS      *Address
     );
=20
 /*! \typedef XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES
@@ -226,12 +226,12 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES)(
-    IN  PINTERFACE              Interface,
-    IN  PHYSICAL_ADDRESS        Address
+    _In_ PINTERFACE             Interface,
+    _In_ PHYSICAL_ADDRESS       Address
     );
=20
 // {763679C5-E5C2-4A6D-8B88-6BB02EC42D8E}
-DEFINE_GUID(GUID_XENBUS_GNTTAB_INTERFACE,=20
+DEFINE_GUID(GUID_XENBUS_GNTTAB_INTERFACE,
 0x763679c5, 0xe5c2, 0x4a6d, 0x8b, 0x88, 0x6b, 0xb0, 0x2e, 0xc4, 0x2d, 0x8=
e);
=20
 /*! \struct _XENBUS_GNTTAB_INTERFACE_V2
diff --git a/include/store_interface=2Eh b/include/store_interface=2Eh
index ca883bd=2E=2E208be0e 100644
--- a/include/store_interface=2Eh
+++ b/include/store_interface=2Eh
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -72,20 +72,20 @@ typedef struct _XENBUS_STORE_PERMISSION {
     \brief Acquire a reference to the STORE interface
=20
     \param Interface The interface header
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_ACQUIRE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_STORE_RELEASE
     \brief Release a reference to the STORE interface
=20
     \param Interface The interface header
-*/ =20
+*/
 typedef VOID
 (*XENBUS_STORE_RELEASE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_STORE_FREE
@@ -93,11 +93,11 @@ typedef VOID
=20
     \param Interface The interface header
     \param Buffer Pointer to the memory buffer
-*/ =20
+*/
 typedef VOID
 (*XENBUS_STORE_FREE)(
-    IN  PINTERFACE  Interface,
-    IN  PCHAR       Buffer
+    _In_ PINTERFACE Interface,
+    _In_ PSTR       Buffer
     );
=20
 /*! \typedef XENBUS_STORE_READ
@@ -113,14 +113,14 @@ typedef VOID
     buffer containing the value read
=20
     The \a Buffer should be freed using \a XENBUS_STORE_FREE
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_READ)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node,
-    OUT PCHAR                       *Buffer
+    _In_ PINTERFACE                     Interface,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PSTR                       Prefix,
+    _In_ PSTR                           Node,
+    _Outptr_result_z_ PSTR              *Buffer
     );
=20
 /*! \typedef XENBUS_STORE_PRINTF
@@ -136,14 +136,14 @@ typedef NTSTATUS
     \param =2E=2E=2E Additional parameters required by \a Format
=20
     If the \a Node does not exist then it is created
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_PRINTF)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node,
-    IN  const CHAR                  *Format,
+    _In_ PINTERFACE                     Interface,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PSTR                       Prefix,
+    _In_ PSTR                           Node,
+    _In_ PCSTR                          Format,
     =2E=2E=2E
     );
=20
@@ -156,13 +156,13 @@ typedef NTSTATUS
     \param Prefix An optional prefix for the \a Node
     \param Node The concatenation of the \a Prefix and this value specifi=
es
     the XenStore key to remove
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_REMOVE)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node
+    _In_ PINTERFACE                     Interface,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PSTR                       Prefix,
+    _In_ PSTR                           Node
     );
=20
 /*! \typedef XENBUS_STORE_DIRECTORY
@@ -178,14 +178,14 @@ typedef NTSTATUS
     buffer containing a NUL separated list of key names
=20
     The \a Buffer should be freed using \a XENBUS_STORE_FREE
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_DIRECTORY)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node,
-    OUT PCHAR                       *Buffer
+    _In_ PINTERFACE                     Interface,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PSTR                       Prefix,
+    _In_ PSTR                           Node,
+    _Outptr_result_z_ PSTR              *Buffer
     );
=20
 /*! \typedef XENBUS_STORE_TRANSACTION_START
@@ -193,11 +193,11 @@ typedef NTSTATUS
=20
     \param Interface The interface header
     \param Transaction Pointer to a transaction handle to be initialized
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_TRANSACTION_START)(
-    IN  PINTERFACE                  Interface,
-    OUT PXENBUS_STORE_TRANSACTION   *Transaction
+    _In_ PINTERFACE                     Interface,
+    _Outptr_ PXENBUS_STORE_TRANSACTION  *Transaction
     );
=20
 /*! \typedef XENBUS_STORE_TRANSACTION_END
@@ -210,12 +210,12 @@ typedef NTSTATUS
=20
     If \a Commit is TRUE and the transaction to found to clash then
     STATUS_RETRY will be returned
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_TRANSACTION_END)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction,
-    IN  BOOLEAN                     Commit
+    _In_ PINTERFACE                 Interface,
+    _In_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_ BOOLEAN                    Commit
     );
=20
 /*! \typedef XENBUS_STORE_WATCH_ADD
@@ -228,14 +228,14 @@ typedef NTSTATUS
     \param Event A pointer to an event object to be signalled when the
     watch fires
     \param Watch A pointer to a watch handle to be initialized
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_WATCH_ADD)(
-    IN  PINTERFACE          Interface,
-    IN  PCHAR               Prefix OPTIONAL,
-    IN  PCHAR               Node,
-    IN  PKEVENT             Event,
-    OUT PXENBUS_STORE_WATCH *Watch
+    _In_ PINTERFACE                 Interface,
+    _In_opt_ PSTR                   Prefix,
+    _In_ PSTR                       Node,
+    _In_ PKEVENT                    Event,
+    _Outptr_ PXENBUS_STORE_WATCH    *Watch
     );
=20
 /*! \typedef XENBUS_STORE_WATCH_REMOVE
@@ -243,11 +243,11 @@ typedef NTSTATUS
=20
     \param Interface The interface header
     \param Watch The watch handle
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_WATCH_REMOVE)(
-    IN  PINTERFACE          Interface,
-    IN  PXENBUS_STORE_WATCH Watch
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_STORE_WATCH    Watch
     );
=20
 /*! \typedef XENBUS_STORE_POLL
@@ -259,10 +259,10 @@ typedef NTSTATUS
     activity then this will block the normal STORE interface DPC so this
     method must be regularly invoked during the spin loop to check for
     XenStore activity
-*/ =20
+*/
 typedef VOID
 (*XENBUS_STORE_POLL)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_STORE_PERMISSIONS_SET
@@ -279,16 +279,16 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENBUS_STORE_PERMISSIONS_SET)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node,
-    IN  PXENBUS_STORE_PERMISSION    Permissions,
-    IN  ULONG                       NumberPermissions
+    _In_ PINTERFACE                     Interface,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PSTR                       Prefix,
+    _In_ PSTR                           Node,
+    _In_ PXENBUS_STORE_PERMISSION       Permissions,
+    _In_ ULONG                          NumberPermissions
     );
=20
 // {86824C3B-D34E-4753-B281-2F1E3AD214D7}
-DEFINE_GUID(GUID_XENBUS_STORE_INTERFACE,=20
+DEFINE_GUID(GUID_XENBUS_STORE_INTERFACE,
 0x86824c3b, 0xd34e, 0x4753, 0xb2, 0x81, 0x2f, 0x1e, 0x3a, 0xd2, 0x14, 0xd=
7);
=20
 /*! \struct _XENBUS_STORE_INTERFACE_V2
diff --git a/include/suspend_interface=2Eh b/include/suspend_interface=2Eh
index 4176dc3=2E=2Ea20f616 100644
--- a/include/suspend_interface=2Eh
+++ b/include/suspend_interface=2Eh
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -52,27 +52,27 @@ typedef enum _XENBUS_SUSPEND_CALLBACK_TYPE {
=20
 /*! \typedef XENBUS_SUSPEND_CALLBACK
     \brief Suspend callback handle
-*/ =20
+*/
 typedef struct _XENBUS_SUSPEND_CALLBACK   XENBUS_SUSPEND_CALLBACK, *PXENB=
US_SUSPEND_CALLBACK;
=20
 /*! \typedef XENBUS_SUSPEND_ACQUIRE
     \brief Acquire a reference to the SUSPEND interface
=20
     \param Interface The interface header
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_SUSPEND_ACQUIRE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_SUSPEND_RELEASE
     \brief Release a reference to the SUSPEND interface
=20
     \param Interface The interface header
-*/ =20
+*/
 typedef VOID
 (*XENBUS_SUSPEND_RELEASE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_SUSPEND_FUNCTION
@@ -84,10 +84,10 @@ typedef VOID
     vCPUs corralled at the same IRQL as the callback=2E \a Early callback
     functions are always invoked with IRQL =3D=3D HIGH_LEVEL and \a Late =
callback
     functions are always invoked with IRQL =3D=3D DISPATCH_LEVEL
-*/ =20
+*/
 typedef VOID
 (*XENBUS_SUSPEND_FUNCTION)(
-    IN  PVOID   Argument
+    _In_ PVOID  Argument
     );
=20
 /*! \typedef XENBUS_SUSPEND_REGISTER
@@ -98,14 +98,14 @@ typedef VOID
     \param Function The callback function
     \param Argument An optional context argument passed to the callback
     \param Callback A pointer to a callback handle to be initialized
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_SUSPEND_REGISTER)(
-    IN  PINTERFACE                      Interface,
-    IN  XENBUS_SUSPEND_CALLBACK_TYPE    Type,
-    IN  XENBUS_SUSPEND_FUNCTION         Function,
-    IN  PVOID                           Argument OPTIONAL,
-    OUT PXENBUS_SUSPEND_CALLBACK        *Callback
+    _In_ PINTERFACE                     Interface,
+    _In_ XENBUS_SUSPEND_CALLBACK_TYPE   Type,
+    _In_ XENBUS_SUSPEND_FUNCTION        Function,
+    _In_opt_ PVOID                      Argument,
+    _Outptr_ PXENBUS_SUSPEND_CALLBACK   *Callback
     );
=20
 /*! \typedef XENBUS_SUSPEND_DEREGISTER
@@ -116,8 +116,8 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENBUS_SUSPEND_DEREGISTER)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_SUSPEND_CALLBACK    Callback
+    _In_ PINTERFACE                 Interface,
+    _In_ PXENBUS_SUSPEND_CALLBACK   Callback
     );
=20
 /*! \typedef XENBUS_SUSPEND_TRIGGER
@@ -129,7 +129,7 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENBUS_SUSPEND_TRIGGER)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_SUSPEND_GET_COUNT
@@ -140,7 +140,7 @@ typedef NTSTATUS
 */
 typedef ULONG
 (*XENBUS_SUSPEND_GET_COUNT)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 // {0554F2AF-B510-4C71-AC03-1C503E394238}
diff --git a/include/unplug_interface=2Eh b/include/unplug_interface=2Eh
index 1dc9f51=2E=2E249a873 100644
--- a/include/unplug_interface=2Eh
+++ b/include/unplug_interface=2Eh
@@ -48,7 +48,7 @@
 */
 typedef NTSTATUS
 (*XENBUS_UNPLUG_ACQUIRE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_UNPLUG_RELEASE
@@ -58,7 +58,7 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENBUS_UNPLUG_RELEASE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \enum _XENBUS_UNPLUG_DEVICE_TYPE
@@ -80,9 +80,9 @@ typedef enum _XENBUS_UNPLUG_DEVICE_TYPE {
 */
 typedef VOID
 (*XENBUS_UNPLUG_REQUEST)(
-    IN  PINTERFACE                  Interface,
-    IN  XENBUS_UNPLUG_DEVICE_TYPE   Type,
-    IN  BOOLEAN                     Make
+    _In_ PINTERFACE                 Interface,
+    _In_ XENBUS_UNPLUG_DEVICE_TYPE  Type,
+    _In_ BOOLEAN                    Make
     );
=20
 /*! \typedef XENBUS_UNPLUG_IS_REQUESTED
@@ -95,8 +95,8 @@ typedef VOID
 */
 typedef BOOLEAN
 (*XENBUS_UNPLUG_IS_REQUESTED)(
-    IN  PINTERFACE                  Interface,
-    IN  XENBUS_UNPLUG_DEVICE_TYPE   Type
+    _In_ PINTERFACE                 Interface,
+    _In_ XENBUS_UNPLUG_DEVICE_TYPE  Type
     );
=20
 /*! \typedef XENBUS_UNPLUG_BOOT_EMULATED
@@ -106,7 +106,7 @@ typedef BOOLEAN
 */
 typedef BOOLEAN
 (*XENBUS_UNPLUG_BOOT_EMULATED)(
-    IN  PINTERFACE                  Interface
+    _In_ PINTERFACE                 Interface
     );
=20
 /*! \typedef XENBUS_UNPLUG_REBOOT
@@ -117,8 +117,8 @@ typedef BOOLEAN
 */
 typedef VOID
 (*XENBUS_UNPLUG_REBOOT)(
-    IN  PINTERFACE                  Interface,
-    IN  PCHAR                       Module
+    _In_ PINTERFACE                 Interface,
+    _In_ PSTR                       Module
     );
=20
 // {73db6517-3d06-4937-989f-199b7501e229}
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.2ca.bee731b950e2b74.1a144e50de7.7ef97b955ae765ae=---


From win-pv-devel-bounces@lists.xenproject.org Fri Oct 16 13:27:12 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 16 Oct 2026 13:27:12 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1451865.1666737 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHhxo-0006Th-OU; Fri, 16 Oct 2026 13:27:12 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1451865.1666737; Fri, 16 Oct 2026 13:27:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHhxo-0006Sv-EZ; Fri, 16 Oct 2026 13:27:12 +0000
Received: by outflank-mailman (input) for mailman id 1451865;
 Fri, 16 Oct 2026 13:27:10 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e5210f0008425@swg.vates.tech>)
 id 1xHhxm-0006EW-Ge
 for win-pv-devel@lists.xenproject.org; Fri, 16 Oct 2026 13:27:10 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xHhxl-00BNK1-Tf
 for win-pv-devel@lists.xenproject.org; Fri, 16 Oct 2026 15:27:09 +0200
Received: from [10.42.69.1] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e5210f0008425@swg.vates.tech>)
 id 6ad2262a-e002-0a2a0a5209dd-0a2a4501e862-12
 for <win-pv-devel@lists.xenproject.org>; Fri, 16 Oct 2026 15:27:09 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e5210f0008425@swg.vates.tech>)
 id 6ad2262d-5984-0a2a45010019-b9ff1c23a423-3
 for <win-pv-devel@lists.xenproject.org>; Fri, 16 Oct 2026 15:27:09 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a144e5210f0008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Fri, 16 Oct 2026 13:27:09 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id BB9D782B82;
 Fri, 16 Oct 2026 15:27:08 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=3t78bNiCTli+Vh1MLs69IyZIbitRa6KC/FgPhrqG8/g=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=G/IeL8CqE//EnsWp+6cWwvnkzZD4mHr/1Obr8H0qwOl97wzt/Tb33wpbmoDl6h5cT6Ic8LB+B
 U27wAGtKjxEKXSk22drEwsUi/m0tz7RdBVrXTTUtwgupiQ+hqeQnkSH0IqDnBG6860GN0lgWBEd
 Lt2KOrYMwizG/LVs/W0Jg0G1Kb+1yuG/yR0LamwrAvZyWaYN0NbyaPpugy/bnJBwGpeGvxu1MPE
 VxcSctwOS/2gvU1REqoA9UnE866NKYE3KFaguU5M85kI9dsyt0UYzh1NhbqUx14aMEtSqM7mgEo
 LfC/aMOBCExWplkMCTtL3Qz7A+b/uEt0IyXvqCNqU8jw==
X-Zone-Loop: 38e6149b6a9aeea2ebaa5c3b8a99bfc0eaf53c1d76a1
x-campaign-type: default
x-transaction-id: a5f82c5f-d268-4a84-9755-744007dbeaa8
x-swg-uid: 01-e6bc470a-fdc1-4bd4-be26-427b32b416b3
X-Mailer: Sweego
Message-ID:
 <1792157229.8631fc262581453bbf619ec5b2062170.1a144e5210f0008425@vates.tech>
x-swg-bid: 1792157229.8631fc262581453bbf619ec5b2062170.1a144e5210f0008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 18/18] xenvbd:registry: sync with xenbus
Date: Fri, 16 Oct 2026 15:26:55 +0200
In-Reply-To: <1792157073.8631fc262581453bbf619ec5b2062170.1a144e2bf7f0008425@vates.tech>
References: <1792157073.8631fc262581453bbf619ec5b2062170.1a144e2bf7f0008425@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.2da.686e3b241826552f.1a144e51f5a.b7ab8ed5dc282b42=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792157228890
X-purgate-ID: tlsNG-d62444/1792157229-C5146757-1AD9CA2D/0/0
X-purgate-type: clean
X-purgate-size: 33927

---=Part.2da.686e3b241826552f.1a144e51f5a.b7ab8ed5dc282b42=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Sync registr=2Ec,h with xenbus latest version=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xenvbd/registry=2Ec | 375 +++++++++++++++++++++++-------------------
 src/xenvbd/registry=2Eh | 139 +++++++---------
 2 files changed, 270 insertions(+), 244 deletions(-)

diff --git a/src/xenvbd/registry=2Ec b/src/xenvbd/registry=2Ec
index a11d562=2E=2E4f7c5ef 100644
--- a/src/xenvbd/registry=2Ec
+++ b/src/xenvbd/registry=2Ec
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -64,13 +64,13 @@ __RegistryFree(
 NTSTATUS
 #pragma prefast(suppress:28101) // unannotated DriverEntry function
 RegistryInitialize(
-    _In_ PDRIVER_OBJECT     DriverObject,
+    _In_opt_ PDRIVER_OBJECT DriverObject,
     _In_ PUNICODE_STRING    Path
     )
 {
-    UNICODE_STRING          Unicode;
-    PVOID                   Func;
-    NTSTATUS                status;
+    UNICODE_STRING      Unicode;
+    PVOID               Func;
+    NTSTATUS            status;
=20
     ASSERT3P(RegistryPath=2EBuffer, =3D=3D, NULL);
=20
@@ -110,7 +110,54 @@ RegistryTeardown(
     RegistryPath=2EMaximumLength =3D RegistryPath=2ELength =3D 0;
 }
=20
-_IRQL_requires_(PASSIVE_LEVEL)
+NTSTATUS
+RegistryOpenParametersKey(
+    _In_ ACCESS_MASK    DesiredAccess,
+    _Out_ PHANDLE       Key
+    )
+{
+    HANDLE              ServiceKey;
+    NTSTATUS            status;
+
+    if (__IoOpenDriverRegistryKey !=3D NULL) {
+        status =3D __IoOpenDriverRegistryKey(RegistryDriverObject,
+                                           DriverRegKeyParameters,
+                                           DesiredAccess,
+                                           0,
+                                           Key);
+        if (!NT_SUCCESS(status))
+            goto fail1;
+
+        goto done;
+    }
+
+    status =3D RegistryOpenKey(NULL, &RegistryPath, DesiredAccess, &Servi=
ceKey);
+    if (!NT_SUCCESS(status))
+        goto fail2;
+
+    status =3D RegistryOpenSubKey(ServiceKey, "Parameters", DesiredAccess=
, Key);
+    if (!NT_SUCCESS(status))
+        goto fail3;
+
+    RegistryCloseKey(ServiceKey);
+
+done:
+    return STATUS_SUCCESS;
+
+fail3:
+    Error("fail3\n");
+
+    RegistryCloseKey(ServiceKey);
+
+fail2:
+    Error("fail2\n");
+
+fail1:
+    Error("fail1 %08x\n", status);
+
+    return status;
+}
+
 NTSTATUS
 RegistryOpenKey(
     _In_opt_ HANDLE         Parent,
@@ -119,8 +166,8 @@ RegistryOpenKey(
     _Out_ PHANDLE           Key
     )
 {
-    OBJECT_ATTRIBUTES       Attributes;
-    NTSTATUS                status;
+    OBJECT_ATTRIBUTES   Attributes;
+    NTSTATUS            status;
=20
     InitializeObjectAttributes(&Attributes,
                                Path,
@@ -140,7 +187,6 @@ fail1:
     return status;
 }
=20
-_IRQL_requires_(PASSIVE_LEVEL)
 static NTSTATUS
 RegistryOpenRoot(
     _In_ PWSTR              Path,
@@ -148,7 +194,7 @@ RegistryOpenRoot(
     _Outptr_result_z_ PWSTR *ChildPath
     )
 {
-    const WCHAR             Prefix[] =3D L"\\Registry\\Machine\\";
+    PCWSTR                  Prefix =3D L"\\Registry\\Machine\\";
     ULONG                   Length;
     UNICODE_STRING          Unicode;
     NTSTATUS                status;
@@ -174,22 +220,21 @@ fail1:
     return status;
 }
=20
-_IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryCreateKey(
-    _In_opt_ HANDLE         Root,
+    _In_opt_ HANDLE         Parent,
     _In_ PUNICODE_STRING    Path,
     _In_ ULONG              Options,
     _Out_ PHANDLE           Key
     )
 {
-    PWCHAR                  Buffer;
-    HANDLE                  Parent;
-    PWCHAR                  ChildPath;
-    PWCHAR                  ChildName;
-    PWCHAR                  Context;
-    HANDLE                  Child;
-    NTSTATUS                status;
+    PWSTR               Buffer;
+    HANDLE              Root;
+    PWSTR               ChildPath;
+    PWSTR               ChildName;
+    PWSTR               Context;
+    HANDLE              Child;
+    NTSTATUS            status;
=20
     //
     // UNICODE_STRINGs are not guaranteed to have NUL terminated
@@ -204,8 +249,9 @@ RegistryCreateKey(
=20
     RtlCopyMemory(Buffer, Path->Buffer, Path->Length);
=20
-    if (Root !=3D NULL) {
-        Parent =3D Root;
+    Root =3D Parent;
+
+    if (Parent !=3D NULL) {
         ChildPath =3D Buffer;
     } else {
         status =3D RegistryOpenRoot(Buffer, &Parent, &ChildPath);
@@ -274,7 +320,6 @@ fail1:
     return status;
 }
=20
-_IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryOpenServiceKey(
     _In_ ACCESS_MASK    DesiredAccess,
@@ -284,65 +329,14 @@ RegistryOpenServiceKey(
     return RegistryOpenKey(NULL, &RegistryPath, DesiredAccess, Key);
 }
=20
-_IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryCreateServiceKey(
-    _Out_ PHANDLE   Key
-    )
-{
-    return RegistryCreateKey(NULL, &RegistryPath, REG_OPTION_NON_VOLATILE=
, Key);
-}
-
-_IRQL_requires_(PASSIVE_LEVEL)
-NTSTATUS
-RegistryOpenParametersKey(
-    _In_ ACCESS_MASK    DesiredAccess,
     _Out_ PHANDLE       Key
     )
 {
-    HANDLE              ServiceKey;
-    NTSTATUS            status;
-
-    if (__IoOpenDriverRegistryKey !=3D NULL) {
-        status =3D __IoOpenDriverRegistryKey(RegistryDriverObject,
-                                           DriverRegKeyParameters,
-                                           DesiredAccess,
-                                           0,
-                                           Key);
-        if (!NT_SUCCESS(status))
-            goto fail1;
-
-        goto done;
-    }
-
-    status =3D RegistryOpenKey(NULL, &RegistryPath, DesiredAccess, &Servi=
ceKey);
-    if (!NT_SUCCESS(status))
-        goto fail2;
-
-    status =3D RegistryOpenSubKey(ServiceKey, "Parameters", DesiredAccess=
, Key);
-    if (!NT_SUCCESS(status))
-        goto fail3;
-
-    RegistryCloseKey(ServiceKey);
-
-done:
-    return STATUS_SUCCESS;
-
-fail3:
-    Error("fail3\n");
-
-    RegistryCloseKey(ServiceKey);
-
-fail2:
-    Error("fail2\n");
-
-fail1:
-    Error("fail1 %08x\n", status);
-
-    return status;
+    return RegistryCreateKey(NULL, &RegistryPath, REG_OPTION_NON_VOLATILE=
, Key);
 }
=20
-_IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryOpenSoftwareKey(
     _In_ PDEVICE_OBJECT DeviceObject,
@@ -365,7 +359,6 @@ fail1:
     return status;
 }
=20
-_IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryOpenHardwareKey(
     _In_ PDEVICE_OBJECT     DeviceObject,
@@ -376,7 +369,7 @@ RegistryOpenHardwareKey(
     HANDLE                  SubKey;
     ULONG                   Length;
     PKEY_NAME_INFORMATION   Info;
-    PWCHAR                  Cursor;
+    PWSTR                   Cursor;
     UNICODE_STRING          Unicode;
     NTSTATUS                status;
=20
@@ -393,11 +386,11 @@ RegistryOpenHardwareKey(
                         NULL,
                         0,
                         &Length);
-    if (status !=3D STATUS_BUFFER_OVERFLOW &&
+    if (!NT_SUCCESS(status) &&
+        status !=3D STATUS_BUFFER_OVERFLOW &&
         status !=3D STATUS_BUFFER_TOO_SMALL)
         goto fail2;
=20
-#pragma prefast(suppress:6102)
     Info =3D __RegistryAllocate(Length + sizeof (WCHAR));
=20
     status =3D STATUS_NO_MEMORY;
@@ -418,7 +411,7 @@ RegistryOpenHardwareKey(
     ASSERT(Cursor !=3D NULL);
=20
     *Cursor =3D L'\0';
-   =20
+
     RtlInitUnicodeString(&Unicode, Info->Name);
=20
     status =3D RegistryOpenKey(NULL, &Unicode, DesiredAccess, Key);
@@ -443,10 +436,9 @@ fail1:
     return status;
 }
=20
-_IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryOpenSubKey(
-    _In_ PHANDLE        Key,
+    _In_opt_ PHANDLE    Key,
     _In_ PSTR           Name,
     _In_ ACCESS_MASK    DesiredAccess,
     _Out_ PHANDLE       SubKey
@@ -477,10 +469,9 @@ fail1:
     return status;
 }
=20
-_IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryCreateSubKey(
-    _In_ PHANDLE        Key,
+    _In_opt_ HANDLE     Key,
     _In_ PSTR           Name,
     _In_ ULONG          Options,
     _Out_ PHANDLE       SubKey
@@ -511,7 +502,6 @@ fail1:
     return status;
 }
=20
-_IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryDeleteSubKey(
     _In_ PHANDLE        Key,
@@ -539,8 +529,6 @@ RegistryDeleteSubKey(
=20
     ZwClose(SubKey);
=20
-    (VOID) ZwFlushKey(Key);
-
     RtlFreeUnicodeString(&Unicode);
=20
     return STATUS_SUCCESS;
@@ -555,7 +543,6 @@ fail1:
     return status;
 }
=20
-_IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryEnumerateSubKeys(
     _In_ HANDLE             Key,
@@ -578,7 +565,6 @@ RegistryEnumerateSubKeys(
         status !=3D STATUS_BUFFER_TOO_SMALL)
         goto fail1;
=20
-#pragma prefast(suppress:6102)
     Full =3D __RegistryAllocate(Size);
=20
     status =3D STATUS_NO_MEMORY;
@@ -629,7 +615,7 @@ RegistryEnumerateSubKeys(
         status =3D RtlUnicodeStringToAnsiString(&Ansi, &Unicode, FALSE);
         ASSERT(NT_SUCCESS(status));
=20
-        Ansi=2ELength =3D (USHORT)(strlen(Ansi=2EBuffer) * sizeof (CHAR))=
;       =20
+        Ansi=2ELength =3D (USHORT)(strlen(Ansi=2EBuffer) * sizeof (CHAR))=
;
=20
         status =3D Callback(Context, Key, &Ansi);
=20
@@ -654,13 +640,12 @@ fail5:
 fail4:
 fail3:
     __RegistryFree(Full);
-   =20
+
 fail2:
 fail1:
     return status;
 }
=20
-_IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryEnumerateValues(
     _In_ HANDLE                     Key,
@@ -683,7 +668,6 @@ RegistryEnumerateValues(
         status !=3D STATUS_BUFFER_TOO_SMALL)
         goto fail1;
=20
-#pragma prefast(suppress:6102)
     Full =3D __RegistryAllocate(Size);
=20
     status =3D STATUS_NO_MEMORY;
@@ -727,17 +711,24 @@ RegistryEnumerateValues(
         Ansi=2EMaximumLength =3D (USHORT)((Basic->NameLength / sizeof (WC=
HAR)) + sizeof (CHAR));
         Ansi=2EBuffer =3D __RegistryAllocate(Ansi=2EMaximumLength);
=20
+        status =3D STATUS_NO_MEMORY;
+        if (Ansi=2EBuffer =3D=3D NULL)
+            goto fail6;
+
         status =3D RtlUnicodeStringToAnsiString(&Ansi, &Unicode, FALSE);
-        ASSERT(NT_SUCCESS(status));
+        if (!NT_SUCCESS(status)) {
+            __RegistryFree(Ansi=2EBuffer);
+            goto fail7;
+        }
=20
-        Ansi=2ELength =3D (USHORT)(strlen(Ansi=2EBuffer) * sizeof (CHAR))=
;       =20
+        Ansi=2ELength =3D (USHORT)(strlen(Ansi=2EBuffer) * sizeof (CHAR))=
;
=20
         status =3D Callback(Context, Key, &Ansi, Basic->Type);
=20
         __RegistryFree(Ansi=2EBuffer);
=20
         if (!NT_SUCCESS(status))
-            goto fail6;
+            goto fail8;
     }
=20
     __RegistryFree(Basic);
@@ -746,6 +737,8 @@ RegistryEnumerateValues(
=20
     return STATUS_SUCCESS;
=20
+fail8:
+fail7:
 fail6:
 fail5:
     __RegistryFree(Basic);
@@ -753,13 +746,12 @@ fail5:
 fail4:
 fail3:
     __RegistryFree(Full);
-   =20
+
 fail2:
 fail1:
     return status;
 }
=20
-_IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryDeleteValue(
     _In_ PHANDLE        Key,
@@ -782,8 +774,6 @@ RegistryDeleteValue(
=20
     RtlFreeUnicodeString(&Unicode);
=20
-    (VOID) ZwFlushKey(Key);
-
     return STATUS_SUCCESS;
=20
 fail2:
@@ -793,7 +783,6 @@ fail1:
     return status;
 }
=20
-_IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryQueryDwordValue(
     _In_ HANDLE                     Key,
@@ -812,18 +801,18 @@ RegistryQueryDwordValue(
     status =3D RtlAnsiStringToUnicodeString(&Unicode, &Ansi, TRUE);
     if (!NT_SUCCESS(status))
         goto fail1;
-       =20
+
     status =3D ZwQueryValueKey(Key,
                              &Unicode,
                              KeyValuePartialInformation,
                              NULL,
                              0,
                              &Size);
-    if (status !=3D STATUS_BUFFER_OVERFLOW &&
+    if (!NT_SUCCESS(status) &&
+        status !=3D STATUS_BUFFER_OVERFLOW &&
         status !=3D STATUS_BUFFER_TOO_SMALL)
         goto fail2;
=20
-#pragma prefast(suppress:6102)
     Partial =3D __RegistryAllocate(Size);
=20
     status =3D STATUS_NO_MEMORY;
@@ -844,7 +833,77 @@ RegistryQueryDwordValue(
         Partial->DataLength !=3D sizeof (ULONG))
         goto fail5;
=20
-    *Value =3D *(PULONG)Partial->Data;           =20
+    *Value =3D *(PULONG)Partial->Data;
+
+    __RegistryFree(Partial);
+
+    RtlFreeUnicodeString(&Unicode);
+
+    return STATUS_SUCCESS;
+
+fail5:
+fail4:
+    __RegistryFree(Partial);
+
+fail3:
+fail2:
+    RtlFreeUnicodeString(&Unicode);
+
+fail1:
+    return status;
+}
+
+NTSTATUS
+RegistryQueryQwordValue(
+    _In_ HANDLE                     Key,
+    _In_ PSTR                       Name,
+    _Out_ PULONGLONG                Value
+    )
+{
+    ANSI_STRING                     Ansi;
+    UNICODE_STRING                  Unicode;
+    PKEY_VALUE_PARTIAL_INFORMATION  Partial;
+    ULONG                           Size;
+    NTSTATUS                        status;
+
+    RtlInitAnsiString(&Ansi, Name);
+
+    status =3D RtlAnsiStringToUnicodeString(&Unicode, &Ansi, TRUE);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    status =3D ZwQueryValueKey(Key,
+                             &Unicode,
+                             KeyValuePartialInformation,
+                             NULL,
+                             0,
+                             &Size);
+    if (!NT_SUCCESS(status) &&
+        status !=3D STATUS_BUFFER_OVERFLOW &&
+        status !=3D STATUS_BUFFER_TOO_SMALL)
+        goto fail2;
+
+    Partial =3D __RegistryAllocate(Size);
+
+    status =3D STATUS_NO_MEMORY;
+    if (Partial =3D=3D NULL)
+        goto fail3;
+
+    status =3D ZwQueryValueKey(Key,
+                             &Unicode,
+                             KeyValuePartialInformation,
+                             Partial,
+                             Size,
+                             &Size);
+    if (!NT_SUCCESS(status))
+        goto fail4;
+
+    status =3D STATUS_INVALID_PARAMETER;
+    if (Partial->Type !=3D REG_QWORD ||
+        Partial->DataLength !=3D sizeof (ULONGLONG))
+        goto fail5;
+
+    *Value =3D *(PULONGLONG)Partial->Data;
=20
     __RegistryFree(Partial);
=20
@@ -864,7 +923,6 @@ fail1:
     return status;
 }
=20
-_IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryUpdateDwordValue(
     _In_ HANDLE                     Key,
@@ -882,7 +940,7 @@ RegistryUpdateDwordValue(
     status =3D RtlAnsiStringToUnicodeString(&Unicode, &Ansi, TRUE);
     if (!NT_SUCCESS(status))
         goto fail1;
-       =20
+
     Partial =3D __RegistryAllocate(FIELD_OFFSET(KEY_VALUE_PARTIAL_INFORMA=
TION, Data) +
                                  sizeof (ULONG));
=20
@@ -893,7 +951,7 @@ RegistryUpdateDwordValue(
     Partial->TitleIndex =3D 0;
     Partial->Type =3D REG_DWORD;
     Partial->DataLength =3D sizeof (ULONG);
-    *(PULONG)Partial->Data =3D Value;           =20
+    *(PULONG)Partial->Data =3D Value;
=20
     status =3D ZwSetValueKey(Key,
                            &Unicode,
@@ -906,8 +964,6 @@ RegistryUpdateDwordValue(
=20
     __RegistryFree(Partial);
=20
-    (VOID) ZwFlushKey(Key);
-
     RtlFreeUnicodeString(&Unicode);
=20
     return STATUS_SUCCESS;
@@ -923,7 +979,6 @@ fail1:
     return status;
 }
=20
-_IRQL_requires_(PASSIVE_LEVEL)
 static PANSI_STRING
 RegistrySzToAnsi(
     _In_ PWSTR      Buffer
@@ -963,7 +1018,6 @@ fail1:
     return NULL;
 }
=20
-_IRQL_requires_(PASSIVE_LEVEL)
 static PANSI_STRING
 RegistryMultiSzToAnsi(
     _In_ PWSTR      Buffer
@@ -1026,7 +1080,6 @@ fail1:
     return NULL;
 }
=20
-_IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryQuerySzValue(
     _In_ HANDLE                     Key,
@@ -1046,18 +1099,18 @@ RegistryQuerySzValue(
     status =3D RtlAnsiStringToUnicodeString(&Unicode, &Ansi, TRUE);
     if (!NT_SUCCESS(status))
         goto fail1;
-       =20
+
     status =3D ZwQueryValueKey(Key,
                              &Unicode,
                              KeyValuePartialInformation,
                              NULL,
                              0,
                              &Size);
-    if (status !=3D STATUS_BUFFER_OVERFLOW &&
+    if (!NT_SUCCESS(status) &&
+        status !=3D STATUS_BUFFER_OVERFLOW &&
         status !=3D STATUS_BUFFER_TOO_SMALL)
         goto fail2;
=20
-#pragma prefast(suppress:6102)
     Value =3D __RegistryAllocate(Size);
=20
     status =3D STATUS_NO_MEMORY;
@@ -1076,12 +1129,12 @@ RegistryQuerySzValue(
     switch (Value->Type) {
     case REG_SZ:
         status =3D STATUS_NO_MEMORY;
-        *Array =3D RegistrySzToAnsi((PWCHAR)Value->Data);
+        *Array =3D RegistrySzToAnsi((PWSTR)Value->Data);
         break;
=20
     case REG_MULTI_SZ:
         status =3D STATUS_NO_MEMORY;
-        *Array =3D RegistryMultiSzToAnsi((PWCHAR)Value->Data);
+        *Array =3D RegistryMultiSzToAnsi((PWSTR)Value->Data);
         break;
=20
     default:
@@ -1114,13 +1167,12 @@ fail1:
     return status;
 }
=20
-_IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryQueryBinaryValue(
-    _In_ HANDLE                                 Key,
-    _In_ PSTR                                   Name,
-    _Outptr_result_bytebuffer_(*Length) PVOID   *Buffer,
-    _Out_ PULONG                                Length
+    _In_ HANDLE                     Key,
+    _In_ PSTR                       Name,
+    _Outptr_ PVOID                  *Buffer,
+    _Out_ PULONG                    Length
     )
 {
     ANSI_STRING                     Ansi;
@@ -1141,11 +1193,11 @@ RegistryQueryBinaryValue(
                              NULL,
                              0,
                              &Size);
-    if (status !=3D STATUS_BUFFER_OVERFLOW &&
+    if (!NT_SUCCESS(status) &&
+        status !=3D STATUS_BUFFER_OVERFLOW &&
         status !=3D STATUS_BUFFER_TOO_SMALL)
         goto fail2;
=20
-#pragma prefast(suppress:6102)
     Partial =3D __RegistryAllocate(Size);
=20
     status =3D STATUS_NO_MEMORY;
@@ -1200,12 +1252,11 @@ fail1:
     return status;
 }
=20
-_IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryUpdateBinaryValue(
     _In_ HANDLE                     Key,
     _In_ PSTR                       Name,
-    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ PVOID                      Buffer,
     _In_ ULONG                      Length
     )
 {
@@ -1243,8 +1294,6 @@ RegistryUpdateBinaryValue(
=20
     __RegistryFree(Partial);
=20
-    (VOID) ZwFlushKey(Key);
-
     RtlFreeUnicodeString(&Unicode);
=20
     return STATUS_SUCCESS;
@@ -1260,7 +1309,6 @@ fail1:
     return status;
 }
=20
-_IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryQueryKeyName(
     _In_ HANDLE             Key,
@@ -1276,12 +1324,12 @@ RegistryQueryKeyName(
                         NULL,
                         0,
                         &Size);
-    if (status !=3D STATUS_BUFFER_OVERFLOW &&
+    if (!NT_SUCCESS(status) &&
+        status !=3D STATUS_BUFFER_OVERFLOW &&
         status !=3D STATUS_BUFFER_TOO_SMALL)
         goto fail1;
=20
     // Name information is not intrinsically NULL terminated
-#pragma prefast(suppress:6102)
     Value =3D __RegistryAllocate(Size + sizeof (WCHAR));
=20
     status =3D STATUS_NO_MEMORY;
@@ -1297,7 +1345,7 @@ RegistryQueryKeyName(
         goto fail3;
=20
     Value->Name[Value->NameLength / sizeof (WCHAR)] =3D L'\0';
-    *Array =3D RegistrySzToAnsi((PWCHAR)Value->Name);
+    *Array =3D RegistrySzToAnsi((PWSTR)Value->Name);
=20
     status =3D STATUS_NO_MEMORY;
     if (*Array =3D=3D NULL)
@@ -1316,10 +1364,9 @@ fail1:
     return status;
 }
=20
-_IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryQuerySystemStartOption(
-    _In_ PCSTR                      Prefix,
+    _In_ PSTR                       Prefix,
     _Outptr_ PANSI_STRING           *Value
     )
 {
@@ -1327,12 +1374,12 @@ RegistryQuerySystemStartOption(
     HANDLE                          Key;
     PANSI_STRING                    Ansi;
     ULONG                           Length;
-    PCHAR                           Option;
-    PCHAR                           Context;
+    PSTR                            Option;
+    PSTR                            Context;
     NTSTATUS                        status;
=20
     RtlInitUnicodeString(&Unicode, L"\\Registry\\Machine\\SYSTEM\\Current=
ControlSet\\Control");
-   =20
+
     status =3D RegistryOpenKey(NULL, &Unicode, KEY_READ, &Key);
     if (!NT_SUCCESS(status))
         goto fail1;
@@ -1395,10 +1442,9 @@ fail1:
     return status;
 }
=20
-_IRQL_requires_(PASSIVE_LEVEL)
 static PKEY_VALUE_PARTIAL_INFORMATION
 RegistryAnsiToSz(
-    _In_ PANSI_STRING               Ansi
+    PANSI_STRING                    Ansi
     )
 {
     ULONG                           Length;
@@ -1442,10 +1488,9 @@ fail1:
     return NULL;
 }
=20
-_IRQL_requires_(PASSIVE_LEVEL)
 static PKEY_VALUE_PARTIAL_INFORMATION
 RegistryAnsiToMultiSz(
-    _In_ PANSI_STRING               Ansi
+    PANSI_STRING                    Ansi
     )
 {
     ULONG                           Length;
@@ -1502,7 +1547,6 @@ fail1:
     return NULL;
 }
=20
-_IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 RegistryUpdateSzValue(
     _In_ HANDLE                     Key,
@@ -1553,8 +1597,6 @@ RegistryUpdateSzValue(
=20
     __RegistryFree(Partial);
=20
-    (VOID) ZwFlushKey(Key);
-
     RtlFreeUnicodeString(&Unicode);
=20
     return STATUS_SUCCESS;
@@ -1593,7 +1635,6 @@ RegistryFreeBinaryValue(
     __RegistryFree(Buffer);
 }
=20
-_IRQL_requires_(PASSIVE_LEVEL)
 VOID
 RegistryCloseKey(
     _In_ HANDLE Key
diff --git a/src/xenvbd/registry=2Eh b/src/xenvbd/registry=2Eh
index 654c919=2E=2E26bc0c6 100644
--- a/src/xenvbd/registry=2Eh
+++ b/src/xenvbd/registry=2Eh
@@ -1,43 +1,43 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
-#ifndef _XENVBD_REGISTRY_H
-#define _XENVBD_REGISTRY_H
+#ifndef _COMMON_REGISTRY_H
+#define _COMMON_REGISTRY_H
=20
 #include <ntddk=2Eh>
=20
 extern NTSTATUS
 RegistryInitialize(
-    _In_ PDRIVER_OBJECT     DriverObject,
+    _In_opt_ PDRIVER_OBJECT DrvObj,
     _In_ PUNICODE_STRING    Path
     );
=20
@@ -46,7 +46,12 @@ RegistryTeardown(
     VOID
     );
=20
-_IRQL_requires_(PASSIVE_LEVEL)
+extern NTSTATUS
+RegistryOpenParametersKey(
+    _In_ ACCESS_MASK    DesiredAccess,
+    _Out_ PHANDLE       Key
+    );
+
 extern NTSTATUS
 RegistryOpenKey(
     _In_opt_ HANDLE         Parent,
@@ -55,7 +60,6 @@ RegistryOpenKey(
     _Out_ PHANDLE           Key
     );
=20
-_IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryCreateKey(
     _In_opt_ HANDLE         Parent,
@@ -64,27 +68,17 @@ RegistryCreateKey(
     _Out_ PHANDLE           Key
     );
=20
-_IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryOpenServiceKey(
     _In_ ACCESS_MASK    DesiredAccess,
     _Out_ PHANDLE       Key
     );
=20
-_IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryCreateServiceKey(
     _Out_ PHANDLE   Key
     );
=20
-_IRQL_requires_(PASSIVE_LEVEL)
-extern NTSTATUS
-RegistryOpenParametersKey(
-    _In_ ACCESS_MASK    DesiredAccess,
-    _Out_ PHANDLE       Key
-    );
-
-_IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryOpenSoftwareKey(
     _In_ PDEVICE_OBJECT DeviceObject,
@@ -92,7 +86,6 @@ RegistryOpenSoftwareKey(
     _Out_ PHANDLE       Key
     );
=20
-_IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryOpenHardwareKey(
     _In_ PDEVICE_OBJECT DeviceObject,
@@ -100,32 +93,28 @@ RegistryOpenHardwareKey(
     _Out_ PHANDLE       Key
     );
=20
-_IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryOpenSubKey(
-    _In_ HANDLE         Key,
+    _In_opt_ HANDLE     Key,
     _In_ PSTR           Name,
     _In_ ACCESS_MASK    DesiredAccess,
     _Out_ PHANDLE       SubKey
     );
=20
-_IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryCreateSubKey(
-    _In_ HANDLE     Key,
+    _In_opt_ HANDLE Key,
     _In_ PSTR       Name,
     _In_ ULONG      Options,
     _Out_ PHANDLE   SubKey
     );
=20
-_IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryDeleteSubKey(
-    _In_ HANDLE Key,
-    _In_ PSTR   Name
+    _In_ HANDLE     Key,
+    _In_ PSTR       Name
     );
=20
-_IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryEnumerateSubKeys(
     _In_ HANDLE     Key,
@@ -133,7 +122,6 @@ RegistryEnumerateSubKeys(
     _In_ PVOID      Context
     );
=20
-_IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryEnumerateValues(
     _In_ HANDLE     Key,
@@ -141,30 +129,33 @@ RegistryEnumerateValues(
     _In_ PVOID      Context
     );
=20
-_IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryDeleteValue(
-    _In_ HANDLE Key,
-    _In_ PSTR   Name
+    _In_ HANDLE     Key,
+    _In_ PSTR       Name
     );
=20
-_IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryQueryDwordValue(
-    _In_ HANDLE     Key,
-    _In_ PSTR       Name,
-    _Out_ PULONG    Value
+    _In_ HANDLE         Key,
+    _In_ PSTR           Name,
+    _Out_ PULONG        Value
+    );
+
+extern NTSTATUS
+RegistryQueryQwordValue(
+    _In_ HANDLE         Key,
+    _In_ PSTR           Name,
+    _Out_ PULONGLONG    Value
     );
=20
-_IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryUpdateDwordValue(
-    _In_ HANDLE Key,
-    _In_ PSTR   Name,
-    _In_ ULONG  Value
+    _In_ HANDLE         Key,
+    _In_ PSTR           Name,
+    _In_ ULONG          Value
     );
=20
-_IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryQuerySzValue(
     _In_ HANDLE             Key,
@@ -173,35 +164,31 @@ RegistryQuerySzValue(
     _Outptr_ PANSI_STRING   *Array
     );
=20
-_IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryQueryBinaryValue(
-    _In_ HANDLE                                 Key,
-    _In_ PSTR                                   Name,
-    _Outptr_result_bytebuffer_(*Length) PVOID   *Buffer,
-    _Out_ PULONG                                Length
+    _In_ HANDLE         Key,
+    _In_ PSTR           Name,
+    _Outptr_ PVOID      *Buffer,
+    _Out_ PULONG        Length
     );
=20
-_IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryUpdateBinaryValue(
-    _In_ HANDLE                     Key,
-    _In_ PSTR                       Name,
-    _In_reads_bytes_(Length) PVOID  Buffer,
-    _In_ ULONG                      Length
+    _In_ HANDLE         Key,
+    _In_ PSTR           Name,
+    _In_ PVOID          Buffer,
+    _In_ ULONG          Length
     );
=20
-_IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryQueryKeyName(
     _In_ HANDLE             Key,
     _Outptr_ PANSI_STRING   *Array
     );
=20
-_IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryQuerySystemStartOption(
-    _In_ PCSTR              Prefix,
+    _In_ PSTR               Name,
     _Outptr_ PANSI_STRING   *Option
     );
=20
@@ -212,10 +199,9 @@ RegistryFreeSzValue(
=20
 extern VOID
 RegistryFreeBinaryValue(
-    _In_ PVOID  Buffer
+    _In_ PVOID          Buffer
     );
=20
-_IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 RegistryUpdateSzValue(
     _In_ HANDLE         Key,
@@ -224,10 +210,9 @@ RegistryUpdateSzValue(
     _In_ PANSI_STRING   Array
     );
=20
-_IRQL_requires_(PASSIVE_LEVEL)
 extern VOID
 RegistryCloseKey(
     _In_ HANDLE Key
     );
=20
-#endif  // _XENVBD_REGISTRY_H
+#endif  // _COMMON_REGISTRY_H
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.2da.686e3b241826552f.1a144e51f5a.b7ab8ed5dc282b42=---


From win-pv-devel-bounces@lists.xenproject.org Fri Oct 16 13:27:13 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 16 Oct 2026 13:27:13 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1451864.1666739 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHhxo-0006TK-T8; Fri, 16 Oct 2026 13:27:12 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1451864.1666739; Fri, 16 Oct 2026 13:27:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHhxo-0006Rv-CA; Fri, 16 Oct 2026 13:27:12 +0000
Received: by outflank-mailman (input) for mailman id 1451864;
 Fri, 16 Oct 2026 13:27:10 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e51fe60008425@swg.vates.tech>)
 id 1xHhxm-0006E8-5g
 for win-pv-devel@lists.xenproject.org; Fri, 16 Oct 2026 13:27:10 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xHhxl-00BNGh-IZ
 for win-pv-devel@lists.xenproject.org; Fri, 16 Oct 2026 15:27:09 +0200
Received: from [10.42.69.1] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e51fe60008425@swg.vates.tech>)
 id 6ad2262a-e002-0a2a0a5209dd-0a2a4501e862-8
 for <win-pv-devel@lists.xenproject.org>; Fri, 16 Oct 2026 15:27:09 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e51fe60008425@swg.vates.tech>)
 id 6ad2262a-5984-0a2a45010019-b9ff1c228703-6
 for <win-pv-devel@lists.xenproject.org>; Fri, 16 Oct 2026 15:27:09 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a144e51fe60008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Fri, 16 Oct 2026 13:27:09 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 82DAE82B5D;
 Fri, 16 Oct 2026 15:27:08 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=5ytUnofuA8y9KlfkgnOnodsoyNWS+DIzab0mnF1p90g=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=cDxMtz4q7HN38oFxH1oxqAoYsztcvdFjY8QxAQclbwjiHiUUExJa+qpfTeiZ02Ve1wwurGRJs
 s1Pv6TqgdtvZGukNTjjreM2zf8fhw6OsoKv0zinTi/QJBP1xztPAnlsQldx0d91iPVOWgJYEuat
 AzHHA9PXhJcsGzwLg3+ZNJo9WugbjEmTau6jJ2LTV6wYQVyQg4Qi5KJzBAt1lggmKzGoi2QZAVf
 oz2DYrV3ERMqPZUIPcn5ZxenylDDw7EkQYIn4lFkXLlngekY/SCk2kszHXDuuqsAYZ5kWQVO6CH
 RR3Dt5m6OsTk8dazl/aGrvYU8XWMpbs9w3HaNd8EIbwQ==
X-Zone-Loop: 629707f36fc572b964eef71dd3377925841b279ca9a3
x-campaign-type: default
x-transaction-id: 4a7f8667-b574-4c8a-b002-0766ee3007dc
x-swg-uid: 01-78a85e77-7feb-4396-9886-bf7ae481cc0a
X-Mailer: Sweego
Message-ID:
 <1792157229.8631fc262581453bbf619ec5b2062170.1a144e51fe60008425@vates.tech>
x-swg-bid: 1792157229.8631fc262581453bbf619ec5b2062170.1a144e51fe60008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 17/18] xencrsh: Suppress a C6385 false positive in __DumpBytes
Date: Fri, 16 Oct 2026 15:26:54 +0200
In-Reply-To: <1792157073.8631fc262581453bbf619ec5b2062170.1a144e2bf7f0008425@vates.tech>
References: <1792157073.8631fc262581453bbf619ec5b2062170.1a144e2bf7f0008425@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.2d9.209508cc0ad2da7e.1a144e51e4d.5dead7eb9079630=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792157228621
X-purgate-ID: tlsNG-d62444/1792157229-BCF47757-D9749175/0/0
X-purgate-type: clean
X-purgate-size: 1514

---=Part.2d9.209508cc0ad2da7e.1a144e51e4d.5dead7eb9079630=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

ThisTime is min(Length - Index, 8), so every read in the switch stays
below Length, but code analysis loses that bound through the switch
and reports C6385=2E Suppress the warning around the loop, with a comment
saying why=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xencrsh/pdoinquiry=2Ec | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/src/xencrsh/pdoinquiry=2Ec b/src/xencrsh/pdoinquiry=2Ec
index 97db301=2E=2E8993046 100644
--- a/src/xencrsh/pdoinquiry=2Ec
+++ b/src/xencrsh/pdoinquiry=2Ec
@@ -635,6 +635,10 @@ __DumpBytes(
 {
     ULONG       ThisTime, Index;
=20
+    // ThisTime =3D min(Length - Index, 8): reads stay below Length=2E
+    // The analyzer loses that bound through the switch (C6385 false posi=
tive)=2E
+#pragma warning(push)
+#pragma warning(disable: 6385)
     for (Index =3D 0; Index < Length; ) {
         ThisTime =3D __Min(Length - Index, 8);
         switch (ThisTime) {
@@ -675,6 +679,7 @@ __DumpBytes(
         }
         Index +=3D ThisTime;
     }
+#pragma warning(pop)
 }
 static FORCEINLINE VOID
 __DumpPage(
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.2d9.209508cc0ad2da7e.1a144e51e4d.5dead7eb9079630=---


From win-pv-devel-bounces@lists.xenproject.org Fri Oct 16 13:27:13 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 16 Oct 2026 13:27:13 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1451866.1666746 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHhxp-0006aV-MQ; Fri, 16 Oct 2026 13:27:13 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1451866.1666746; Fri, 16 Oct 2026 13:27:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHhxp-0006aJ-Hx; Fri, 16 Oct 2026 13:27:13 +0000
Received: by outflank-mailman (input) for mailman id 1451866;
 Fri, 16 Oct 2026 13:27:11 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e51efa0008425@swg.vates.tech>)
 id 1xHhxm-0006Em-T4
 for win-pv-devel@lists.xenproject.org; Fri, 16 Oct 2026 13:27:10 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xHhxm-0060cn-7Y
 for win-pv-devel@lists.xenproject.org; Fri, 16 Oct 2026 15:27:10 +0200
Received: from [10.42.69.7] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e51efa0008425@swg.vates.tech>)
 id 6ad2262c-8faa-0a2a0a5109dd-0a2a45078f76-6
 for <win-pv-devel@lists.xenproject.org>; Fri, 16 Oct 2026 15:27:10 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-ef75cf.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e51efa0008425@swg.vates.tech>)
 id 6ad2262a-b4ea-0a2a45070019-b9ff1c23a8d5-4
 for <win-pv-devel@lists.xenproject.org>; Fri, 16 Oct 2026 15:27:09 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a144e51efa0008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Fri, 16 Oct 2026 13:27:08 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 3DC5382B3E;
 Fri, 16 Oct 2026 15:27:08 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=RdY08Z92NBDVyfw9Ca9lN2YZLOnxVEdyCBfNLqbHfPU=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=VOLEVMOeHdYo016VRckxnfu7WQa2tc9ZZQ29oD5A+qvv2mIjjm2GoBPsmUxtoOn5oiilu1sFC
 R9XYrDXA65VupTyJ6NnWFMLrgySNPtS1hdg0p11b7JmUf47Va7o0r2o174xBvnZdN69jFIScM0O
 j90/SUL/mPVN7mdIZ9VahvzYPAqXq4xV2IixwRVyZ5cxWT00/rtPvlfVSIZeRFrsu9AckKpQvGz
 nEAc2gWF644Uem8SyU8cD/z/bA1KG2ZofLU1JAzS/XY6eczkWa4VuR6Ly5d5SYj82j2iKLiyZAE
 5JdxiH9laxZQAxOeS0OCKWhamRT6SNnXN4jFdLI7xaWw==
X-Zone-Loop: a43a457ba08a19b398c5939036a4b8d2e21b0a3136a9
x-campaign-type: default
x-transaction-id: 9f047e24-8331-48a1-a0f8-c05a6fac65f7
x-swg-uid: 01-0a67d969-6eee-46fe-b013-641333317483
X-Mailer: Sweego
Message-ID:
 <1792157228.8631fc262581453bbf619ec5b2062170.1a144e51efa0008425@vates.tech>
x-swg-bid: 1792157228.8631fc262581453bbf619ec5b2062170.1a144e51efa0008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 16/18] xencrsh: Annotate __Decode as _Success_
Date: Fri, 16 Oct 2026 15:26:53 +0200
In-Reply-To: <1792157073.8631fc262581453bbf619ec5b2062170.1a144e2bf7f0008425@vates.tech>
References: <1792157073.8631fc262581453bbf619ec5b2062170.1a144e2bf7f0008425@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.2d8.c0f4d93aa6953508.1a144e51d62.8125a3e89dda5dca=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792157228386
X-purgate-ID: tlsNG-ef75cf/1792157229-360C5AE4-70C85DDA/0/0
X-purgate-type: clean
X-purgate-size: 1018

---=Part.2d8.c0f4d93aa6953508.1a144e51d62.8125a3e89dda5dca=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Add _Success_(return <=3D 2) so that code
analysis does not expect Dest to be written on failure=2E
No functional change=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xencrsh/pdoinquiry=2Ec | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/xencrsh/pdoinquiry=2Ec b/src/xencrsh/pdoinquiry=2Ec
index 9726043=2E=2E97db301 100644
--- a/src/xencrsh/pdoinquiry=2Ec
+++ b/src/xencrsh/pdoinquiry=2Ec
@@ -231,6 +231,7 @@ __DecodeChar(
    =20
     return 0xFF;
 }
+_Success_(return <=3D 2)
 static FORCEINLINE UCHAR
 __Decode(
     _Out_writes_(3) PUCHAR              Dest,
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.2d8.c0f4d93aa6953508.1a144e51d62.8125a3e89dda5dca=---


From win-pv-devel-bounces@lists.xenproject.org Fri Oct 16 13:27:14 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 16 Oct 2026 13:27:14 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1451867.1666753 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHhxq-0006b3-1d; Fri, 16 Oct 2026 13:27:14 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1451867.1666753; Fri, 16 Oct 2026 13:27:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHhxp-0006ae-Jb; Fri, 16 Oct 2026 13:27:13 +0000
Received: by outflank-mailman (input) for mailman id 1451867;
 Fri, 16 Oct 2026 13:27:11 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e518270008425@swg.vates.tech>)
 id 1xHhxn-0006Ha-DC
 for win-pv-devel@lists.xenproject.org; Fri, 16 Oct 2026 13:27:11 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xHhxm-0060cn-PK
 for win-pv-devel@lists.xenproject.org; Fri, 16 Oct 2026 15:27:10 +0200
Received: from [10.42.69.3] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e518270008425@swg.vates.tech>)
 id 6ad22622-8faa-0a2a0a5109dd-0a2a4503936c-22
 for <win-pv-devel@lists.xenproject.org>; Fri, 16 Oct 2026 15:27:10 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-33051d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e518270008425@swg.vates.tech>)
 id 6ad2262c-fae8-0a2a45030019-b9ff1c23b467-3
 for <win-pv-devel@lists.xenproject.org>; Fri, 16 Oct 2026 15:27:08 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a144e518270008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Fri, 16 Oct 2026 13:27:07 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 83073827B9;
 Fri, 16 Oct 2026 15:27:06 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=LxLa7Cph6AQwaDDzRJW6bgKA5BFIFEbL0gC7DBzsh1Y=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=XLXv1YXq9DOTQT8CKRVxa4nZr91FRDWK97cvoSQDDLC6DNvvnKq3jGSNXrCg+dOBehArsgZ0w
 BSrU4xdFoFxV78PeCxcUYfLQia3AFD+7OLbU+vj3Bmqh1Hlv7HxKWP4jgyXMeMaBBmixMAJiJXj
 RNutW8cpU+vVv6FmHsgg5qF/ZPGO2dLIf3tUEPko/dina0oVjXMyJONv2PLy+85bw+tlG8HQ6EA
 cigfyrQlJ1/fZ4nqysLARasFLgJlfwP33PCJFdC5n8ZR80QrIDQbhuJBGzv+wLsgpM5sLi+Dx3M
 eDE8TaXe/fLZkmbyoFIhl4E/IG4YVKYYMVm19+tyvNog==
X-Zone-Loop: 847b358b99dc2e65cc2526be4d65cf6a4592e27853ed
x-campaign-type: default
x-transaction-id: a64b5d39-4c3f-4947-9301-5c20f7ea378e
x-swg-uid: 01-f658cd65-c717-4033-aee2-80ba8c85ba67
X-Mailer: Sweego
Message-ID:
 <1792157227.8631fc262581453bbf619ec5b2062170.1a144e518270008425@vates.tech>
x-swg-bid: 1792157227.8631fc262581453bbf619ec5b2062170.1a144e518270008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 09/18] Return StoreDirectory results as PZZSTR
Date: Fri, 16 Oct 2026 15:26:46 +0200
In-Reply-To: <1792157073.8631fc262581453bbf619ec5b2062170.1a144e2bf7f0008425@vates.tech>
References: <1792157073.8631fc262581453bbf619ec5b2062170.1a144e2bf7f0008425@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.2d1.1227e99311a39a43.1a144e5167f.877709dd235084c1=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792157226624
X-purgate-ID: tlsNG-33051d/1792157228-75EFF4E9-A7B2B8FB/0/0
X-purgate-type: clean
X-purgate-size: 1687

---=Part.2d1.1227e99311a39a43.1a144e5167f.877709dd235084c1=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

StoreDirectory returns a list of NUL-separated names ending with an
empty string, but its Value parameter was a plain PCHAR, so the analyzer
treated the result as a single character=2E Declare it as PZZSTR=2E
No functional change=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xencrsh/store=2Ec | 2 +-
 src/xencrsh/store=2Eh | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/xencrsh/store=2Ec b/src/xencrsh/store=2Ec
index aa22465=2E=2E03c9e2c 100644
--- a/src/xencrsh/store=2Ec
+++ b/src/xencrsh/store=2Ec
@@ -874,7 +874,7 @@ StoreDirectory(
     _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
     _In_opt_ PSTR                       Prefix,
     _In_ PSTR                           Node,
-    _Outptr_ PCHAR                      *Value
+    _Outptr_ PZZSTR                     *Value
     )
 {
     STORE_REQUEST                       Request;
diff --git a/src/xencrsh/store=2Eh b/src/xencrsh/store=2Eh
index 7adca20=2E=2E8468fb8 100644
--- a/src/xencrsh/store=2Eh
+++ b/src/xencrsh/store=2Eh
@@ -78,7 +78,7 @@ StoreDirectory(
     _In_opt_ PVOID  Transaction,
     _In_opt_ PSTR   Prefix,
     _In_ PSTR       Node,
-    _Outptr_ PCHAR  *Value
+    _Outptr_ PZZSTR *Value
     );
=20
 NTSTATUS
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.2d1.1227e99311a39a43.1a144e5167f.877709dd235084c1=---


From win-pv-devel-bounces@lists.xenproject.org Fri Oct 16 13:27:14 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 16 Oct 2026 13:27:14 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1451868.1666755 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHhxq-0006eZ-6f; Fri, 16 Oct 2026 13:27:14 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1451868.1666755; Fri, 16 Oct 2026 13:27:14 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHhxq-0006da-2R; Fri, 16 Oct 2026 13:27:14 +0000
Received: by outflank-mailman (input) for mailman id 1451868;
 Fri, 16 Oct 2026 13:27:12 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e5174e0008425@swg.vates.tech>)
 id 1xHhxo-0006RK-Ku
 for win-pv-devel@lists.xenproject.org; Fri, 16 Oct 2026 13:27:12 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xHhxn-0031AU-Qh
 for win-pv-devel@lists.xenproject.org; Fri, 16 Oct 2026 15:27:11 +0200
Received: from [10.42.69.11] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e5174e0008425@swg.vates.tech>)
 id 6ad2262e-bab6-0a2a0a5309dd-0a2a450b9578-10
 for <win-pv-devel@lists.xenproject.org>; Fri, 16 Oct 2026 15:27:11 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-42698a.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144e5174e0008425@swg.vates.tech>)
 id 6ad2262c-b7e8-0a2a450b0019-b9ff1c238e21-3
 for <win-pv-devel@lists.xenproject.org>; Fri, 16 Oct 2026 15:27:08 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a144e5174e0008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Fri, 16 Oct 2026 13:27:06 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 46F2D82A13;
 Fri, 16 Oct 2026 15:27:06 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=t2QonUvxsLmAm4GbN+f2Ng5qoUdMfo3d33temGck0qg=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=IfGGr5MqZtX0+EPIq5ydDWfGNCON2qZQITu7Rk7VvrTu8g67bU6kUsImWQ6D8Bfl7yvyIkUBR
 NNUMewX+Go4TeyayKazmzhYGoi/Ce52Tpdg7Cdcw03DAF5aC04n4pvfoNCk+58+suJjRkPpir/N
 cdDIVeWHofJH0N0RZfDOrtOZmhCv2Sy55DKyX1p2XhoNK9Nz29w+aX90d0xgk7AwR6vwO8NnP1j
 087A4NsJSGrdw6tigOZgMPslcECQt0qKhqvlSRkZLcLUlJYve4l6mczrZ+SL9VsQx/4qM+1P+qB
 6B8WnFyr3eFRTGBWNJNRtF7mq1FGt6RS5kGUIg0jBm7w==
X-Zone-Loop: d43557a2db73da0cbda5ec0de89f9d4d7f3efee855a5
x-campaign-type: default
x-transaction-id: 27de83fd-1160-4321-beb6-921324007c92
x-swg-uid: 01-0902f6a6-fbec-4cb2-96c2-59abef6f5f3e
X-Mailer: Sweego
Message-ID:
 <1792157226.8631fc262581453bbf619ec5b2062170.1a144e5174e0008425@vates.tech>
x-swg-bid: 1792157226.8631fc262581453bbf619ec5b2062170.1a144e5174e0008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 08/18] Annotate logging format strings
Date: Fri, 16 Oct 2026 15:26:45 +0200
In-Reply-To: <1792157073.8631fc262581453bbf619ec5b2062170.1a144e2bf7f0008425@vates.tech>
References: <1792157073.8631fc262581453bbf619ec5b2062170.1a144e2bf7f0008425@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.2d0.dad17d3e848d6664.1a144e5158c.32013c8e88df84d1=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792157226380
X-purgate-ID: tlsNG-42698a/1792157228-18AC89EA-AE7AFA32/0/0
X-purgate-type: clean
X-purgate-size: 2296

---=Part.2d0.dad17d3e848d6664.1a144e5158c.32013c8e88df84d1=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Annotate logging functions with corresponding STR typedefs=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xencrsh/log=2Ec  | 10 +++++-----
 src/xencrsh/log=2Eh  |  4 ++--
 src/xenvbd/debug=2Eh |  4 ++--
 3 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/src/xencrsh/log=2Ec b/src/xencrsh/log=2Ec
index dbff879=2E=2E2d19aaf 100644
--- a/src/xencrsh/log=2Ec
+++ b/src/xencrsh/log=2Ec
@@ -276,15 +276,15 @@ LogVDebug(
=20
 void
 __LogMessage(
-    _In_ ULONG      Level,
-    _In_ const char *Function,
-    _In_ const char *Format,
+    _In_ ULONG          Level,
+    _In_ PCSTR          Function,
+    _In_ PCSTR          Format,
     =2E=2E=2E
     )
 {
     // Note: __MODULE__ is not defined in SDV builds :(
-    static const char* Module =3D "XENCRSH";
-    va_list     Args;
+    static const char*  Module =3D "XENCRSH";
+    va_list             Args;
=20
     va_start(Args, Format);
     LogPrintf(LogQemuPut, "%s|%s|%s:", Module, __Mode(), Function);
diff --git a/src/xencrsh/log=2Eh b/src/xencrsh/log=2Eh
index f2cc918=2E=2Ef6d71c3 100644
--- a/src/xencrsh/log=2Eh
+++ b/src/xencrsh/log=2Eh
@@ -41,8 +41,8 @@
 extern void
 __LogMessage(
     _In_ ULONG      Level,
-    _In_ const char *Func,
-    _In_ const char *Format,
+    _In_ PCSTR      Function,
+    _In_ PCSTR      Format,
     =2E=2E=2E
     );
=20
diff --git a/src/xenvbd/debug=2Eh b/src/xenvbd/debug=2Eh
index 617ad99=2E=2E51948f2 100644
--- a/src/xenvbd/debug=2Eh
+++ b/src/xenvbd/debug=2Eh
@@ -55,8 +55,8 @@
 static __inline VOID
 __DebugMessage(
     _In_ ULONG                          Level,
-    _In_ __nullterminated const CHAR    *Prefix,
-    _In_ __nullterminated const CHAR    *Format,
+    _In_ PCSTR                          Prefix,
+    _In_ _Printf_format_string_ PCSTR   Format,
     =2E=2E=2E
     )
 {
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.2d0.dad17d3e848d6664.1a144e5158c.32013c8e88df84d1=---


From win-pv-devel-bounces@lists.xenproject.org Fri Oct 16 13:35:04 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 16 Oct 2026 13:35:04 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1451895.1666758 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHi5P-0008ET-NQ; Fri, 16 Oct 2026 13:35:03 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1451895.1666758; Fri, 16 Oct 2026 13:35:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHi5P-0008EM-Kx; Fri, 16 Oct 2026 13:35:03 +0000
Received: by outflank-mailman (input) for mailman id 1451895;
 Fri, 16 Oct 2026 13:35:02 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <david.preetham@citrix.com>) id 1xHi5O-0008EG-OJ
 for win-pv-devel@lists.xenproject.org; Fri, 16 Oct 2026 13:35:02 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xHi5O-008fxc-3w
 for win-pv-devel@lists.xenproject.org; Fri, 16 Oct 2026 15:35:02 +0200
Received: from [10.42.69.11] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <david.preetham@citrix.com>)
 id 6ad22805-e002-0a2a0a5209dd-0a2a450ba5e4-8
 for <win-pv-devel@lists.xenproject.org>; Fri, 16 Oct 2026 15:35:02 +0200
Received: from [209.85.218.48] (helo=mail-ej1-f48.google.com)
 by tlsNG-42698a.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <david.preetham@citrix.com>)
 id 6ad22805-b7e8-0a2a450b0019-d155da30bdac-3
 for <win-pv-devel@lists.xenproject.org>; Fri, 16 Oct 2026 15:35:01 +0200
Received: by mail-ej1-f48.google.com with SMTP id
 a640c23a62f3a-c350db5a761so95296666b.1
 for <win-pv-devel@lists.xenproject.org>; Fri, 16 Oct 2026 06:35:01 -0700 (PDT)
Received: from mewpvdipd1063.citrite.net ([52.166.251.127])
 by smtp.gmail.com with ESMTPSA id
 a640c23a62f3a-c408e32875fsm71690466b.8.2026.10.16.06.34.59
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Fri, 16 Oct 2026 06:35:00 -0700 (PDT)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=google header.d=citrix.com header.i="@citrix.com" header.h="Content-Transfer-Encoding:MIME-Version:Message-ID:Date:Subject:Cc:To:From"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=citrix.com; s=google; t=1792157701; x=1792762501; darn=lists.xenproject.org;
        h=content-transfer-encoding:mime-version:message-id:date:subject:cc
         :to:from:from:to:cc:subject:date:message-id:reply-to:content-type;
        bh=KZbeEgodmHu46qURJw9TzbpWZ0ZKkwF8Gi+v7LfYKH4=;
        b=R8c9w7O+/KEVBy/iVa85H0WLJkmKTnp0ZarO3o0BWsqyFlo2xlFxnATBOpO+6TYsMj
         29jQ8XwMSRF3EaNfE3ieY8f+wYVAsp/T8IKDXOQ+gmwKHdv/Fnjd2lJQIENUUXXYHEUP
         X6D7zIHIA/Qg7QDG2o2QYmIuWK3Iyo01OC470=
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20260707; t=1792157701; x=1792762501;
        h=content-transfer-encoding:mime-version:message-id:date:subject:cc
         :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date
         :message-id:reply-to:content-type;
        bh=KZbeEgodmHu46qURJw9TzbpWZ0ZKkwF8Gi+v7LfYKH4=;
        b=tW2uCbCpNrgh88TOLkvXaBKlNH81gjmZ38FSg9XlawlYUcc3HzdXzn/uLu66bBUKlC
         0N7IlPW8aOjWOJpzhzCo27R4aew5PneyjJudyFqo/B34F6qoLk1EEjZybVEVA3Luob7W
         SNIE8YUm/lsSMK2BRFXGs0OncYPv3Lahmqs3ZceK5Oabk3TztOhmCivMEoxKZ/0ec+DJ
         AuRfCcbuY6Vgxdlzq8FLhOtXdRvP/lcbu+h4AfRP9GEmTy2AzEav7bSIjZMmS39MYFln
         Ry9Sx2KjeC2BdEkndoJp5gxdKZanSRwGu8h558GZ3fxeCADUmsreajOxojOch4anoqPB
         3YOA==
X-Gm-Message-State: AFq9FYJ84bAQMBJyMWehPeN6YHlvdF4xcM9KmuKNa4iFzem3cUdmcNPT
	9vT3NjIvlfgVB5HFDxEdMLpPj8OjwEnFK2Zhk/K58DJIN17zFdZE8iu2FDfJmY5hCj4ogUqBgUT
	014qz
X-Gm-Gg: AYBFou3b3zqZGorhrcH6wuHJlbAaZA8Ko5+RAYFYmTBZmXwnSwiurMEY/LIvHOhnd1x
	Q24weO/RYdOT4nhJizfZp+UPm0djWeAncvMeTI8/pWd7lXWoQdFck8YnchhqNwyaRV57cj8WKsZ
	PJfkAeoBUShIcdqdCte98nnP0zbNqKayLtC0wlJzj6wVeI+V1p1sS0hOB8kxUUbw8M/bC9qqOLO
	Vf9YdBeTGLSej/RyOkzflUCeC375LCxqExupqkfOmIi0qEYum0uV/AiC1awjvuGCgftICw7u6Vo
	jExoG3tbQvjo/nAeVPkNjLT4BPK4/14wp5a+0Aq3FAJhjIC1+GblsgYB67yuhbjQYEZ5HMyG3Nr
	sJe89r32F95Hv2/TIYqI1wZews0bkIeaX1BHTHbkdLqE6Q7WOcX5WZkyqnnkc6cPYc0lhn0a2Nu
	FM4WqV54Zvq8Il42HUP5+ksTDxpOrpOadD5bPh04ezk8EfLkhxiYkWoBO7jn1el9M9Znf4hhaXb
	GP5QQJt5pGqm3Uk6mMDTPgTOQKvORHDd7wrbwg=
X-Received: by 2002:a17:906:478a:b0:c40:b59:f with SMTP id a640c23a62f3a-c400b59064amr302316666b.47.1792157700916;
        Fri, 16 Oct 2026 06:35:00 -0700 (PDT)
From: david ambu <david.preetham@citrix.com>
To: win-pv-devel@lists.xenproject.org
Cc: david ambu <david.preetham@citrix.com>
Subject: [PATCH] xeniface: fix use-after-free in RemoveWatch/SuspendDeregister
Date: Fri, 16 Oct 2026 14:34:28 +0100
Message-ID: <20261016133428.1569-1-david.preetham@citrix.com>
X-Mailer: git-send-email 2.51.0.windows.1
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-purgate-ID: tlsNG-42698a/1792157701-1A0C59EA-0A3AFBB4/0/0
X-purgate-type: clean
X-purgate-size: 2892

IoctlStoreRemoveWatch and IoctlSuspendDeregister use the loop variable
to decide whether the lookup succeeded. When no entry matches, Context
is left pointing at the last entry visited. If that entry has the
requested pointer value but belongs to a different FileObject, it is
skipped (not unlinked), the post-loop check passes, and the context is
freed while still linked in StoreWatchList / SuspendList. The next list
walk, insert, cleanup or suspend notification then touches freed pool.

Track the match in a separate Found pointer that is only set alongside
RemoveEntryList, and only free when Found is non-NULL.

Signed-off-by: david ambu <david.preetham@citrix.com>
---
 src/xeniface/ioctl_store.c   | 8 +++++---
 src/xeniface/ioctl_suspend.c | 8 +++++---
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/src/xeniface/ioctl_store.c b/src/xeniface/ioctl_store.c
index c3beca2..97bef75 100644
--- a/src/xeniface/ioctl_store.c
+++ b/src/xeniface/ioctl_store.c
@@ -678,7 +678,8 @@ IoctlStoreRemoveWatch(
 {
     NTSTATUS                        status;
     PXENIFACE_STORE_REMOVE_WATCH_IN In = Buffer;
-    PXENIFACE_STORE_CONTEXT         Context = NULL;
+    PXENIFACE_STORE_CONTEXT         Context;
+    PXENIFACE_STORE_CONTEXT         Found = NULL;
     KIRQL                           Irql;
     PLIST_ENTRY                     Node;
 
@@ -702,15 +703,16 @@ IoctlStoreRemoveWatch(
         }
 
         RemoveEntryList(&Context->Entry);
+        Found = Context;
         break;
     }
     KeReleaseSpinLock(&Fdo->StoreWatchLock, Irql);
 
     status = STATUS_NOT_FOUND;
-    if (Context == NULL || Context != In->Context)
+    if (Found == NULL)
         goto fail2;
 
-    StoreFreeWatch(Fdo, Context);
+    StoreFreeWatch(Fdo, Found);
 
     return STATUS_SUCCESS;
 
diff --git a/src/xeniface/ioctl_suspend.c b/src/xeniface/ioctl_suspend.c
index 7831c1b..339bc64 100644
--- a/src/xeniface/ioctl_suspend.c
+++ b/src/xeniface/ioctl_suspend.c
@@ -160,7 +160,8 @@ IoctlSuspendDeregister(
 {
     NTSTATUS                        status;
     PXENIFACE_SUSPEND_REGISTER_OUT  In = Buffer;
-    PXENIFACE_SUSPEND_CONTEXT       Context = NULL;
+    PXENIFACE_SUSPEND_CONTEXT       Context;
+    PXENIFACE_SUSPEND_CONTEXT       Found = NULL;
     KIRQL                           Irql;
     PLIST_ENTRY                     Node;
 
@@ -184,15 +185,16 @@ IoctlSuspendDeregister(
         }
 
         RemoveEntryList(&Context->Entry);
+        Found = Context;
         break;
     }
     KeReleaseSpinLock(&Fdo->SuspendLock, Irql);
 
     status = STATUS_NOT_FOUND;
-    if (Context == NULL || Context != In->Context)
+    if (Found == NULL)
         goto fail2;
 
-    SuspendFreeEvent(Fdo, Context);
+    SuspendFreeEvent(Fdo, Found);
 
     return STATUS_SUCCESS;
 
-- 
2.51.0.windows.1



From win-pv-devel-bounces@lists.xenproject.org Fri Oct 16 13:37:47 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 16 Oct 2026 13:37:47 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1451906.1666762 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHi82-0008L4-Ud; Fri, 16 Oct 2026 13:37:46 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1451906.1666762; Fri, 16 Oct 2026 13:37:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xHi82-0008Kx-S9; Fri, 16 Oct 2026 13:37:46 +0000
Received: by outflank-mailman (input) for mailman id 1451906;
 Fri, 16 Oct 2026 13:37:45 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144eec3250008425@swg.vates.tech>)
 id 1xHi81-0008Kr-RW
 for win-pv-devel@lists.xenproject.org; Fri, 16 Oct 2026 13:37:45 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xHi81-00BPNf-8D
 for win-pv-devel@lists.xenproject.org; Fri, 16 Oct 2026 15:37:45 +0200
Received: from [10.42.69.4] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144eec3250008425@swg.vates.tech>)
 id 6ad2287a-8faa-0a2a0a5109dd-0a2a450491da-44
 for <win-pv-devel@lists.xenproject.org>; Fri, 16 Oct 2026 15:37:45 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-ebf023.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a144eec3250008425@swg.vates.tech>)
 id 6ad228a8-b57f-0a2a45040019-b9ff1c128fbd-3
 for <win-pv-devel@lists.xenproject.org>; Fri, 16 Oct 2026 15:37:45 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a144eec3250008425.002 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Fri, 16 Oct 2026 13:37:40 +0000
Received: from [192.168.1.61] (142.220.66.37.rev.sfr.net [37.66.220.142])
 (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id D77BE810D3;
 Fri, 16 Oct 2026 15:37:39 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=5MVQ7jcnlzOBonKLHg5tKYvKuOjyg4pIP/hzvHDhIoc=;
 h=from:subject:date:message-id:to:mime-version:content-type:in-reply-to:references:feedback-id;
 b=kW0nlRyW1W4pPjn3AMAb2XMfYXvz2g26nyEk4CvfomxoGPm4kIcCOGDusRsgCifCZwZbjUODT
 EBGgumxiC2Fa7r+gFwmMlZf2DwNn+XPzSADtixYthIW9ycevVXDeeH6q/NrWLmZO2+OpljgT3Du
 /cokUSqpG3G2I0BmSihaL/3YlCLVfc+1wq+tA0txrdeSRe/75TPvKz3lwr1olqjQksXkOOPA4CZ
 yOKM2FsQFJH0D6SYf7dY2zUMw26brOTMdKd369N97zVtJ7Fk2oeS9W5CfxbLIPHZnP93Ezc8r2R
 Qv3bTQqBBbFDJsokOFSt3NDB998wOh1a/TKCheQ51k4w==
X-Zone-Loop: f36ef965e074c039bbc4973707b4d60f1708f210812d
x-campaign-type: default
x-transaction-id: ca8bd285-c514-4266-ad88-9b513ba00911
x-swg-uid: 01-3365ae22-633e-4b13-9b77-1f3d8c21449f
X-Mailer: Sweego
Message-ID:
 <1792157860.8631fc262581453bbf619ec5b2062170.1a144eec3250008425@vates.tech>
x-swg-bid: 1792157860.8631fc262581453bbf619ec5b2062170.1a144eec3250008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
Date: Fri, 16 Oct 2026 15:37:39 +0200
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH] xeniface: fix use-after-free in
 RemoveWatch/SuspendDeregister
To: david ambu <david.preetham@citrix.com>, win-pv-devel@lists.xenproject.org
References: <20261016133428.1569-1-david.preetham@citrix.com>
Content-Language: en-US
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
In-Reply-To: <20261016133428.1569-1-david.preetham@citrix.com>
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.2df.83d79ac56b011ffe.1a144eec05f.9db72ed3bef696e9=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792157859936
X-purgate-ID: tlsNG-ebf023/1792157865-C14D3B50-5EB32AB4/0/0
X-purgate-type: clean
X-purgate-size: 3657

---=Part.2df.83d79ac56b011ffe.1a144eec05f.9db72ed3bef696e9=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

On 16/10/2026 15:35, david ambu wrote:
> IoctlStoreRemoveWatch and IoctlSuspendDeregister use the loop variable
> to decide whether the lookup succeeded=2E When no entry matches, Context
> is left pointing at the last entry visited=2E If that entry has the
> requested pointer value but belongs to a different FileObject, it is
> skipped (not unlinked), the post-loop check passes, and the context is
> freed while still linked in StoreWatchList / SuspendList=2E The next lis=
t
> walk, insert, cleanup or suspend notification then touches freed pool=2E
>=20
> Track the match in a separate Found pointer that is only set alongside
> RemoveEntryList, and only free when Found is non-NULL=2E
>=20
> Signed-off-by: david ambu <david=2Epreetham@citrix=2Ecom>

Very nice find, thanks=2E

Reviewed-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>

> ---
>   src/xeniface/ioctl_store=2Ec   | 8 +++++---
>   src/xeniface/ioctl_suspend=2Ec | 8 +++++---
>   2 files changed, 10 insertions(+), 6 deletions(-)
>=20
> diff --git a/src/xeniface/ioctl_store=2Ec b/src/xeniface/ioctl_store=2Ec
> index c3beca2=2E=2E97bef75 100644
> --- a/src/xeniface/ioctl_store=2Ec
> +++ b/src/xeniface/ioctl_store=2Ec
> @@ -678,7 +678,8 @@ IoctlStoreRemoveWatch(
>   {
>       NTSTATUS                        status;
>       PXENIFACE_STORE_REMOVE_WATCH_IN In =3D Buffer;
> -    PXENIFACE_STORE_CONTEXT         Context =3D NULL;
> +    PXENIFACE_STORE_CONTEXT         Context;
> +    PXENIFACE_STORE_CONTEXT         Found =3D NULL;
>       KIRQL                           Irql;
>       PLIST_ENTRY                     Node;
>  =20
> @@ -702,15 +703,16 @@ IoctlStoreRemoveWatch(
>           }
>  =20
>           RemoveEntryList(&Context->Entry);
> +        Found =3D Context;
>           break;
>       }
>       KeReleaseSpinLock(&Fdo->StoreWatchLock, Irql);
>  =20
>       status =3D STATUS_NOT_FOUND;
> -    if (Context =3D=3D NULL || Context !=3D In->Context)
> +    if (Found =3D=3D NULL)
>           goto fail2;
>  =20
> -    StoreFreeWatch(Fdo, Context);
> +    StoreFreeWatch(Fdo, Found);
>  =20
>       return STATUS_SUCCESS;
>  =20
> diff --git a/src/xeniface/ioctl_suspend=2Ec b/src/xeniface/ioctl_suspend=
=2Ec
> index 7831c1b=2E=2E339bc64 100644
> --- a/src/xeniface/ioctl_suspend=2Ec
> +++ b/src/xeniface/ioctl_suspend=2Ec
> @@ -160,7 +160,8 @@ IoctlSuspendDeregister(
>   {
>       NTSTATUS                        status;
>       PXENIFACE_SUSPEND_REGISTER_OUT  In =3D Buffer;
> -    PXENIFACE_SUSPEND_CONTEXT       Context =3D NULL;
> +    PXENIFACE_SUSPEND_CONTEXT       Context;
> +    PXENIFACE_SUSPEND_CONTEXT       Found =3D NULL;
>       KIRQL                           Irql;
>       PLIST_ENTRY                     Node;
>  =20
> @@ -184,15 +185,16 @@ IoctlSuspendDeregister(
>           }
>  =20
>           RemoveEntryList(&Context->Entry);
> +        Found =3D Context;
>           break;
>       }
>       KeReleaseSpinLock(&Fdo->SuspendLock, Irql);
>  =20
>       status =3D STATUS_NOT_FOUND;
> -    if (Context =3D=3D NULL || Context !=3D In->Context)
> +    if (Found =3D=3D NULL)
>           goto fail2;
>  =20
> -    SuspendFreeEvent(Fdo, Context);
> +    SuspendFreeEvent(Fdo, Found);
>  =20
>       return STATUS_SUCCESS;
>  =20



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.2df.83d79ac56b011ffe.1a144eec05f.9db72ed3bef696e9=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 19 07:46:06 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 19 Oct 2026 07:46:06 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1453971.1667442 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xIi4L-0000jI-IH; Mon, 19 Oct 2026 07:46:05 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1453971.1667442; Mon, 19 Oct 2026 07:46:05 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xIi4L-0000jB-FG; Mon, 19 Oct 2026 07:46:05 +0000
Received: by outflank-mailman (input) for mailman id 1453971;
 Mon, 19 Oct 2026 07:46:04 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <owen.smith@citrix.com>) id 1xIi4K-0000j5-O0
 for win-pv-devel@lists.xenproject.org; Mon, 19 Oct 2026 07:46:04 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xIi4K-000PUL-2R
 for win-pv-devel@lists.xenproject.org; Mon, 19 Oct 2026 09:46:04 +0200
Received: from [10.42.69.10] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ad5cab8-e002-0a2a0a5209dd-0a2a450aa196-10
 for <win-pv-devel@lists.xenproject.org>; Mon, 19 Oct 2026 09:46:03 +0200
Received: from [52.101.53.13]
 (helo=BL0PR03CU003.outbound.protection.outlook.com)
 by tlsNG-4011c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ad5cab7-f2d2-0a2a450a0019-3465350db1a4-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 19 Oct 2026 09:46:00 +0200
Received: from SA6PR03MB7760.namprd03.prod.outlook.com (2603:10b6:806:43c::5)
 by MW4PR03MB6572.namprd03.prod.outlook.com (2603:10b6:303:12b::9)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.522.18; Mon, 19 Oct
 2026 07:45:55 +0000
Received: from SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38]) by SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38%5]) with mapi id 15.21.0522.017; Mon, 19 Oct 2026
 07:45:55 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:x-ms-exchange-senderadcheck"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
 b=dpVPsS9DC4PM02rJRXEjq59p/QM3C1aMc4UyaTGwuDa+j1OUwqicCMfLm1bPPsFTqvOTzOym2q37rRCuhKw+BVxOh71hdbkMVdZGPdpA4w+lyL3pTJiuBV4Y5hoKg3J/jcDMLC7U+1jJ6W+oYhVap+iwoJSOCEGPtMOeUUOGgQD6K7lSPLjZg5UMw7ZWceAvAL9m8BFmo87grdxGgIzHDaOYWJ0zNBP8T1fNtDb6jo7zBLBex3zuqhmKiXUGEG74foDKxUYTwQIYf6vxjzf4EGwCvy9Y3lG3b+Kl0cPuqzfwM56RNTjrNvdxgGEf6pCMLPnEovm/L2GQ5lSNdfyAXQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector10001;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=o4iedRjWHEKq0BilNA4vk7N94wIpfhxVbpPI9732K7Q=;
 b=ZfrrJjcMuX6AsgATRkqxhH1bHGogPKOsHtTPccA1KgLSJdHeyvTQuaczpksBA9Zqam/g6HOfqIjM66hwbphZaO9cJkvl0xW36fnCMwkLSgQa3Kcq8SuXni5KLILfOMYbUPhAf2bZQBhuz7dlNlk7+HgjShT0WMrOeWCfuP4zV9eKpDYv/NzlZ1w39CE79xFWhcOzLw81MvBA0Do/dgwgYd54ArUHsKr3YXui6b6Z9QKSDFFLZh2MrKKIRmmgOBZ4Lokkf3ORRdotuQy/QZcKzMF4DdWpWzRhYwYe2zUYgGfq3l6BJf8hdcgGRfpJJ2OJ6Yg6BmEwdZtjAq0GIkJx0Q==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=o4iedRjWHEKq0BilNA4vk7N94wIpfhxVbpPI9732K7Q=;
 b=ns4Ukrtt6gyidF23gZwTWGOAkvKZYvTfkjURP0kMtHRiEC1MOC+rNewAJip09tZ/caNeaH0fUPQJtdojuX7rnYZA6KFcgwRyUMPgoHgcaxcERTWzuPsaUa8MQ0/uCByMMsHvTegRs/jtAVxQcSSwlYCZbWv9Aq0XcpVEjfxXfcw=
From: Owen Smith <owen.smith@citrix.com>
To: =?iso-8859-1?Q?C=E9saire_Mounah?= <cesaire.mounah@vates.tech>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Subject: Re: [PATCH 00/18] xenvbd: Update annotations to SAL 2.0
Thread-Topic: [PATCH 00/18] xenvbd: Update annotations to SAL 2.0
Thread-Index: AQHdXXG7QxjdUcXWaUmbu4c7EPTy5rcEf69Z
Date: Mon, 19 Oct 2026 07:45:55 +0000
Message-ID:
 <SA6PR03MB7760A451F811C0EE42A69940FE982@SA6PR03MB7760.namprd03.prod.outlook.com>
References:
 <1792157073.8631fc262581453bbf619ec5b2062170.1a144e2bf7f0008425@vates.tech>
In-Reply-To:
 <1792157073.8631fc262581453bbf619ec5b2062170.1a144e2bf7f0008425@vates.tech>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
msip_labels:
authentication-results: mx.microsoft.com 1; dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=citrix.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: SA6PR03MB7760:EE_|MW4PR03MB6572:EE_
x-ms-office365-filtering-correlation-id: 4eb319a4-fea4-4c74-158d-08df2db50225
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam:
 BCL:0;ARA:13230040|23010399003|376014|1800799024|366016|6133799003|18002099003|10067099003|22082099003|3023799007|38070700021|11063799006|261009223027099003|56012099006;
x-microsoft-antispam-message-info:
 HIELzkiC5Ys4redmoBDuwZqQZ25hdIOtDffTkB2xYYfgGK/lNx22QDXMhCgtj4ghVU3MCCkaiVMq7ec0aNxorNR2E6LLpTvzh5rWyewgASeHDIKkamz3XLR0+Xgo91+v0FO9qjymWENooRgTcZioUnzHVZ5uzGmv32GXXaEcMMdFFz/fbjH46tQhA/2exRmpC0OtjtsUiICpZmksCc6++C+SuDLAEWNZr945QB2XBc0joVAgnT8VqMdp8x1eGcScavKXtvR5j8CE4a6a27X6nvLLUg+P9lMicSsflYytkYM7Eaz06LiWnWRoUHAbXrFXFDmCS5lwhO8aZENsFxv+B7afwEndDSlw7Tz8vCG1HF/td2GN2vuj0JCxZworAOCwA2AEgu/DeFqncbvwPNp8gM8qWpqd8h4sW+LoToxRrSC+gxov4FY48jLfEd2gvCaphA3ugzvLKRiNuId/YBSDop6k8DVAeVhay5v/0DB0rsU6RlnMhkd6oUa8+OD13QunmWn9sLZvwnaP3OcD+V9ge20wSjprrG/8xEKUZCawK8EVKmDb/KGrW0AulzHJSpe/IWBycKwbZPbvKNEZBNWSJla4F07ke5Q2gDzFHMwT7W8xNoEBm/KCLp1pUS7KzxEruYsC5wMdcKEdn65lfSNnEv38GLH9pCazj+z9kohaGzU=
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SA6PR03MB7760.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(376014)(1800799024)(366016)(6133799003)(18002099003)(10067099003)(22082099003)(3023799007)(38070700021)(11063799006)(261009223027099003)(56012099006);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?iso-8859-1?Q?bYMm7/nSV9XSWRhMePv129M/vkJQgndwNO9YunR+kEksd9/5oJWXH99ETu?=
 =?iso-8859-1?Q?1Tc+v3BkVwxxPnScHddGAztw0uNF75A4SKzT2pIKdOrpTzApD/YuiZ/heV?=
 =?iso-8859-1?Q?jzIthhJdTMIR2qZli2ifwGEjlri0/yh7JwVDWOUbhO610SMUzMMC4RCaTo?=
 =?iso-8859-1?Q?Ai0eZEXsFoQdNdgDLRBXN9pQJj4qZIM9svVX5JhHME/euAw+E/YM/WMkF/?=
 =?iso-8859-1?Q?Snge4dLKaisPjdjpGBeoJiOU57NYykaQ9k3zHIB0/g1kB/ShWqHWnYBj9c?=
 =?iso-8859-1?Q?Oi9bGGsfClXli60Soc2cktrkAKr8y95uZcDygywtCN88Y/sLQe3BW/vc6E?=
 =?iso-8859-1?Q?eFIlHnE/acfTWGrjrcPiJDGTVnqsdYZkVy6J/SKvUuVZ5jga2Lk0vY/KFh?=
 =?iso-8859-1?Q?Y6iuh7iA/mSV8veYgEhaP+fzovU46UvDW+8vNZDUNNfatfmHFMpeZKa76h?=
 =?iso-8859-1?Q?Ai6myTeep+l2oS+wYG7tTvmBkLNVH90iyynUEFyDZeFoxdlxEt+kmnWD0s?=
 =?iso-8859-1?Q?czwelbIULNVcpCEFpVEg8WK7PmrdguVwaIjv36O66b5fA2f+jys2iAzyWW?=
 =?iso-8859-1?Q?mm+6QPHT1xBDY1/jfOxLp99VKfN3oYV7qNDk1ipTf+Ai8D45pSH+zqnti6?=
 =?iso-8859-1?Q?SERKNP+Jo51gFO3+aPIQgVEdCBAZt0RO0QbFCKrj4NHlQ+JOnz6lIxtZ1k?=
 =?iso-8859-1?Q?99tjoYhBKeSgQjhfsJbM2PYigJBwHd45X1bDQOyOSnwTvu3tboOVIsy9Xy?=
 =?iso-8859-1?Q?uleUWTUdGqtxrEFWaP1mELbin2Srx1oVqrktWfamee3xTOhsGKdaBHRDti?=
 =?iso-8859-1?Q?CFUuvQzL6EY0aHC0ZkXyHgXuiWZJPQ9EginCMkZHGgc6JhZKriS1Lhq0/F?=
 =?iso-8859-1?Q?MjoYrTA1ZQiDfYskl/hgBIjZnCU1/5aKm65C6lG++9lXwFMDv0Y5wD4uGt?=
 =?iso-8859-1?Q?csTHJj2mj82BlE3/e+45NQM7Ayl/FczX0aZ1QvrvYETbCmFsShQ1xbiHel?=
 =?iso-8859-1?Q?RaKCnDrvTszoqhlm5i08ylfDrqxu4hxJGfI43etO0qQ278/WlNBxhXUk6e?=
 =?iso-8859-1?Q?VFOvR9HYotsduvd5woVjGc+gFxE5qeN7hj3t/6SaL8A0JuZfhc+2zSeHDm?=
 =?iso-8859-1?Q?ExzTEKX6cCwZ9K0JFYMS/GqhLHfj6Quur9q4I1MaTHulYaoJXRZOkASw60?=
 =?iso-8859-1?Q?/GS6SRHBC90XGY2W3h+Pi6xeEY4I9uvgegVe6DGoRxC1hZVdDlIE2YPlyt?=
 =?iso-8859-1?Q?Mzet9THNJyZQ7UUS7qfZqkINggM47tOW3+zIJR6DgA2f8YjVoQBAQywX00?=
 =?iso-8859-1?Q?6jA1F1iQDevR3hQOugRfWgJv5cbtUfbpWm0yCZGHqGxHMiDVkt+Xk91z/d?=
 =?iso-8859-1?Q?iGpEbPPm/C1t5ltuKk+Qo5tVy4wZ1i4NGVQmeIF7FJ97dY8DAv8Jr3XR/n?=
 =?iso-8859-1?Q?KXSH8vFEAnPwdFZM5e1KHQDlmDe1UbgVjjWuNkfnW32OrLu/ogIUM/v0bw?=
 =?iso-8859-1?Q?biw8D42WnNtMZ2a/kW1MV79NIS/mnodL1Sd52YKutXuvowDRG8ufdGSyYY?=
 =?iso-8859-1?Q?/ywti7siKhCneq9zmEAa6fYS5pY3Gw+6xP+GxytcdZd/bdrzc4XPJkMXpI?=
 =?iso-8859-1?Q?xN2Djgai3Iqytnm4D8pNx26Hy7SSgTNL6Lh423a5EAuJdWGc/PT2mw3xmq?=
 =?iso-8859-1?Q?evRYjv57VcW0s42huxrN8Enlh710oLwhqpEiLzY6j4gNyXDpEBsMOkK3zl?=
 =?iso-8859-1?Q?oxTpaySISa7Sl7Z8gacP5WpuXCYx6MwIP2g2RjKu+DyZDpw3TdTVaO5ISO?=
 =?iso-8859-1?Q?rgycN9Vynw=3D=3D?=
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-OriginatorOrg: citrix.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: SA6PR03MB7760.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 4eb319a4-fea4-4c74-158d-08df2db50225
X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Oct 2026 07:45:55.7947
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: ToGYF+7ALD1iuzNoTy7WmHRl/zksiTVJx+Qfi74tCQt5srmDQJpa4yYK579DPg9KfQQqfilbu35VhKs1Q/PfQA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW4PR03MB6572
X-purgate-ID: tlsNG-4011c0/1792395960-589C9CFC-F397B518/0/0
X-purgate-type: clean
X-purgate-size: 5881

This series looks good.
I fixed 1 small whitespace issue (space at end-of-line)

Updating the emulated interface header, updated the XENFILT_EMULATED_INTERF=
ACE_VERSION_MAX
value, so the inf file needs to be updated to the later revision. If the in=
f is not updated,
then its possible to load xenvbd on an older xenbus that does not expose em=
ulated v3,
which is non-fatal, but xenvbd will never be able to set the unplug request=
, leading
to always using emulated disks on the first few disks.
I will prepare a patch to update the inf file.

Reviewed-by: Owen Smith <owen.smith@citrix.com>

Owen

________________________________________
From: win-pv-devel <win-pv-devel-bounces@lists.xenproject.org> on behalf of=
 C=E9saire Mounah <cesaire.mounah@vates.tech>
Sent: 16 October 2026 2:24 PM
To: win-pv-devel@lists.xenproject.org
Cc: C=E9saire Mounah
Subject: [PATCH 00/18] xenvbd: Update annotations to SAL 2.0

This patch series updates the xenvbd and xencrsh drivers to use SAL 2.0
annotations and fixes the issues found after code analysis.

It is organized into three parts: updating annotations to SAL 2.0,
fixing annotation issues, and fixes after code analysis.

Part 1: Update annotations to SAL 2.0
* Update common files with xenbus
* Sync shared headers with xenbus
* xenvbd: convert old annotations to SAL 2.0
* Update string typedefs

Part 2: Fix annotation issues
* fix missing annotations
* Fix direction annotations on written parameters
* Add size annotations to buffer parameters
* Annotate logging format strings
* Return StoreDirectory results as PZZSTR
* Annotate conditional output parameters with _Success_
* Fix annotations in macros
* Fix inconsistent annotations
* xenvbd: Fix the Interface annotation of __AdapterQueryInterface
* xenvbd: Accept NULL in RegistryOpenKey, RegistryCreateKey and
    __RingFree
* xencrsh: Annotate __Decode as _Success_

Part 3: Fixes after code analysis
* xenvbd: Fix out-of-bounds read on empty StoreDirectory results
* xencrsh: Suppress a C6385 false positive in __DumpBytes
* xenvbd:registry: sync with xenbus

C=E9saire Mounah (18):
  Update common files with xenbus
  Sync shared headers with xenbus
  xenvbd: convert old annotations to SAL 2.0
  Update string typedefs
  fix missing annotations
  Fix direction annotations on written parameters
  Add size annotations to buffer parameters
  Annotate logging format strings
  Return StoreDirectory results as PZZSTR
  xenvbd: Fix out-of-bounds read on empty StoreDirectory results
  Annotate conditional output parameters with _Success_
  Fix annotations in macros
  Fix inconsistent annotations
  xenvbd: Fix the Interface annotation of __AdapterQueryInterface
  xenvbd: Accept NULL in RegistryOpenKey, RegistryCreateKey and
    __RingFree
  xencrsh: Annotate __Decode as _Success_
  xencrsh: Suppress a C6385 false positive in __DumpBytes
  xenvbd:registry: sync with xenbus

 include/cache_interface.h    | 130 +++++-----
 include/debug_interface.h    |  88 +++----
 include/emulated_interface.h | 137 ++++++----
 include/evtchn_interface.h   | 136 +++++-----
 include/gnttab_interface.h   | 148 +++++------
 include/names.h              |  32 +--
 include/store_interface.h    | 156 +++++------
 include/suspend_interface.h  |  80 +++---
 include/unplug_interface.h   |  20 +-
 include/xencrsh_interface.h  |   2 +-
 src/common/util.h            |  87 ++++---
 src/xencrsh/assert.h         | 158 ++++++++----
 src/xencrsh/austere.c        |  44 ++--
 src/xencrsh/austere.h        |   8 +-
 src/xencrsh/buffer.c         |  23 +-
 src/xencrsh/buffer.h         |  19 +-
 src/xencrsh/driver.c         |  73 +++---
 src/xencrsh/driver.h         |   6 +-
 src/xencrsh/evtchn.c         |  24 +-
 src/xencrsh/evtchn.h         |  20 +-
 src/xencrsh/fdo.c            |  70 ++---
 src/xencrsh/fdo.h            |  28 +-
 src/xencrsh/frontend.c       | 176 ++++++-------
 src/xencrsh/frontend.h       |  30 +--
 src/xencrsh/gnttab.c         |  22 +-
 src/xencrsh/gnttab.h         |  14 +-
 src/xencrsh/hvm.c            |  36 +--
 src/xencrsh/hvm.h            |  18 +-
 src/xencrsh/hypercall_stub.c |  12 +-
 src/xencrsh/log.c            |  42 +--
 src/xencrsh/log.h            |   6 +-
 src/xencrsh/pdo.c            | 223 ++++++++--------
 src/xencrsh/pdo.h            |  42 +--
 src/xencrsh/pdoinquiry.c     | 132 +++++-----
 src/xencrsh/pdoinquiry.h     |  10 +-
 src/xencrsh/queue.c          |  40 +--
 src/xencrsh/queue.h          |  20 +-
 src/xencrsh/srbext.h         |   2 +-
 src/xencrsh/store.c          | 178 ++++++-------
 src/xencrsh/store.h          |  44 ++--
 src/xenvbd/adapter.c         | 357 ++++++++++++-------------
 src/xenvbd/adapter.h         |  54 ++--
 src/xenvbd/assert.h          | 165 +++++-------
 src/xenvbd/base64.c          |  33 +--
 src/xenvbd/base64.h          |   8 +-
 src/xenvbd/debug.h           |   8 +-
 src/xenvbd/driver.c          |  44 ++--
 src/xenvbd/driver.h          |  20 +-
 src/xenvbd/frontend.c        | 272 +++++++++----------
 src/xenvbd/frontend.h        |  50 ++--
 src/xenvbd/granter.c         |  58 ++---
 src/xenvbd/granter.h         |  34 +--
 src/xenvbd/registry.c        | 487 +++++++++++++++++++----------------
 src/xenvbd/registry.h        | 225 ++++++++--------
 src/xenvbd/ring.c            | 416 +++++++++++++++---------------
 src/xenvbd/ring.h            |  28 +-
 src/xenvbd/target.c          | 334 ++++++++++++------------
 src/xenvbd/target.h          |  60 +++--
 src/xenvbd/thread.c          |  46 ++--
 src/xenvbd/thread.h          |  30 +--
 60 files changed, 2692 insertions(+), 2573 deletions(-)

--
2.55.0.windows.5



--
C=E9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen Orchestra - Vates solutions

web: https://vates.tech


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 19 09:02:09 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 19 Oct 2026 09:02:09 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1454012.1667482 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xIjFx-0004Ka-5P; Mon, 19 Oct 2026 09:02:09 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1454012.1667482; Mon, 19 Oct 2026 09:02:09 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xIjFx-0004KT-2H; Mon, 19 Oct 2026 09:02:09 +0000
Received: by outflank-mailman (input) for mailman id 1454012;
 Mon, 19 Oct 2026 09:02:08 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1536582820008425@swg.vates.tech>)
 id 1xIjFv-0004KN-Hf
 for win-pv-devel@lists.xenproject.org; Mon, 19 Oct 2026 09:02:07 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xIjFu-008sba-K2
 for win-pv-devel@lists.xenproject.org; Mon, 19 Oct 2026 11:02:06 +0200
Received: from [10.42.69.1] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1536582820008425@swg.vates.tech>)
 id 6ad5dc8d-bab6-0a2a0a5309dd-0a2a4501d634-6
 for <win-pv-devel@lists.xenproject.org>; Mon, 19 Oct 2026 11:02:06 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1536582820008425@swg.vates.tech>)
 id 6ad5dc8d-5984-0a2a45010019-b9ff1c129beb-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 19 Oct 2026 11:02:06 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1536582820008425.003 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 19 Oct 2026 09:02:03 +0000
Received: from [192.168.1.61] (142.220.66.37.rev.sfr.net [37.66.220.142])
 (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 39C9A8216B;
 Mon, 19 Oct 2026 11:02:03 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=IIKVn+twJfnMvcYyAO8/QomGXu4Q0ptv9a38Uwg8pu8=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:feedback-id;
 b=KPIz4fEiQviZhgyP/9YIfKjMVJl+b5s63YhtGp03MvusooE0N9SzeBkREt10kktlGmWg9JLXI
 3NojyVgbQxJ7YFYlAWTS6BeLHxbZxPlQPWB/dX3fZz6YsZ8CQFMFGutTG4hhHctTMZKcARB1MQ4
 szjSjVf01+MyfKYHtAxnFtBwh4HxXUKCNa++rzYaKoLEvitfr4y/wZyu3inro6L3RQPyfpOHnDi
 aB/Tm0Z6EN0mj9dSxsuZM722y3xWVQLWjipl5NzQQ7oo8Ozv6UILolRmPI6HMze+2qLqV3M9vFY
 WF6wFmKKoombMbrK6K+J7tJII5N32iACfPDXZPh5zwuA==
X-Zone-Loop: cd1032f8a0ecc1a44b7ba91ccf1ce212972ce43b03c8
x-campaign-type: default
x-transaction-id: b5f8f37f-f7a0-4abf-960e-218a0faf9a73
x-swg-uid: 01-81319774-dc91-4db2-81b3-573c90df53a9
X-Mailer: Sweego
Message-ID:
 <1792400523.8631fc262581453bbf619ec5b2062170.1a1536582820008425@vates.tech>
x-swg-bid: 1792400523.8631fc262581453bbf619ec5b2062170.1a1536582820008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
Date: Mon, 19 Oct 2026 11:02:02 +0200
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Content-Language: en-US
To: win-pv-devel <win-pv-devel@lists.xenproject.org>
Cc: Owen Smith <owen.smith@citrix.com>,
 =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: Updating VS projects for WinPV drivers
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.31b.48e30643aa15867b.1a153658027.30204be3cc042b4e=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792400523303
X-purgate-ID: tlsNG-d62444/1792400526-BD87F757-B2EDCE62/0/0
X-purgate-type: clean
X-purgate-size: 608

---=Part.31b.48e30643aa15867b.1a153658027.30204be3cc042b4e=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Hello,

I plan to add VS2026 projects for the WinPV drivers as this is somewhat=20
overdue=2E

Would anyone object to removing the VS2019 projects at the same time?=20
The 22621=2E5193 EWDK still supports targeting Windows 10 x86 and is based=
=20
on VS2022=2E


-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.31b.48e30643aa15867b.1a153658027.30204be3cc042b4e=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 19 09:10:57 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 19 Oct 2026 09:10:57 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1454020.1667495 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xIjOS-00069x-VX; Mon, 19 Oct 2026 09:10:56 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1454020.1667495; Mon, 19 Oct 2026 09:10:56 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xIjOS-00069q-Si; Mon, 19 Oct 2026 09:10:56 +0000
Received: by outflank-mailman (input) for mailman id 1454020;
 Mon, 19 Oct 2026 09:10:55 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <omeg@invisiblethingslab.com>) id 1xIjOR-00069c-Dj
 for win-pv-devel@lists.xenproject.org; Mon, 19 Oct 2026 09:10:55 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xIjOQ-00DeS9-J5
 for win-pv-devel@lists.xenproject.org; Mon, 19 Oct 2026 11:10:54 +0200
Received: from [10.42.69.6] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <omeg@invisiblethingslab.com>)
 id 6ad5de9e-e002-0a2a0a5209dd-0a2a4506e64c-0
 for <win-pv-devel@lists.xenproject.org>; Mon, 19 Oct 2026 11:10:54 +0200
Received: from [103.168.172.149] (helo=fout-a6-smtp.messagingengine.com)
 by tlsNG-16d1c6.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <omeg@invisiblethingslab.com>)
 id 6ad5de9d-195a-0a2a45060019-67a8ac95912d-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 19 Oct 2026 11:10:53 +0200
Received: from phl-compute-01.internal (phl-compute-01.internal [10.202.2.41])
 by mailfout.phl.internal (Postfix) with ESMTP id 8FCEBEC01C1
 for <win-pv-devel@lists.xenproject.org>; Mon, 19 Oct 2026 05:10:52 -0400 (EDT)
Received: from phl-frontend-03 ([10.202.2.162])
 by phl-compute-01.internal (MEProxy); Mon, 19 Oct 2026 05:10:52 -0400
Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon,
 19 Oct 2026 05:10:51 -0400 (EDT)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=fm2 header.d=invisiblethingslab.com header.i="@invisiblethingslab.com" header.h="Cc:Content-Transfer-Encoding:Content-Type:Date:From:In-Reply-To:Message-ID:MIME-Version:References:Subject:To"; dkim=pass header.s=fm2 header.d=messagingengine.com header.i="@messagingengine.com" header.h="Cc:Content-Transfer-Encoding:Content-Type:Date:Feedback-ID:From:In-Reply-To:Message-ID:MIME-Version:References:Subject:To:X-ME-Proxy:X-ME-Sender"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=cc:cc:content-transfer-encoding
	:content-type:content-type:date:date:from:from:in-reply-to
	:in-reply-to:message-id:mime-version:references:reply-to:subject
	:subject:to:to; s=fm2; t=1792401052; x=1792487452; bh=jUjaZn+vGa
	MYRdmtAve5RKEVv/vBPxQxwkH+omUXlAc=; b=e/DcA+kcxCkPbyCtYQXIHtU3Au
	XVJaz1bg42Amxqp8jXZX+ypcpobaD5dILElEoJXPxCOOZXU0p1Tj7ifavqV/c7Ct
	JuRvYsl2HVDF727WcrWTQVejDHI/EYPZSWVkRecg/p6pKu89Eb6GEMaB1w6uBprm
	w46zpwe5sZjNAet0QE5p1lrWC67t+FEQzImkaiodl4+9sylx7VxGOSpD4o31T6vG
	TdbNWLWbgaHzA1Fv5YCEN78kwGCK3i5Fo0lY97ujKIRNq5/9Z2cYknYWgAEIT+52
	qYeZbJVbnYkddgY6oyAB5+Y477qK7Y71kAV95RRB55ZbMjdD5kKkowsvY6nA==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
	messagingengine.com; h=cc:cc:content-transfer-encoding
	:content-type:content-type:date:date:feedback-id:feedback-id
	:from:from:in-reply-to:in-reply-to:message-id:mime-version
	:references:reply-to:subject:subject:to:to:x-me-proxy
	:x-me-sender:x-me-sender:x-sasl-enc; s=fm2; t=1792401052; x=
	1792487452; bh=jUjaZn+vGaMYRdmtAve5RKEVv/vBPxQxwkH+omUXlAc=; b=V
	kRdexYhGxL29S7IicDD8oAUIjfYD+rgjHVE+WyG9wP28S4ebGKZDanOEDocnsAO2
	7x8eZco08K0f2M/a84veYJ0mVNTRwVImsnypoJyfaERFWE66mxcPzaP8UUSafuXo
	XgOlFQ1DKEdoiGIhe8AyVh1F/JmoTvjLl2nl9Fj71X1yfmlwbneb+Hnwez5Q6sJk
	h6WQfu5Zy/kH98HslMxNKxqRHFIkwm+koMHjRcB4aFSnj4nOf1tsYWcSAdxjQW0t
	FBDhYzBHKAALq11OyX5dh4aFUpThbYPIr6RyqERFhFixuzDPvEwWRDl1V+R0Kjhb
	2TT6HyIEL8VrZMlyAsBug==
X-DKIM2-Info: draft=ietf-dkim-dkim2-spec-06;
	repo=github.com/dkim2wg/interop; date=2026-10-08; sw=lmtpprox;
	action=sign d=invisiblethingslab.com a=rsa-sha256;
DKIM2-Signature: i=1; m=1; t=1792401052; d=invisiblethingslab.com;
	mf=PG9tZWdAaW52aXNpYmxldGhpbmdzbGFiLmNvbT4=;
	rt=PHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZz4=;
	s=fm2:rsa-sha256:VM0Sd2ZSpNo8kkJjYyaYCz4XnSKNhkQrsW1MIKYQ9l3xZJy
	kRWfyG3QiUW08vAIDocvbYL5Cv1pMvRv32QE/Pc0u1B0oIDyJaJNfWkniR8rBLKJ
	O+BhnudOK6SNX+egO72gWjVgNF2gArsLtET0dl9yK7NDbxjk4opp9JCNBkldoDJV
	NLiUg+gkrNSKF5u0+AmOZQcUg1epME0j1dpU4hXhRa0HbOvt+fMN2xtgCvHbfXIz
	wbV0AALqV/t3l+aDtNPOSPFrEMNXm/noaNIxl37lKGfDt2wQfp1CTvnOix2nbsNx
	zl7UJhg0Mm+L3TLRA5mDRay7GL2ZI4glYMHUjdA==;
X-DKIM2-Info: draft=ietf-dkim-dkim2-spec-06;
	repo=github.com/dkim2wg/interop; date=2026-10-08; sw=lmtpprox;
	action=mi-m=1; hc=14;
	hn=cc,content-language,content-transfer-encoding,content-type,
	date,feedback-id,from,in-reply-to,message-id,mime-version,
	references,subject,to,user-agent;
Message-Instance: m=1; h=sha256:hqXP8MmgHIko3rOmtKWH9iExFL/rjYEoJCRwmcJ+kR8=:pepYMe0+oZq/KPotm1j7I5rGTpDy+MnStxfnJYaBiMY=;
X-ME-Sender: <xms:nN7Vatxm1UKEiXYPNNGRIEFv_l3n6Vm8j-eY22n4VF2w51J3iOnT3g>
    <xme:nN7Vaktr6Hv5mblRwkDs9cwB4AhTQhzSj74GzNDCaB082UUh7mNtO_eYeFuWsL2t4
    WzHgxIQ5fXe8wO8wQz56gQTe4oUOd4pO8BoO7UIgHfFSbNZvw0>
X-ME-Received: <xmr:nN7VaksZ_bndnHmgMemFdt9xWM8NodjwrOFaDbpMx-6osPRVPuBWFmQAdD-G6pwV83hJc-YjZBLJ0VwynNY2BTLD>
X-ME-Proxy-Cause: dmFkZTFfitTAS0TkvseAc27XsY1wsIsKQCFzXsnr3tdXpwl2fXdAf1/3nY/imGl3qlixia
    P/rQfv0IyGHYlG5VQ5gffntZz8SvPqxsV8d2jqcfXFAB+nvnvy0pHUeDcrB3+W7IGkoYgh
    Y6LgwzCZV3BT7M83CVtWrHNNxeyVkotdRxNf0Gs65/LGk8ri07RFIX2NgFeX12R24TLb9H
    5P/ObVziZ8f8sJaDJpM5zJwLANCC2nMMVkOk7bdub6A84mUC5MIhv/2u4HC2kAFdrG3RiF
    8uS8qF13B0HKVxQwyJsWEvJwk7CFiQZbQym2nknVEx9hIZ+1xQSCnbxy11xnYEFZLk9pAB
    EpRI20e7H1MAndR/ECCH41SoweP4Nm04O/6UrdbWJ2FFxxwxAeJ3rTErvgXJm9p9rML1Ve
    /xBmPtVi20hrtPr0xIvCHAfouMiaeggM5Pbp8J+7g3R+pjWzIrD7EGqxyx/YIOboD+dMYh
    nBClZKPMOlbpeLJ10w4FfTfWdoLt58nCH+r6kZkQYKo42cLoBokM/zPscCaNX99MsWMe3W
    9GGzb8UKfkkSVSTNsv/G4ntNynMi/wVJvX9WUeIieuL7+BfGVsUitHH3VNkFRe49yQw0nW
    Z45e5eVzPIGL4DtYkOFPnR4aqT8e7MtUCpfvBGJi9CVFQFRcHC+yzjuDmTOg
X-ME-Proxy: <xmx:nN7VapOqa9kRS-YyQPqxp5c-M1WwQGnQJ-wZwFXMZ1Cdc6jFY0xLZA>
    <xmx:nN7Vai0u_XEYSupQGjeWLYJAl5uMy6XDm8uFvcbBoHsUGOm8r4ioaQ>
    <xmx:nN7ValOYVqKuaIStWbIfVwr4h8ErTrcTyPWCBGXDYwwHGbSWTwEWvA>
    <xmx:nN7Vai13EMCvPVLHvlcqfUgYJBjGHkNJfIbND4VNJXDywMi0aXuq4Q>
    <xmx:nN7VandbLIxNxHnCYilNgqZzNsaA-EcyRn-cDXM1t9pF5eG3gqDBCsvi>
Feedback-ID: i409c4082:Fastmail
Message-ID: <01e3b1bb-bec3-4de7-b198-74dbd143ca2f@invisiblethingslab.com>
Date: Mon, 19 Oct 2026 11:10:49 +0200
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: Updating VS projects for WinPV drivers
To: win-pv-devel <win-pv-devel@lists.xenproject.org>
Cc: Owen Smith <owen.smith@citrix.com>, Tu Dinh <ngoc-tu.dinh@vates.tech>
References: <1792400523.8631fc262581453bbf619ec5b2062170.1a1536582820008425@vates.tech>
Content-Language: en-US
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
In-Reply-To: <1792400523.8631fc262581453bbf619ec5b2062170.1a1536582820008425@vates.tech>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
X-purgate-ID: tlsNG-16d1c6/1792401054-1FECC77B-A381CE04/0/0
X-purgate-type: clean
X-purgate-size: 447

On 19.10.2026 11:02, Tu Dinh wrote:
> Hello,
>
> I plan to add VS2026 projects for the WinPV drivers as this is somewhat
> overdue.
>
> Would anyone object to removing the VS2019 projects at the same time?
> The 22621.5193 EWDK still supports targeting Windows 10 x86 and is based
> on VS2022.

In Qubes we use the VS2022 toolchain from EWDK 26100 for building, so 
2019 can be removed.

-- 

Rafał Wojdyła
Invisible Things Lab


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 19 11:25:22 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 19 Oct 2026 11:25:22 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1454107.1667589 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xIlUX-0002CX-Bd; Mon, 19 Oct 2026 11:25:21 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1454107.1667589; Mon, 19 Oct 2026 11:25:21 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xIlUX-0002CQ-8k; Mon, 19 Oct 2026 11:25:21 +0000
Received: by outflank-mailman (input) for mailman id 1454107;
 Mon, 19 Oct 2026 11:25:19 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <owen.smith@citrix.com>) id 1xIlUV-0002CK-Oi
 for win-pv-devel@lists.xenproject.org; Mon, 19 Oct 2026 11:25:19 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xIlUU-001Edt-NV
 for win-pv-devel@lists.xenproject.org; Mon, 19 Oct 2026 13:25:18 +0200
Received: from [10.42.69.11] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ad5fe1a-2eae-0a2a0a5409dd-0a2a450bae88-26
 for <win-pv-devel@lists.xenproject.org>; Mon, 19 Oct 2026 13:25:18 +0200
Received: from [40.93.195.62]
 (helo=SN4PR2101CU001.outbound.protection.outlook.com)
 by tlsNG-42698a.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ad5fe1d-b7e8-0a2a450b0019-285dc33eec33-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 19 Oct 2026 13:25:18 +0200
Received: from SA6PR03MB7760.namprd03.prod.outlook.com (2603:10b6:806:43c::5)
 by SA2PR03MB5916.namprd03.prod.outlook.com (2603:10b6:806:115::18)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.522.19; Mon, 19 Oct
 2026 11:25:14 +0000
Received: from SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38]) by SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38%5]) with mapi id 15.21.0522.017; Mon, 19 Oct 2026
 11:25:14 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:x-ms-exchange-senderadcheck"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
 b=XPJAjk99fhHJ3rdgJG4apIZ82X4tpIIkFHZ/Z1phmJUBshVuoO3zu/tM9RRSOdo776bizSJfwn/3XSZK9yr8Ncf2eiuY8jFaRuhdbdTNCdSVuItpVOOucI71z9dLreaHg+tueQ6hyTcHw7+KbFctClR1ILLG5cbGKa9rp/x1/rl8+w5BWCJ7JZGWXYMf/KxdILYeETHcOidQc44hgCB/uY2qOauRbsp2rQpDl90JU6Mbw02VVv028z1mGL4Cu92AbQnvq30wdiGOkZWGknBdWyj60gA/r3UY6H5c8pv2flivDJigh7WaUhiahdUyTwqJzpCfITU5Wvxmq+rGAImeVw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector10001;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=7oEeRYUy+QwaB1vMJiCfwBI5czv60OQce3cfl+SdXrY=;
 b=PqFztaOo+lelIvu90YTrzLwCO7o/xY85Xy8BQMJgPZbUnEUe2zYNeeuaUvfT3uZ3L7iDAVwvfnUtudjV31MMaYeqaj3cjoRsYDuj9szNKguU7TvIJM5QrYXBIiViYxuLjw8Ol8MfGH5GAjr2DhplBKW5iKQyFm0LYxCpkzgrbbrqXD+NyQjkPNSMgcK3OFxMIDBhM1iSCfLsaDrrfZc6NCxupuwcnc8E7hOX+8Lnc7E1wGyFVkV80tbaXEVSRaU8DuFFqHMVYCGDO6dSDO03fku1y7/ut2W/nT0KIp/F9XnTYM4hFTyIrsRcOXrV1gMc9y3vB3RAMEcr0GAKnveCeA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=7oEeRYUy+QwaB1vMJiCfwBI5czv60OQce3cfl+SdXrY=;
 b=LkQ92atrQ29oJWW/B35a7EjpmNnC1gvuZm9GaCCBUbtR7Ydtn4+NEDGNpLk6MN5rFwRiZEpGUsn13M0iBl+uCqydpvbDN5n226boxHaJeTs8+73bn6lpHfoaUZYKIyfHGvVar4iTdeVKOhF7Q1iqfu1HXAfukc0lRWGYTchitBw=
From: Owen Smith <owen.smith@citrix.com>
To: Tu Dinh <ngoc-tu.dinh@vates.tech>, win-pv-devel
	<win-pv-devel@lists.xenproject.org>
CC: =?iso-8859-2?Q?Rafa=B3_Wojdy=B3a?= <omeg@invisiblethingslab.com>
Subject: Re: Updating VS projects for WinPV drivers
Thread-Topic: Updating VS projects for WinPV drivers
Thread-Index: AQHdX6iG0YgelvT2jkyVIbrpZ63HkbcEuT/3
Date: Mon, 19 Oct 2026 11:25:14 +0000
Message-ID:
 <SA6PR03MB7760A0713E6CCF47CA4D657DFE982@SA6PR03MB7760.namprd03.prod.outlook.com>
References:
 <1792400523.8631fc262581453bbf619ec5b2062170.1a1536582820008425@vates.tech>
In-Reply-To:
 <1792400523.8631fc262581453bbf619ec5b2062170.1a1536582820008425@vates.tech>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
msip_labels:
authentication-results: mx.microsoft.com 1; dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=citrix.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: SA6PR03MB7760:EE_|SA2PR03MB5916:EE_
x-ms-office365-filtering-correlation-id: 246b6f43-4cac-4076-ccc8-08df2dd3a589
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam:
 BCL:0;ARA:13230040|1800799024|23010399003|376014|366016|38070700021|56012099006|11063799006|261009223027099003|10067099003|22082099003|18002099003;
x-microsoft-antispam-message-info:
 ox0O36XtoZeLa9JpMhmih/RY9bvzj3kJEe4Sq8o4xMRQh9niJnk3jU56NLdxXCLaC59crvY876k7UB1lnF7Ji1hYLydVWYtuU6yb+uq3gn82Vtzt3+6asrctXxba6d4ndv7ZlDikgwS5fBwk8kTSXqltKfM2+0ZRZaykw1neg1WeAXUpnGfCpd0dZ6bBX4GB6ibEv40CnGRF/cvRUH6yY3qiXGl6bK05BPjgMWw4fcJvDbU5VLGXoxkz++c9db0p6WyGNFqutzThhNYfB+3pAgxy+dvPL557m/itynrZhu4vO2dRc5ynI3e1ESY9FlTpUQX4N2CAfv++SoaHW/v0PiYjge3p/Ogkh7YcTrdJIpzvab0v5GfNc//+MXeSwhSXtxLOigIh169nQGMwWOTzYkfdIkdKjR+An3Sq4iRe+ilVAw/tBGxOWONjYcF6A+UGPtLXngIUwqRQFrYD0d+MNJKmzuyz5z2PQakgAPEPTUzpRCiU6QwQb90hj+MKTt7qDAwLrk7VvmzuZAUOqV68a0f3gBT1oGu2MpApe64h8PXOO+yrh4A5BVD+mLUn5fUsJe3FyofNEaK8yYEmXAOG4F7XR5kVirJC+WBhqHDbwuhuYQdt0/q2NpZrQQuwG7+JPvQBYP1skpA3412/M7rL14VRk2f+ZJi6ZBLkGxm4+BE=
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SA6PR03MB7760.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(23010399003)(376014)(366016)(38070700021)(56012099006)(11063799006)(261009223027099003)(10067099003)(22082099003)(18002099003);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?iso-8859-2?Q?be4kd2EVAF94NEKaEvUXXRelyEW/Ur3ukiegha3HY6B512xuoFeLW2m3Zx?=
 =?iso-8859-2?Q?YPVPRTTA+zqBB04l2xfaNqKnGr1X1t9+MD/LUyHSISCAW7suD7zrpfuPke?=
 =?iso-8859-2?Q?5aK1rUaCiyW//M8gtt16975lLnHcSL2FRVv/j4s+s7cFdwXoXMVShCVLVT?=
 =?iso-8859-2?Q?qsOPTnrcRWecSg8mUunJELJWXZH0Z0V1S5Fx4OZGXdqyA5Oz6IWS9lYYjm?=
 =?iso-8859-2?Q?oJ79r90LdfHedRIpH9x04VIdkd/qSagc5VhxW7ELZYmof8dyOmUstAk8+B?=
 =?iso-8859-2?Q?TW01YzW4PXlW3IICx8zOkbs1g2UaqDipHA0KunoGRhBXx3iW2Bf2XT+cbg?=
 =?iso-8859-2?Q?1iaJ/bHUI/NYT47r/LIzPojttlHGBoqSthWQia0YdzOnB563nU2IUG5DzJ?=
 =?iso-8859-2?Q?5UaKimrOShAL6tPuYj8e5cVjqcaKPoZ9rbIt2B7/FqT2dxGnRviUfpLA0K?=
 =?iso-8859-2?Q?M7zZf/NZ1dEjxbLParidwEYF+G90ztky6Dp9tQiyHY5FOkRfAyofxV4et4?=
 =?iso-8859-2?Q?MkziToVHSEEGAcTKSwohN3yfVDnHhG5RfXWJd04dVBrUal6I/TaYaPgxzI?=
 =?iso-8859-2?Q?MOxJDTq0+kDD1cTftv8+axEMoEIHsSBda2g6I9Gnsn1gjowag5Zo/xxjgi?=
 =?iso-8859-2?Q?6TwQp+eiJhIieGZtKlMz9tJgflZrdO2tnwt4lyq44CFx6CSzkTBLwKafQU?=
 =?iso-8859-2?Q?YhF9lzBevqpMXEZmixyLWVF/Q3fnAFwLKdc+4Mb2WZgsJ5vbOaEIPdsZmf?=
 =?iso-8859-2?Q?NQBHDJPRD3+oliVA8H5W/UuoGnR84vMxZF+etADcy2P6HiPzZAixOZ0cJL?=
 =?iso-8859-2?Q?A7J8uAHr6ZTlQHzgQ2zpDevQ3nNlb1V63//kwa3EfJzSaDw6xnY86NpOiP?=
 =?iso-8859-2?Q?devQsj/aX4pJZJ7fMajr+h91Wt8KgRiJemJU98x0qVhtCCqvqfl7rpxNhq?=
 =?iso-8859-2?Q?x1k6gCGEJo6XprQJYGw1D+7x+qZpts1ldJ0idO36+6HWFo9TXnGx+kpAMM?=
 =?iso-8859-2?Q?ExEzVLRrjNjYzMvqjK8NGk/uU4m/pfkyjURfFr9w+ID1dfiKkqgvVCk4Um?=
 =?iso-8859-2?Q?9XP5SVRqnzZw997yn5qAxNBlb/9PGZWK9zTxoUAxEqqBGybcFwpLttHqd4?=
 =?iso-8859-2?Q?ohaCj0WemRP/DzA7Kc8IElBuWVIWX6p2V4D06bxqgFLR9UF5aAf0d8RB7W?=
 =?iso-8859-2?Q?Z0qGB8akGHwMz0sEcrzk1sZ6hooh/HrHFKja7S5FQzIiB1zFevfSt0lLTf?=
 =?iso-8859-2?Q?RccxBopvzXt+zkRmmiqn3Vbh7xi1rsPKPh+0VUAsgd6D0sojL5HK23egDy?=
 =?iso-8859-2?Q?BwaZPiMHJTX/dQTErKH2oubpxqUYfrTlllQRNrshvMLhYFC8vewParVHF7?=
 =?iso-8859-2?Q?F2rB/JGQOFxSUsI65Sxwi0AH/ZSBlM/Lu9cpjl5XuH4yjM6oiDCNllOSbI?=
 =?iso-8859-2?Q?v5nb2thumHmq8Ve6uGWXOWx2kdb1KAix3L08Ggv/gJfvZt8XokE1IVtmjn?=
 =?iso-8859-2?Q?3tVxvPCW1NTcdJ3wFReC8GVAlp/DJChcFoFxEEew/gajsbuzuZOha2BYMV?=
 =?iso-8859-2?Q?zedVEmlpghXWuA76DwO+6FZ95UKBxSHl0xc7btyZX8YInJ+2laYwQdsKci?=
 =?iso-8859-2?Q?3eKppYhJsPcQQ9b6IzLHPDRrIRuJVZsJyqJcDkAXJqzB0DzoNirDCOBDyI?=
 =?iso-8859-2?Q?494bbsdjBxatCSVEM8dzmelSv5YTgvMFaqF2fTOj36KaNnkzrwUDciCnvm?=
 =?iso-8859-2?Q?DM3WFlYAzpI8MUPv4eCmx8pZyGuM26joQlW0e1du/vreNs1NQLJ46vC4hJ?=
 =?iso-8859-2?Q?dKjNbWQ3wQ=3D=3D?=
Content-Type: text/plain; charset="iso-8859-2"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-OriginatorOrg: citrix.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: SA6PR03MB7760.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 246b6f43-4cac-4076-ccc8-08df2dd3a589
X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Oct 2026 11:25:14.7393
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: WCI18A4/0NYRnjLzSSNs9es1udm+bAsaofLjNidoujslz/t40um2SOl4ffMCKZLFmLUVHg3LllHFG4uWBMIfVg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA2PR03MB5916
X-purgate-ID: tlsNG-42698a/1792409118-18AC89EA-1FB5B118/0/0
X-purgate-type: clean
X-purgate-size: 753

XenServer still uses the VS2019 projects and EWDK 22000 env.

Its on our backlog to move to an up-to-date kit, but I've not managed
to get to it yet.

Owen

________________________________________
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
Sent: 19 October 2026 10:02 AM
To: win-pv-devel
Cc: Owen Smith; Rafa=B3 Wojdy=B3a
Subject: Updating VS projects for WinPV drivers

Hello,

I plan to add VS2026 projects for the WinPV drivers as this is somewhat
overdue.

Would anyone object to removing the VS2019 projects at the same time?
The 22621.5193 EWDK still supports targeting Windows 10 x86 and is based
on VS2022.


--
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates solutions

web: https://vates.tech


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 19 12:09:49 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 19 Oct 2026 12:09:49 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1454287.1667854 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xImBZ-0006k0-EU; Mon, 19 Oct 2026 12:09:49 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1454287.1667854; Mon, 19 Oct 2026 12:09:49 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xImBZ-0006js-BV; Mon, 19 Oct 2026 12:09:49 +0000
Received: by outflank-mailman (input) for mailman id 1454287;
 Mon, 19 Oct 2026 12:09:48 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <owen.smith@citrix.com>) id 1xImBY-0006jX-2t
 for win-pv-devel@lists.xenproject.org; Mon, 19 Oct 2026 12:09:48 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xImBX-009aGT-FS
 for win-pv-devel@lists.xenproject.org; Mon, 19 Oct 2026 14:09:47 +0200
Received: from [10.42.69.6] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ad60889-e002-0a2a0a5209dd-0a2a4506a92e-8
 for <win-pv-devel@lists.xenproject.org>; Mon, 19 Oct 2026 14:09:47 +0200
Received: from [160.101.131.9] (helo=na1pdmzitismtp02.tibco.com)
 by tlsNG-16d1c6.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ad6088a-195a-0a2a45060019-a0658309a22c-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 19 Oct 2026 14:09:47 +0200
Received: from mewpvdipd2033.citrite.net (unknown [10.113.48.64])
 by na1pdmzitismtp02.tibco.com (Postfix) with ESMTP id 5DA2E83A85A5;
 Mon, 19 Oct 2026 08:09:05 -0400 (EDT)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; none
From: Owen Smith <owen.smith@citrix.com>
To: win-pv-devel@lists.xenproject.org
Cc: Owen Smith <owen.smith@citrix.com>
Subject: [PATCH] Bump Revision to 0900000C
Date: Mon, 19 Oct 2026 13:09:42 +0100
Message-ID: <20261019120942.1176-1-owen.smith@citrix.com>
X-Mailer: git-send-email 2.51.2.windows.1
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-purgate-ID: tlsNG-16d1c6/1792411787-F667277B-896A567B/0/0
X-purgate-type: clean
X-purgate-size: 1349

"9a84b30 Sync shared headers with xenbus"
updated to EMULATED v3, which is not guaranteed present on XenBus's
0900000B revision.

XenVbd requests an optional EMULATED interface, as xenfilt may
not be installed as a filter yet, so requesting a missing EMULATED
interface version is non-fatal, but it does prevent XenVbd determining
if the emulated disks are unplugged, and assumes emulated disks
are present and will not enumerate PV disks on the first few targets.

Signed-off-by: Owen Smith <owen.smith@citrix.com>
---
 src/xenvbd.inf | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/src/xenvbd.inf b/src/xenvbd.inf
index eb82210..28405f6 100644
--- a/src/xenvbd.inf
+++ b/src/xenvbd.inf
@@ -54,13 +54,12 @@ xencrsh.sys=0,,
 
 [Inst.NT@INF_ARCH@]
 %XenVbdName%=XenVbd_Inst,\
-XENBUS\VEN_@VENDOR_PREFIX@@VENDOR_DEVICE_ID@&DEV_VBD&REV_0900000B,\
-XENBUS\VEN_@VENDOR_PREFIX@0001&DEV_VBD&REV_0900000B,\
-XENBUS\VEN_@VENDOR_PREFIX@0002&DEV_VBD&REV_0900000B
+XENBUS\VEN_@VENDOR_PREFIX@@VENDOR_DEVICE_ID@&DEV_VBD&REV_0900000C,\
+XENBUS\VEN_@VENDOR_PREFIX@0001&DEV_VBD&REV_0900000C,\
+XENBUS\VEN_@VENDOR_PREFIX@0002&DEV_VBD&REV_0900000C
 
 [XenVbd_Inst] 
 CopyFiles=XenVbd_Copyfiles
-; TODO: Remove during next PDO version bump
 FeatureScore=0xFE
 
 [XenVbd_Copyfiles]
-- 
2.51.2.windows.1



From win-pv-devel-bounces@lists.xenproject.org Mon Oct 19 12:11:24 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 19 Oct 2026 12:11:24 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1454304.1667857 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xImD6-0007tI-Ij; Mon, 19 Oct 2026 12:11:24 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1454304.1667857; Mon, 19 Oct 2026 12:11:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xImD6-0007tB-G3; Mon, 19 Oct 2026 12:11:24 +0000
Received: by outflank-mailman (input) for mailman id 1454304;
 Mon, 19 Oct 2026 12:11:24 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a15412d0d50008425@swg.vates.tech>)
 id 1xImD5-0007t5-Ts
 for win-pv-devel@lists.xenproject.org; Mon, 19 Oct 2026 12:11:24 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xImD5-00BaqX-5h
 for win-pv-devel@lists.xenproject.org; Mon, 19 Oct 2026 14:11:23 +0200
Received: from [10.42.69.3] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a15412d0d50008425@swg.vates.tech>)
 id 6ad608e9-bab6-0a2a0a5309dd-0a2a4503b6f6-16
 for <win-pv-devel@lists.xenproject.org>; Mon, 19 Oct 2026 14:11:23 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-33051d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a15412d0d50008425@swg.vates.tech>)
 id 6ad608ea-fae8-0a2a45030019-b9ff1c22aecd-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 19 Oct 2026 14:11:22 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a15412d0d50008425.002 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 19 Oct 2026 12:11:21 +0000
Received: from [192.168.1.61] (142.220.66.37.rev.sfr.net [37.66.220.142])
 (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id F0D8E81F4F;
 Mon, 19 Oct 2026 14:11:20 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=NFhO1I+TkTjpfD2auJoqW/SkaLVnXlh34EFaPwQkZG4=;
 h=from:subject:date:message-id:to:mime-version:content-type:in-reply-to:references:feedback-id;
 b=C8+zDIpIsesOTWo9R/XD7NgNKzz6cZcy3P5MWHaEf/kci4flT7VaWw6T+LdKASLtDf+5O16gk
 iaqapS8pp/CQn+Ohd+kwqeVW8EgTGqWFE4w+z7FLSJ7NVcsK7HZ5dCNPhOkk1DyRIDfi4MXfCWf
 eWbIHxoE6y36v67jVRNGAf9UWQeg073umErrbotwls9+gm8bsMvMdVZxBPP4+BVwyt0eyIPE+K3
 uNct5QSsbbWnv72nEsFzQDzVVCmxuMFuAlr1an9OZiwO/KlhBd/ljK2SHk0jhENftxJ4OkCX289
 0A6gYtuvRdmiQpuEL9ZRbBVjJVrtrW4ZNOzrBJkUWJcg==
X-Zone-Loop: 63700b6bfceeb2e580646a8296aefbbd1aeea93e2b8b
x-campaign-type: default
x-transaction-id: 23085b75-d38e-49a0-93dd-5dda9a19135a
x-swg-uid: 01-af7ea56a-db33-40d7-93f9-071fc33681bc
X-Mailer: Sweego
Message-ID:
 <1792411881.8631fc262581453bbf619ec5b2062170.1a15412d0d50008425@vates.tech>
x-swg-bid: 1792411881.8631fc262581453bbf619ec5b2062170.1a15412d0d50008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
Date: Mon, 19 Oct 2026 14:11:20 +0200
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH] Bump Revision to 0900000C
Content-Language: en-US
To: Owen Smith <owen.smith@citrix.com>, win-pv-devel@lists.xenproject.org
References: <20261019120942.1176-1-owen.smith@citrix.com>
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
In-Reply-To: <20261019120942.1176-1-owen.smith@citrix.com>
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.334.ee426f9b3458511a.1a15412ce4b.365cbd5b53fe8adc=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792411881035
X-purgate-ID: tlsNG-33051d/1792411883-6C4DF4E9-B18A4388/0/0
X-purgate-type: clean
X-purgate-size: 1888

---=Part.334.ee426f9b3458511a.1a15412ce4b.365cbd5b53fe8adc=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

On 19/10/2026 14:10, Owen Smith wrote:
> "9a84b30 Sync shared headers with xenbus"
> updated to EMULATED v3, which is not guaranteed present on XenBus's
> 0900000B revision=2E
>=20
> XenVbd requests an optional EMULATED interface, as xenfilt may
> not be installed as a filter yet, so requesting a missing EMULATED
> interface version is non-fatal, but it does prevent XenVbd determining
> if the emulated disks are unplugged, and assumes emulated disks
> are present and will not enumerate PV disks on the first few targets=2E
>=20
> Signed-off-by: Owen Smith <owen=2Esmith@citrix=2Ecom>

Reviewed-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>

> ---
>   src/xenvbd=2Einf | 7 +++----
>   1 file changed, 3 insertions(+), 4 deletions(-)
>=20
> diff --git a/src/xenvbd=2Einf b/src/xenvbd=2Einf
> index eb82210=2E=2E28405f6 100644
> --- a/src/xenvbd=2Einf
> +++ b/src/xenvbd=2Einf
> @@ -54,13 +54,12 @@ xencrsh=2Esys=3D0,,
>  =20
>   [Inst=2ENT@INF_ARCH@]
>   %XenVbdName%=3DXenVbd_Inst,\
> -XENBUS\VEN_@VENDOR_PREFIX@@VENDOR_DEVICE_ID@&DEV_VBD&REV_0900000B,\
> -XENBUS\VEN_@VENDOR_PREFIX@0001&DEV_VBD&REV_0900000B,\
> -XENBUS\VEN_@VENDOR_PREFIX@0002&DEV_VBD&REV_0900000B
> +XENBUS\VEN_@VENDOR_PREFIX@@VENDOR_DEVICE_ID@&DEV_VBD&REV_0900000C,\
> +XENBUS\VEN_@VENDOR_PREFIX@0001&DEV_VBD&REV_0900000C,\
> +XENBUS\VEN_@VENDOR_PREFIX@0002&DEV_VBD&REV_0900000C
>  =20
>   [XenVbd_Inst]
>   CopyFiles=3DXenVbd_Copyfiles
> -; TODO: Remove during next PDO version bump
>   FeatureScore=3D0xFE
>  =20
>   [XenVbd_Copyfiles]



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.334.ee426f9b3458511a.1a15412ce4b.365cbd5b53fe8adc=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 19 12:13:26 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 19 Oct 2026 12:13:26 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1454311.1667871 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xImF3-0008OP-Vp; Mon, 19 Oct 2026 12:13:25 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1454311.1667871; Mon, 19 Oct 2026 12:13:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xImF3-0008OI-Sy; Mon, 19 Oct 2026 12:13:25 +0000
Received: by outflank-mailman (input) for mailman id 1454311;
 Mon, 19 Oct 2026 12:13:25 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <owen.smith@citrix.com>) id 1xImF3-0008OA-4b
 for win-pv-devel@lists.xenproject.org; Mon, 19 Oct 2026 12:13:25 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xImF2-009iQ4-HS
 for win-pv-devel@lists.xenproject.org; Mon, 19 Oct 2026 14:13:24 +0200
Received: from [10.42.69.7] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ad6095f-8faa-0a2a0a5109dd-0a2a4507c12c-20
 for <win-pv-devel@lists.xenproject.org>; Mon, 19 Oct 2026 14:13:24 +0200
Received: from [40.107.200.44]
 (helo=CH5PR02CU005.outbound.protection.outlook.com)
 by tlsNG-ef75cf.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ad60963-b4ea-0a2a45070019-286bc82cad87-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 19 Oct 2026 14:13:24 +0200
Received: from SA6PR03MB7760.namprd03.prod.outlook.com (2603:10b6:806:43c::5)
 by DM4PR03MB6112.namprd03.prod.outlook.com (2603:10b6:5:397::6) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.522.19; Mon, 19 Oct
 2026 12:13:21 +0000
Received: from SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38]) by SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38%5]) with mapi id 15.21.0522.017; Mon, 19 Oct 2026
 12:13:21 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:x-ms-exchange-senderadcheck"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
 b=N0VthPrI9P/Fn04TxeJ+GPMyRQsoqQGmjA3ppXeRFOfaz2dMIB+c4JSGRORKjC1Cxg9ugHONMeUwdNuhjDGXyhhs8kGRyeEuzXou2nQOQtQhaIc+YljDNrW4rqKoCTnfMcJSI0ssGWj69/lLhWIDpr6A1wbcLKLjxsNeRqJn7yiQrDLGFUwzBw/EJnCZhWrtlMss/KBKGs42JpmR9do8avD8NAgUd1sqiSEgC3wSqSBjQkLCArAzm7lDllNKpY/LKwko0cGWLtBePVMtYV/K22wac+vnPLPIwoTGpBZg/xSUl+ZLJH+OETn9S1Extc7XXdvMU64/q0T6s+hJ9grdsw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector10001;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=lI/btsxQsCQe2BAYGbHBSp+NFCDH/9c0PRkhMwxnk9k=;
 b=PhCjh+UEUY6VZi/JcscLzns4qyMRGukVzSF8WEsQCti7rGrFKT2zxT/94ldGLWobCxJtp27/Ou1yeWejy3+hQBv74ck8YapJnqjr8kqH5FM53REGu34YSN11uzRN2VDYJxL1/4GxkCcH9QfJoGsdBw1+5oa6U87w5PwHrv7P6LL6hxQT68MPjKFC4CHhe7/j10XLnWtWy9yIsGip95IPU5is9EDuDFkH75UtuDspsrznArMWzUvrpAfNia12D/18tSO1Aof/TFmQKzcHa2v+LyjfDhCT0PJECFpIIaUaCqxTudNIwH3h6v/aeSsMSh+izGaiJ6r1jD7dqhtWg9Xh5g==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=lI/btsxQsCQe2BAYGbHBSp+NFCDH/9c0PRkhMwxnk9k=;
 b=JSlVtW+QcNv1ftBTpaz2BJP7nDeyn96ILiWKnDKRjSZaECZ56kD9RukBEsZ6QOT+TjPxI668G22otS1JwQpm10gaM/dycPU7bD+aoYE0rNYZJ2UdGxuJCquiutAyFJg5/Hadk3tcL7dbgh3iQXnjWD1KqmwPigmY+bNEpcKI2Po=
From: Owen Smith <owen.smith@citrix.com>
To: Tu Dinh <ngoc-tu.dinh@vates.tech>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Subject: Re: [PATCH] Early-stop state wait when backend disappears
Thread-Topic: [PATCH] Early-stop state wait when backend disappears
Thread-Index: AQHdXWORwGHm49uiGUGxITNMn72GObcEy19f
Date: Mon, 19 Oct 2026 12:13:20 +0000
Message-ID:
 <SA6PR03MB7760EBC20E3E37211A6B2782FE982@SA6PR03MB7760.namprd03.prod.outlook.com>
References:
 <1792150995.8631fc262581453bbf619ec5b2062170.1a1448601d80008425@vates.tech>
In-Reply-To:
 <1792150995.8631fc262581453bbf619ec5b2062170.1a1448601d80008425@vates.tech>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
msip_labels:
authentication-results: mx.microsoft.com 1; dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=citrix.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: SA6PR03MB7760:EE_|DM4PR03MB6112:EE_
x-ms-office365-filtering-correlation-id: 23ad4edf-386a-482f-381f-08df2dda5dcf
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam:
 BCL:0;ARA:13230040|376014|366016|23010399003|1800799024|261009223027099003|10067099003|56012099006|22082099003|18002099003|11063799006|38070700021;
x-microsoft-antispam-message-info:
 eryHD/KP3vd555GFOtKhx48BnLu2CiZgh6nSnbZGV8RTn6AZZaFQfUXLD/seFBGH/lsJk9UEzNqPuhg/DRjoUVzphhfGrg04TVcvFebdLJTWy4wwVFydI24Tn/tu5ISe7/S/t3skK59fRhU8GFeQ7+pdm+fn05jKL9A9+UfdBJIucIwTs8VIYsx9ay86ez4fvn5EzZH3u0KPui1cmREe6hhfDmSZJMaywlU9/rW8QOWI21dagyqRx/NIrzpvkqLgsf+JZn0fcXOLA1BrjENO2Mt3eQAA+l/0qyBkqyGlnOhJgVTr5P50deth/FoUzZvY/1d519WwGsIYEIiG/Usxdu5IxPVpRfApFam9FbwKyZAvjm+BsQFOGTZbXoTh4rVxTCCvuyH6H5axGZNLU38r3atRAdb8KM/H7TFwhRNMQrUJTDAu8rlxsdpOnBdhI1mJK8cAxeZBkqT3+yBlDjvT1yqxbvPEzM4taDnMHH5caJvP3JOIu+7OQRQt9stldeDPTIbUD+5Lr5KYoBvvCGYIk/MmUjDerxzxkKvvXA9iY1XeB14ZOw5Xj4hMmC3kny3gUeHXRcurfKx0OuTj0rSyGIVW+ICprCyLZl5/+dXG+pXfBUnqAEFJnGf008OKcdp+aTRzaKzJRC82TE0mjwtYq9W0MZ7cdGJ1dB5XfWy+jYg=
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SA6PR03MB7760.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(366016)(23010399003)(1800799024)(261009223027099003)(10067099003)(56012099006)(22082099003)(18002099003)(11063799006)(38070700021);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?us-ascii?Q?4mSTU4vesahMwKN0a/zoAly+/sW5k6XiuP/453ssPPmig744/S6oiHlpslvG?=
 =?us-ascii?Q?TulZlzsH2oVq9r193y4BOH/RpcHvs6JENkU7obVTizgnFwY8gu/F3BgUD21e?=
 =?us-ascii?Q?PJXMGF7gCrJ6aKg3OEU00n9f0oM7Brl4Lf29BzS6JSZcgAbXkuGRPUcf7EoV?=
 =?us-ascii?Q?Or6Nasy/EC35mrxG3C3BcW3B5ZmFT1wOL0sxJ+cHVYhtQMenNyPgOnHe4ARS?=
 =?us-ascii?Q?7ATRUoEPd03ElGe6aKdyJyPFEyaUqyuY8moviSWp3mcCdpWJeDpReDW7N1xr?=
 =?us-ascii?Q?xbeFuT6NKfLsDY+OZifiaizAKCa5rsmhaRmXUI9kpH9XfnhP9id5n80CsUqr?=
 =?us-ascii?Q?JWxJsmcxFvNE3XQi2EVaXKixmEqVxYUVIs4jchkr0xQvNvdLdsEddwEn2HY5?=
 =?us-ascii?Q?eNI3fQcQXxfN1+WBjvNVJpB1jih5Qox61f2GId7DyR3YsiXjoFAOKn+TFTw/?=
 =?us-ascii?Q?eZyMIXb2tVs9etaddaL4K6x/mkjmqpreJ7keRBqOP/bsP44KxTG7TwLlqc5W?=
 =?us-ascii?Q?k+HW7r8bA4Wasb0QTPz87gvCyoXKSZ//SEiHl2DJGD+f9SPXWvjyw4pFvSpj?=
 =?us-ascii?Q?FAbvvGbyLEeS0P8O9xO2wN2y+fV2jh9ECGUGLlOP987AcDsZ+MT0WjzYYOv0?=
 =?us-ascii?Q?ItsZSheIaSY7Pf5WgBzt/Ybr3R+fgSWGPfDeLursj7l+Xi7Xl34f7zbiFvNl?=
 =?us-ascii?Q?dA4ZrPfbwRAOaedMfXJzswzlHxDAj3ycR5b20rk1Hv5kapxn3lCIXPwz4Ykh?=
 =?us-ascii?Q?nu/bJuyo01JmfLMtKfwQKNCHsfSezd+UjLm11AsvQOF4gS2kGjNCV63IEd/B?=
 =?us-ascii?Q?EoVyzFIOzJR+L6CQVMFEkS124ZGnYIJALp5BtiGrRuadCmXZT2q39kxqnU+I?=
 =?us-ascii?Q?h00n+yO7OQg0m2GNyW6mG2Rs5pm6YLncOpewnx3KDZtsazQWMBl4O/xbmamL?=
 =?us-ascii?Q?bLIHwq0aMup5rLpus4n7pykpeYeeeZ+XWcjyW0IAiZbf+y3qs8bWuD2b4n30?=
 =?us-ascii?Q?KojoSjgqRsMjxj+PChutWvJ3Jw8W0Ym7cBxWtvX0YvxWQeVZmPZ9vVf28+qV?=
 =?us-ascii?Q?AbIPuuYwIBYdybezihqKBLMqPx8jIqynW5ZtN6Vso4+MBktgDhJVWuyg4XRR?=
 =?us-ascii?Q?HORCWOq/qmUQLu42hzTLfafnZWGl7SzGKIAqv6zZoIak3m1h5uonRxeLfUBV?=
 =?us-ascii?Q?QPMIhHFHNZroJWYz5MPNa/3m/IJwWJOQWDBz9t2mdSarIfGT2s0kSJpIhecj?=
 =?us-ascii?Q?p+3xl5pa9DUz9t3owiAkSbg4mRpg2v7MxIdKe1xstOSmIz2fpmO5ZmrKIPSs?=
 =?us-ascii?Q?4FmwufzpKndQhT+EFGWwVJis47ZfofbIdxVMNrpGqucTY7vIqzzAOWZfRCUC?=
 =?us-ascii?Q?77t5Gz2rLE/UPRFEC4CQXpAyxh0RbOXOyGr5OI/xtKHyefKYcjaLC/KmAtIr?=
 =?us-ascii?Q?fwIGN6MMwiQ8E7PBie2tF1hcgh1BfiOreyu+0EtLPXyibAsUQDl1/d36RKmb?=
 =?us-ascii?Q?yzSUEqytHaJZdzPAsApnd2+u32gXsLzr1f9gs6MEdBP7DtXWira4+IfCV7Vx?=
 =?us-ascii?Q?rlY2xA3Iy9N1FrWOpPEolh9JkvRXIqoJ8gBWiVdyZ0P9yxp4Lukdo7sD9ssv?=
 =?us-ascii?Q?J6IGu5prCkDeVL7VtMEuHEFIU5g0iXiL5hWC2scZj6nuTRMfKm1vKTKipTlR?=
 =?us-ascii?Q?AJ6goau3zweEOoHvrOq3mhhdWZmTJV7BLx3GSS2DICWRkaiM?=
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-OriginatorOrg: citrix.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: SA6PR03MB7760.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 23ad4edf-386a-482f-381f-08df2dda5dcf
X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Oct 2026 12:13:20.9314
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: F+oel6kkP6zAmMfpX7JREP62AA460hsMljVqUFnjRbaVpjv8dHtIQIKwVbE9lp53JLQ+IY9/NjYftL4BO8t0Uw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR03MB6112
X-purgate-ID: tlsNG-ef75cf/1792412004-A6AD8AE4-587A1C99/0/0
X-purgate-type: clean
X-purgate-size: 1766


Reviewed-by: Owen Smith <owen.smith@citrix.com>

________________________________________
From: win-pv-devel <win-pv-devel-bounces@lists.xenproject.org> on behalf of=
 Tu Dinh <ngoc-tu.dinh@vates.tech>
Sent: 16 October 2026 12:43 PM
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh
Subject: [PATCH] Early-stop state wait when backend disappears

During unplug, if the backend disappears before FrontendWaitForBackend-
XenbusStateChange is called, that function will block at
XenbusStateUnknown and cause the system to hang until the timeout
expires.

Break out of the watch loop as soon as this condition is detected to
avoid this hang.

Ported from Xenvif.

Signed-off-by: Tu Dinh <ngoc-tu.dinh@vates.tech>
---
 src/xenvkbd/frontend.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/xenvkbd/frontend.c b/src/xenvkbd/frontend.c
index 7b258ca..4b96423 100644
--- a/src/xenvkbd/frontend.c
+++ b/src/xenvkbd/frontend.c
@@ -460,7 +460,12 @@ FrontendWaitForBackendXenbusStateChange(
                               __FrontendGetBackendPath(Frontend),
                               "state",
                               &Buffer);
-        if (!NT_SUCCESS(status)) {
+        if (status =3D=3D STATUS_OBJECT_NAME_NOT_FOUND) {
+            *State =3D XenbusStateUnknown;
+            Trace("%s disappeared\n",
+                  __FrontendGetBackendPath(Frontend));
+            break;
+        } else if (!NT_SUCCESS(status)) {
             *State =3D XenbusStateUnknown;
         } else {
             *State =3D (XenbusState)strtol(Buffer, NULL, 10);
--
2.55.0.windows.3



--
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates solutions

web: https://vates.tech


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 19 13:12:58 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 19 Oct 2026 13:12:58 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1454337.1667883 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xInAg-0007YZ-5A; Mon, 19 Oct 2026 13:12:58 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1454337.1667883; Mon, 19 Oct 2026 13:12:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xInAg-0007YS-2R; Mon, 19 Oct 2026 13:12:58 +0000
Received: by outflank-mailman (input) for mailman id 1454337;
 Mon, 19 Oct 2026 13:12:56 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1544b27410008425@swg.vates.tech>)
 id 1xInAe-0007YK-JM
 for win-pv-devel@lists.xenproject.org; Mon, 19 Oct 2026 13:12:56 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xInAd-009n77-NB
 for win-pv-devel@lists.xenproject.org; Mon, 19 Oct 2026 15:12:55 +0200
Received: from [10.42.69.9] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1544b27410008425@swg.vates.tech>)
 id 6ad61757-8faa-0a2a0a5109dd-0a2a4509dea8-0
 for <win-pv-devel@lists.xenproject.org>; Mon, 19 Oct 2026 15:12:55 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-bad1c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1544b27410008425@swg.vates.tech>)
 id 6ad61757-be1a-0a2a45090019-b9ff1c23a08f-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 19 Oct 2026 15:12:55 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1544b27410008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 19 Oct 2026 13:12:53 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id E592282C23;
 Mon, 19 Oct 2026 15:12:52 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=eAWtye7uHhUrsX22/kPYhlGWiPb939Cu1FFLirQRyE0=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:feedback-id;
 b=hOp/QIClqstBSgu/UF8LetAPjEWZYizQ4uBAXK4t7LWsJUbTOSUcM+rt7ew5eOI+MpGij7QC3
 UlQNIEEPsa6FZdubOJWNpQAUhxIe9ZMANmJv+KEPTixwvyuHV0d/B9vRHRlenFvQQE+GQvaC/Gc
 90+QJgD08ZxEhj8yE9cuESILEorlgvU/JCvcef2KjLLP677dIG++zIxgk2XTcveEFyRT8OOK1v6
 bVVQzGvLJgFWoEku5rvkbPdFYTP9dIBss5tlQquh4vpp1JpL0FUefJrsi+/WXAepJH0OsNCCMJz
 QTkydCEaPzGK9PeeGyS72NakfK5o+G1OJ2ZK3Dt+y2Pg==
X-Zone-Loop: 289602f16ab109f1148e7db5e2f341ca6099ead22634
x-campaign-type: default
x-transaction-id: 32581293-013b-443f-ab99-c5615fba5bfc
x-swg-uid: 01-b8bb19b9-478f-4378-8f26-19a12c3ffb69
X-Mailer: Sweego
Message-ID:
 <1792415573.8631fc262581453bbf619ec5b2062170.1a1544b27410008425@vates.tech>
x-swg-bid: 1792415573.8631fc262581453bbf619ec5b2062170.1a1544b27410008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 00/11] xenvkbd: Update annotations to SAL 2.0
Date: Mon, 19 Oct 2026 15:12:45 +0200
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.346.e5f8910faa171b94.1a1544b242b.2d1da5aa0e2c1160=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792415573035
X-purgate-ID: tlsNG-bad1c0/1792415575-BE6DA034-C7BED169/0/0
X-purgate-type: clean
X-purgate-size: 3420

---=Part.346.e5f8910faa171b94.1a1544b242b.2d1da5aa0e2c1160=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

This patch series updates the xenvkbd driver to use SAL 2=2E0
annotations and fixes the issues found after code analysis=2E

It is organized into three parts: sync common files with xenbus,=20
update annotations to SAL 2=2E0, and fix issues found after code analysis=
=2E

Part 1: Sync common files with xenbus
* xenvkbd: sync common files with xenbus
* registry: sync with xenbus
* xenvkbd: sync xenhid interface

Part 2: Update annotations to SAL 2=2E0
* xenvkbd: convert annotations to SAL 2=2E0
* xenvkbd: Update string typedefs
* xenvkbd: Annotate remaining unannotated parameters
* xenvkbd: Annotate modified parameters as _Out_ or _Inout_
* xenvkbd: Add size annotations to buffer parameters

Part 3: Fix issues found after code analysis
* xenvkbd: Fix annotations reported by code analysis
* driver: fix inconsistent annotation
* xenvkbd: Add an ASSERT on the array bound in SetArray

C=C3=A9saire Mounah (11):
  xenvkbd: sync common files with xenbus
  registry: sync with xenbus
  xenvkbd: sync xenhid interface
  xenvkbd: convert annotations to SAL 2=2E0
  xenvkbd: Update string typedefs
  xenvkbd: Annotate remaining unannotated parameters
  xenvkbd: Annotate modified parameters as _Out_ or _Inout_
  xenvkbd: Add size annotations to buffer parameters
  xenvkbd: Fix annotations reported by code analysis
  driver: fix inconsistent annotation
  xenvkbd: Add an ASSERT on the array bound in SetArray

 include/cache_interface=2Eh     | 130 ++++-----
 include/debug_interface=2Eh     |  88 +++---
 include/evtchn_interface=2Eh    | 136 +++++-----
 include/gnttab_interface=2Eh    | 148 +++++------
 include/hid_interface=2Eh       | 108 ++++----
 include/range_set_interface=2Eh | 100 +++----
 include/store_interface=2Eh     | 156 +++++------
 include/suspend_interface=2Eh   |  80 +++---
 src/xenvkbd/assert=2Eh          |  82 +++---
 src/xenvkbd/bus=2Ec             |  68 ++---
 src/xenvkbd/bus=2Eh             |   6 +-
 src/xenvkbd/dbg_print=2Eh       |  34 +--
 src/xenvkbd/driver=2Ec          |  31 +--
 src/xenvkbd/fdo=2Ec             | 486 +++++++++++++++++-----------------
 src/xenvkbd/fdo=2Eh             |  70 ++---
 src/xenvkbd/frontend=2Ec        | 132 ++++-----
 src/xenvkbd/frontend=2Eh        |  28 +-
 src/xenvkbd/hid=2Ec             | 144 +++++-----
 src/xenvkbd/hid=2Eh             |  20 +-
 src/xenvkbd/mrsw=2Eh            |  24 +-
 src/xenvkbd/mutex=2Eh           |  10 +-
 src/xenvkbd/names=2Eh           |  24 +-
 src/xenvkbd/pdo=2Ec             | 334 +++++++++++------------
 src/xenvkbd/pdo=2Eh             |  76 +++---
 src/xenvkbd/registry=2Ec        | 418 +++++++++++++++++++----------
 src/xenvkbd/registry=2Eh        | 130 ++++-----
 src/xenvkbd/ring=2Ec            | 136 +++++-----
 src/xenvkbd/ring=2Eh            |  32 +--
 src/xenvkbd/thread=2Ec          |  34 +--
 src/xenvkbd/thread=2Eh          |  18 +-
 src/xenvkbd/util=2Eh            |  87 +++---
 31 files changed, 1750 insertions(+), 1620 deletions(-)

--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.346.e5f8910faa171b94.1a1544b242b.2d1da5aa0e2c1160=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 19 13:14:53 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 19 Oct 2026 13:14:53 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1454341.1667887 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xInCX-0007fj-Av; Mon, 19 Oct 2026 13:14:53 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1454341.1667887; Mon, 19 Oct 2026 13:14:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xInCX-0007fc-8B; Mon, 19 Oct 2026 13:14:53 +0000
Received: by outflank-mailman (input) for mailman id 1454341;
 Mon, 19 Oct 2026 13:14:52 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1544ce2e70008425@swg.vates.tech>)
 id 1xInCW-0007f3-4l
 for win-pv-devel@lists.xenproject.org; Mon, 19 Oct 2026 13:14:52 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xInCV-003NWg-Hc
 for win-pv-devel@lists.xenproject.org; Mon, 19 Oct 2026 15:14:51 +0200
Received: from [10.42.69.12] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1544ce2e70008425@swg.vates.tech>)
 id 6ad617c6-e002-0a2a0a5209dd-0a2a450c81b0-32
 for <win-pv-devel@lists.xenproject.org>; Mon, 19 Oct 2026 15:14:51 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-d25034.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1544ce2e70008425@swg.vates.tech>)
 id 6ad617ca-f479-0a2a450c0019-b9ff1c2385c1-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 19 Oct 2026 15:14:51 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1544ce2e70008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 19 Oct 2026 13:14:47 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id DACF482E5C;
 Mon, 19 Oct 2026 15:14:46 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=Zlq8YjYggQZV1EubhNQ3noes+Eibo8YJASEmOT/rihM=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=p8VHHQ5MBeF4xL//ZzpS64/5Ayl+UPmi3PCtcs9S6dSWGlqwzkCF1DZsl2ngjm41gWcRNEBK9
 4HNQE6PQ/fApMvZ5YRLYyX3vlcMXedR8IFeNwZYUKeSK9dG8FnQa/r+vsPlAmZTDq0A6A89wYxG
 JACKThgTeIaG9P62XQ8vwILsxaXhUmEaEy5A54UolVzrDR4eTctV1Sr5CZ+YDWKBvJ8/UhQP7VR
 kVWV7WRTaynQT4VBFJE8//Hwtop7eSdiOrdNyiHAeuzyniwjt9adP0yFf7nfWFD4gjWspAF/e4z
 i6CoyS6dx1u6ixFzrF3460ElY1/wxWWoOIVS9RghL3AQ==
X-Zone-Loop: 4bd2bad12ecc5305d30dd9bebe338d736aad66caae35
x-campaign-type: default
x-transaction-id: c2961446-07a1-47d8-baf8-e1850f66c0f1
x-swg-uid: 01-8ff5eef1-18d6-4b11-85b6-1d9d09aa89e0
X-Mailer: Sweego
Message-ID:
 <1792415687.8631fc262581453bbf619ec5b2062170.1a1544ce2e70008425@vates.tech>
x-swg-bid: 1792415687.8631fc262581453bbf619ec5b2062170.1a1544ce2e70008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 05/11] xenvkbd: Update string typedefs
Date: Mon, 19 Oct 2026 15:14:31 +0200
In-Reply-To: <1792415573.8631fc262581453bbf619ec5b2062170.1a1544b27410008425@vates.tech>
References: <1792415573.8631fc262581453bbf619ec5b2062170.1a1544b27410008425@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.34b.6cda7e49a54deff.1a1544ce14a.400184c4e2702912=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792415686986
X-purgate-ID: tlsNG-d25034/1792415691-03ED2A5B-8638F493/0/0
X-purgate-type: clean
X-purgate-size: 7736

---=Part.34b.6cda7e49a54deff.1a1544ce14a.400184c4e2702912=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Mechanical pass, no functional change=2E

Types:
  const CHAR */CHAR * -> PCSTR/PSTR
  const WCHAR /WCHAR -> PCWSTR
  const PCHAR -> PCSTR
  PCHAR -> PSTR

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xenvkbd/fdo=2Ec      |  4 ++--
 src/xenvkbd/pdo=2Ec      |  6 +++---
 src/xenvkbd/pdo=2Eh      |  2 +-
 src/xenvkbd/registry=2Ec | 22 +++++++++++-----------
 src/xenvkbd/registry=2Eh | 20 ++++++++++----------
 5 files changed, 27 insertions(+), 27 deletions(-)

diff --git a/src/xenvkbd/fdo=2Ec b/src/xenvkbd/fdo=2Ec
index 3348862=2E=2Ec1c6e74 100644
--- a/src/xenvkbd/fdo=2Ec
+++ b/src/xenvkbd/fdo=2Ec
@@ -820,7 +820,7 @@ done:
=20
 static FORCEINLINE PANSI_STRING
 __FdoMultiSzToUpcaseAnsi(
-    _In_ PCHAR      Buffer
+    _In_ PSTR       Buffer
     )
 {
     PANSI_STRING    Ansi;
@@ -1071,7 +1071,7 @@ FdoParseResources(
 static FORCEINLINE BOOLEAN
 __FdoMatchDistribution(
     _In_ PXENVKBD_FDO   Fdo,
-    _In_ PCHAR          Buffer
+    _In_ PSTR           Buffer
     )
 {
     PCHAR               Vendor;
diff --git a/src/xenvkbd/pdo=2Ec b/src/xenvkbd/pdo=2Ec
index 5572836=2E=2E5443119 100644
--- a/src/xenvkbd/pdo=2Ec
+++ b/src/xenvkbd/pdo=2Ec
@@ -200,7 +200,7 @@ __PdoGetDevicePowerState(
 static FORCEINLINE VOID
 __PdoSetMissing(
     _In_ PXENVKBD_PDO   Pdo,
-    _In_ const CHAR     *Reason
+    _In_ PCSTR          Reason
     )
 {
     Pdo->Reason =3D Reason;
@@ -210,7 +210,7 @@ __PdoSetMissing(
 VOID
 PdoSetMissing(
     _In_ PXENVKBD_PDO   Pdo,
-    _In_ const CHAR     *Reason
+    _In_ PCSTR          Reason
     )
 {
     __PdoSetMissing(Pdo, Reason);
@@ -251,7 +251,7 @@ PdoGetFdo(
 static FORCEINLINE VOID
 __PdoSetName(
     _In_ PXENVKBD_PDO   Pdo,
-    _In_ PCHAR          Path
+    _In_ PSTR           Path
     )
 {
     PXENVKBD_DX         Dx =3D Pdo->Dx;
diff --git a/src/xenvkbd/pdo=2Eh b/src/xenvkbd/pdo=2Eh
index 09f7619=2E=2E1df1fc2 100644
--- a/src/xenvkbd/pdo=2Eh
+++ b/src/xenvkbd/pdo=2Eh
@@ -53,7 +53,7 @@ PdoGetDevicePnpState(
 extern VOID
 PdoSetMissing(
     _In_ PXENVKBD_PDO   Pdo,
-    _In_ const CHAR     *Reason
+    _In_ PCSTR          Reason
     );
=20
 extern BOOLEAN
diff --git a/src/xenvkbd/registry=2Ec b/src/xenvkbd/registry=2Ec
index e50cefc=2E=2E2e82bcc 100644
--- a/src/xenvkbd/registry=2Ec
+++ b/src/xenvkbd/registry=2Ec
@@ -491,7 +491,7 @@ fail1:
 NTSTATUS
 RegistryDeleteSubKey(
     _In_ PHANDLE        Key,
-    _In_ PCHAR          Name
+    _In_ PSTR           Name
     )
 {
     ANSI_STRING         Ansi;
@@ -741,7 +741,7 @@ fail1:
 NTSTATUS
 RegistryDeleteValue(
     _In_ PHANDLE        Key,
-    _In_ PCHAR          Name
+    _In_ PSTR           Name
     )
 {
     ANSI_STRING         Ansi;
@@ -772,7 +772,7 @@ fail1:
 NTSTATUS
 RegistryQueryDwordValue(
     _In_ HANDLE                     Key,
-    _In_ PCHAR                      Name,
+    _In_ PSTR                       Name,
     _Out_ PULONG                    Value
     )
 {
@@ -912,7 +912,7 @@ fail1:
 NTSTATUS
 RegistryUpdateDwordValue(
     _In_ HANDLE                     Key,
-    _In_ PCHAR                      Name,
+    _In_ PSTR                       Name,
     _In_ ULONG                      Value
     )
 {
@@ -967,7 +967,7 @@ fail1:
=20
 static PANSI_STRING
 RegistrySzToAnsi(
-    _In_ PWCHAR     Buffer
+    _In_ PWSTR      Buffer
     )
 {
     PANSI_STRING    Ansi;
@@ -1006,7 +1006,7 @@ fail1:
=20
 static PANSI_STRING
 RegistryMultiSzToAnsi(
-    _In_ PWCHAR     Buffer
+    _In_ PWSTR      Buffer
     )
 {
     PANSI_STRING    Ansi;
@@ -1069,7 +1069,7 @@ fail1:
 NTSTATUS
 RegistryQuerySzValue(
     _In_ HANDLE                     Key,
-    _In_ PCHAR                      Name,
+    _In_ PSTR                       Name,
     _Out_opt_ PULONG                Type,
     _Outptr_ PANSI_STRING           *Array
     )
@@ -1156,7 +1156,7 @@ fail1:
 NTSTATUS
 RegistryQueryBinaryValue(
     _In_ HANDLE                     Key,
-    _In_ PCHAR                      Name,
+    _In_ PSTR                       Name,
     _Outptr_ PVOID                  *Buffer,
     _Out_ PULONG                    Length
     )
@@ -1241,7 +1241,7 @@ fail1:
 NTSTATUS
 RegistryUpdateBinaryValue(
     _In_ HANDLE                     Key,
-    _In_ PCHAR                      Name,
+    _In_ PSTR                       Name,
     _In_ PVOID                      Buffer,
     _In_ ULONG                      Length
     )
@@ -1352,7 +1352,7 @@ fail1:
=20
 NTSTATUS
 RegistryQuerySystemStartOption(
-    _In_ PCHAR                      Prefix,
+    _In_ PSTR                       Prefix,
     _Outptr_ PANSI_STRING           *Value
     )
 {
@@ -1536,7 +1536,7 @@ fail1:
 NTSTATUS
 RegistryUpdateSzValue(
     _In_ HANDLE                     Key,
-    _In_ PCHAR                      Name,
+    _In_ PSTR                       Name,
     _In_ ULONG                      Type,
     _In_ PANSI_STRING               Array
     )
diff --git a/src/xenvkbd/registry=2Eh b/src/xenvkbd/registry=2Eh
index 29ae4e2=2E=2Eae3eec1 100644
--- a/src/xenvkbd/registry=2Eh
+++ b/src/xenvkbd/registry=2Eh
@@ -97,7 +97,7 @@ RegistryOpenSubKey(
 extern NTSTATUS
 RegistryCreateSubKey(
     _In_ HANDLE     Key,
-    _In_ PCHAR      Name,
+    _In_ PSTR       Name,
     _In_ ULONG      Options,
     _Out_ PHANDLE   SubKey
     );
@@ -105,7 +105,7 @@ RegistryCreateSubKey(
 extern NTSTATUS
 RegistryDeleteSubKey(
     _In_ HANDLE Key,
-    _In_ PCHAR  Name
+    _In_ PSTR   Name
     );
=20
 extern NTSTATUS
@@ -125,27 +125,27 @@ RegistryEnumerateValues(
 extern NTSTATUS
 RegistryDeleteValue(
     _In_ HANDLE Key,
-    _In_ PCHAR  Name
+    _In_ PSTR   Name
     );
=20
 extern NTSTATUS
 RegistryQueryDwordValue(
     _In_ HANDLE     Key,
-    _In_ PCHAR      Name,
+    _In_ PSTR       Name,
     _Out_ PULONG    Value
     );
    =20
 extern NTSTATUS
 RegistryUpdateDwordValue(
     _In_ HANDLE Key,
-    _In_ PCHAR  Name,
+    _In_ PSTR   Name,
     _In_ ULONG  Value
     );
    =20
 extern NTSTATUS
 RegistryQuerySzValue(
     _In_ HANDLE             Key,
-    _In_ PCHAR              Name,
+    _In_ PSTR               Name,
     _Out_opt_ PULONG        Type,
     _Outptr_ PANSI_STRING   *Array
     );
@@ -153,7 +153,7 @@ RegistryQuerySzValue(
 extern NTSTATUS
 RegistryQueryBinaryValue(
     _In_ HANDLE     Key,
-    _In_ PCHAR      Name,
+    _In_ PSTR       Name,
     _Outptr_ PVOID  *Buffer,
     _Out_ PULONG    Length
     );
@@ -161,7 +161,7 @@ RegistryQueryBinaryValue(
 extern NTSTATUS
 RegistryUpdateBinaryValue(
     _In_ HANDLE Key,
-    _In_ PCHAR  Name,
+    _In_ PSTR   Name,
     _In_ PVOID  Buffer,
     _In_ ULONG  Length
     );
@@ -174,7 +174,7 @@ RegistryQueryKeyName(
=20
 extern NTSTATUS
 RegistryQuerySystemStartOption(
-    _In_ PCHAR              Name,
+    _In_ PSTR               Name,
     _Outptr_ PANSI_STRING   *Option
     );
=20
@@ -191,7 +191,7 @@ RegistryFreeBinaryValue(
 extern NTSTATUS
 RegistryUpdateSzValue(
     _In_ HANDLE         Key,
-    _In_ PCHAR          Name,
+    _In_ PSTR           Name,
     _In_ ULONG          Type,
     _In_ PANSI_STRING   Array
     );
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.34b.6cda7e49a54deff.1a1544ce14a.400184c4e2702912=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 19 13:14:53 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 19 Oct 2026 13:14:53 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1454342.1667894 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xInCX-0007g0-GJ; Mon, 19 Oct 2026 13:14:53 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1454342.1667894; Mon, 19 Oct 2026 13:14:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xInCX-0007fq-9X; Mon, 19 Oct 2026 13:14:53 +0000
Received: by outflank-mailman (input) for mailman id 1454342;
 Mon, 19 Oct 2026 13:14:52 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1544ce3dc0008425@swg.vates.tech>)
 id 1xInCW-0007f5-Br
 for win-pv-devel@lists.xenproject.org; Mon, 19 Oct 2026 13:14:52 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xInCV-003NWg-Os
 for win-pv-devel@lists.xenproject.org; Mon, 19 Oct 2026 15:14:51 +0200
Received: from [10.42.69.12] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1544ce3dc0008425@swg.vates.tech>)
 id 6ad617c6-e002-0a2a0a5209dd-0a2a450c81b0-36
 for <win-pv-devel@lists.xenproject.org>; Mon, 19 Oct 2026 15:14:51 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-d25034.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1544ce3dc0008425@swg.vates.tech>)
 id 6ad617ca-f479-0a2a450c0019-b9ff1c2385c1-4
 for <win-pv-devel@lists.xenproject.org>; Mon, 19 Oct 2026 15:14:51 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1544ce3dc0008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 19 Oct 2026 13:14:47 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 2334E82E68;
 Mon, 19 Oct 2026 15:14:47 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=s0ZoWnqFtDoEn3ujkvBZeHAFhth/HHneSRTZa97iFhA=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=Q/QRFSNIvdwB4kujCLiirSiqyOI9EphACF1WU9wiG/Kfn07guvE8eSqWaHmV36imYjHNL7e7b
 PoXCnHCJfDbg9sS/MrnvzNM0UzVNG5xCjZPOnwTLIiJ5rz9WS8NLJteDwOEbEZrSDX/Hxm38K5R
 Sqoqb8PwQ84bR3lAQPgJ6IFCjDhVCB1AZGjzCMmgDyYqjNUKk1KEj3ctwvu+b/36n41hkpsrUgr
 SXe9vLejII02qMWy2cEs9BsfpLszC7U0vSLDkTr+lAOAFIAajiqCPujVt13vvp/f2oGvJbK7WJW
 QxKVmxU20kb0EwM+l0i73Yg/7xH6/9I61ExxFVDNGpwQ==
X-Zone-Loop: 11751da43d297467505368c59f00407a83cbcbf301ce
x-campaign-type: default
x-transaction-id: c1d765f7-afa1-42b5-a249-177c8eaba3f1
x-swg-uid: 01-6911cda3-495b-445c-ac38-640b4216f717
X-Mailer: Sweego
Message-ID:
 <1792415687.8631fc262581453bbf619ec5b2062170.1a1544ce3dc0008425@vates.tech>
x-swg-bid: 1792415687.8631fc262581453bbf619ec5b2062170.1a1544ce3dc0008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 06/11] xenvkbd: Annotate remaining unannotated parameters
Date: Mon, 19 Oct 2026 15:14:32 +0200
In-Reply-To: <1792415573.8631fc262581453bbf619ec5b2062170.1a1544b27410008425@vates.tech>
References: <1792415573.8631fc262581453bbf619ec5b2062170.1a1544b27410008425@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.34c.69a746fadcdd078.1a1544ce241.f0e99aef4f7a7ea6=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792415687233
X-purgate-ID: tlsNG-d25034/1792415691-01CC3A5B-B9BE3819/0/0
X-purgate-type: clean
X-purgate-size: 2272

---=Part.34c.69a746fadcdd078.1a1544ce241.f0e99aef4f7a7ea6=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

FdoScan, HidAcquire, RegistryAnsiToSz and RegistryAnsiToMultiSz had
pointer parameters with no SAL annotation=2E They are only read, so
annotate them _In_, as the same functions are annotated in xenvif=2E
No functional change=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xenvkbd/fdo=2Ec      | 4 ++--
 src/xenvkbd/hid=2Ec      | 2 +-
 src/xenvkbd/registry=2Ec | 4 ++--
 3 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/src/xenvkbd/fdo=2Ec b/src/xenvkbd/fdo=2Ec
index c1c6e74=2E=2E481336c 100644
--- a/src/xenvkbd/fdo=2Ec
+++ b/src/xenvkbd/fdo=2Ec
@@ -898,8 +898,8 @@ __FdoFreeAnsi(
=20
 static NTSTATUS
 FdoScan(
-    PXENVKBD_THREAD     Self,
-    PVOID               Context
+    _In_ PXENVKBD_THREAD Self,
+    _In_ PVOID           Context
     )
 {
     PXENVKBD_FDO        Fdo =3D Context;
diff --git a/src/xenvkbd/hid=2Ec b/src/xenvkbd/hid=2Ec
index bfb16a6=2E=2E4e90ac7 100644
--- a/src/xenvkbd/hid=2Ec
+++ b/src/xenvkbd/hid=2Ec
@@ -517,7 +517,7 @@ done:
=20
 static NTSTATUS
 HidAcquire(
-    PINTERFACE              Interface
+    _In_ PINTERFACE         Interface
     )
 {
     PXENVKBD_HID_CONTEXT    Context =3D Interface->Context;
diff --git a/src/xenvkbd/registry=2Ec b/src/xenvkbd/registry=2Ec
index 2e82bcc=2E=2Ec488fc6 100644
--- a/src/xenvkbd/registry=2Ec
+++ b/src/xenvkbd/registry=2Ec
@@ -1430,7 +1430,7 @@ fail1:
=20
 static PKEY_VALUE_PARTIAL_INFORMATION
 RegistryAnsiToSz(
-    PANSI_STRING                    Ansi
+    _In_ PANSI_STRING               Ansi
     )
 {
     ULONG                           Length;
@@ -1476,7 +1476,7 @@ fail1:
=20
 static PKEY_VALUE_PARTIAL_INFORMATION
 RegistryAnsiToMultiSz(
-    PANSI_STRING                    Ansi
+    _In_ PANSI_STRING               Ansi
     )
 {
     ULONG                           Length;
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.34c.69a746fadcdd078.1a1544ce241.f0e99aef4f7a7ea6=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 19 13:14:54 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 19 Oct 2026 13:14:54 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1454343.1667896 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xInCY-0007j7-Gn; Mon, 19 Oct 2026 13:14:54 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1454343.1667896; Mon, 19 Oct 2026 13:14:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xInCY-0007iw-DT; Mon, 19 Oct 2026 13:14:54 +0000
Received: by outflank-mailman (input) for mailman id 1454343;
 Mon, 19 Oct 2026 13:14:52 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1544ce1f20008425@swg.vates.tech>)
 id 1xInCW-0007f4-4o
 for win-pv-devel@lists.xenproject.org; Mon, 19 Oct 2026 13:14:52 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xInCV-00ESJo-Hw
 for win-pv-devel@lists.xenproject.org; Mon, 19 Oct 2026 15:14:51 +0200
Received: from [10.42.69.1] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1544ce1f20008425@swg.vates.tech>)
 id 6ad617c0-8faa-0a2a0a5109dd-0a2a45019e18-26
 for <win-pv-devel@lists.xenproject.org>; Mon, 19 Oct 2026 15:14:51 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1544ce1f20008425@swg.vates.tech>)
 id 6ad617ca-5984-0a2a45010019-b9ff1c229f95-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 19 Oct 2026 15:14:51 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1544ce1f20008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 19 Oct 2026 13:14:47 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 605B381FEC;
 Mon, 19 Oct 2026 15:14:46 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=g8aaALXhyxwCDV9PiaTi7cvfFJgyLHIKlpvwfAkcnLQ=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=P/ZueWb04QyFPV81durzwV/q2LXnoY5JJofonc1MAacppo0WE/DKBHwWoQnehN4Gj9lPRJY30
 1BgjywyIYTxJlRnc9I7FeUEx+Q+HPepTjE0QiIgt3yfaBbz1FMlQunldCrXaN99zCFPFCX5MtMN
 nIgS0fo/E9T/j7+iJLiuErzcwMD6ID59uNUmnm7W+pYmtML9HuKeQfqv0VflsPWSu0RImhu+MeN
 5tqYU96J4vNUBkMXnYTr4/8w3Xz8hnrSJt9+LVfvQgznrJJVmDdYK4qZuxSxhpucjEileiBBx+7
 pmkE8K7sDayPjAGoF0fPs5UxiMR/DyHmzY3DQ+1sfL0Q==
X-Zone-Loop: 259e9b90adec4859a95a51344e2e683c20976d879605
x-campaign-type: default
x-transaction-id: 733c4213-e2d7-469c-a4a9-aaf146f9649b
x-swg-uid: 01-eaeedac4-38e7-4efd-87c7-c207b8917c4a
X-Mailer: Sweego
Message-ID:
 <1792415687.8631fc262581453bbf619ec5b2062170.1a1544ce1f20008425@vates.tech>
x-swg-bid: 1792415687.8631fc262581453bbf619ec5b2062170.1a1544ce1f20008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 04/11] xenvkbd: convert annotations to SAL 2.0
Date: Mon, 19 Oct 2026 15:14:30 +0200
In-Reply-To: <1792415573.8631fc262581453bbf619ec5b2062170.1a1544b27410008425@vates.tech>
References: <1792415573.8631fc262581453bbf619ec5b2062170.1a1544b27410008425@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.34a.e8eabf6c3a0074.1a1544ce025.7746ab31c2868750=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792415686693
X-purgate-ID: tlsNG-d62444/1792415691-C55404F7-CC424B4E/0/0
X-purgate-type: clean
X-purgate-size: 119170

---=Part.34a.e8eabf6c3a0074.1a1544ce025.7746ab31c2868750=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Mechanical pass, no functional change=2E

Annotations:
  IN/OUT/IN OUT -> In/Out/Inout
  __in/__out/__inout -> same, opt variants preserved
  trailing OPTIONAL -> folded into the annotation (In_opt &c)
  Out on a T ** -> Outptr
  _drv/__checkReturn-> IRQL_requires/Dispatch_type/Check_return

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xenvkbd/bus=2Ec      |  64 ++++----
 src/xenvkbd/bus=2Eh      |   6 +-
 src/xenvkbd/driver=2Ec   |  26 +--
 src/xenvkbd/fdo=2Ec      | 360 ++++++++++++++++++++---------------------
 src/xenvkbd/fdo=2Eh      |  70 ++++----
 src/xenvkbd/frontend=2Ec |  98 +++++------
 src/xenvkbd/frontend=2Eh |  28 ++--
 src/xenvkbd/hid=2Ec      | 142 ++++++++--------
 src/xenvkbd/hid=2Eh      |  20 +--
 src/xenvkbd/mrsw=2Eh     |  24 +--
 src/xenvkbd/mutex=2Eh    |  10 +-
 src/xenvkbd/names=2Eh    |  24 +--
 src/xenvkbd/pdo=2Ec      | 274 +++++++++++++++----------------
 src/xenvkbd/pdo=2Eh      |  76 ++++-----
 src/xenvkbd/registry=2Ec | 140 ++++++++--------
 src/xenvkbd/registry=2Eh | 122 +++++++-------
 src/xenvkbd/ring=2Ec     | 122 +++++++-------
 src/xenvkbd/ring=2Eh     |  32 ++--
 src/xenvkbd/thread=2Ec   |  34 ++--
 src/xenvkbd/thread=2Eh   |  18 +--
 20 files changed, 845 insertions(+), 845 deletions(-)

diff --git a/src/xenvkbd/bus=2Ec b/src/xenvkbd/bus=2Ec
index 8bd5b3c=2E=2Eb1a0c73 100644
--- a/src/xenvkbd/bus=2Ec
+++ b/src/xenvkbd/bus=2Ec
@@ -51,7 +51,7 @@ typedef struct _XENVKBD_BUS_CONTEXT {
=20
 static FORCEINLINE PVOID
 __BusAllocate(
-    IN  ULONG   Length
+    _In_ ULONG  Length
     )
 {
     return __AllocatePoolWithTag(NonPagedPool, Length, BUS_TAG);
@@ -59,7 +59,7 @@ __BusAllocate(
=20
 static FORCEINLINE VOID
 __BusFree(
-    IN  PVOID   Buffer
+    _In_ PVOID  Buffer
     )
 {
     __FreePoolWithTag(Buffer, BUS_TAG);
@@ -67,7 +67,7 @@ __BusFree(
=20
 static VOID
 BusReference(
-    IN  PVOID               _Context
+    _In_ PVOID              _Context
     )
 {
     PXENVKBD_BUS_CONTEXT    Context =3D _Context;
@@ -77,7 +77,7 @@ BusReference(
=20
 static VOID
 BusDereference(
-    IN  PVOID               _Context
+    _In_ PVOID              _Context
     )
 {
     PXENVKBD_BUS_CONTEXT    Context =3D _Context;
@@ -87,14 +87,14 @@ BusDereference(
 }
=20
 static
-__drv_functionClass(TRANSLATE_BUS_ADDRESS)
+_Function_class_(TRANSLATE_BUS_ADDRESS)
 BOOLEAN
 BusTranslateAddress(
-    IN      PVOID               _Context,
-    IN      PHYSICAL_ADDRESS    BusAddress,
-    IN      ULONG               Length,
-    IN OUT  PULONG              AddressSpace,
-    OUT     PPHYSICAL_ADDRESS   TranslatedAddress
+    _In_ PVOID                  _Context,
+    _In_ PHYSICAL_ADDRESS       BusAddress,
+    _In_ ULONG                  Length,
+    _Inout_ PULONG              AddressSpace,
+    _Out_ PPHYSICAL_ADDRESS     TranslatedAddress
     )
 {
     PXENVKBD_BUS_CONTEXT        Context =3D _Context;
@@ -107,15 +107,15 @@ BusTranslateAddress(
 }
=20
 static
-__drv_functionClass(GET_DMA_ADAPTER)
+_Function_class_(GET_DMA_ADAPTER)
 PDMA_ADAPTER
 BusGetDmaAdapter(
-    IN  PVOID               _Context,
-    IN  PDEVICE_DESCRIPTION DeviceDescriptor,
-    OUT PULONG              NumberOfMapRegisters
+    _In_ PVOID                  _Context,
+    _In_ PDEVICE_DESCRIPTION    DeviceDescriptor,
+    _Out_ PULONG                NumberOfMapRegisters
     )
 {
-    PXENVKBD_BUS_CONTEXT    Context =3D _Context;
+    PXENVKBD_BUS_CONTEXT        Context =3D _Context;
=20
     return PdoGetDmaAdapter(Context->Pdo,
                             DeviceDescriptor,
@@ -123,14 +123,14 @@ BusGetDmaAdapter(
 }
=20
 static
-__drv_functionClass(GET_SET_DEVICE_DATA)
+_Function_class_(GET_SET_DEVICE_DATA)
 ULONG
 BusSetData(
-    IN  PVOID               _Context,
-    IN  ULONG               DataType,
-    IN  PVOID               Buffer,
-    IN  ULONG               Offset,
-    IN  ULONG               Length
+    _In_ PVOID              _Context,
+    _In_ ULONG              DataType,
+    _In_ PVOID              Buffer,
+    _In_ ULONG              Offset,
+    _In_ ULONG              Length
     )
 {
     PXENVKBD_BUS_CONTEXT    Context =3D _Context;
@@ -143,14 +143,14 @@ BusSetData(
 }
=20
 static
-__drv_functionClass(GET_SET_DEVICE_DATA)
+_Function_class_(GET_SET_DEVICE_DATA)
 ULONG
 BusGetData(
-    IN  PVOID               _Context,
-    IN  ULONG               DataType,
-    IN  PVOID               Buffer,
-    IN  ULONG               Offset,
-    IN  ULONG               Length
+    _In_ PVOID              _Context,
+    _In_ ULONG              DataType,
+    _In_ PVOID              Buffer,
+    _In_ ULONG              Offset,
+    _In_ ULONG              Length
     )
 {
     PXENVKBD_BUS_CONTEXT    Context =3D _Context;
@@ -164,12 +164,12 @@ BusGetData(
=20
 NTSTATUS
 BusInitialize(
-    IN  PXENVKBD_PDO            Pdo,
-    OUT PBUS_INTERFACE_STANDARD Interface
+    _In_ PXENVKBD_PDO               Pdo,
+    _Out_ PBUS_INTERFACE_STANDARD   Interface
     )
 {
-    PXENVKBD_BUS_CONTEXT        Context;
-    NTSTATUS                    status;
+    PXENVKBD_BUS_CONTEXT            Context;
+    NTSTATUS                        status;
=20
     Trace("=3D=3D=3D=3D>\n");
=20
@@ -203,7 +203,7 @@ fail1:
=20
 VOID
 BusTeardown(
-    IN OUT  PBUS_INTERFACE_STANDARD Interface
+    _Inout_ PBUS_INTERFACE_STANDARD Interface
     )
 {
     PXENVKBD_BUS_CONTEXT            Context =3D Interface->Context;
diff --git a/src/xenvkbd/bus=2Eh b/src/xenvkbd/bus=2Eh
index 99a58a7=2E=2E85285d7 100644
--- a/src/xenvkbd/bus=2Eh
+++ b/src/xenvkbd/bus=2Eh
@@ -40,13 +40,13 @@
=20
 extern NTSTATUS
 BusInitialize(
-    IN  PXENVKBD_PDO            Pdo,
-    OUT PBUS_INTERFACE_STANDARD Interface
+    _In_ PXENVKBD_PDO               Pdo,
+    _Out_ PBUS_INTERFACE_STANDARD   Interface
     );
=20
 extern VOID
 BusTeardown(
-    IN OUT  PBUS_INTERFACE_STANDARD Interface
+    _Inout_ PBUS_INTERFACE_STANDARD Interface
     );
=20
 #endif  // _XENVKBD_BUS_H
diff --git a/src/xenvkbd/driver=2Ec b/src/xenvkbd/driver=2Ec
index 818f9dc=2E=2E2c1adda 100644
--- a/src/xenvkbd/driver=2Ec
+++ b/src/xenvkbd/driver=2Ec
@@ -71,7 +71,7 @@ DriverSafeMode(
=20
 static FORCEINLINE VOID
 __DriverSetDriverObject(
-    IN  PDRIVER_OBJECT  DriverObject
+    _In_ PDRIVER_OBJECT DriverObject
     )
 {
     Driver=2EDriverObject =3D DriverObject;
@@ -95,7 +95,7 @@ DriverGetDriverObject(
=20
 static FORCEINLINE VOID
 __DriverSetParametersKey(
-    IN  HANDLE  Key
+    _In_ HANDLE Key
     )
 {
     Driver=2EParametersKey =3D Key;
@@ -211,7 +211,7 @@ DRIVER_UNLOAD       DriverUnload;
=20
 VOID
 DriverUnload(
-    IN  PDRIVER_OBJECT  DriverObject
+    _In_ PDRIVER_OBJECT DriverObject
     )
 {
     HANDLE              ParametersKey;
@@ -249,8 +249,8 @@ DRIVER_ADD_DEVICE   AddDevice;
=20
 NTSTATUS
 AddDevice(
-    IN  PDRIVER_OBJECT  DriverObject,
-    IN  PDEVICE_OBJECT  DeviceObject
+    _In_ PDRIVER_OBJECT DriverObject,
+    _In_ PDEVICE_OBJECT DeviceObject
     )
 {
     NTSTATUS            status;
@@ -277,8 +277,8 @@ DRIVER_DISPATCH Dispatch;
=20
 NTSTATUS=20
 Dispatch(
-    IN PDEVICE_OBJECT   DeviceObject,
-    IN PIRP             Irp
+    _In_ PDEVICE_OBJECT DeviceObject,
+    _In_ PIRP           Irp
     )
 {
     PXENVKBD_DX         Dx;
@@ -334,14 +334,14 @@ DRIVER_INITIALIZE   DriverEntry;
=20
 NTSTATUS
 DriverEntry(
-    IN  PDRIVER_OBJECT  DriverObject,
-    IN  PUNICODE_STRING RegistryPath
+    _In_ PDRIVER_OBJECT     DriverObject,
+    _In_ PUNICODE_STRING    RegistryPath
     )
 {
-    HANDLE              ServiceKey;
-    HANDLE              ParametersKey;
-    ULONG               Index;
-    NTSTATUS            status;
+    HANDLE                  ServiceKey;
+    HANDLE                  ParametersKey;
+    ULONG                   Index;
+    NTSTATUS                status;
=20
     ASSERT3P(__DriverGetDriverObject(), =3D=3D, NULL);
=20
diff --git a/src/xenvkbd/fdo=2Ec b/src/xenvkbd/fdo=2Ec
index 12b8717=2E=2E3348862 100644
--- a/src/xenvkbd/fdo=2Ec
+++ b/src/xenvkbd/fdo=2Ec
@@ -108,7 +108,7 @@ struct _XENVKBD_FDO {
=20
 static FORCEINLINE PVOID
 __FdoAllocate(
-    IN  ULONG   Length
+    _In_ ULONG  Length
     )
 {
     return __AllocatePoolWithTag(NonPagedPool, Length, FDO_POOL);
@@ -116,7 +116,7 @@ __FdoAllocate(
=20
 static FORCEINLINE VOID
 __FdoFree(
-    IN  PVOID   Buffer
+    _In_ PVOID  Buffer
     )
 {
     __FreePoolWithTag(Buffer, FDO_POOL);
@@ -124,8 +124,8 @@ __FdoFree(
=20
 static FORCEINLINE VOID
 __FdoSetDevicePnpState(
-    IN  PXENVKBD_FDO        Fdo,
-    IN  DEVICE_PNP_STATE    State
+    _In_ PXENVKBD_FDO       Fdo,
+    _In_ DEVICE_PNP_STATE   State
     )
 {
     PXENVKBD_DX             Dx =3D Fdo->Dx;
@@ -139,8 +139,8 @@ __FdoSetDevicePnpState(
=20
 static FORCEINLINE VOID
 __FdoRestoreDevicePnpState(
-    IN  PXENVKBD_FDO        Fdo,
-    IN  DEVICE_PNP_STATE    State
+    _In_ PXENVKBD_FDO       Fdo,
+    _In_ DEVICE_PNP_STATE   State
     )
 {
     PXENVKBD_DX             Dx =3D Fdo->Dx;
@@ -151,7 +151,7 @@ __FdoRestoreDevicePnpState(
=20
 static FORCEINLINE DEVICE_PNP_STATE
 __FdoGetDevicePnpState(
-    IN  PXENVKBD_FDO    Fdo
+    _In_ PXENVKBD_FDO   Fdo
     )
 {
     PXENVKBD_DX         Dx =3D Fdo->Dx;
@@ -161,7 +161,7 @@ __FdoGetDevicePnpState(
=20
 static FORCEINLINE DEVICE_PNP_STATE
 __FdoGetPreviousDevicePnpState(
-    IN  PXENVKBD_FDO    Fdo
+    _In_ PXENVKBD_FDO   Fdo
     )
 {
     PXENVKBD_DX         Dx =3D Fdo->Dx;
@@ -171,8 +171,8 @@ __FdoGetPreviousDevicePnpState(
=20
 static FORCEINLINE VOID
 __FdoSetDevicePowerState(
-    IN  PXENVKBD_FDO        Fdo,
-    IN  DEVICE_POWER_STATE  State
+    _In_ PXENVKBD_FDO       Fdo,
+    _In_ DEVICE_POWER_STATE State
     )
 {
     PXENVKBD_DX             Dx =3D Fdo->Dx;
@@ -182,7 +182,7 @@ __FdoSetDevicePowerState(
=20
 static FORCEINLINE DEVICE_POWER_STATE
 __FdoGetDevicePowerState(
-    IN  PXENVKBD_FDO    Fdo
+    _In_ PXENVKBD_FDO   Fdo
     )
 {
     PXENVKBD_DX         Dx =3D Fdo->Dx;
@@ -192,8 +192,8 @@ __FdoGetDevicePowerState(
=20
 static FORCEINLINE VOID
 __FdoSetSystemPowerState(
-    IN  PXENVKBD_FDO        Fdo,
-    IN  SYSTEM_POWER_STATE  State
+    _In_ PXENVKBD_FDO       Fdo,
+    _In_ SYSTEM_POWER_STATE State
     )
 {
     PXENVKBD_DX             Dx =3D Fdo->Dx;
@@ -203,7 +203,7 @@ __FdoSetSystemPowerState(
=20
 static FORCEINLINE SYSTEM_POWER_STATE
 __FdoGetSystemPowerState(
-    IN  PXENVKBD_FDO    Fdo
+    _In_ PXENVKBD_FDO   Fdo
     )
 {
     PXENVKBD_DX         Dx =3D Fdo->Dx;
@@ -213,7 +213,7 @@ __FdoGetSystemPowerState(
=20
 static FORCEINLINE PDEVICE_OBJECT
 __FdoGetPhysicalDeviceObject(
-    IN  PXENVKBD_FDO    Fdo
+    _In_ PXENVKBD_FDO   Fdo
     )
 {
     return Fdo->PhysicalDeviceObject;
@@ -221,16 +221,16 @@ __FdoGetPhysicalDeviceObject(
=20
 PDEVICE_OBJECT
 FdoGetPhysicalDeviceObject(
-    IN  PXENVKBD_FDO    Fdo
+    _In_ PXENVKBD_FDO   Fdo
     )
 {
     return __FdoGetPhysicalDeviceObject(Fdo);
 }
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 static FORCEINLINE NTSTATUS
 __FdoAcquireLowerBusInterface(
-    IN  PXENVKBD_FDO        Fdo
+    _In_ PXENVKBD_FDO       Fdo
     )
 {
     PBUS_INTERFACE_STANDARD BusInterface;
@@ -313,7 +313,7 @@ fail1:
=20
 static FORCEINLINE VOID
 __FdoReleaseLowerBusInterface(
-    IN  PXENVKBD_FDO        Fdo
+    _In_ PXENVKBD_FDO       Fdo
     )
 {
     PBUS_INTERFACE_STANDARD BusInterface;
@@ -332,12 +332,12 @@ __FdoReleaseLowerBusInterface(
=20
 PDMA_ADAPTER
 FdoGetDmaAdapter(
-    IN  PXENVKBD_FDO        Fdo,
-    IN  PDEVICE_DESCRIPTION DeviceDescriptor,
-    OUT PULONG              NumberOfMapRegisters
+    _In_ PXENVKBD_FDO           Fdo,
+    _In_ PDEVICE_DESCRIPTION    DeviceDescriptor,
+    _Out_ PULONG                NumberOfMapRegisters
     )
 {
-    PBUS_INTERFACE_STANDARD BusInterface;
+    PBUS_INTERFACE_STANDARD     BusInterface;
=20
     BusInterface =3D Fdo->LowerBusInterface;
     ASSERT(BusInterface !=3D NULL);
@@ -349,11 +349,11 @@ FdoGetDmaAdapter(
=20
 BOOLEAN
 FdoTranslateBusAddress(
-    IN      PXENVKBD_FDO        Fdo,
-    IN      PHYSICAL_ADDRESS    BusAddress,
-    IN      ULONG               Length,
-    IN OUT  PULONG              AddressSpace,
-    OUT     PPHYSICAL_ADDRESS   TranslatedAddress
+    _In_ PXENVKBD_FDO           Fdo,
+    _In_ PHYSICAL_ADDRESS       BusAddress,
+    _In_ ULONG                  Length,
+    _Inout_ PULONG              AddressSpace,
+    _Out_ PPHYSICAL_ADDRESS     TranslatedAddress
     )
 {
     PBUS_INTERFACE_STANDARD     BusInterface;
@@ -370,11 +370,11 @@ FdoTranslateBusAddress(
=20
 ULONG
 FdoSetBusData(
-    IN  PXENVKBD_FDO        Fdo,
-    IN  ULONG               DataType,
-    IN  PVOID               Buffer,
-    IN  ULONG               Offset,
-    IN  ULONG               Length
+    _In_ PXENVKBD_FDO       Fdo,
+    _In_ ULONG              DataType,
+    _In_ PVOID              Buffer,
+    _In_ ULONG              Offset,
+    _In_ ULONG              Length
     )
 {
     PBUS_INTERFACE_STANDARD BusInterface;
@@ -391,11 +391,11 @@ FdoSetBusData(
=20
 ULONG
 FdoGetBusData(
-    IN  PXENVKBD_FDO        Fdo,
-    IN  ULONG               DataType,
-    IN  PVOID               Buffer,
-    IN  ULONG               Offset,
-    IN  ULONG               Length
+    _In_ PXENVKBD_FDO       Fdo,
+    _In_ ULONG              DataType,
+    _In_ PVOID              Buffer,
+    _In_ ULONG              Offset,
+    _In_ ULONG              Length
     )
 {
     PBUS_INTERFACE_STANDARD BusInterface;
@@ -412,11 +412,11 @@ FdoGetBusData(
=20
 static FORCEINLINE VOID
 __FdoSetVendorName(
-    IN  PXENVKBD_FDO    Fdo,
-    IN  USHORT          DeviceID
+    _In_ PXENVKBD_FDO   Fdo,
+    _In_ USHORT         DeviceID
     )
 {
-    NTSTATUS        status;
+    NTSTATUS            status;
=20
     status =3D RtlStringCbPrintfA(Fdo->VendorName,
                                 MAXNAMELEN,
@@ -428,7 +428,7 @@ __FdoSetVendorName(
=20
 static FORCEINLINE PCHAR
 __FdoGetVendorName(
-    IN  PXENVKBD_FDO    Fdo
+    _In_ PXENVKBD_FDO   Fdo
     )
 {
     return Fdo->VendorName;
@@ -436,7 +436,7 @@ __FdoGetVendorName(
=20
 PCHAR
 FdoGetVendorName(
-    IN  PXENVKBD_FDO    Fdo
+    _In_ PXENVKBD_FDO   Fdo
     )
 {
     return __FdoGetVendorName(Fdo);
@@ -444,7 +444,7 @@ FdoGetVendorName(
=20
 static FORCEINLINE VOID
 __FdoSetName(
-    IN  PXENVKBD_FDO    Fdo
+    _In_ PXENVKBD_FDO   Fdo
     )
 {
     PXENVKBD_DX         Dx =3D Fdo->Dx;
@@ -459,7 +459,7 @@ __FdoSetName(
=20
 static FORCEINLINE PCHAR
 __FdoGetName(
-    IN  PXENVKBD_FDO    Fdo
+    _In_ PXENVKBD_FDO   Fdo
     )
 {
     PXENVKBD_DX         Dx =3D Fdo->Dx;
@@ -469,19 +469,19 @@ __FdoGetName(
=20
 PCHAR
 FdoGetName(
-    IN  PXENVKBD_FDO    Fdo
+    _In_ PXENVKBD_FDO   Fdo
     )
 {
     return __FdoGetName(Fdo);
 }
=20
-__drv_functionClass(IO_COMPLETION_ROUTINE)
-__drv_sameIRQL
+_Function_class_(IO_COMPLETION_ROUTINE)
+_IRQL_requires_same_
 static NTSTATUS
 __FdoDelegateIrp(
-    IN  PDEVICE_OBJECT  DeviceObject,
-    IN  PIRP            Irp,
-    IN  PVOID           Context
+    _In_ PDEVICE_OBJECT DeviceObject,
+    _In_ PIRP           Irp,
+    _In_ PVOID          Context
     )
 {
     PKEVENT             Event =3D Context;
@@ -496,8 +496,8 @@ __FdoDelegateIrp(
=20
 NTSTATUS
 FdoDelegateIrp(
-    IN  PXENVKBD_FDO    Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_FDO   Fdo,
+    _In_ PIRP           Irp
     )
 {
     PDEVICE_OBJECT      DeviceObject;
@@ -560,13 +560,13 @@ done:
     return status;
 }
=20
-__drv_functionClass(IO_COMPLETION_ROUTINE)
-__drv_sameIRQL
+_Function_class_(IO_COMPLETION_ROUTINE)
+_IRQL_requires_same_
 static NTSTATUS
 __FdoForwardIrpSynchronously(
-    IN  PDEVICE_OBJECT  DeviceObject,
-    IN  PIRP            Irp,
-    IN  PVOID           Context
+    _In_ PDEVICE_OBJECT DeviceObject,
+    _In_ PIRP           Irp,
+    _In_ PVOID          Context
     )
 {
     PKEVENT             Event =3D Context;
@@ -581,8 +581,8 @@ __FdoForwardIrpSynchronously(
=20
 static NTSTATUS
 FdoForwardIrpSynchronously(
-    IN  PXENVKBD_FDO    Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_FDO   Fdo,
+    _In_ PIRP           Irp
     )
 {
     KEVENT              Event;
@@ -619,8 +619,8 @@ FdoForwardIrpSynchronously(
=20
 NTSTATUS
 FdoAddPhysicalDeviceObject(
-    IN  PXENVKBD_FDO    Fdo,
-    IN  PXENVKBD_PDO    Pdo
+    _In_ PXENVKBD_FDO   Fdo,
+    _In_ PXENVKBD_PDO   Pdo
     )
 {
     PDEVICE_OBJECT      DeviceObject;
@@ -653,8 +653,8 @@ fail1:
=20
 VOID
 FdoRemovePhysicalDeviceObject(
-    IN  PXENVKBD_FDO    Fdo,
-    IN  PXENVKBD_PDO    Pdo
+    _In_ PXENVKBD_FDO   Fdo,
+    _In_ PXENVKBD_PDO   Pdo
     )
 {
     PDEVICE_OBJECT      DeviceObject;
@@ -680,7 +680,7 @@ done:
=20
 static FORCEINLINE VOID
 __FdoAcquireMutex(
-    IN  PXENVKBD_FDO    Fdo
+    _In_ PXENVKBD_FDO   Fdo
     )
 {
     AcquireMutex(&Fdo->Mutex);
@@ -688,7 +688,7 @@ __FdoAcquireMutex(
=20
 VOID
 FdoAcquireMutex(
-    IN  PXENVKBD_FDO    Fdo
+    _In_ PXENVKBD_FDO   Fdo
     )
 {
     __FdoAcquireMutex(Fdo);
@@ -696,7 +696,7 @@ FdoAcquireMutex(
=20
 static FORCEINLINE VOID
 __FdoReleaseMutex(
-    IN  PXENVKBD_FDO    Fdo
+    _In_ PXENVKBD_FDO   Fdo
     )
 {
     ReleaseMutex(&Fdo->Mutex);
@@ -704,7 +704,7 @@ __FdoReleaseMutex(
=20
 VOID
 FdoReleaseMutex(
-    IN  PXENVKBD_FDO    Fdo
+    _In_ PXENVKBD_FDO   Fdo
     )
 {
     __FdoReleaseMutex(Fdo);
@@ -715,11 +715,11 @@ FdoReleaseMutex(
=20
 static FORCEINLINE BOOLEAN
 __FdoEnumerate(
-    IN  PXENVKBD_FDO    Fdo,
-    IN  PANSI_STRING    Devices
+    _In_ PXENVKBD_FDO   Fdo,
+    _In_ PANSI_STRING   Devices
     )
 {
-    BOOLEAN             NeedInvalidate;=20
+    BOOLEAN             NeedInvalidate;
     HANDLE              ParametersKey;
     ULONG               Enumerate;
     PLIST_ENTRY         ListEntry;
@@ -820,7 +820,7 @@ done:
=20
 static FORCEINLINE PANSI_STRING
 __FdoMultiSzToUpcaseAnsi(
-    IN  PCHAR       Buffer
+    _In_ PCHAR      Buffer
     )
 {
     PANSI_STRING    Ansi;
@@ -885,7 +885,7 @@ fail1:
=20
 static FORCEINLINE VOID
 __FdoFreeAnsi(
-    IN  PANSI_STRING    Ansi
+    _In_ PANSI_STRING   Ansi
     )
 {
     ULONG               Index;
@@ -1023,9 +1023,9 @@ loop:
=20
 static DECLSPEC_NOINLINE VOID
 FdoParseResources(
-    IN  PXENVKBD_FDO            Fdo,
-    IN  PCM_RESOURCE_LIST       RawResourceList,
-    IN  PCM_RESOURCE_LIST       TranslatedResourceList
+    _In_ PXENVKBD_FDO           Fdo,
+    _In_ PCM_RESOURCE_LIST      RawResourceList,
+    _In_ PCM_RESOURCE_LIST      TranslatedResourceList
     )
 {
     PCM_PARTIAL_RESOURCE_LIST   RawPartialList;
@@ -1070,8 +1070,8 @@ FdoParseResources(
=20
 static FORCEINLINE BOOLEAN
 __FdoMatchDistribution(
-    IN  PXENVKBD_FDO    Fdo,
-    IN  PCHAR           Buffer
+    _In_ PXENVKBD_FDO   Fdo,
+    _In_ PCHAR          Buffer
     )
 {
     PCHAR               Vendor;
@@ -1130,7 +1130,7 @@ fail1:
=20
 static VOID
 FdoClearDistribution(
-    IN  PXENVKBD_FDO    Fdo
+    _In_ PXENVKBD_FDO   Fdo
     )
 {
     PCHAR               Buffer;
@@ -1193,7 +1193,7 @@ done:
=20
 static NTSTATUS
 FdoSetDistribution(
-    IN  PXENVKBD_FDO    Fdo
+    _In_ PXENVKBD_FDO   Fdo
     )
 {
     ULONG               Index;
@@ -1287,7 +1287,7 @@ fail1:
=20
 static FORCEINLINE NTSTATUS
 __FdoD3ToD0(
-    IN  PXENVKBD_FDO    Fdo
+    _In_ PXENVKBD_FDO   Fdo
     )
 {
     NTSTATUS            status;
@@ -1327,7 +1327,7 @@ fail1:
=20
 static FORCEINLINE VOID
 __FdoD0ToD3(
-    IN  PXENVKBD_FDO    Fdo
+    _In_ PXENVKBD_FDO   Fdo
     )
 {
     Trace("=3D=3D=3D=3D>\n");
@@ -1352,7 +1352,7 @@ __FdoD0ToD3(
=20
 static DECLSPEC_NOINLINE VOID
 FdoSuspendCallbackLate(
-    IN  PVOID       Argument
+    _In_ PVOID      Argument
     )
 {
     PXENVKBD_FDO    Fdo =3D Argument;
@@ -1367,7 +1367,7 @@ FdoSuspendCallbackLate(
 // This function must not touch pageable code or data
 static DECLSPEC_NOINLINE NTSTATUS
 FdoD3ToD0(
-    IN  PXENVKBD_FDO    Fdo
+    _In_ PXENVKBD_FDO   Fdo
     )
 {
     POWER_STATE         PowerState;
@@ -1460,7 +1460,7 @@ fail1:
 // This function must not touch pageable code or data
 static DECLSPEC_NOINLINE VOID
 FdoD0ToD3(
-    IN  PXENVKBD_FDO    Fdo
+    _In_ PXENVKBD_FDO   Fdo
     )
 {
     POWER_STATE         PowerState;
@@ -1519,7 +1519,7 @@ FdoD0ToD3(
 // This function must not touch pageable code or data
 static DECLSPEC_NOINLINE VOID
 FdoS4ToS3(
-    IN  PXENVKBD_FDO    Fdo
+    _In_ PXENVKBD_FDO   Fdo
     )
 {
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, PASSIVE_LEVEL);
@@ -1531,7 +1531,7 @@ FdoS4ToS3(
 // This function must not touch pageable code or data
 static DECLSPEC_NOINLINE VOID
 FdoS3ToS4(
-    IN  PXENVKBD_FDO    Fdo
+    _In_ PXENVKBD_FDO   Fdo
     )
 {
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, PASSIVE_LEVEL);
@@ -1542,8 +1542,8 @@ FdoS3ToS4(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoStartDevice(
-    IN  PXENVKBD_FDO    Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_FDO   Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -1602,8 +1602,8 @@ fail1:
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoQueryStopDevice(
-    IN  PXENVKBD_FDO    Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_FDO   Fdo,
+    _In_ PIRP           Irp
     )
 {
     NTSTATUS            status;
@@ -1619,8 +1619,8 @@ FdoQueryStopDevice(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoCancelStopDevice(
-    IN  PXENVKBD_FDO    Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_FDO   Fdo,
+    _In_ PIRP           Irp
     )
 {
     NTSTATUS            status;
@@ -1637,8 +1637,8 @@ FdoCancelStopDevice(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoStopDevice(
-    IN  PXENVKBD_FDO    Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_FDO   Fdo,
+    _In_ PIRP           Irp
     )
 {
     NTSTATUS            status;
@@ -1665,8 +1665,8 @@ FdoStopDevice(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoQueryRemoveDevice(
-    IN  PXENVKBD_FDO    Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_FDO   Fdo,
+    _In_ PIRP           Irp
     )
 {
     NTSTATUS            status;
@@ -1682,8 +1682,8 @@ FdoQueryRemoveDevice(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoCancelRemoveDevice(
-    IN  PXENVKBD_FDO    Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_FDO   Fdo,
+    _In_ PIRP           Irp
     )
 {
     NTSTATUS            status;
@@ -1700,8 +1700,8 @@ FdoCancelRemoveDevice(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoSurpriseRemoval(
-    IN  PXENVKBD_FDO    Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_FDO   Fdo,
+    _In_ PIRP           Irp
     )
 {
     PLIST_ENTRY         ListEntry;
@@ -1735,8 +1735,8 @@ FdoSurpriseRemoval(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoRemoveDevice(
-    IN  PXENVKBD_FDO    Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_FDO   Fdo,
+    _In_ PIRP           Irp
     )
 {
     PLIST_ENTRY         ListEntry;
@@ -1817,8 +1817,8 @@ done:
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoQueryDeviceRelations(
-    IN  PXENVKBD_FDO    Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_FDO   Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -1943,8 +1943,8 @@ fail1:
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoQueryCapabilities(
-    IN  PXENVKBD_FDO        Fdo,
-    IN  PIRP                Irp
+    _In_ PXENVKBD_FDO       Fdo,
+    _In_ PIRP               Irp
     )
 {
     PIO_STACK_LOCATION      StackLocation;
@@ -1983,8 +1983,8 @@ fail1:
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoDeviceUsageNotification(
-    IN  PXENVKBD_FDO                Fdo,
-    IN  PIRP                        Irp
+    _In_ PXENVKBD_FDO               Fdo,
+    _In_ PIRP                       Irp
     )
 {
     PIO_STACK_LOCATION              StackLocation;
@@ -2043,8 +2043,8 @@ fail1:
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoQueryPnpDeviceState(
-    IN  PXENVKBD_FDO                Fdo,
-    IN  PIRP                        Irp
+    _In_ PXENVKBD_FDO               Fdo,
+    _In_ PIRP                       Irp
     )
 {
     ULONG_PTR                       State;
@@ -2074,8 +2074,8 @@ done:
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoDispatchPnp(
-    IN  PXENVKBD_FDO    Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_FDO   Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -2154,8 +2154,8 @@ FdoDispatchPnp(
=20
 static FORCEINLINE NTSTATUS
 __FdoSetDevicePowerUp(
-    IN  PXENVKBD_FDO    Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_FDO   Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -2192,8 +2192,8 @@ done:
=20
 static FORCEINLINE NTSTATUS
 __FdoSetDevicePowerDown(
-    IN  PXENVKBD_FDO    Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_FDO   Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -2223,8 +2223,8 @@ __FdoSetDevicePowerDown(
=20
 static FORCEINLINE NTSTATUS
 __FdoSetDevicePower(
-    IN  PXENVKBD_FDO    Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_FDO   Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -2261,15 +2261,15 @@ done:
     return status;
 }
=20
-__drv_functionClass(REQUEST_POWER_COMPLETE)
-__drv_sameIRQL
+_Function_class_(REQUEST_POWER_COMPLETE)
+_IRQL_requires_same_
 VOID
 __FdoRequestSetDevicePower(
-    IN  PDEVICE_OBJECT      DeviceObject,
-    IN  UCHAR               MinorFunction,
-    IN  POWER_STATE         PowerState,
-    IN  PVOID               Context,
-    IN  PIO_STATUS_BLOCK    IoStatus
+    _In_ PDEVICE_OBJECT     DeviceObject,
+    _In_ UCHAR              MinorFunction,
+    _In_ POWER_STATE        PowerState,
+    _In_ PVOID              Context,
+    _In_ PIO_STATUS_BLOCK   IoStatus
     )
 {
     PKEVENT                 Event =3D Context;
@@ -2285,8 +2285,8 @@ __FdoRequestSetDevicePower(
=20
 static VOID
 FdoRequestSetDevicePower(
-    IN  PXENVKBD_FDO        Fdo,
-    IN  DEVICE_POWER_STATE  DeviceState
+    _In_ PXENVKBD_FDO       Fdo,
+    _In_ DEVICE_POWER_STATE DeviceState
     )
 {
     POWER_STATE             PowerState;
@@ -2317,8 +2317,8 @@ FdoRequestSetDevicePower(
=20
 static FORCEINLINE NTSTATUS
 __FdoSetSystemPowerUp(
-    IN  PXENVKBD_FDO    Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_FDO   Fdo,
+    _In_ PIRP           Irp
     )
 {
=20
@@ -2361,8 +2361,8 @@ done:
=20
 static FORCEINLINE NTSTATUS
 __FdoSetSystemPowerDown(
-    IN  PXENVKBD_FDO    Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_FDO   Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -2400,8 +2400,8 @@ __FdoSetSystemPowerDown(
=20
 static FORCEINLINE NTSTATUS
 __FdoSetSystemPower(
-    IN  PXENVKBD_FDO    Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_FDO   Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -2440,8 +2440,8 @@ done:
=20
 static FORCEINLINE NTSTATUS
 __FdoQueryDevicePowerUp(
-    IN  PXENVKBD_FDO    Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_FDO   Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -2463,8 +2463,8 @@ __FdoQueryDevicePowerUp(
=20
 static FORCEINLINE NTSTATUS
 __FdoQueryDevicePowerDown(
-    IN  PXENVKBD_FDO    Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_FDO   Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -2484,8 +2484,8 @@ __FdoQueryDevicePowerDown(
=20
 static FORCEINLINE NTSTATUS
 __FdoQueryDevicePower(
-    IN  PXENVKBD_FDO    Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_FDO   Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -2522,15 +2522,15 @@ done:
     return status;
 }
=20
-__drv_functionClass(REQUEST_POWER_COMPLETE)
-__drv_sameIRQL
+_Function_class_(REQUEST_POWER_COMPLETE)
+_IRQL_requires_same_
 VOID
 __FdoRequestQueryDevicePower(
-    IN  PDEVICE_OBJECT      DeviceObject,
-    IN  UCHAR               MinorFunction,
-    IN  POWER_STATE         PowerState,
-    IN  PVOID               Context,
-    IN  PIO_STATUS_BLOCK    IoStatus
+    _In_ PDEVICE_OBJECT     DeviceObject,
+    _In_ UCHAR              MinorFunction,
+    _In_ POWER_STATE        PowerState,
+    _In_ PVOID              Context,
+    _In_ PIO_STATUS_BLOCK   IoStatus
     )
 {
     PKEVENT                 Event =3D Context;
@@ -2546,8 +2546,8 @@ __FdoRequestQueryDevicePower(
=20
 static VOID
 FdoRequestQueryDevicePower(
-    IN  PXENVKBD_FDO        Fdo,
-    IN  DEVICE_POWER_STATE  DeviceState
+    _In_ PXENVKBD_FDO       Fdo,
+    _In_ DEVICE_POWER_STATE DeviceState
     )
 {
     POWER_STATE             PowerState;
@@ -2578,8 +2578,8 @@ FdoRequestQueryDevicePower(
=20
 static FORCEINLINE NTSTATUS
 __FdoQuerySystemPowerUp(
-    IN  PXENVKBD_FDO    Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_FDO   Fdo,
+    _In_ PIRP           Irp
     )
 {
=20
@@ -2610,8 +2610,8 @@ done:
=20
 static FORCEINLINE NTSTATUS
 __FdoQuerySystemPowerDown(
-    IN  PXENVKBD_FDO    Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_FDO   Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -2636,8 +2636,8 @@ __FdoQuerySystemPowerDown(
=20
 static FORCEINLINE NTSTATUS
 __FdoQuerySystemPower(
-    IN  PXENVKBD_FDO    Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_FDO   Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -2677,12 +2677,12 @@ done:
=20
 static NTSTATUS
 FdoDevicePower(
-    IN  PXENVKBD_THREAD Self,
-    IN  PVOID           Context
+    _In_ PXENVKBD_THREAD    Self,
+    _In_ PVOID              Context
     )
 {
-    PXENVKBD_FDO        Fdo =3D Context;
-    PKEVENT             Event;
+    PXENVKBD_FDO            Fdo =3D Context;
+    PKEVENT                 Event;
=20
     Event =3D ThreadGetEvent(Self);
=20
@@ -2734,12 +2734,12 @@ FdoDevicePower(
=20
 static NTSTATUS
 FdoSystemPower(
-    IN  PXENVKBD_THREAD Self,
-    IN  PVOID           Context
+    _In_ PXENVKBD_THREAD    Self,
+    _In_ PVOID              Context
     )
 {
-    PXENVKBD_FDO        Fdo =3D Context;
-    PKEVENT             Event;
+    PXENVKBD_FDO            Fdo =3D Context;
+    PKEVENT                 Event;
=20
     Event =3D ThreadGetEvent(Self);
=20
@@ -2791,8 +2791,8 @@ FdoSystemPower(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoDispatchPower(
-    IN  PXENVKBD_FDO    Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_FDO   Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -2859,8 +2859,8 @@ done:
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoDispatchDefault(
-    IN  PXENVKBD_FDO    Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_FDO   Fdo,
+    _In_ PIRP           Irp
     )
 {
     NTSTATUS            status;
@@ -2873,8 +2873,8 @@ FdoDispatchDefault(
=20
 NTSTATUS
 FdoDispatch(
-    IN  PXENVKBD_FDO    Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_FDO   Fdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -2899,15 +2899,15 @@ FdoDispatch(
     return status;
 }
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 static NTSTATUS
 FdoQueryInterface(
-    IN  PXENVKBD_FDO    Fdo,
-    IN  const GUID      *Guid,
-    IN  ULONG           Version,
-    OUT PINTERFACE      Interface,
-    IN  ULONG           Size,
-    IN  BOOLEAN         Optional
+    _In_ PXENVKBD_FDO   Fdo,
+    _In_ const GUID     *Guid,
+    _In_ ULONG          Version,
+    _Out_ PINTERFACE    Interface,
+    _In_ ULONG          Size,
+    _In_ BOOLEAN        Optional
     )
 {
     KEVENT              Event;
@@ -2989,8 +2989,8 @@ fail1:
 #define DEFINE_FDO_GET_INTERFACE(_Interface, _Type)                     \
 VOID                                                                    \
 FdoGet ## _Interface ## Interface(                                      \
-    IN  PXENVKBD_FDO Fdo,                                                =
\
-    OUT _Type       _Interface ## Interface                             \
+    _In_ PXENVKBD_FDO Fdo,                                               =
 \
+    _Out_ _Type       _Interface ## Interface                            =
 \
     )                                                                   \
 {                                                                       \
     * ## _Interface ## Interface =3D Fdo-> ## _Interface ## Interface;   =
 \
@@ -3006,7 +3006,7 @@ DEFINE_FDO_GET_INTERFACE(Gnttab, PXENBUS_GNTTAB_INTE=
RFACE)
=20
 NTSTATUS
 FdoCreate(
-    IN  PDEVICE_OBJECT      PhysicalDeviceObject
+    _In_ PDEVICE_OBJECT     PhysicalDeviceObject
     )
 {
     PDEVICE_OBJECT          FunctionDeviceObject;
@@ -3231,7 +3231,7 @@ fail1:
=20
 VOID
 FdoDestroy(
-    IN  PXENVKBD_FDO    Fdo
+    _In_ PXENVKBD_FDO   Fdo
     )
 {
     PXENVKBD_DX         Dx =3D Fdo->Dx;
diff --git a/src/xenvkbd/fdo=2Eh b/src/xenvkbd/fdo=2Eh
index b294080=2E=2E29a935a 100644
--- a/src/xenvkbd/fdo=2Eh
+++ b/src/xenvkbd/fdo=2Eh
@@ -47,92 +47,92 @@
=20
 extern PCHAR
 FdoGetVendorName(
-    IN  PXENVKBD_FDO    Fdo
+    _In_ PXENVKBD_FDO   Fdo
     );
=20
 extern PCHAR
 FdoGetName(
-    IN  PXENVKBD_FDO    Fdo
+    _In_ PXENVKBD_FDO   Fdo
     );
=20
 extern NTSTATUS
 FdoAddPhysicalDeviceObject(
-    IN  PXENVKBD_FDO    Fdo,
-    IN  PXENVKBD_PDO    Pdo
+    _In_ PXENVKBD_FDO   Fdo,
+    _In_ PXENVKBD_PDO   Pdo
     );
=20
 extern VOID
 FdoRemovePhysicalDeviceObject(
-    IN  PXENVKBD_FDO    Fdo,
-    IN  PXENVKBD_PDO    Pdo
+    _In_ PXENVKBD_FDO   Fdo,
+    _In_ PXENVKBD_PDO   Pdo
     );
=20
 extern VOID
 FdoAcquireMutex(
-    IN  PXENVKBD_FDO    Fdo
+    _In_ PXENVKBD_FDO   Fdo
     );
=20
 extern VOID
 FdoReleaseMutex(
-    IN  PXENVKBD_FDO    Fdo
+    _In_ PXENVKBD_FDO   Fdo
     );
=20
 extern PDEVICE_OBJECT
 FdoGetPhysicalDeviceObject(
-    IN  PXENVKBD_FDO    Fdo
+    _In_ PXENVKBD_FDO   Fdo
     );
=20
 extern PDMA_ADAPTER
 FdoGetDmaAdapter(
-    IN  PXENVKBD_FDO        Fdo,
-    IN  PDEVICE_DESCRIPTION DeviceDescriptor,
-    OUT PULONG              NumberOfMapRegisters
+    _In_ PXENVKBD_FDO           Fdo,
+    _In_ PDEVICE_DESCRIPTION    DeviceDescriptor,
+    _Out_ PULONG                NumberOfMapRegisters
     );
=20
 extern BOOLEAN
 FdoTranslateBusAddress(
-    IN      PXENVKBD_FDO        Fdo,
-    IN      PHYSICAL_ADDRESS    BusAddress,
-    IN      ULONG               Length,
-    IN OUT  PULONG              AddressSpace,
-    OUT     PPHYSICAL_ADDRESS   TranslatedAddress
+    _In_ PXENVKBD_FDO       Fdo,
+    _In_ PHYSICAL_ADDRESS   BusAddress,
+    _In_ ULONG              Length,
+    _Inout_ PULONG          AddressSpace,
+    _Out_ PPHYSICAL_ADDRESS TranslatedAddress
     );
=20
 extern ULONG
 FdoSetBusData(
-    IN  PXENVKBD_FDO    Fdo,
-    IN  ULONG           DataType,
-    IN  PVOID           Buffer,
-    IN  ULONG           Offset,
-    IN  ULONG           Length
+    _In_ PXENVKBD_FDO   Fdo,
+    _In_ ULONG          DataType,
+    _In_ PVOID          Buffer,
+    _In_ ULONG          Offset,
+    _In_ ULONG          Length
     );
=20
 extern ULONG
 FdoGetBusData(
-    IN  PXENVKBD_FDO    Fdo,
-    IN  ULONG           DataType,
-    IN  PVOID           Buffer,
-    IN  ULONG           Offset,
-    IN  ULONG           Length
+    _In_ PXENVKBD_FDO   Fdo,
+    _In_ ULONG          DataType,
+    _In_ PVOID          Buffer,
+    _In_ ULONG          Offset,
+    _In_ ULONG          Length
     );
=20
 extern NTSTATUS
 FdoDelegateIrp(
-    IN  PXENVKBD_FDO    Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_FDO   Fdo,
+    _In_ PIRP           Irp
     );
=20
 extern NTSTATUS
 FdoDispatch(
-    IN  PXENVKBD_FDO    Fdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_FDO   Fdo,
+    _In_ PIRP           Irp
     );
=20
 #define DECLARE_FDO_GET_INTERFACE(_Interface, _Type)    \
 extern VOID                                             \
 FdoGet ## _Interface ## Interface(                      \
-    IN  PXENVKBD_FDO Fdo,                                \
-    OUT _Type       _Interface ## Interface             \
+    _In_ PXENVKBD_FDO Fdo,                                \
+    _Out_ _Type       _Interface ## Interface             \
     );
=20
 DECLARE_FDO_GET_INTERFACE(Debug, PXENBUS_DEBUG_INTERFACE)
@@ -145,12 +145,12 @@ DECLARE_FDO_GET_INTERFACE(Gnttab, PXENBUS_GNTTAB_INT=
ERFACE)
=20
 extern NTSTATUS
 FdoCreate(
-    IN  PDEVICE_OBJECT  PhysicalDeviceObject
+    _In_ PDEVICE_OBJECT PhysicalDeviceObject
     );
=20
 extern VOID
 FdoDestroy(
-    IN  PXENVKBD_FDO    Fdo
+    _In_ PXENVKBD_FDO   Fdo
     );
=20
 #endif  // _XENVKBD_FDO_H
diff --git a/src/xenvkbd/frontend=2Ec b/src/xenvkbd/frontend=2Ec
index 7b258ca=2E=2E124fefc 100644
--- a/src/xenvkbd/frontend=2Ec
+++ b/src/xenvkbd/frontend=2Ec
@@ -72,7 +72,7 @@ struct _XENVKBD_FRONTEND {
=20
 static const PCHAR
 FrontendStateName(
-    IN  XENVKBD_FRONTEND_STATE  State
+    _In_ XENVKBD_FRONTEND_STATE State
     )
 {
 #define _STATE_NAME(_State)     \
@@ -98,7 +98,7 @@ FrontendStateName(
=20
 static FORCEINLINE PVOID
 __FrontendAllocate(
-    IN  ULONG   Length
+    _In_ ULONG  Length
     )
 {
     return __AllocatePoolWithTag(NonPagedPool, Length, FRONTEND_POOL);
@@ -106,7 +106,7 @@ __FrontendAllocate(
=20
 static FORCEINLINE VOID
 __FrontendFree(
-    IN  PVOID   Buffer
+    _In_ PVOID  Buffer
     )
 {
     __FreePoolWithTag(Buffer, FRONTEND_POOL);
@@ -114,7 +114,7 @@ __FrontendFree(
=20
 static FORCEINLINE PXENVKBD_PDO
 __FrontendGetPdo(
-    IN  PXENVKBD_FRONTEND   Frontend
+    _In_ PXENVKBD_FRONTEND  Frontend
     )
 {
     return Frontend->Pdo;
@@ -122,7 +122,7 @@ __FrontendGetPdo(
=20
 PXENVKBD_PDO
 FrontendGetPdo(
-    IN  PXENVKBD_FRONTEND   Frontend
+    _In_ PXENVKBD_FRONTEND  Frontend
     )
 {
     return __FrontendGetPdo(Frontend);
@@ -130,7 +130,7 @@ FrontendGetPdo(
=20
 static FORCEINLINE PCHAR
 __FrontendGetPath(
-    IN  PXENVKBD_FRONTEND   Frontend
+    _In_ PXENVKBD_FRONTEND  Frontend
     )
 {
     return Frontend->Path;
@@ -138,7 +138,7 @@ __FrontendGetPath(
=20
 PCHAR
 FrontendGetPath(
-    IN  PXENVKBD_FRONTEND   Frontend
+    _In_ PXENVKBD_FRONTEND  Frontend
     )
 {
     return __FrontendGetPath(Frontend);
@@ -146,7 +146,7 @@ FrontendGetPath(
=20
 static FORCEINLINE PCHAR
 __FrontendGetBackendPath(
-    IN  PXENVKBD_FRONTEND   Frontend
+    _In_ PXENVKBD_FRONTEND  Frontend
     )
 {
     return Frontend->BackendPath;
@@ -154,7 +154,7 @@ __FrontendGetBackendPath(
=20
 PCHAR
 FrontendGetBackendPath(
-    IN  PXENVKBD_FRONTEND   Frontend
+    _In_ PXENVKBD_FRONTEND  Frontend
     )
 {
     return __FrontendGetBackendPath(Frontend);
@@ -162,7 +162,7 @@ FrontendGetBackendPath(
=20
 static FORCEINLINE USHORT
 __FrontendGetBackendDomain(
-    IN  PXENVKBD_FRONTEND   Frontend
+    _In_ PXENVKBD_FRONTEND  Frontend
     )
 {
     return Frontend->BackendDomain;
@@ -170,7 +170,7 @@ __FrontendGetBackendDomain(
=20
 USHORT
 FrontendGetBackendDomain(
-    IN  PXENVKBD_FRONTEND   Frontend
+    _In_ PXENVKBD_FRONTEND  Frontend
     )
 {
     return __FrontendGetBackendDomain(Frontend);
@@ -179,7 +179,7 @@ FrontendGetBackendDomain(
 #define DEFINE_FRONTEND_GET_FUNCTION(_Function, _Type)  \
 static FORCEINLINE _Type                                \
 __FrontendGet ## _Function(                             \
-    IN  PXENVKBD_FRONTEND   Frontend                    \
+    _In_ PXENVKBD_FRONTEND   Frontend                    \
     )                                                   \
 {                                                       \
     return Frontend-> ## _Function;                     \
@@ -187,7 +187,7 @@ __FrontendGet ## _Function(                           =
  \
                                                         \
 _Type                                                   \
 FrontendGet ## _Function(                               \
-    IN  PXENVKBD_FRONTEND   Frontend                    \
+    _In_ PXENVKBD_FRONTEND   Frontend                    \
     )                                                   \
 {                                                       \
     return __FrontendGet ## _Function ## (Frontend);    \
@@ -197,7 +197,7 @@ DEFINE_FRONTEND_GET_FUNCTION(Ring, PXENVKBD_RING)
=20
 static BOOLEAN
 FrontendIsOnline(
-    IN  PXENVKBD_FRONTEND   Frontend
+    _In_ PXENVKBD_FRONTEND  Frontend
     )
 {
     return Frontend->Online;
@@ -205,7 +205,7 @@ FrontendIsOnline(
=20
 static BOOLEAN
 FrontendIsBackendOnline(
-    IN  PXENVKBD_FRONTEND   Frontend
+    _In_ PXENVKBD_FRONTEND  Frontend
     )
 {
     PCHAR                   Buffer;
@@ -233,12 +233,12 @@ FrontendIsBackendOnline(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FrontendEject(
-    IN  PXENVKBD_THREAD Self,
-    IN  PVOID           Context
+    _In_ PXENVKBD_THREAD    Self,
+    _In_ PVOID              Context
     )
 {
-    PXENVKBD_FRONTEND    Frontend =3D Context;
-    PKEVENT             Event;
+    PXENVKBD_FRONTEND       Frontend =3D Context;
+    PKEVENT                 Event;
=20
     Trace("%s: =3D=3D=3D=3D>\n", __FrontendGetPath(Frontend));
=20
@@ -285,7 +285,7 @@ loop:
=20
 VOID
 FrontendEjectFailed(
-    IN PXENVKBD_FRONTEND    Frontend
+    _In_ PXENVKBD_FRONTEND  Frontend
     )
 {
     KIRQL                   Irql;
@@ -336,7 +336,7 @@ fail1:
=20
 static VOID
 FrontendSetOnline(
-    IN  PXENVKBD_FRONTEND   Frontend
+    _In_ PXENVKBD_FRONTEND  Frontend
     )
 {
     Trace("=3D=3D=3D=3D>\n");
@@ -348,7 +348,7 @@ FrontendSetOnline(
=20
 static VOID
 FrontendSetOffline(
-    IN  PXENVKBD_FRONTEND   Frontend
+    _In_ PXENVKBD_FRONTEND  Frontend
     )
 {
     Trace("=3D=3D=3D=3D>\n");
@@ -361,8 +361,8 @@ FrontendSetOffline(
=20
 static VOID
 FrontendSetXenbusState(
-    IN  PXENVKBD_FRONTEND   Frontend,
-    IN  XenbusState         State
+    _In_ PXENVKBD_FRONTEND  Frontend,
+    _In_ XenbusState        State
     )
 {
     BOOLEAN                 Online;
@@ -393,8 +393,8 @@ FrontendSetXenbusState(
=20
 static VOID
 FrontendWaitForBackendXenbusStateChange(
-    IN      PXENVKBD_FRONTEND   Frontend,
-    IN OUT  XenbusState         *State
+    _In_ PXENVKBD_FRONTEND      Frontend,
+    _Inout_ XenbusState         *State
     )
 {
     KEVENT                      Event;
@@ -487,7 +487,7 @@ FrontendWaitForBackendXenbusStateChange(
=20
 static NTSTATUS
 FrontendUpdatePath(
-    IN  PXENVKBD_FRONTEND   Frontend
+    _In_ PXENVKBD_FRONTEND  Frontend
     )
 {
     ULONG                   Length;
@@ -553,7 +553,7 @@ fail1:
=20
 static NTSTATUS
 FrontendClose(
-    IN  PXENVKBD_FRONTEND   Frontend
+    _In_ PXENVKBD_FRONTEND  Frontend
     )
 {
     XenbusState             State;
@@ -618,7 +618,7 @@ fail1:
=20
 static NTSTATUS
 FrontendPrepare(
-    IN  PXENVKBD_FRONTEND   Frontend
+    _In_ PXENVKBD_FRONTEND  Frontend
     )
 {
     XenbusState             State;
@@ -667,7 +667,7 @@ fail1:
=20
 static NTSTATUS
 FrontendConnect(
-    IN  PXENVKBD_FRONTEND   Frontend
+    _In_ PXENVKBD_FRONTEND  Frontend
     )
 {
     XenbusState             State;
@@ -744,7 +744,7 @@ fail1:
=20
 static VOID
 FrontendDisconnect(
-    IN  PXENVKBD_FRONTEND   Frontend
+    _In_ PXENVKBD_FRONTEND  Frontend
     )
 {
     Trace("=3D=3D=3D=3D>\n");
@@ -756,7 +756,7 @@ FrontendDisconnect(
=20
 static NTSTATUS
 FrontendEnable(
-    IN  PXENVKBD_FRONTEND   Frontend
+    _In_ PXENVKBD_FRONTEND  Frontend
     )
 {
     NTSTATUS                status;
@@ -778,7 +778,7 @@ fail1:
=20
 static VOID
 FrontendDisable(
-    IN  PXENVKBD_FRONTEND    Frontend
+    _In_ PXENVKBD_FRONTEND  Frontend
     )
 {
     Trace("=3D=3D=3D=3D>\n");
@@ -790,8 +790,8 @@ FrontendDisable(
=20
 NTSTATUS
 FrontendSetState(
-    IN  PXENVKBD_FRONTEND       Frontend,
-    IN  XENVKBD_FRONTEND_STATE  State
+    _In_ PXENVKBD_FRONTEND      Frontend,
+    _In_ XENVKBD_FRONTEND_STATE State
     )
 {
     NTSTATUS                    status;
@@ -938,7 +938,7 @@ FrontendSetState(
=20
 static FORCEINLINE VOID
 __FrontendResume(
-    IN  PXENVKBD_FRONTEND   Frontend
+    _In_ PXENVKBD_FRONTEND  Frontend
     )
 {
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, DISPATCH_LEVEL);
@@ -949,7 +949,7 @@ __FrontendResume(
=20
 static FORCEINLINE VOID
 __FrontendSuspend(
-    IN  PXENVKBD_FRONTEND   Frontend
+    _In_ PXENVKBD_FRONTEND  Frontend
     )
 {
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, DISPATCH_LEVEL);
@@ -959,7 +959,7 @@ __FrontendSuspend(
=20
 static DECLSPEC_NOINLINE VOID
 FrontendSuspendCallbackEarly(
-    IN  PVOID           Argument
+    _In_ PVOID          Argument
     )
 {
     PXENVKBD_FRONTEND   Frontend =3D Argument;
@@ -969,7 +969,7 @@ FrontendSuspendCallbackEarly(
=20
 static DECLSPEC_NOINLINE VOID
 FrontendSuspendCallbackLate(
-    IN  PVOID           Argument
+    _In_ PVOID          Argument
     )
 {
     PXENVKBD_FRONTEND   Frontend =3D Argument;
@@ -980,7 +980,7 @@ FrontendSuspendCallbackLate(
=20
 NTSTATUS
 FrontendResume(
-    IN  PXENVKBD_FRONTEND   Frontend
+    _In_ PXENVKBD_FRONTEND  Frontend
     )
 {
     KIRQL                   Irql;
@@ -1056,7 +1056,7 @@ fail1:
=20
 VOID
 FrontendSuspend(
-    IN  PXENVKBD_FRONTEND   Frontend
+    _In_ PXENVKBD_FRONTEND  Frontend
     )
 {
     KIRQL                   Irql;
@@ -1095,17 +1095,17 @@ FrontendSuspend(
     Trace("<=3D=3D=3D=3D\n");
 }
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 FrontendInitialize(
-    IN  PXENVKBD_PDO        Pdo,
-    OUT PXENVKBD_FRONTEND   *Frontend
+    _In_ PXENVKBD_PDO           Pdo,
+    _Outptr_ PXENVKBD_FRONTEND  *Frontend
     )
 {
-    PCHAR                   Name;
-    ULONG                   Length;
-    PCHAR                   Path;
-    NTSTATUS                status;
+    PCHAR                       Name;
+    ULONG                       Length;
+    PCHAR                       Path;
+    NTSTATUS                    status;
=20
     Trace("=3D=3D=3D=3D>\n");
=20
@@ -1204,7 +1204,7 @@ fail1:
=20
 VOID
 FrontendTeardown(
-    IN  PXENVKBD_FRONTEND   Frontend
+    _In_ PXENVKBD_FRONTEND  Frontend
     )
 {
     Trace("=3D=3D=3D=3D>\n");
diff --git a/src/xenvkbd/frontend=2Eh b/src/xenvkbd/frontend=2Eh
index d67851b=2E=2Ee7b6902 100644
--- a/src/xenvkbd/frontend=2Eh
+++ b/src/xenvkbd/frontend=2Eh
@@ -56,64 +56,64 @@ typedef enum _XENVKBD_FRONTEND_STATE {
     FRONTEND_ENABLED
 } XENVKBD_FRONTEND_STATE, *PXENVKBD_FRONTEND_STATE;
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 FrontendInitialize(
-    IN  PXENVKBD_PDO        Pdo,
-    OUT PXENVKBD_FRONTEND   *Frontend
+    _In_ PXENVKBD_PDO           Pdo,
+    _Outptr_ PXENVKBD_FRONTEND  *Frontend
     );
=20
 extern VOID
 FrontendTeardown(
-    IN  PXENVKBD_FRONTEND   Frontend
+    _In_ PXENVKBD_FRONTEND  Frontend
     );
=20
 extern VOID
 FrontendEjectFailed(
-    IN PXENVKBD_FRONTEND    Frontend
+    _In_ PXENVKBD_FRONTEND  Frontend
     );
=20
 extern NTSTATUS
 FrontendSetState(
-    IN  PXENVKBD_FRONTEND       Frontend,
-    IN  XENVKBD_FRONTEND_STATE  State
+    _In_ PXENVKBD_FRONTEND      Frontend,
+    _In_ XENVKBD_FRONTEND_STATE State
     );
=20
 extern NTSTATUS
 FrontendResume(
-    IN  PXENVKBD_FRONTEND   Frontend
+    _In_ PXENVKBD_FRONTEND  Frontend
     );
=20
 extern VOID
 FrontendSuspend(
-    IN  PXENVKBD_FRONTEND   Frontend
+    _In_ PXENVKBD_FRONTEND  Frontend
     );
=20
 extern PXENVKBD_PDO
 FrontendGetPdo(
-    IN  PXENVKBD_FRONTEND   Frontend
+    _In_ PXENVKBD_FRONTEND  Frontend
     );
=20
 extern PCHAR
 FrontendGetPath(
-    IN  PXENVKBD_FRONTEND   Frontend
+    _In_ PXENVKBD_FRONTEND  Frontend
     );
=20
 extern PCHAR
 FrontendGetBackendPath(
-    IN  PXENVKBD_FRONTEND   Frontend
+    _In_ PXENVKBD_FRONTEND  Frontend
     );
=20
 extern USHORT
 FrontendGetBackendDomain(
-    IN  PXENVKBD_FRONTEND   Frontend
+    _In_ PXENVKBD_FRONTEND  Frontend
     );
=20
 #include "ring=2Eh"
=20
 extern PXENVKBD_RING
 FrontendGetRing(
-    IN  PXENVKBD_FRONTEND   Frontend
+    _In_ PXENVKBD_FRONTEND  Frontend
     );
=20
 #endif  // _XENVKBD_FRONTEND_H
diff --git a/src/xenvkbd/hid=2Ec b/src/xenvkbd/hid=2Ec
index 98cac43=2E=2Ebfb16a6 100644
--- a/src/xenvkbd/hid=2Ec
+++ b/src/xenvkbd/hid=2Ec
@@ -65,11 +65,11 @@ struct _XENVKBD_HID_CONTEXT {
=20
 static FORCEINLINE NTSTATUS
 HidCopyBuffer(
-    IN  PVOID       Buffer,
-    IN  ULONG       Length,
-    IN  const VOID  *Source,
-    IN  ULONG       SourceLength,
-    OUT PULONG      Returned
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length,
+    _In_ const VOID *Source,
+    _In_ ULONG      SourceLength,
+    _Out_ PULONG    Returned
     )
 {
     if (Buffer =3D=3D NULL)
@@ -87,7 +87,7 @@ HidCopyBuffer(
=20
 static FORCEINLINE PVOID
 __HidAllocate(
-    IN  ULONG   Length
+    _In_ ULONG  Length
     )
 {
     return __AllocatePoolWithTag(NonPagedPool, Length, XENVKBD_VKBD_TAG);
@@ -95,7 +95,7 @@ __HidAllocate(
=20
 static FORCEINLINE VOID
 __HidFree(
-    IN  PVOID   Buffer
+    _In_ PVOID  Buffer
     )
 {
     __FreePoolWithTag(Buffer, XENVKBD_VKBD_TAG);
@@ -103,14 +103,14 @@ __HidFree(
=20
 static NTSTATUS
 HidEnable(
-    IN  PINTERFACE          Interface,
-    IN  XENHID_HID_CALLBACK Callback,
-    IN  PVOID               Argument
+    _In_ PINTERFACE             Interface,
+    _In_ XENHID_HID_CALLBACK    Callback,
+    _In_ PVOID                  Argument
     )
 {
-    PXENVKBD_HID_CONTEXT    Context =3D Interface->Context;
-    KIRQL                   Irql;
-    NTSTATUS                status;
+    PXENVKBD_HID_CONTEXT        Context =3D Interface->Context;
+    KIRQL                       Irql;
+    NTSTATUS                    status;
=20
     Trace("=3D=3D=3D=3D>\n");
=20
@@ -156,7 +156,7 @@ fail1:
=20
 static VOID
 HidDisable(
-    IN  PINTERFACE          Interface
+    _In_ PINTERFACE         Interface
     )
 {
     PXENVKBD_HID_CONTEXT    Context =3D Interface->Context;
@@ -190,10 +190,10 @@ done:
=20
 static NTSTATUS
 HidGetDeviceAttributes(
-    IN  PINTERFACE          Interface,
-    IN  PVOID               Buffer,
-    IN  ULONG               Length,
-    OUT PULONG              Returned
+    _In_ PINTERFACE         Interface,
+    _In_ PVOID              Buffer,
+    _In_ ULONG              Length,
+    _Out_ PULONG            Returned
     )
 {
     PXENVKBD_HID_CONTEXT    Context =3D Interface->Context;
@@ -216,10 +216,10 @@ HidGetDeviceAttributes(
=20
 static NTSTATUS
 HidGetDeviceDescriptor(
-    IN  PINTERFACE          Interface,
-    IN  PVOID               Buffer,
-    IN  ULONG               Length,
-    OUT PULONG              Returned
+    _In_ PINTERFACE         Interface,
+    _In_ PVOID              Buffer,
+    _In_ ULONG              Length,
+    _Out_ PULONG            Returned
     )
 {
     PXENVKBD_HID_CONTEXT    Context =3D Interface->Context;
@@ -242,10 +242,10 @@ HidGetDeviceDescriptor(
=20
 static NTSTATUS
 HidGetReportDescriptor(
-    IN  PINTERFACE          Interface,
-    IN  PVOID               Buffer,
-    IN  ULONG               Length,
-    OUT PULONG              Returned
+    _In_ PINTERFACE         Interface,
+    _In_ PVOID              Buffer,
+    _In_ ULONG              Length,
+    _Out_ PULONG            Returned
     )
 {
     PXENVKBD_HID_CONTEXT    Context =3D Interface->Context;
@@ -268,11 +268,11 @@ HidGetReportDescriptor(
=20
 static NTSTATUS
 HidGetString(
-    IN  PINTERFACE          Interface,
-    IN  ULONG               Identifier,
-    IN  PVOID               Buffer,
-    IN  ULONG               Length,
-    OUT PULONG              Returned
+    _In_ PINTERFACE         Interface,
+    _In_ ULONG              Identifier,
+    _In_ PVOID              Buffer,
+    _In_ ULONG              Length,
+    _Out_ PULONG            Returned
     )
 {
     PXENVKBD_HID_CONTEXT    Context =3D Interface->Context;
@@ -316,11 +316,11 @@ HidGetString(
=20
 static NTSTATUS
 HidGetIndexedString(
-    IN  PINTERFACE          Interface,
-    IN  ULONG               Index,
-    IN  PVOID               Buffer,
-    IN  ULONG               Length,
-    OUT PULONG              Returned
+    _In_ PINTERFACE         Interface,
+    _In_ ULONG              Index,
+    _In_ PVOID              Buffer,
+    _In_ ULONG              Length,
+    _Out_ PULONG            Returned
     )
 {
     PXENVKBD_HID_CONTEXT    Context =3D Interface->Context;
@@ -348,11 +348,11 @@ done:
=20
 static NTSTATUS
 HidGetFeature(
-    IN  PINTERFACE          Interface,
-    IN  ULONG               ReportId,
-    IN  PVOID               Buffer,
-    IN  ULONG               Length,
-    OUT PULONG              Returned
+    _In_ PINTERFACE         Interface,
+    _In_ ULONG              ReportId,
+    _In_ PVOID              Buffer,
+    _In_ ULONG              Length,
+    _Out_ PULONG            Returned
     )
 {
     PXENVKBD_HID_CONTEXT    Context =3D Interface->Context;
@@ -380,10 +380,10 @@ done:
=20
 static NTSTATUS
 HidSetFeature(
-    IN  PINTERFACE          Interface,
-    IN  ULONG               ReportId,
-    IN  PVOID               Buffer,
-    IN  ULONG               Length
+    _In_ PINTERFACE         Interface,
+    _In_ ULONG              ReportId,
+    _In_ PVOID              Buffer,
+    _In_ ULONG              Length
     )
 {
     PXENVKBD_HID_CONTEXT    Context =3D Interface->Context;
@@ -410,11 +410,11 @@ done:
=20
 static NTSTATUS
 HidGetInputReport(
-    IN  PINTERFACE          Interface,
-    IN  ULONG               ReportId,
-    IN  PVOID               Buffer,
-    IN  ULONG               Length,
-    OUT PULONG              Returned
+    _In_ PINTERFACE         Interface,
+    _In_ ULONG              ReportId,
+    _In_ PVOID              Buffer,
+    _In_ ULONG              Length,
+    _Out_ PULONG            Returned
     )
 {
     PXENVKBD_HID_CONTEXT    Context =3D Interface->Context;
@@ -442,10 +442,10 @@ done:
=20
 static NTSTATUS
 HidSetOutputReport(
-    IN  PINTERFACE          Interface,
-    IN  ULONG               ReportId,
-    IN  PVOID               Buffer,
-    IN  ULONG               Length
+    _In_ PINTERFACE         Interface,
+    _In_ ULONG              ReportId,
+    _In_ PVOID              Buffer,
+    _In_ ULONG              Length
     )
 {
     PXENVKBD_HID_CONTEXT    Context =3D Interface->Context;
@@ -472,7 +472,7 @@ done:
=20
 static VOID
 HidReadReport(
-    IN  PINTERFACE          Interface
+    _In_ PINTERFACE         Interface
     )
 {
     PXENVKBD_HID_CONTEXT    Context =3D Interface->Context;
@@ -487,10 +487,10 @@ HidReadReport(
=20
 static NTSTATUS
 HidWriteReport(
-    IN  PINTERFACE          Interface,
-    IN  ULONG               ReportId,
-    IN  PVOID               Buffer,
-    IN  ULONG               Length
+    _In_ PINTERFACE         Interface,
+    _In_ ULONG              ReportId,
+    _In_ PVOID              Buffer,
+    _In_ ULONG              Length
     )
 {
     PXENVKBD_HID_CONTEXT    Context =3D Interface->Context;
@@ -544,7 +544,7 @@ done:
=20
 VOID
 HidRelease(
-    IN  PINTERFACE          Interface
+    _In_ PINTERFACE         Interface
     )
 {
     PXENVKBD_HID_CONTEXT    Context =3D Interface->Context;
@@ -590,11 +590,11 @@ static struct _XENHID_HID_INTERFACE_V1 HidInterfaceV=
ersion1 =3D {
=20
 NTSTATUS
 HidInitialize(
-    IN  PXENVKBD_PDO            Pdo,
-    OUT PXENVKBD_HID_CONTEXT    *Context
+    _In_ PXENVKBD_PDO               Pdo,
+    _Outptr_ PXENVKBD_HID_CONTEXT   *Context
     )
 {
-    NTSTATUS                    status;
+    NTSTATUS                        status;
=20
     Trace("=3D=3D=3D=3D>\n");
=20
@@ -620,10 +620,10 @@ fail1:
=20
 NTSTATUS
 HidGetInterface(
-    IN      PXENVKBD_HID_CONTEXT    Context,
-    IN      ULONG                   Version,
-    IN OUT  PINTERFACE              Interface,
-    IN      ULONG                   Size
+    _In_ PXENVKBD_HID_CONTEXT       Context,
+    _In_ ULONG                      Version,
+    _Inout_ PINTERFACE              Interface,
+    _In_ ULONG                      Size
     )
 {
     NTSTATUS                        status;
@@ -656,7 +656,7 @@ HidGetInterface(
=20
 VOID
 HidTeardown(
-    IN  PXENVKBD_HID_CONTEXT    Context
+    _In_ PXENVKBD_HID_CONTEXT   Context
     )
 {
     Trace("=3D=3D=3D=3D>\n");
@@ -674,9 +674,9 @@ HidTeardown(
=20
 BOOLEAN
 HidSendReadReport(
-    IN  PXENVKBD_HID_CONTEXT    Context,
-    IN  PVOID                   Buffer,
-    IN  ULONG                   Length
+    _In_ PXENVKBD_HID_CONTEXT   Context,
+    _In_ PVOID                  Buffer,
+    _In_ ULONG                  Length
     )
 {
     if (!Context->Enabled)
diff --git a/src/xenvkbd/hid=2Eh b/src/xenvkbd/hid=2Eh
index 1130415=2E=2E1364a66 100644
--- a/src/xenvkbd/hid=2Eh
+++ b/src/xenvkbd/hid=2Eh
@@ -44,30 +44,30 @@ typedef struct _XENVKBD_HID_CONTEXT  XENVKBD_HID_CONTE=
XT, *PXENVKBD_HID_CONTEXT;
=20
 extern NTSTATUS
 HidInitialize(
-    IN  PXENVKBD_PDO            Pdo,
-    OUT PXENVKBD_HID_CONTEXT    *Context
+    _In_ PXENVKBD_PDO               Pdo,
+    _Outptr_ PXENVKBD_HID_CONTEXT   *Context
     );
=20
 extern NTSTATUS
 HidGetInterface(
-    IN      PXENVKBD_HID_CONTEXT    Context,
-    IN      ULONG                   Version,
-    IN OUT  PINTERFACE              Interface,
-    IN      ULONG                   Size
+    _In_ PXENVKBD_HID_CONTEXT   Context,
+    _In_ ULONG                  Version,
+    _Inout_ PINTERFACE          Interface,
+    _In_ ULONG                  Size
     );
=20
 extern VOID
 HidTeardown(
-    IN  PXENVKBD_HID_CONTEXT    Context
+    _In_ PXENVKBD_HID_CONTEXT   Context
     );
=20
 // CALLBACKS
=20
 extern BOOLEAN
 HidSendReadReport(
-    IN  PXENVKBD_HID_CONTEXT    Context,
-    IN  PVOID                   Buffer,
-    IN  ULONG                   Length
+    _In_ PXENVKBD_HID_CONTEXT   Context,
+    _In_ PVOID                  Buffer,
+    _In_ ULONG                  Length
     );
=20
 #endif  // _XENVKBD_VKBD_H
diff --git a/src/xenvkbd/mrsw=2Eh b/src/xenvkbd/mrsw=2Eh
index bddc49d=2E=2E3526a15 100644
--- a/src/xenvkbd/mrsw=2Eh
+++ b/src/xenvkbd/mrsw=2Eh
@@ -57,7 +57,7 @@ C_ASSERT(RTL_FIELD_SIZE(XENVKBD_MRSW_LOCK, Holder) =3D=
=3D RTL_FIELD_SIZE(XENVKBD_MRS
=20
 static FORCEINLINE VOID
 InitializeMrswLock(
-    IN  PXENVKBD_MRSW_LOCK  Lock
+    _In_ PXENVKBD_MRSW_LOCK Lock
     )
 {
     LONG                    Slot;
@@ -72,7 +72,7 @@ InitializeMrswLock(
=20
 static FORCEINLINE BOOLEAN
 __ClaimExclusive(
-    IN  PXENVKBD_MRSW_LOCK  Lock
+    _In_ PXENVKBD_MRSW_LOCK Lock
     )
 {
     LONG64                  Old;
@@ -85,11 +85,11 @@ __ClaimExclusive(
 }
=20
 static FORCEINLINE KIRQL
-__drv_maxIRQL(APC_LEVEL)
+_IRQL_requires_max_(APC_LEVEL)
 __drv_raisesIRQL(DISPATCH_LEVEL)
 __drv_savesIRQL
 __AcquireMrswLockExclusive(
-    IN  PXENVKBD_MRSW_LOCK  Lock
+    _In_ PXENVKBD_MRSW_LOCK Lock
     )
 {
     KIRQL                   Irql;
@@ -137,12 +137,12 @@ __AcquireMrswLockExclusive(
         } while (FALSE)
=20
 static FORCEINLINE VOID
-__drv_maxIRQL(DISPATCH_LEVEL)
-__drv_requiresIRQL(DISPATCH_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
+_IRQL_requires_(DISPATCH_LEVEL)
 ReleaseMrswLockExclusive(
-    IN  PXENVKBD_MRSW_LOCK          Lock,
-    IN  __drv_restoresIRQL KIRQL    Irql,
-    IN  BOOLEAN                     Shared
+    _In_ PXENVKBD_MRSW_LOCK         Lock,
+    _In_ __drv_restoresIRQL KIRQL   Irql,
+    _In_ BOOLEAN                    Shared
     )
 {
     LONG                            Slot;
@@ -180,7 +180,7 @@ ReleaseMrswLockExclusive(
=20
 static FORCEINLINE LONG
 __ClaimShared(
-    IN  PXENVKBD_MRSW_LOCK  Lock
+    _In_ PXENVKBD_MRSW_LOCK Lock
     )
 {
     LONG                    Slot;
@@ -202,7 +202,7 @@ __ClaimShared(
=20
 static FORCEINLINE VOID
 AcquireMrswLockShared(
-    IN  PXENVKBD_MRSW_LOCK  Lock
+    _In_ PXENVKBD_MRSW_LOCK Lock
     )
 {
     KIRQL                   Irql;
@@ -242,7 +242,7 @@ AcquireMrswLockShared(
=20
 static FORCEINLINE VOID
 ReleaseMrswLockShared(
-    IN  PXENVKBD_MRSW_LOCK  Lock
+    _In_ PXENVKBD_MRSW_LOCK Lock
     )
 {
     KIRQL                   Irql;
diff --git a/src/xenvkbd/mutex=2Eh b/src/xenvkbd/mutex=2Eh
index d60d9e1=2E=2E9e66475 100644
--- a/src/xenvkbd/mutex=2Eh
+++ b/src/xenvkbd/mutex=2Eh
@@ -44,7 +44,7 @@ typedef struct _MUTEX {
=20
 static FORCEINLINE VOID
 InitializeMutex(
-    IN  PMUTEX  Mutex
+    _In_ PMUTEX Mutex
     )
 {
     RtlZeroMemory(Mutex, sizeof (MUTEX));
@@ -53,9 +53,9 @@ InitializeMutex(
 }
=20
 static FORCEINLINE VOID
-__drv_maxIRQL(PASSIVE_LEVEL)
+_IRQL_requires_max_(PASSIVE_LEVEL)
 AcquireMutex(
-    IN  PMUTEX  Mutex
+    _In_ PMUTEX Mutex
     )
 {
     (VOID) KeWaitForSingleObject(&Mutex->Event,
@@ -69,9 +69,9 @@ AcquireMutex(
 }
=20
 static FORCEINLINE VOID
-__drv_maxIRQL(PASSIVE_LEVEL)
+_IRQL_requires_max_(PASSIVE_LEVEL)
 ReleaseMutex(
-    IN  PMUTEX  Mutex
+    _In_ PMUTEX Mutex
     )
 {
     ASSERT3P(Mutex->Owner, =3D=3D, KeGetCurrentThread());
diff --git a/src/xenvkbd/names=2Eh b/src/xenvkbd/names=2Eh
index db3e58d=2E=2Ec651210 100644
--- a/src/xenvkbd/names=2Eh
+++ b/src/xenvkbd/names=2Eh
@@ -38,7 +38,7 @@
=20
 static FORCEINLINE const CHAR *
 PowerTypeName(
-    IN  POWER_STATE_TYPE    Type
+    _In_ POWER_STATE_TYPE   Type
     )
 {
 #define _POWER_TYPE_NAME(_Type) \
@@ -58,7 +58,7 @@ PowerTypeName(
=20
 static FORCEINLINE const CHAR *
 PowerSystemStateName(
-    IN  SYSTEM_POWER_STATE State
+    _In_ SYSTEM_POWER_STATE State
     )
 {
 #define _POWER_SYSTEM_STATE_NAME(_State)    \
@@ -84,7 +84,7 @@ PowerSystemStateName(
=20
 static FORCEINLINE const CHAR *
 PowerDeviceStateName(
-    IN  DEVICE_POWER_STATE State
+    _In_ DEVICE_POWER_STATE State
     )
 {
 #define _POWER_DEVICE_STATE_NAME(_State)    \
@@ -108,7 +108,7 @@ PowerDeviceStateName(
=20
 static FORCEINLINE const CHAR *
 PowerActionName(
-    IN  POWER_ACTION    Type
+    _In_ POWER_ACTION   Type
     )
 {
 #define _POWER_ACTION_NAME(_Type)   \
@@ -134,7 +134,7 @@ PowerActionName(
=20
 static FORCEINLINE const CHAR *
 PowerMinorFunctionName(
-    IN  ULONG   MinorFunction
+    _In_ ULONG  MinorFunction
     )
 {
 #define _POWER_MINOR_FUNCTION_NAME(_Function)   \
@@ -157,7 +157,7 @@ PowerMinorFunctionName(
=20
 static FORCEINLINE const CHAR *
 PnpMinorFunctionName(
-    IN  ULONG   Function
+    _In_ ULONG  Function
     )
 {
 #define _PNP_MINOR_FUNCTION_NAME(_Function) \
@@ -200,7 +200,7 @@ PnpMinorFunctionName(
=20
 static FORCEINLINE const CHAR *
 PartialResourceDescriptorTypeName(
-    IN  UCHAR   Type
+    _In_ UCHAR  Type
     )
 {
 #define _PARTIAL_RESOURCE_DESCRIPTOR_TYPE_NAME(_Type)   \
@@ -229,7 +229,7 @@ PartialResourceDescriptorTypeName(
=20
 static FORCEINLINE const CHAR *
 DeviceUsageTypeName(
-    IN  DEVICE_USAGE_NOTIFICATION_TYPE  Type
+    _In_ DEVICE_USAGE_NOTIFICATION_TYPE Type
     )
 {
 #define _DEVICE_USAGE_TYPE_NAME(_Type)  \
@@ -251,7 +251,7 @@ DeviceUsageTypeName(
=20
 static FORCEINLINE const CHAR *
 InterfaceTypeName(
-    IN  INTERFACE_TYPE  Type
+    _In_ INTERFACE_TYPE Type
     )
 {
 #define _INTERFACE_TYPE_NAME(_Type) \
@@ -289,7 +289,7 @@ InterfaceTypeName(
=20
 static FORCEINLINE const CHAR *
 DmaWidthName(
-    IN  DMA_WIDTH   Width
+    _In_ DMA_WIDTH  Width
     )
 {
 #define _DMA_WIDTH_NAME(_Width) \
@@ -313,7 +313,7 @@ DmaWidthName(
=20
 static FORCEINLINE const CHAR *
 DmaSpeedName(
-    IN  DMA_SPEED   Speed
+    _In_ DMA_SPEED  Speed
     )
 {
 #define _DMA_SPEED_NAME(_Speed) \
@@ -338,7 +338,7 @@ DmaSpeedName(
=20
 static FORCEINLINE const PCHAR
 XenbusStateName(
-    IN  XenbusState   State
+    _In_ XenbusState    State
     )
 {
 #define _STATE_NAME(_State)     \
diff --git a/src/xenvkbd/pdo=2Ec b/src/xenvkbd/pdo=2Ec
index adb8353=2E=2E5572836 100644
--- a/src/xenvkbd/pdo=2Ec
+++ b/src/xenvkbd/pdo=2Ec
@@ -87,7 +87,7 @@ struct _XENVKBD_PDO {
=20
 static FORCEINLINE PVOID
 __PdoAllocate(
-    IN  ULONG   Length
+    _In_ ULONG  Length
     )
 {
     return __AllocatePoolWithTag(NonPagedPool, Length, PDO_POOL);
@@ -95,7 +95,7 @@ __PdoAllocate(
=20
 static FORCEINLINE VOID
 __PdoFree(
-    IN  PVOID   Buffer
+    _In_ PVOID  Buffer
     )
 {
     __FreePoolWithTag(Buffer, PDO_POOL);
@@ -103,8 +103,8 @@ __PdoFree(
=20
 static FORCEINLINE VOID
 __PdoSetDevicePnpState(
-    IN  PXENVKBD_PDO        Pdo,
-    IN  DEVICE_PNP_STATE    State
+    _In_ PXENVKBD_PDO       Pdo,
+    _In_ DEVICE_PNP_STATE   State
     )
 {
     PXENVKBD_DX             Dx =3D Pdo->Dx;
@@ -118,8 +118,8 @@ __PdoSetDevicePnpState(
=20
 VOID
 PdoSetDevicePnpState(
-    IN  PXENVKBD_PDO        Pdo,
-    IN  DEVICE_PNP_STATE    State
+    _In_ PXENVKBD_PDO       Pdo,
+    _In_ DEVICE_PNP_STATE   State
     )
 {
     __PdoSetDevicePnpState(Pdo, State);
@@ -127,8 +127,8 @@ PdoSetDevicePnpState(
=20
 static FORCEINLINE VOID
 __PdoRestoreDevicePnpState(
-    IN  PXENVKBD_PDO        Pdo,
-    IN  DEVICE_PNP_STATE    State
+    _In_ PXENVKBD_PDO       Pdo,
+    _In_ DEVICE_PNP_STATE   State
     )
 {
     PXENVKBD_DX             Dx =3D Pdo->Dx;
@@ -139,7 +139,7 @@ __PdoRestoreDevicePnpState(
=20
 static FORCEINLINE DEVICE_PNP_STATE
 __PdoGetDevicePnpState(
-    IN  PXENVKBD_PDO    Pdo
+    _In_ PXENVKBD_PDO   Pdo
     )
 {
     PXENVKBD_DX         Dx =3D Pdo->Dx;
@@ -149,7 +149,7 @@ __PdoGetDevicePnpState(
=20
 DEVICE_PNP_STATE
 PdoGetDevicePnpState(
-    IN  PXENVKBD_PDO    Pdo
+    _In_ PXENVKBD_PDO   Pdo
     )
 {
     return __PdoGetDevicePnpState(Pdo);
@@ -157,8 +157,8 @@ PdoGetDevicePnpState(
=20
 static FORCEINLINE VOID
 __PdoSetSystemPowerState(
-    IN  PXENVKBD_PDO        Pdo,
-    IN  SYSTEM_POWER_STATE  State
+    _In_ PXENVKBD_PDO       Pdo,
+    _In_ SYSTEM_POWER_STATE State
     )
 {
     PXENVKBD_DX             Dx =3D Pdo->Dx;
@@ -168,7 +168,7 @@ __PdoSetSystemPowerState(
=20
 static FORCEINLINE SYSTEM_POWER_STATE
 __PdoGetSystemPowerState(
-    IN  PXENVKBD_PDO    Pdo
+    _In_ PXENVKBD_PDO   Pdo
     )
 {
     PXENVKBD_DX         Dx =3D Pdo->Dx;
@@ -178,8 +178,8 @@ __PdoGetSystemPowerState(
=20
 static FORCEINLINE VOID
 __PdoSetDevicePowerState(
-    IN  PXENVKBD_PDO        Pdo,
-    IN  DEVICE_POWER_STATE  State
+    _In_ PXENVKBD_PDO       Pdo,
+    _In_ DEVICE_POWER_STATE State
     )
 {
     PXENVKBD_DX             Dx =3D Pdo->Dx;
@@ -189,7 +189,7 @@ __PdoSetDevicePowerState(
=20
 static FORCEINLINE DEVICE_POWER_STATE
 __PdoGetDevicePowerState(
-    IN  PXENVKBD_PDO    Pdo
+    _In_ PXENVKBD_PDO   Pdo
     )
 {
     PXENVKBD_DX         Dx =3D Pdo->Dx;
@@ -199,8 +199,8 @@ __PdoGetDevicePowerState(
=20
 static FORCEINLINE VOID
 __PdoSetMissing(
-    IN  PXENVKBD_PDO    Pdo,
-    IN  const CHAR      *Reason
+    _In_ PXENVKBD_PDO   Pdo,
+    _In_ const CHAR     *Reason
     )
 {
     Pdo->Reason =3D Reason;
@@ -209,8 +209,8 @@ __PdoSetMissing(
=20
 VOID
 PdoSetMissing(
-    IN  PXENVKBD_PDO    Pdo,
-    IN  const CHAR      *Reason
+    _In_ PXENVKBD_PDO   Pdo,
+    _In_ const CHAR     *Reason
     )
 {
     __PdoSetMissing(Pdo, Reason);
@@ -218,7 +218,7 @@ PdoSetMissing(
=20
 static FORCEINLINE BOOLEAN
 __PdoIsMissing(
-    IN  PXENVKBD_PDO    Pdo
+    _In_ PXENVKBD_PDO   Pdo
     )
 {
     return Pdo->Missing;
@@ -226,7 +226,7 @@ __PdoIsMissing(
=20
 BOOLEAN
 PdoIsMissing(
-    IN  PXENVKBD_PDO    Pdo
+    _In_ PXENVKBD_PDO   Pdo
     )
 {
     return __PdoIsMissing(Pdo);
@@ -234,7 +234,7 @@ PdoIsMissing(
=20
 static FORCEINLINE PXENVKBD_FDO
 __PdoGetFdo(
-    IN  PXENVKBD_PDO    Pdo
+    _In_ PXENVKBD_PDO   Pdo
     )
 {
     return Pdo->Fdo;
@@ -242,7 +242,7 @@ __PdoGetFdo(
=20
 PXENVKBD_FDO
 PdoGetFdo(
-    IN  PXENVKBD_PDO    Pdo
+    _In_ PXENVKBD_PDO   Pdo
     )
 {
     return __PdoGetFdo(Pdo);
@@ -250,8 +250,8 @@ PdoGetFdo(
=20
 static FORCEINLINE VOID
 __PdoSetName(
-    IN  PXENVKBD_PDO    Pdo,
-    IN  PCHAR           Path
+    _In_ PXENVKBD_PDO   Pdo,
+    _In_ PCHAR          Path
     )
 {
     PXENVKBD_DX         Dx =3D Pdo->Dx;
@@ -266,7 +266,7 @@ __PdoSetName(
=20
 static FORCEINLINE PCHAR
 __PdoGetName(
-    IN  PXENVKBD_PDO    Pdo
+    _In_ PXENVKBD_PDO   Pdo
     )
 {
     PXENVKBD_DX         Dx =3D Pdo->Dx;
@@ -276,7 +276,7 @@ __PdoGetName(
=20
 PCHAR
 PdoGetName(
-    IN  PXENVKBD_PDO    Pdo
+    _In_ PXENVKBD_PDO   Pdo
     )
 {
     return __PdoGetName(Pdo);
@@ -284,7 +284,7 @@ PdoGetName(
=20
 static FORCEINLINE BOOLEAN
 __PdoSetEjectRequested(
-    IN  PXENVKBD_PDO    Pdo
+    _In_ PXENVKBD_PDO   Pdo
     )
 {
     return (InterlockedBitTestAndSet(&Pdo->Eject, 0) =3D=3D 0) ? TRUE : F=
ALSE;
@@ -292,7 +292,7 @@ __PdoSetEjectRequested(
=20
 VOID
 PdoRequestEject(
-    IN  PXENVKBD_PDO    Pdo
+    _In_ PXENVKBD_PDO   Pdo
     )
 {
     PXENVKBD_DX         Dx =3D Pdo->Dx;
@@ -312,7 +312,7 @@ PdoRequestEject(
=20
 static FORCEINLINE BOOLEAN
 __PdoClearEjectRequested(
-    IN  PXENVKBD_PDO    Pdo
+    _In_ PXENVKBD_PDO   Pdo
     )
 {
     return (InterlockedBitTestAndReset(&Pdo->Eject, 0) !=3D 0) ? TRUE : F=
ALSE;
@@ -320,7 +320,7 @@ __PdoClearEjectRequested(
=20
 static FORCEINLINE BOOLEAN
 __PdoIsEjectRequested(
-    IN  PXENVKBD_PDO    Pdo
+    _In_ PXENVKBD_PDO   Pdo
     )
 {
     KeMemoryBarrier();
@@ -329,7 +329,7 @@ __PdoIsEjectRequested(
=20
 BOOLEAN
 PdoIsEjectRequested(
-    IN  PXENVKBD_PDO    Pdo
+    _In_ PXENVKBD_PDO   Pdo
     )
 {
     return __PdoIsEjectRequested(Pdo);
@@ -355,7 +355,7 @@ static XENVKBD_PDO_REVISION PdoRevision[] =3D {
=20
 static VOID
 PdoDumpRevisions(
-    IN  PXENVKBD_PDO    Pdo
+    _In_ PXENVKBD_PDO   Pdo
     )
 {
     ULONG               Index;
@@ -397,7 +397,7 @@ PdoDumpRevisions(
=20
 static FORCEINLINE PDEVICE_OBJECT
 __PdoGetDeviceObject(
-    IN  PXENVKBD_PDO    Pdo
+    _In_ PXENVKBD_PDO   Pdo
     )
 {
     PXENVKBD_DX         Dx =3D Pdo->Dx;
@@ -407,7 +407,7 @@ __PdoGetDeviceObject(
    =20
 PDEVICE_OBJECT
 PdoGetDeviceObject(
-    IN  PXENVKBD_PDO    Pdo
+    _In_ PXENVKBD_PDO   Pdo
     )
 {
     return __PdoGetDeviceObject(Pdo);
@@ -415,7 +415,7 @@ PdoGetDeviceObject(
=20
 static FORCEINLINE PCHAR
 __PdoGetVendorName(
-    IN  PXENVKBD_PDO    Pdo
+    _In_ PXENVKBD_PDO   Pdo
     )
 {
     return FdoGetVendorName(__PdoGetFdo(Pdo));
@@ -423,7 +423,7 @@ __PdoGetVendorName(
=20
 static FORCEINLINE PXENVKBD_FRONTEND
 __PdoGetFrontend(
-    IN  PXENVKBD_PDO    Pdo
+    _In_ PXENVKBD_PDO   Pdo
     )
 {
     return Pdo->Frontend;
@@ -431,7 +431,7 @@ __PdoGetFrontend(
=20
 PXENVKBD_FRONTEND
 PdoGetFrontend(
-    IN  PXENVKBD_PDO    Pdo
+    _In_ PXENVKBD_PDO   Pdo
     )
 {
     return __PdoGetFrontend(Pdo);
@@ -439,7 +439,7 @@ PdoGetFrontend(
=20
 static FORCEINLINE PXENVKBD_HID_CONTEXT
 __PdoGetHidContext(
-    IN  PXENVKBD_PDO Pdo
+    _In_ PXENVKBD_PDO   Pdo
     )
 {
     return Pdo->HidContext;
@@ -447,7 +447,7 @@ __PdoGetHidContext(
=20
 PXENVKBD_HID_CONTEXT
 PdoGetHidContext(
-    IN  PXENVKBD_PDO    Pdo
+    _In_ PXENVKBD_PDO   Pdo
     )
 {
     return __PdoGetHidContext(Pdo);
@@ -455,9 +455,9 @@ PdoGetHidContext(
=20
 PDMA_ADAPTER
 PdoGetDmaAdapter(
-    IN  PXENVKBD_PDO        Pdo,
-    IN  PDEVICE_DESCRIPTION DeviceDescriptor,
-    OUT PULONG              NumberOfMapRegisters
+    _In_ PXENVKBD_PDO           Pdo,
+    _In_ PDEVICE_DESCRIPTION    DeviceDescriptor,
+    _Out_ PULONG                NumberOfMapRegisters
     )
 {
     Trace("<=3D=3D=3D>\n");
@@ -469,11 +469,11 @@ PdoGetDmaAdapter(
=20
 BOOLEAN
 PdoTranslateBusAddress(
-    IN      PXENVKBD_PDO        Pdo,
-    IN      PHYSICAL_ADDRESS    BusAddress,
-    IN      ULONG               Length,
-    IN OUT  PULONG              AddressSpace,
-    OUT     PPHYSICAL_ADDRESS   TranslatedAddress
+    _In_ PXENVKBD_PDO       Pdo,
+    _In_ PHYSICAL_ADDRESS   BusAddress,
+    _In_ ULONG              Length,
+    _Inout_ PULONG          AddressSpace,
+    _Out_ PPHYSICAL_ADDRESS TranslatedAddress
     )
 {
     Trace("<=3D=3D=3D>\n");
@@ -487,11 +487,11 @@ PdoTranslateBusAddress(
=20
 ULONG
 PdoSetBusData(
-    IN  PXENVKBD_PDO    Pdo,
-    IN  ULONG           DataType,
-    IN  PVOID           Buffer,
-    IN  ULONG           Offset,
-    IN  ULONG           Length
+    _In_ PXENVKBD_PDO   Pdo,
+    _In_ ULONG          DataType,
+    _In_ PVOID          Buffer,
+    _In_ ULONG          Offset,
+    _In_ ULONG          Length
     )
 {
     Trace("<=3D=3D=3D>\n");
@@ -505,11 +505,11 @@ PdoSetBusData(
=20
 ULONG
 PdoGetBusData(
-    IN  PXENVKBD_PDO    Pdo,
-    IN  ULONG           DataType,
-    IN  PVOID           Buffer,
-    IN  ULONG           Offset,
-    IN  ULONG           Length
+    _In_ PXENVKBD_PDO   Pdo,
+    _In_ ULONG          DataType,
+    _In_ PVOID          Buffer,
+    _In_ ULONG          Offset,
+    _In_ ULONG          Length
     )
 {
     Trace("<=3D=3D=3D>\n");
@@ -523,7 +523,7 @@ PdoGetBusData(
=20
 static FORCEINLINE NTSTATUS
 __PdoD3ToD0(
-    IN  PXENVKBD_PDO            Pdo
+    _In_ PXENVKBD_PDO           Pdo
     )
 {
     POWER_STATE                 PowerState;
@@ -559,7 +559,7 @@ fail1:
=20
 static FORCEINLINE VOID
 __PdoD0ToD3(
-    IN  PXENVKBD_PDO    Pdo
+    _In_ PXENVKBD_PDO   Pdo
     )
 {
     POWER_STATE         PowerState;
@@ -583,7 +583,7 @@ __PdoD0ToD3(
=20
 static DECLSPEC_NOINLINE VOID
 PdoSuspendCallbackLate(
-    IN  PVOID           Argument
+    _In_ PVOID          Argument
     )
 {
     PXENVKBD_PDO        Pdo =3D Argument;
@@ -598,7 +598,7 @@ PdoSuspendCallbackLate(
 // This function must not touch pageable code or data
 static DECLSPEC_NOINLINE NTSTATUS
 PdoD3ToD0(
-    IN  PXENVKBD_PDO    Pdo
+    _In_ PXENVKBD_PDO   Pdo
     )
 {
     KIRQL               Irql;
@@ -650,7 +650,7 @@ fail1:
 // This function must not touch pageable code or data
 static DECLSPEC_NOINLINE VOID
 PdoD0ToD3(
-    IN  PXENVKBD_PDO    Pdo
+    _In_ PXENVKBD_PDO   Pdo
     )
 {
     KIRQL               Irql;
@@ -674,7 +674,7 @@ PdoD0ToD3(
 // This function must not touch pageable code or data
 static DECLSPEC_NOINLINE VOID
 PdoS4ToS3(
-    IN  PXENVKBD_PDO    Pdo
+    _In_ PXENVKBD_PDO   Pdo
     )
 {
     Trace("(%s) =3D=3D=3D=3D>\n", __PdoGetName(Pdo));
@@ -690,7 +690,7 @@ PdoS4ToS3(
 // This function must not touch pageable code or data
 static DECLSPEC_NOINLINE VOID
 PdoS3ToS4(
-    IN  PXENVKBD_PDO    Pdo
+    _In_ PXENVKBD_PDO   Pdo
     )
 {
     Trace("(%s) =3D=3D=3D=3D>\n", __PdoGetName(Pdo));
@@ -705,8 +705,8 @@ PdoS3ToS4(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoStartDevice(
-    IN  PXENVKBD_PDO    Pdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_PDO   Pdo,
+    _In_ PIRP           Irp
     )
 {
     NTSTATUS            status;
@@ -733,8 +733,8 @@ fail1:
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoQueryStopDevice(
-    IN  PXENVKBD_PDO    Pdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_PDO   Pdo,
+    _In_ PIRP           Irp
     )
 {
     NTSTATUS            status;
@@ -750,8 +750,8 @@ PdoQueryStopDevice(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoCancelStopDevice(
-    IN  PXENVKBD_PDO    Pdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_PDO   Pdo,
+    _In_ PIRP           Irp
     )
 {
     NTSTATUS            status;
@@ -767,8 +767,8 @@ PdoCancelStopDevice(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoStopDevice(
-    IN  PXENVKBD_PDO    Pdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_PDO   Pdo,
+    _In_ PIRP           Irp
     )
 {
     NTSTATUS            status;
@@ -790,8 +790,8 @@ done:
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoQueryRemoveDevice(
-    IN  PXENVKBD_PDO    Pdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_PDO   Pdo,
+    _In_ PIRP           Irp
     )
 {
     NTSTATUS            status;
@@ -807,8 +807,8 @@ PdoQueryRemoveDevice(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoCancelRemoveDevice(
-    IN  PXENVKBD_PDO    Pdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_PDO   Pdo,
+    _In_ PIRP           Irp
     )
 {
     NTSTATUS            status;
@@ -827,8 +827,8 @@ PdoCancelRemoveDevice(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoSurpriseRemoval(
-    IN  PXENVKBD_PDO    Pdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_PDO   Pdo,
+    _In_ PIRP           Irp
     )
 {
     NTSTATUS            status;
@@ -846,8 +846,8 @@ PdoSurpriseRemoval(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoRemoveDevice(
-    IN  PXENVKBD_PDO    Pdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_PDO   Pdo,
+    _In_ PIRP           Irp
     )
 {
     PXENVKBD_FDO        Fdo =3D __PdoGetFdo(Pdo);
@@ -893,8 +893,8 @@ done:
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoQueryDeviceRelations(
-    IN  PXENVKBD_PDO    Pdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_PDO   Pdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -932,8 +932,8 @@ done:
=20
 static NTSTATUS
 PdoDelegateIrp(
-    IN  PXENVKBD_PDO    Pdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_PDO   Pdo,
+    _In_ PIRP           Irp
     )
 {
     return FdoDelegateIrp(Pdo->Fdo, Irp);
@@ -941,8 +941,8 @@ PdoDelegateIrp(
=20
 static NTSTATUS
 PdoQueryBusInterface(
-    IN  PXENVKBD_PDO        Pdo,
-    IN  PIRP                Irp
+    _In_ PXENVKBD_PDO       Pdo,
+    _In_ PIRP               Irp
     )
 {
     PIO_STACK_LOCATION      StackLocation;
@@ -977,8 +977,8 @@ done:
=20
 static NTSTATUS
 PdoQueryHidInterface(
-    IN  PXENVKBD_PDO        Pdo,
-    IN  PIRP                Irp
+    _In_ PXENVKBD_PDO       Pdo,
+    _In_ PIRP               Irp
     )
 {
     PIO_STACK_LOCATION      StackLocation;
@@ -1027,8 +1027,8 @@ struct _INTERFACE_ENTRY PdoInterfaceTable[] =3D {
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoQueryInterface(
-    IN  PXENVKBD_PDO        Pdo,
-    IN  PIRP                Irp
+    _In_ PXENVKBD_PDO       Pdo,
+    _In_ PIRP               Irp
     )
 {
     PIO_STACK_LOCATION      StackLocation;
@@ -1066,8 +1066,8 @@ done:
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoQueryCapabilities(
-    IN  PXENVKBD_PDO        Pdo,
-    IN  PIRP                Irp
+    _In_ PXENVKBD_PDO       Pdo,
+    _In_ PIRP               Irp
     )
 {
     PIO_STACK_LOCATION      StackLocation;
@@ -1134,8 +1134,8 @@ done:
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoQueryDeviceText(
-    IN  PXENVKBD_PDO    Pdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_PDO   Pdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -1219,8 +1219,8 @@ done:
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoReadConfig(
-    IN  PXENVKBD_PDO    Pdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_PDO   Pdo,
+    _In_ PIRP           Irp
     )
 {
     UNREFERENCED_PARAMETER(Pdo);
@@ -1233,8 +1233,8 @@ PdoReadConfig(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoWriteConfig(
-    IN  PXENVKBD_PDO    Pdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_PDO   Pdo,
+    _In_ PIRP           Irp
     )
 {
     UNREFERENCED_PARAMETER(Pdo);
@@ -1249,8 +1249,8 @@ PdoWriteConfig(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoQueryId(
-    IN  PXENVKBD_PDO    Pdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_PDO   Pdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -1408,8 +1408,8 @@ done:
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoQueryBusInformation(
-    IN  PXENVKBD_PDO        Pdo,
-    IN  PIRP                Irp
+    _In_ PXENVKBD_PDO       Pdo,
+    _In_ PIRP               Irp
     )
 {
     PPNP_BUS_INFORMATION    Info;
@@ -1441,8 +1441,8 @@ done:
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoDeviceUsageNotification(
-    IN  PXENVKBD_PDO    Pdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_PDO   Pdo,
+    _In_ PIRP           Irp
     )
 {
     NTSTATUS            status;
@@ -1457,8 +1457,8 @@ PdoDeviceUsageNotification(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoEject(
-    IN  PXENVKBD_PDO    Pdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_PDO   Pdo,
+    _In_ PIRP           Irp
     )
 {
     PXENVKBD_FDO        Fdo =3D __PdoGetFdo(Pdo);
@@ -1486,8 +1486,8 @@ PdoEject(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoDispatchPnp(
-    IN  PXENVKBD_PDO    Pdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_PDO   Pdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -1591,8 +1591,8 @@ PdoDispatchPnp(
=20
 static FORCEINLINE NTSTATUS
 __PdoSetDevicePower(
-    IN  PXENVKBD_PDO    Pdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_PDO   Pdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -1642,12 +1642,12 @@ __PdoSetDevicePower(
=20
 static NTSTATUS
 PdoDevicePower(
-    IN  PXENVKBD_THREAD Self,
-    IN  PVOID           Context
+    _In_ PXENVKBD_THREAD    Self,
+    _In_ PVOID              Context
     )
 {
-    PXENVKBD_PDO        Pdo =3D Context;
-    PKEVENT             Event;
+    PXENVKBD_PDO            Pdo =3D Context;
+    PKEVENT                 Event;
=20
     Event =3D ThreadGetEvent(Self);
=20
@@ -1682,8 +1682,8 @@ PdoDevicePower(
=20
 static FORCEINLINE NTSTATUS
 __PdoSetSystemPower(
-    IN  PXENVKBD_PDO        Pdo,
-    IN  PIRP                Irp
+    _In_ PXENVKBD_PDO       Pdo,
+    _In_ PIRP               Irp
     )
 {
     PIO_STACK_LOCATION      StackLocation;
@@ -1739,12 +1739,12 @@ __PdoSetSystemPower(
=20
 static NTSTATUS
 PdoSystemPower(
-    IN  PXENVKBD_THREAD Self,
-    IN  PVOID           Context
+    _In_ PXENVKBD_THREAD    Self,
+    _In_ PVOID              Context
     )
 {
-    PXENVKBD_PDO        Pdo =3D Context;
-    PKEVENT             Event;
+    PXENVKBD_PDO            Pdo =3D Context;
+    PKEVENT                 Event;
=20
     Event =3D ThreadGetEvent(Self);
=20
@@ -1779,8 +1779,8 @@ PdoSystemPower(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoSetPower(
-    IN  PXENVKBD_PDO    Pdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_PDO   Pdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -1838,8 +1838,8 @@ done:
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoQueryPower(
-    IN  PXENVKBD_PDO    Pdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_PDO   Pdo,
+    _In_ PIRP           Irp
     )
 {
     NTSTATUS            status;
@@ -1856,8 +1856,8 @@ PdoQueryPower(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoDispatchPower(
-    IN  PXENVKBD_PDO    Pdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_PDO   Pdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -1887,8 +1887,8 @@ PdoDispatchPower(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoDispatchDefault(
-    IN  PXENVKBD_PDO    Pdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_PDO   Pdo,
+    _In_ PIRP           Irp
     )
 {
     NTSTATUS            status;
@@ -1903,8 +1903,8 @@ PdoDispatchDefault(
=20
 NTSTATUS
 PdoDispatch(
-    IN  PXENVKBD_PDO    Pdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_PDO   Pdo,
+    _In_ PIRP           Irp
     )
 {
     PIO_STACK_LOCATION  StackLocation;
@@ -1931,7 +1931,7 @@ PdoDispatch(
=20
 NTSTATUS
 PdoResume(
-    IN  PXENVKBD_PDO    Pdo
+    _In_ PXENVKBD_PDO   Pdo
     )
 {
     return FrontendResume(__PdoGetFrontend(Pdo));
@@ -1939,7 +1939,7 @@ PdoResume(
=20
 VOID
 PdoSuspend(
-    IN  PXENVKBD_PDO    Pdo
+    _In_ PXENVKBD_PDO   Pdo
     )
 {
     FrontendSuspend(__PdoGetFrontend(Pdo));
@@ -1947,8 +1947,8 @@ PdoSuspend(
=20
 NTSTATUS
 PdoCreate(
-    IN  PXENVKBD_FDO    Fdo,
-    IN  PANSI_STRING    Path
+    _In_ PXENVKBD_FDO   Fdo,
+    _In_ PANSI_STRING   Path
     )
 {
     PDEVICE_OBJECT      PhysicalDeviceObject;
@@ -2093,7 +2093,7 @@ fail1:
=20
 VOID
 PdoDestroy(
-    IN  PXENVKBD_PDO    Pdo
+    _In_ PXENVKBD_PDO   Pdo
     )
 {
     PXENVKBD_DX         Dx =3D Pdo->Dx;
diff --git a/src/xenvkbd/pdo=2Eh b/src/xenvkbd/pdo=2Eh
index 166bb27=2E=2E09f7619 100644
--- a/src/xenvkbd/pdo=2Eh
+++ b/src/xenvkbd/pdo=2Eh
@@ -41,124 +41,124 @@
=20
 extern VOID
 PdoSetDevicePnpState(
-    IN  PXENVKBD_PDO        Pdo,
-    IN  DEVICE_PNP_STATE    State
+    _In_ PXENVKBD_PDO       Pdo,
+    _In_ DEVICE_PNP_STATE   State
     );
=20
 extern DEVICE_PNP_STATE
 PdoGetDevicePnpState(
-    IN  PXENVKBD_PDO    Pdo
+    _In_ PXENVKBD_PDO   Pdo
     );
=20
 extern VOID
 PdoSetMissing(
-    IN  PXENVKBD_PDO    Pdo,
-    IN  const CHAR      *Reason
+    _In_ PXENVKBD_PDO   Pdo,
+    _In_ const CHAR     *Reason
     );
=20
 extern BOOLEAN
 PdoIsMissing(
-    IN  PXENVKBD_PDO    Pdo
+    _In_ PXENVKBD_PDO   Pdo
     );
=20
 extern VOID
 PdoRequestEject(
-    IN  PXENVKBD_PDO    Pdo
+    _In_ PXENVKBD_PDO   Pdo
     );
=20
 extern BOOLEAN
 PdoIsEjectRequested(
-    IN  PXENVKBD_PDO    Pdo
+    _In_ PXENVKBD_PDO   Pdo
     );
=20
 extern PCHAR
 PdoGetName(
-    IN  PXENVKBD_PDO    Pdo
+    _In_ PXENVKBD_PDO   Pdo
     );
=20
 extern PXENVKBD_FDO
 PdoGetFdo(
-    IN  PXENVKBD_PDO    Pdo
+    _In_ PXENVKBD_PDO   Pdo
     );
=20
 extern PDEVICE_OBJECT
 PdoGetDeviceObject(
-    IN  PXENVKBD_PDO    Pdo
+    _In_ PXENVKBD_PDO   Pdo
     );
=20
 extern PDMA_ADAPTER
 PdoGetDmaAdapter(
-    IN  PXENVKBD_PDO        Pdo,
-    IN  PDEVICE_DESCRIPTION DeviceDescriptor,
-    OUT PULONG              NumberOfMapRegisters
+    _In_ PXENVKBD_PDO           Pdo,
+    _In_ PDEVICE_DESCRIPTION    DeviceDescriptor,
+    _Out_ PULONG                NumberOfMapRegisters
     );
=20
 extern BOOLEAN
 PdoTranslateBusAddress(
-    IN      PXENVKBD_PDO        Pdo,
-    IN      PHYSICAL_ADDRESS    BusAddress,
-    IN      ULONG               Length,
-    IN OUT  PULONG              AddressSpace,
-    OUT     PPHYSICAL_ADDRESS   TranslatedAddress
+    _In_ PXENVKBD_PDO       Pdo,
+    _In_ PHYSICAL_ADDRESS   BusAddress,
+    _In_ ULONG              Length,
+    _Inout_ PULONG          AddressSpace,
+    _Out_ PPHYSICAL_ADDRESS TranslatedAddress
     );
=20
 extern ULONG
 PdoSetBusData(
-    IN  PXENVKBD_PDO    Pdo,
-    IN  ULONG           DataType,
-    IN  PVOID           Buffer,
-    IN  ULONG           Offset,
-    IN  ULONG           Length
+    _In_ PXENVKBD_PDO   Pdo,
+    _In_ ULONG          DataType,
+    _In_ PVOID          Buffer,
+    _In_ ULONG          Offset,
+    _In_ ULONG          Length
     );
=20
 extern ULONG
 PdoGetBusData(
-    IN  PXENVKBD_PDO    Pdo,
-    IN  ULONG           DataType,
-    IN  PVOID           Buffer,
-    IN  ULONG           Offset,
-    IN  ULONG           Length
+    _In_ PXENVKBD_PDO   Pdo,
+    _In_ ULONG          DataType,
+    _In_ PVOID          Buffer,
+    _In_ ULONG          Offset,
+    _In_ ULONG          Length
     );
=20
 extern NTSTATUS
 PdoCreate(
-    IN  PXENVKBD_FDO    Fdo,
-    IN  PANSI_STRING    Path
+    _In_ PXENVKBD_FDO   Fdo,
+    _In_ PANSI_STRING   Path
     );
=20
 extern NTSTATUS
 PdoResume(
-    IN  PXENVKBD_PDO    Pdo
+    _In_ PXENVKBD_PDO   Pdo
     );
=20
 extern VOID
 PdoSuspend(
-    IN  PXENVKBD_PDO    Pdo
+    _In_ PXENVKBD_PDO   Pdo
     );
=20
 extern VOID
 PdoDestroy(
-    IN  PXENVKBD_PDO    Pdo
+    _In_ PXENVKBD_PDO   Pdo
     );
=20
 #include "frontend=2Eh"
=20
 extern PXENVKBD_FRONTEND
 PdoGetFrontend(
-    IN  PXENVKBD_PDO    Pdo
+    _In_ PXENVKBD_PDO   Pdo
     );
=20
 #include "hid=2Eh"
=20
 extern PXENVKBD_HID_CONTEXT
 PdoGetHidContext(
-    IN  PXENVKBD_PDO    Pdo
+    _In_ PXENVKBD_PDO   Pdo
     );
=20
 extern NTSTATUS
 PdoDispatch(
-    IN  PXENVKBD_PDO    Pdo,
-    IN  PIRP            Irp
+    _In_ PXENVKBD_PDO   Pdo,
+    _In_ PIRP           Irp
     );
=20
 #endif  // _XENVKBD_PDO_H
diff --git a/src/xenvkbd/registry=2Ec b/src/xenvkbd/registry=2Ec
index 90a2bbe=2E=2Ee50cefc 100644
--- a/src/xenvkbd/registry=2Ec
+++ b/src/xenvkbd/registry=2Ec
@@ -47,7 +47,7 @@ static IOOPENDRIVERREGISTRYKEY __IoOpenDriverRegistryKey=
;
=20
 static FORCEINLINE PVOID
 __RegistryAllocate(
-    IN  ULONG   Length
+    _In_ ULONG  Length
     )
 {
     return __AllocatePoolWithTag(NonPagedPool, Length, REGISTRY_TAG);
@@ -55,7 +55,7 @@ __RegistryAllocate(
=20
 static FORCEINLINE VOID
 __RegistryFree(
-    IN  PVOID   Buffer
+    _In_ PVOID  Buffer
     )
 {
     __FreePoolWithTag(Buffer, REGISTRY_TAG);
@@ -63,10 +63,10 @@ __RegistryFree(
=20
 NTSTATUS
 RegistryInitialize(
-    IN PUNICODE_STRING  Path
+    _In_ PUNICODE_STRING    Path
     )
 {
-    NTSTATUS            status;
+    NTSTATUS                status;
=20
     ASSERT3P(RegistryPath=2EBuffer, =3D=3D, NULL);
=20
@@ -146,14 +146,14 @@ fail1:
=20
 NTSTATUS
 RegistryOpenKey(
-    IN  HANDLE          Parent,
-    IN  PUNICODE_STRING Path,
-    IN  ACCESS_MASK     DesiredAccess,
-    OUT PHANDLE         Key
+    _In_ HANDLE             Parent,
+    _In_ PUNICODE_STRING    Path,
+    _In_ ACCESS_MASK        DesiredAccess,
+    _Out_ PHANDLE           Key
     )
 {
-    OBJECT_ATTRIBUTES   Attributes;
-    NTSTATUS            status;
+    OBJECT_ATTRIBUTES       Attributes;
+    NTSTATUS                status;
=20
     InitializeObjectAttributes(&Attributes,
                                Path,
@@ -208,19 +208,19 @@ fail1:
=20
 NTSTATUS
 RegistryCreateKey(
-    IN  HANDLE          Parent,
-    IN  PUNICODE_STRING Path,
-    IN  ULONG           Options,
-    OUT PHANDLE         Key
+    _In_ HANDLE             Parent,
+    _In_ PUNICODE_STRING    Path,
+    _In_ ULONG              Options,
+    _Out_ PHANDLE           Key
     )
 {
-    PWSTR               Buffer;
-    HANDLE              Root;
-    PWSTR               ChildPath;
-    PWSTR               ChildName;
-    PWSTR               Context;
-    HANDLE              Child;
-    NTSTATUS            status;
+    PWCHAR                  Buffer;
+    HANDLE                  Root;
+    PWCHAR                  ChildPath;
+    PWCHAR                  ChildName;
+    PWCHAR                  Context;
+    HANDLE                  Child;
+    NTSTATUS                status;
=20
     //
     // UNICODE_STRINGs are not guaranteed to have NUL terminated
@@ -308,8 +308,8 @@ fail1:
=20
 NTSTATUS
 RegistryOpenServiceKey(
-    IN  ACCESS_MASK     DesiredAccess,
-    OUT PHANDLE         Key
+    _In_ ACCESS_MASK    DesiredAccess,
+    _Out_ PHANDLE       Key
     )
 {
     return RegistryOpenKey(NULL, &RegistryPath, DesiredAccess, Key);
@@ -325,9 +325,9 @@ RegistryCreateServiceKey(
=20
 NTSTATUS
 RegistryOpenSoftwareKey(
-    IN  PDEVICE_OBJECT  DeviceObject,
-    IN  ACCESS_MASK     DesiredAccess,
-    OUT PHANDLE         Key
+    _In_ PDEVICE_OBJECT DeviceObject,
+    _In_ ACCESS_MASK    DesiredAccess,
+    _Out_ PHANDLE       Key
     )
 {
     NTSTATUS            status;
@@ -347,9 +347,9 @@ fail1:
=20
 NTSTATUS
 RegistryOpenHardwareKey(
-    IN  PDEVICE_OBJECT      DeviceObject,
-    IN  ACCESS_MASK         DesiredAccess,
-    OUT PHANDLE             Key
+    _In_ PDEVICE_OBJECT     DeviceObject,
+    _In_ ACCESS_MASK        DesiredAccess,
+    _Out_ PHANDLE           Key
     )
 {
     HANDLE                  SubKey;
@@ -490,8 +490,8 @@ fail1:
=20
 NTSTATUS
 RegistryDeleteSubKey(
-    IN  PHANDLE         Key,
-    IN  PCHAR           Name
+    _In_ PHANDLE        Key,
+    _In_ PCHAR          Name
     )
 {
     ANSI_STRING         Ansi;
@@ -531,9 +531,9 @@ fail1:
=20
 NTSTATUS
 RegistryEnumerateSubKeys(
-    IN  HANDLE              Key,
-    IN  NTSTATUS            (*Callback)(PVOID, HANDLE, PANSI_STRING),
-    IN  PVOID               Context
+    _In_ HANDLE             Key,
+    _In_ NTSTATUS           (*Callback)(PVOID, HANDLE, PANSI_STRING),
+    _In_ PVOID              Context
     )
 {
     ULONG                   Size;
@@ -634,9 +634,9 @@ fail1:
=20
 NTSTATUS
 RegistryEnumerateValues(
-    IN  HANDLE                      Key,
-    IN  NTSTATUS                    (*Callback)(PVOID, HANDLE, PANSI_STRI=
NG, ULONG),
-    IN  PVOID                       Context
+    _In_ HANDLE                     Key,
+    _In_ NTSTATUS                   (*Callback)(PVOID, HANDLE, PANSI_STRI=
NG, ULONG),
+    _In_ PVOID                      Context
     )
 {
     ULONG                           Size;
@@ -740,8 +740,8 @@ fail1:
=20
 NTSTATUS
 RegistryDeleteValue(
-    IN  PHANDLE         Key,
-    IN  PCHAR           Name
+    _In_ PHANDLE        Key,
+    _In_ PCHAR          Name
     )
 {
     ANSI_STRING         Ansi;
@@ -771,9 +771,9 @@ fail1:
=20
 NTSTATUS
 RegistryQueryDwordValue(
-    IN  HANDLE                      Key,
-    IN  PCHAR                       Name,
-    OUT PULONG                      Value
+    _In_ HANDLE                     Key,
+    _In_ PCHAR                      Name,
+    _Out_ PULONG                    Value
     )
 {
     ANSI_STRING                     Ansi;
@@ -911,9 +911,9 @@ fail1:
=20
 NTSTATUS
 RegistryUpdateDwordValue(
-    IN  HANDLE                      Key,
-    IN  PCHAR                       Name,
-    IN  ULONG                       Value
+    _In_ HANDLE                     Key,
+    _In_ PCHAR                      Name,
+    _In_ ULONG                      Value
     )
 {
     ANSI_STRING                     Ansi;
@@ -967,7 +967,7 @@ fail1:
=20
 static PANSI_STRING
 RegistrySzToAnsi(
-    IN  PWCHAR      Buffer
+    _In_ PWCHAR     Buffer
     )
 {
     PANSI_STRING    Ansi;
@@ -1006,7 +1006,7 @@ fail1:
=20
 static PANSI_STRING
 RegistryMultiSzToAnsi(
-    IN  PWCHAR      Buffer
+    _In_ PWCHAR     Buffer
     )
 {
     PANSI_STRING    Ansi;
@@ -1068,10 +1068,10 @@ fail1:
=20
 NTSTATUS
 RegistryQuerySzValue(
-    IN  HANDLE                      Key,
-    IN  PCHAR                       Name,
-    OUT PULONG                      Type OPTIONAL,
-    OUT PANSI_STRING                *Array
+    _In_ HANDLE                     Key,
+    _In_ PCHAR                      Name,
+    _Out_opt_ PULONG                Type,
+    _Outptr_ PANSI_STRING           *Array
     )
 {
     ANSI_STRING                     Ansi;
@@ -1155,10 +1155,10 @@ fail1:
=20
 NTSTATUS
 RegistryQueryBinaryValue(
-    IN  HANDLE                      Key,
-    IN  PCHAR                       Name,
-    OUT PVOID                       *Buffer,
-    OUT PULONG                      Length
+    _In_ HANDLE                     Key,
+    _In_ PCHAR                      Name,
+    _Outptr_ PVOID                  *Buffer,
+    _Out_ PULONG                    Length
     )
 {
     ANSI_STRING                     Ansi;
@@ -1240,10 +1240,10 @@ fail1:
=20
 NTSTATUS
 RegistryUpdateBinaryValue(
-    IN  HANDLE                      Key,
-    IN  PCHAR                       Name,
-    IN  PVOID                       Buffer,
-    IN  ULONG                       Length
+    _In_ HANDLE                     Key,
+    _In_ PCHAR                      Name,
+    _In_ PVOID                      Buffer,
+    _In_ ULONG                      Length
     )
 {
     ANSI_STRING                     Ansi;
@@ -1297,8 +1297,8 @@ fail1:
=20
 NTSTATUS
 RegistryQueryKeyName(
-    IN  HANDLE              Key,
-    OUT PANSI_STRING        *Array
+    _In_ HANDLE             Key,
+    _Outptr_ PANSI_STRING   *Array
     )
 {
     PKEY_NAME_INFORMATION   Value;
@@ -1352,8 +1352,8 @@ fail1:
=20
 NTSTATUS
 RegistryQuerySystemStartOption(
-    IN  PCHAR                       Prefix,
-    OUT PANSI_STRING                *Value
+    _In_ PCHAR                      Prefix,
+    _Outptr_ PANSI_STRING           *Value
     )
 {
     UNICODE_STRING                  Unicode;
@@ -1535,10 +1535,10 @@ fail1:
=20
 NTSTATUS
 RegistryUpdateSzValue(
-    IN  HANDLE                      Key,
-    IN  PCHAR                       Name,
-    IN  ULONG                       Type,
-    IN  PANSI_STRING                Array
+    _In_ HANDLE                     Key,
+    _In_ PCHAR                      Name,
+    _In_ ULONG                      Type,
+    _In_ PANSI_STRING               Array
     )
 {
     ANSI_STRING                     Ansi;
@@ -1599,7 +1599,7 @@ fail1:
=20
 VOID
 RegistryFreeSzValue(
-    IN  PANSI_STRING    Array
+    _In_ PANSI_STRING   Array
     )
 {
     ULONG               Index;
@@ -1615,7 +1615,7 @@ RegistryFreeSzValue(
=20
 VOID
 RegistryFreeBinaryValue(
-    IN  PVOID   Buffer
+    _In_ PVOID  Buffer
     )
 {
     __RegistryFree(Buffer);
@@ -1623,7 +1623,7 @@ RegistryFreeBinaryValue(
=20
 VOID
 RegistryCloseKey(
-    IN  HANDLE  Key
+    _In_ HANDLE Key
     )
 {
     ZwClose(Key);
diff --git a/src/xenvkbd/registry=2Eh b/src/xenvkbd/registry=2Eh
index 08f0def=2E=2E29ae4e2 100644
--- a/src/xenvkbd/registry=2Eh
+++ b/src/xenvkbd/registry=2Eh
@@ -37,7 +37,7 @@
=20
 extern NTSTATUS
 RegistryInitialize(
-    IN PUNICODE_STRING  Path
+    _In_ PUNICODE_STRING    Path
     );
=20
 extern VOID
@@ -47,43 +47,43 @@ RegistryTeardown(
=20
 extern NTSTATUS
 RegistryOpenKey(
-    IN  HANDLE          Parent,
-    IN  PUNICODE_STRING Path,
-    IN  ACCESS_MASK     DesiredAccess,
-    OUT PHANDLE         Key
+    _In_ HANDLE             Parent,
+    _In_ PUNICODE_STRING    Path,
+    _In_ ACCESS_MASK        DesiredAccess,
+    _Out_ PHANDLE           Key
     );
=20
 extern NTSTATUS
 RegistryCreateKey(
-    IN  HANDLE          Parent,
-    IN  PUNICODE_STRING Path,
-    IN  ULONG           Options,
-    OUT PHANDLE         Key
+    _In_ HANDLE             Parent,
+    _In_ PUNICODE_STRING    Path,
+    _In_ ULONG              Options,
+    _Out_ PHANDLE           Key
     );
=20
 extern NTSTATUS
 RegistryOpenServiceKey(
-    IN  ACCESS_MASK DesiredAccess,
-    OUT PHANDLE     Key
+    _In_ ACCESS_MASK    DesiredAccess,
+    _Out_ PHANDLE       Key
     );
=20
 extern NTSTATUS
 RegistryCreateServiceKey(
-    OUT PHANDLE     Key
+    _Out_ PHANDLE   Key
     );
=20
 extern NTSTATUS
 RegistryOpenSoftwareKey(
-    IN  PDEVICE_OBJECT  DeviceObject,
-    IN  ACCESS_MASK     DesiredAccess,
-    OUT PHANDLE         Key
+    _In_ PDEVICE_OBJECT DeviceObject,
+    _In_ ACCESS_MASK    DesiredAccess,
+    _Out_ PHANDLE       Key
     );
=20
 extern NTSTATUS
 RegistryOpenHardwareKey(
-    IN  PDEVICE_OBJECT  DeviceObject,
-    IN  ACCESS_MASK     DesiredAccess,
-    OUT PHANDLE         Key
+    _In_ PDEVICE_OBJECT DeviceObject,
+    _In_ ACCESS_MASK    DesiredAccess,
+    _Out_ PHANDLE       Key
     );
=20
 extern NTSTATUS
@@ -96,109 +96,109 @@ RegistryOpenSubKey(
=20
 extern NTSTATUS
 RegistryCreateSubKey(
-    IN  HANDLE      Key,
-    IN  PCHAR       Name,
-    IN  ULONG       Options,
-    OUT PHANDLE     SubKey
+    _In_ HANDLE     Key,
+    _In_ PCHAR      Name,
+    _In_ ULONG      Options,
+    _Out_ PHANDLE   SubKey
     );
=20
 extern NTSTATUS
 RegistryDeleteSubKey(
-    IN  HANDLE      Key,
-    IN  PCHAR       Name
+    _In_ HANDLE Key,
+    _In_ PCHAR  Name
     );
=20
 extern NTSTATUS
 RegistryEnumerateSubKeys(
-    IN  HANDLE      Key,
-    IN  NTSTATUS    (*Callback)(PVOID, HANDLE, PANSI_STRING),
-    IN  PVOID       Context
+    _In_ HANDLE     Key,
+    _In_ NTSTATUS   (*Callback)(PVOID, HANDLE, PANSI_STRING),
+    _In_ PVOID      Context
     );
=20
 extern NTSTATUS
 RegistryEnumerateValues(
-    IN  HANDLE      Key,
-    IN  NTSTATUS    (*Callback)(PVOID, HANDLE, PANSI_STRING, ULONG),
-    IN  PVOID       Context
+    _In_ HANDLE     Key,
+    _In_ NTSTATUS   (*Callback)(PVOID, HANDLE, PANSI_STRING, ULONG),
+    _In_ PVOID      Context
     );
=20
 extern NTSTATUS
 RegistryDeleteValue(
-    IN  HANDLE      Key,
-    IN  PCHAR       Name
+    _In_ HANDLE Key,
+    _In_ PCHAR  Name
     );
=20
 extern NTSTATUS
 RegistryQueryDwordValue(
-    IN  HANDLE          Key,
-    IN  PCHAR           Name,
-    OUT PULONG          Value
+    _In_ HANDLE     Key,
+    _In_ PCHAR      Name,
+    _Out_ PULONG    Value
     );
    =20
 extern NTSTATUS
 RegistryUpdateDwordValue(
-    IN  HANDLE          Key,
-    IN  PCHAR           Name,
-    IN  ULONG           Value
+    _In_ HANDLE Key,
+    _In_ PCHAR  Name,
+    _In_ ULONG  Value
     );
    =20
 extern NTSTATUS
 RegistryQuerySzValue(
-    IN  HANDLE          Key,
-    IN  PCHAR           Name,
-    OUT PULONG          Type OPTIONAL,
-    OUT PANSI_STRING    *Array
+    _In_ HANDLE             Key,
+    _In_ PCHAR              Name,
+    _Out_opt_ PULONG        Type,
+    _Outptr_ PANSI_STRING   *Array
     );
=20
 extern NTSTATUS
 RegistryQueryBinaryValue(
-    IN  HANDLE          Key,
-    IN  PCHAR           Name,
-    OUT PVOID           *Buffer,
-    OUT PULONG          Length
+    _In_ HANDLE     Key,
+    _In_ PCHAR      Name,
+    _Outptr_ PVOID  *Buffer,
+    _Out_ PULONG    Length
     );
=20
 extern NTSTATUS
 RegistryUpdateBinaryValue(
-    IN  HANDLE          Key,
-    IN  PCHAR           Name,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length
+    _In_ HANDLE Key,
+    _In_ PCHAR  Name,
+    _In_ PVOID  Buffer,
+    _In_ ULONG  Length
     );
=20
 extern NTSTATUS
 RegistryQueryKeyName(
-    IN  HANDLE              Key,
-    OUT PANSI_STRING        *Array
+    _In_ HANDLE             Key,
+    _Outptr_ PANSI_STRING   *Array
     );
=20
 extern NTSTATUS
 RegistryQuerySystemStartOption(
-    IN  PCHAR           Name,
-    OUT PANSI_STRING    *Option
+    _In_ PCHAR              Name,
+    _Outptr_ PANSI_STRING   *Option
     );
=20
 extern VOID
 RegistryFreeSzValue(
-    IN  PANSI_STRING    Array
+    _In_ PANSI_STRING   Array
     );
=20
 extern VOID
 RegistryFreeBinaryValue(
-    IN  PVOID           Buffer
+    _In_ PVOID  Buffer
     );
=20
 extern NTSTATUS
 RegistryUpdateSzValue(
-    IN  HANDLE          Key,
-    IN  PCHAR           Name,
-    IN  ULONG           Type,
-    IN  PANSI_STRING    Array
+    _In_ HANDLE         Key,
+    _In_ PCHAR          Name,
+    _In_ ULONG          Type,
+    _In_ PANSI_STRING   Array
     );
=20
 extern VOID
 RegistryCloseKey(
-    IN  HANDLE  Key
+    _In_ HANDLE Key
     );
=20
 #endif  // _XENVKBD_REGISTRY_H
diff --git a/src/xenvkbd/ring=2Ec b/src/xenvkbd/ring=2Ec
index a91c31f=2E=2E70a069c 100644
--- a/src/xenvkbd/ring=2Ec
+++ b/src/xenvkbd/ring=2Ec
@@ -93,7 +93,7 @@ struct _XENVKBD_RING {
=20
 static FORCEINLINE PVOID
 __RingAllocate(
-    IN  ULONG   Length
+    _In_ ULONG  Length
     )
 {
     return __AllocatePoolWithTag(NonPagedPool, Length, XENVKBD_RING_TAG);
@@ -101,7 +101,7 @@ __RingAllocate(
=20
 static FORCEINLINE VOID
 __RingFree(
-    IN  PVOID   Buffer
+    _In_ PVOID  Buffer
     )
 {
     __FreePoolWithTag(Buffer, XENVKBD_RING_TAG);
@@ -109,11 +109,11 @@ __RingFree(
=20
 static FORCEINLINE NTSTATUS
 __RingCopyBuffer(
-    IN  PVOID       Buffer,
-    IN  ULONG       Length,
-    IN  const VOID  *Source,
-    IN  ULONG       SourceLength,
-    OUT PULONG      Returned
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length,
+    _In_ const VOID *Source,
+    _In_ ULONG      SourceLength,
+    _Out_ PULONG    Returned
     )
 {
     if (Buffer =3D=3D NULL)
@@ -134,9 +134,9 @@ __RingCopyBuffer(
=20
 static FORCEINLINE UCHAR
 SetBit(
-    IN  UCHAR   Value,
-    IN  UCHAR   BitIdx,
-    IN  BOOLEAN Pressed
+    _In_ UCHAR      Value,
+    _In_ UCHAR      BitIdx,
+    _In_ BOOLEAN    Pressed
     )
 {
     if (Pressed) {
@@ -148,13 +148,13 @@ SetBit(
=20
 static FORCEINLINE VOID
 SetArray(
-    IN  PUCHAR  Array,
-    IN  ULONG   Size,
-    IN  UCHAR   Value,
-    IN  BOOLEAN Pressed
+    _In_ PUCHAR     Array,
+    _In_ ULONG      Size,
+    _In_ UCHAR      Value,
+    _In_ BOOLEAN    Pressed
     )
 {
-    ULONG       Idx;
+    ULONG           Idx;
     if (Pressed) {
         for (Idx =3D 0; Idx < Size; ++Idx) {
             if (Array[Idx] =3D=3D Value)
@@ -194,7 +194,7 @@ static struct _KEY_CODE_TO_USAGE KeyCodeToUsageTable[]=
 =3D {
 #undef DEFINE_USAGE
=20
 static VOID RingBuildKeyCodeToUsageMapping(
-    IN  PXENVKBD_RING   Ring
+    _In_ PXENVKBD_RING  Ring
     )
 {
     ULONG               Index;
@@ -228,8 +228,8 @@ __KeyCodeToKeyName(
=20
 static FORCEINLINE USHORT
 __RingKeyCodeToUsage(
-    IN  PXENVKBD_RING   Ring,
-    IN  ULONG           KeyCode
+    _In_ PXENVKBD_RING  Ring,
+    _In_ ULONG          KeyCode
     )
 {
     if (KeyCode < ARRAYSIZE(Ring->KeyCodeToUsageMapping))
@@ -240,10 +240,10 @@ __RingKeyCodeToUsage(
=20
 static FORCEINLINE VOID
 __RingEventMotion(
-    IN  PXENVKBD_RING   Ring,
-    IN  LONG            dX,
-    IN  LONG            dY,
-    IN  LONG            dZ
+    _In_ PXENVKBD_RING  Ring,
+    _In_ LONG           dX,
+    _In_ LONG           dY,
+    _In_ LONG           dZ
     )
 {
     Ring->AbsMouseReport=2EX =3D (USHORT)CONSTRAIN(Ring->AbsMouseReport=
=2EX + dX, 0, 32767);
@@ -257,9 +257,9 @@ __RingEventMotion(
=20
 static FORCEINLINE VOID
 __RingEventKeypress(
-    IN  PXENVKBD_RING   Ring,
-    IN  ULONG           KeyCode,
-    IN  BOOLEAN         Pressed
+    _In_ PXENVKBD_RING  Ring,
+    _In_ ULONG          KeyCode,
+    _In_ BOOLEAN        Pressed
     )
 {
     if (KeyCode >=3D 0x110 && KeyCode <=3D 0x114) {
@@ -304,10 +304,10 @@ __RingEventKeypress(
=20
 static FORCEINLINE VOID
 __RingEventPosition(
-    IN  PXENVKBD_RING   Ring,
-    IN  ULONG           X,
-    IN  ULONG           Y,
-    IN  LONG            dZ
+    _In_ PXENVKBD_RING  Ring,
+    _In_ ULONG          X,
+    _In_ ULONG          Y,
+    _In_ LONG           dZ
     )
 {
     Ring->AbsMouseReport=2EX =3D (USHORT)CONSTRAIN(X, 0, 32767);
@@ -321,7 +321,7 @@ __RingEventPosition(
=20
 static VOID
 RingAcquireLock(
-    IN  PVOID       Context
+    _In_ PVOID      Context
     )
 {
     PXENVKBD_RING   Ring =3D Context;
@@ -330,7 +330,7 @@ RingAcquireLock(
=20
 static VOID
 RingReleaseLock(
-    IN  PVOID       Context
+    _In_ PVOID      Context
     )
 {
     PXENVKBD_RING   Ring =3D Context;
@@ -338,17 +338,17 @@ RingReleaseLock(
     KeReleaseSpinLockFromDpcLevel(&Ring->Lock);
 }
=20
-__drv_functionClass(KDEFERRED_ROUTINE)
-__drv_maxIRQL(DISPATCH_LEVEL)
-__drv_minIRQL(DISPATCH_LEVEL)
-__drv_requiresIRQL(DISPATCH_LEVEL)
-__drv_sameIRQL
+_Function_class_(KDEFERRED_ROUTINE)
+_IRQL_requires_max_(DISPATCH_LEVEL)
+_IRQL_requires_min_(DISPATCH_LEVEL)
+_IRQL_requires_(DISPATCH_LEVEL)
+_IRQL_requires_same_
 static VOID
 RingDpc(
-    IN  PKDPC       Dpc,
-    IN  PVOID       Context,
-    IN  PVOID       Argument1,
-    IN  PVOID       Argument2
+    _In_ PKDPC      Dpc,
+    _In_ PVOID      Context,
+    _In_ PVOID      Argument1,
+    _In_ PVOID      Argument2
     )
 {
     PXENVKBD_RING   Ring =3D Context;
@@ -436,8 +436,8 @@ KSERVICE_ROUTINE    RingEvtchnCallback;
=20
 BOOLEAN
 RingEvtchnCallback(
-    IN  PKINTERRUPT     InterruptObject,
-    IN  PVOID           Argument
+    _In_ PKINTERRUPT    InterruptObject,
+    _In_ PVOID          Argument
     )
 {
     PXENVKBD_RING       Ring =3D Argument;
@@ -455,8 +455,8 @@ RingEvtchnCallback(
=20
 static VOID
 RingDebugCallback(
-    IN  PVOID           Argument,
-    IN  BOOLEAN         Crashing
+    _In_ PVOID          Argument,
+    _In_ BOOLEAN        Crashing
     )
 {
     PXENVKBD_RING       Ring =3D Argument;
@@ -495,8 +495,8 @@ RingDebugCallback(
=20
 NTSTATUS
 RingInitialize(
-    IN  PXENVKBD_FRONTEND   Frontend,
-    OUT PXENVKBD_RING       *Ring
+    _In_ PXENVKBD_FRONTEND  Frontend,
+    _Outptr_ PXENVKBD_RING  *Ring
     )
 {
     NTSTATUS                status;
@@ -535,7 +535,7 @@ fail1:
=20
 static FORCEINLINE VOID
 RingReadFeatures(
-    IN  PXENVKBD_RING   Ring
+    _In_ PXENVKBD_RING  Ring
     )
 {
     PCHAR               Buffer;
@@ -576,7 +576,7 @@ RingReadFeatures(
=20
 NTSTATUS
 RingConnect(
-    IN  PXENVKBD_RING   Ring
+    _In_ PXENVKBD_RING  Ring
     )
 {
     PFN_NUMBER          Pfn;
@@ -744,8 +744,8 @@ fail1:
=20
 NTSTATUS
 RingStoreWrite(
-    IN  PXENVKBD_RING               Ring,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction
+    _In_ PXENVKBD_RING              Ring,
+    _In_ PXENBUS_STORE_TRANSACTION  Transaction
     )
 {
     ULONG                           Port;
@@ -827,7 +827,7 @@ fail1:
=20
 NTSTATUS
 RingEnable(
-    IN  PXENVKBD_RING   Ring
+    _In_ PXENVKBD_RING  Ring
     )
 {
     Trace("=3D=3D=3D=3D=3D>\n");
@@ -843,7 +843,7 @@ RingEnable(
=20
 VOID
 RingDisable(
-    IN  PXENVKBD_RING   Ring
+    _In_ PXENVKBD_RING  Ring
     )
 {
     Trace("=3D=3D=3D=3D=3D>\n");
@@ -856,7 +856,7 @@ RingDisable(
=20
 VOID
 RingDisconnect(
-    IN  PXENVKBD_RING   Ring
+    _In_ PXENVKBD_RING  Ring
     )
 {
     Trace("=3D=3D=3D=3D=3D>\n");
@@ -908,7 +908,7 @@ RingDisconnect(
=20
 VOID
 RingTeardown(
-    IN  PXENVKBD_RING   Ring
+    _In_ PXENVKBD_RING  Ring
     )
 {
     Trace("=3D=3D=3D=3D=3D>\n");
@@ -950,7 +950,7 @@ RingTeardown(
=20
 VOID
 RingNotify(
-    IN  PXENVKBD_RING   Ring
+    _In_ PXENVKBD_RING  Ring
     )
 {
     if (KeInsertQueueDpc(&Ring->Dpc, NULL, NULL))
@@ -959,11 +959,11 @@ RingNotify(
=20
 NTSTATUS
 RingGetInputReport(
-    IN  PXENVKBD_RING   Ring,
-    IN  ULONG           ReportId,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length,
-    OUT PULONG          Returned
+    _In_ PXENVKBD_RING  Ring,
+    _In_ ULONG          ReportId,
+    _In_ PVOID          Buffer,
+    _In_ ULONG          Length,
+    _Out_ PULONG        Returned
     )
 {
     switch (ReportId) {
@@ -986,7 +986,7 @@ RingGetInputReport(
=20
 VOID
 RingReadReport(
-    IN  PXENVKBD_RING   Ring
+    _In_ PXENVKBD_RING  Ring
     )
 {
     // Check for pending reports, push 1 pending report to subscriber
diff --git a/src/xenvkbd/ring=2Eh b/src/xenvkbd/ring=2Eh
index cf0b139=2E=2E0ed1693 100644
--- a/src/xenvkbd/ring=2Eh
+++ b/src/xenvkbd/ring=2Eh
@@ -43,58 +43,58 @@ typedef struct _XENVKBD_RING XENVKBD_RING, *PXENVKBD_R=
ING;
=20
 extern NTSTATUS
 RingInitialize(
-    IN  PXENVKBD_FRONTEND   Frontend,
-    OUT PXENVKBD_RING       *Ring
+    _In_ PXENVKBD_FRONTEND  Frontend,
+    _Outptr_ PXENVKBD_RING  *Ring
     );
=20
 extern NTSTATUS
 RingConnect(
-    IN  PXENVKBD_RING   Ring
+    _In_ PXENVKBD_RING  Ring
     );
=20
 extern NTSTATUS
 RingStoreWrite(
-    IN  PXENVKBD_RING               Ring,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction
+    _In_ PXENVKBD_RING              Ring,
+    _In_ PXENBUS_STORE_TRANSACTION  Transaction
     );
=20
 extern NTSTATUS
 RingEnable(
-    IN  PXENVKBD_RING   Ring
+    _In_ PXENVKBD_RING  Ring
     );
=20
 extern VOID
 RingDisable(
-    IN  PXENVKBD_RING   Ring
+    _In_ PXENVKBD_RING  Ring
     );
=20
 extern VOID
 RingDisconnect(
-    IN  PXENVKBD_RING   Ring
+    _In_ PXENVKBD_RING  Ring
     );
=20
 extern VOID
 RingTeardown(
-    IN  PXENVKBD_RING   Ring
+    _In_ PXENVKBD_RING  Ring
     );
=20
 extern VOID
 RingNotify(
-    IN  PXENVKBD_RING   Ring
+    _In_ PXENVKBD_RING  Ring
     );
=20
 extern NTSTATUS
 RingGetInputReport(
-    IN  PXENVKBD_RING   Ring,
-    IN  ULONG           ReportId,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length,
-    OUT PULONG          Returned
+    _In_ PXENVKBD_RING  Ring,
+    _In_ ULONG          ReportId,
+    _In_ PVOID          Buffer,
+    _In_ ULONG          Length,
+    _Out_ PULONG        Returned
     );
=20
 extern VOID
 RingReadReport(
-    IN  PXENVKBD_RING   Ring
+    _In_ PXENVKBD_RING  Ring
     );
=20
 #endif  // _XENVKBD_RING_H
diff --git a/src/xenvkbd/thread=2Ec b/src/xenvkbd/thread=2Ec
index 5cb6b09=2E=2E5ff6392 100644
--- a/src/xenvkbd/thread=2Ec
+++ b/src/xenvkbd/thread=2Ec
@@ -50,7 +50,7 @@ struct _XENVKBD_THREAD {
=20
 static FORCEINLINE PVOID
 __ThreadAllocate(
-    IN  ULONG   Length
+    _In_ ULONG  Length
     )
 {
     return __AllocatePoolWithTag(NonPagedPool, Length, THREAD_POOL);
@@ -58,7 +58,7 @@ __ThreadAllocate(
=20
 static FORCEINLINE VOID
 __ThreadFree(
-    IN  PVOID   Buffer
+    _In_ PVOID  Buffer
     )
 {
     __FreePoolWithTag(Buffer, THREAD_POOL);
@@ -66,7 +66,7 @@ __ThreadFree(
=20
 static FORCEINLINE VOID
 __ThreadWake(
-    IN  PXENVKBD_THREAD Thread
+    _In_ PXENVKBD_THREAD    Thread
     )
 {
     KeSetEvent(&Thread->Event, IO_NO_INCREMENT, FALSE);
@@ -74,7 +74,7 @@ __ThreadWake(
=20
 VOID
 ThreadWake(
-    IN  PXENVKBD_THREAD Thread
+    _In_ PXENVKBD_THREAD    Thread
     )
 {
     __ThreadWake(Thread);
@@ -82,7 +82,7 @@ ThreadWake(
=20
 static FORCEINLINE VOID
 __ThreadAlert(
-    IN  PXENVKBD_THREAD Thread
+    _In_ PXENVKBD_THREAD    Thread
     )
 {
     Thread->Alerted =3D TRUE;
@@ -91,7 +91,7 @@ __ThreadAlert(
=20
 VOID
 ThreadAlert(
-    IN  PXENVKBD_THREAD Thread
+    _In_ PXENVKBD_THREAD    Thread
     )
 {
     __ThreadAlert(Thread);
@@ -101,7 +101,7 @@ KSTART_ROUTINE  ThreadFunction;
=20
 VOID
 ThreadFunction(
-    IN  PVOID       Argument
+    _In_ PVOID      Argument
     )
 {
     PXENVKBD_THREAD Self =3D Argument;
@@ -116,16 +116,16 @@ ThreadFunction(
     // NOT REACHED
 }
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 ThreadCreate(
-    IN  XENVKBD_THREAD_FUNCTION Function,
-    IN  PVOID                   Context,
-    OUT PXENVKBD_THREAD         *Thread
+    _In_ XENVKBD_THREAD_FUNCTION    Function,
+    _In_ PVOID                      Context,
+    _Outptr_ PXENVKBD_THREAD        *Thread
     )
 {
-    HANDLE                      Handle;
-    NTSTATUS                    status;
+    HANDLE                          Handle;
+    NTSTATUS                        status;
=20
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, PASSIVE_LEVEL);
=20
@@ -189,7 +189,7 @@ fail1:
=20
 PKEVENT
 ThreadGetEvent(
-    IN  PXENVKBD_THREAD Thread
+    _In_ PXENVKBD_THREAD    Thread
     )
 {
     return &Thread->Event;
@@ -197,7 +197,7 @@ ThreadGetEvent(
=20
 BOOLEAN
 ThreadIsAlerted(
-    IN  PXENVKBD_THREAD Thread
+    _In_ PXENVKBD_THREAD    Thread
     )
 {
     return Thread->Alerted;
@@ -205,10 +205,10 @@ ThreadIsAlerted(
=20
 VOID
 ThreadJoin(
-    IN  PXENVKBD_THREAD Thread
+    _In_ PXENVKBD_THREAD    Thread
     )
 {
-    LONG                References;
+    LONG                    References;
=20
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, PASSIVE_LEVEL);
     ASSERT3P(KeGetCurrentThread(), !=3D, Thread->Thread);
diff --git a/src/xenvkbd/thread=2Eh b/src/xenvkbd/thread=2Eh
index 37796a2=2E=2E7f0514b 100644
--- a/src/xenvkbd/thread=2Eh
+++ b/src/xenvkbd/thread=2Eh
@@ -39,37 +39,37 @@ typedef struct _XENVKBD_THREAD XENVKBD_THREAD, *PXENVK=
BD_THREAD;
=20
 typedef NTSTATUS (*XENVKBD_THREAD_FUNCTION)(PXENVKBD_THREAD, PVOID);
=20
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 ThreadCreate(
-    IN  XENVKBD_THREAD_FUNCTION Function,
-    IN  PVOID                   Context,
-    OUT PXENVKBD_THREAD         *Thread
+    _In_ XENVKBD_THREAD_FUNCTION    Function,
+    _In_ PVOID                      Context,
+    _Outptr_ PXENVKBD_THREAD        *Thread
     );
=20
 extern PKEVENT
 ThreadGetEvent(
-    IN  PXENVKBD_THREAD Self
+    _In_ PXENVKBD_THREAD    Self
     );
=20
 extern BOOLEAN
 ThreadIsAlerted(
-    IN  PXENVKBD_THREAD Self
+    _In_ PXENVKBD_THREAD    Self
     );
=20
 extern VOID
 ThreadWake(
-    IN  PXENVKBD_THREAD Thread
+    _In_ PXENVKBD_THREAD    Thread
     );
=20
 extern VOID
 ThreadAlert(
-    IN  PXENVKBD_THREAD Thread
+    _In_ PXENVKBD_THREAD    Thread
     );
=20
 extern VOID
 ThreadJoin(
-    IN  PXENVKBD_THREAD Thread
+    _In_ PXENVKBD_THREAD    Thread
     );
=20
 #endif  // _XENVKBD_THREAD_H
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.34a.e8eabf6c3a0074.1a1544ce025.7746ab31c2868750=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 19 13:14:54 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 19 Oct 2026 13:14:54 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1454345.1667901 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xInCY-0007kg-QM; Mon, 19 Oct 2026 13:14:54 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1454345.1667901; Mon, 19 Oct 2026 13:14:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xInCY-0007jS-Hi; Mon, 19 Oct 2026 13:14:54 +0000
Received: by outflank-mailman (input) for mailman id 1454345;
 Mon, 19 Oct 2026 13:14:53 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1544ce4f00008425@swg.vates.tech>)
 id 1xInCW-0007fL-Sm
 for win-pv-devel@lists.xenproject.org; Mon, 19 Oct 2026 13:14:53 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xInCW-001agb-9h
 for win-pv-devel@lists.xenproject.org; Mon, 19 Oct 2026 15:14:52 +0200
Received: from [10.42.69.5] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1544ce4f00008425@swg.vates.tech>)
 id 6ad617ca-2eae-0a2a0a5409dd-0a2a4505c570-14
 for <win-pv-devel@lists.xenproject.org>; Mon, 19 Oct 2026 15:14:52 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-c201ff.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1544ce4f00008425@swg.vates.tech>)
 id 6ad617cb-4cb1-0a2a45050019-b9ff1c1293b5-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 19 Oct 2026 15:14:52 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1544ce4f00008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 19 Oct 2026 13:14:47 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 5DE9481FEC;
 Mon, 19 Oct 2026 15:14:47 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=7eqz8o7cY7kWZt7dRBc/uCUf9hZTDn0gvjqjbcu6jFs=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=kPfvosHVCyu9OQepqJ55kHqgtNR1Mk+/bu1ki0YUy7QN2/+t0gomF4QO0z5TOy+C2tK9or07e
 8z7ilVNEA+sCaRH1uujVIQ9j5yDJ03B0iw6jMVFESFy2+7H+M+BOpcubz/7uJlIXUGVqDfupVbT
 EtDqpVTS2kYtP6qSvIBiEOCUM3FoLgmEWT80f5HkSmTktbIQJWNXUpOk40kMYOBEIg8namJOpoO
 1HlEyUSfCIqMP+I1B/i6N9GxkX4heIQ+hL0z+1s+cQo43RHiFMzaMa9dlq5teG5/fd7JoW2TSqF
 6SO5A3NVQ1USmr1pn9bIqv+kDfTOSvaENRY5BG0y0MSA==
X-Zone-Loop: ed3331088f809d121a8967646208e3add47aafd49d37
x-campaign-type: default
x-transaction-id: b6ab2e4e-a786-45ea-b376-caebd44a89bc
x-swg-uid: 01-d3966665-7864-4c73-bb14-24a9934aa572
X-Mailer: Sweego
Message-ID:
 <1792415687.8631fc262581453bbf619ec5b2062170.1a1544ce4f00008425@vates.tech>
x-swg-bid: 1792415687.8631fc262581453bbf619ec5b2062170.1a1544ce4f00008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 07/11] xenvkbd: Annotate modified parameters as _Out_ or _Inout_
Date: Mon, 19 Oct 2026 15:14:33 +0200
In-Reply-To: <1792415573.8631fc262581453bbf619ec5b2062170.1a1544b27410008425@vates.tech>
References: <1792415573.8631fc262581453bbf619ec5b2062170.1a1544b27410008425@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.34d.cf6cbc7772fa2040.1a1544ce352.31a09f8665d4a2fb=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792415687507
X-purgate-ID: tlsNG-c201ff/1792415692-F48A62A1-7D4446E2/0/0
X-purgate-type: clean
X-purgate-size: 37912

---=Part.34d.cf6cbc7772fa2040.1a1544ce352.31a09f8665d4a2fb=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Some parameters were annotated _In_ although the function writes them=2E
Annotate them with their actual direction: context objects (FDO, PDO,
frontend, ring, thread, HID context) as _Inout_, copy destinations as
_Out_writes_bytes_opt_ and the key array as _Inout_updates_=2E
No functional change=2E

Assisted-by: claude:claude-opus-5=2E5
Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xenvkbd/fdo=2Ec      | 174 ++++++++++++++++++++---------------------
 src/xenvkbd/fdo=2Eh      |  16 ++--
 src/xenvkbd/frontend=2Ec |  64 +++++++--------
 src/xenvkbd/frontend=2Eh |  10 +--
 src/xenvkbd/hid=2Ec      |  12 +--
 src/xenvkbd/hid=2Eh      |   2 +-
 src/xenvkbd/pdo=2Ec      | 114 +++++++++++++--------------
 src/xenvkbd/pdo=2Eh      |  12 +--
 src/xenvkbd/ring=2Ec     |  80 +++++++++----------
 src/xenvkbd/ring=2Eh     |  24 +++---
 src/xenvkbd/thread=2Ec   |  10 +--
 src/xenvkbd/thread=2Eh   |   6 +-
 12 files changed, 262 insertions(+), 262 deletions(-)

diff --git a/src/xenvkbd/fdo=2Ec b/src/xenvkbd/fdo=2Ec
index 481336c=2E=2E95ed60d 100644
--- a/src/xenvkbd/fdo=2Ec
+++ b/src/xenvkbd/fdo=2Ec
@@ -230,7 +230,7 @@ FdoGetPhysicalDeviceObject(
 _IRQL_requires_(PASSIVE_LEVEL)
 static FORCEINLINE NTSTATUS
 __FdoAcquireLowerBusInterface(
-    _In_ PXENVKBD_FDO       Fdo
+    _Inout_ PXENVKBD_FDO    Fdo
     )
 {
     PBUS_INTERFACE_STANDARD BusInterface;
@@ -313,7 +313,7 @@ fail1:
=20
 static FORCEINLINE VOID
 __FdoReleaseLowerBusInterface(
-    _In_ PXENVKBD_FDO       Fdo
+    _Inout_ PXENVKBD_FDO    Fdo
     )
 {
     PBUS_INTERFACE_STANDARD BusInterface;
@@ -619,13 +619,13 @@ FdoForwardIrpSynchronously(
=20
 NTSTATUS
 FdoAddPhysicalDeviceObject(
-    _In_ PXENVKBD_FDO   Fdo,
-    _In_ PXENVKBD_PDO   Pdo
+    _Inout_ PXENVKBD_FDO    Fdo,
+    _In_ PXENVKBD_PDO       Pdo
     )
 {
-    PDEVICE_OBJECT      DeviceObject;
-    PXENVKBD_DX         Dx;
-    NTSTATUS            status;
+    PDEVICE_OBJECT          DeviceObject;
+    PXENVKBD_DX             Dx;
+    NTSTATUS                status;
=20
     DeviceObject =3D PdoGetDeviceObject(Pdo);
     Dx =3D (PXENVKBD_DX)DeviceObject->DeviceExtension;
@@ -653,12 +653,12 @@ fail1:
=20
 VOID
 FdoRemovePhysicalDeviceObject(
-    _In_ PXENVKBD_FDO   Fdo,
-    _In_ PXENVKBD_PDO   Pdo
+    _Inout_ PXENVKBD_FDO    Fdo,
+    _In_ PXENVKBD_PDO       Pdo
     )
 {
-    PDEVICE_OBJECT      DeviceObject;
-    PXENVKBD_DX         Dx;
+    PDEVICE_OBJECT          DeviceObject;
+    PXENVKBD_DX             Dx;
=20
     DeviceObject =3D PdoGetDeviceObject(Pdo);
     Dx =3D (PXENVKBD_DX)DeviceObject->DeviceExtension;
@@ -704,7 +704,7 @@ __FdoReleaseMutex(
=20
 VOID
 FdoReleaseMutex(
-    _In_ PXENVKBD_FDO   Fdo
+    _Inout_ PXENVKBD_FDO    Fdo
     )
 {
     __FdoReleaseMutex(Fdo);
@@ -820,7 +820,7 @@ done:
=20
 static FORCEINLINE PANSI_STRING
 __FdoMultiSzToUpcaseAnsi(
-    _In_ PSTR       Buffer
+    _Inout_ PZZSTR  Buffer
     )
 {
     PANSI_STRING    Ansi;
@@ -898,14 +898,14 @@ __FdoFreeAnsi(
=20
 static NTSTATUS
 FdoScan(
-    _In_ PXENVKBD_THREAD Self,
-    _In_ PVOID           Context
+    _In_ PXENVKBD_THREAD    Self,
+    _In_ PVOID              Context
     )
 {
-    PXENVKBD_FDO        Fdo =3D Context;
-    PKEVENT             Event;
-    HANDLE              ParametersKey;
-    NTSTATUS            status;
+    PXENVKBD_FDO            Fdo =3D Context;
+    PKEVENT                 Event;
+    HANDLE                  ParametersKey;
+    NTSTATUS                status;
=20
     Trace("=3D=3D=3D=3D>\n");
=20
@@ -1023,7 +1023,7 @@ loop:
=20
 static DECLSPEC_NOINLINE VOID
 FdoParseResources(
-    _In_ PXENVKBD_FDO           Fdo,
+    _Inout_ PXENVKBD_FDO        Fdo,
     _In_ PCM_RESOURCE_LIST      RawResourceList,
     _In_ PCM_RESOURCE_LIST      TranslatedResourceList
     )
@@ -1071,7 +1071,7 @@ FdoParseResources(
 static FORCEINLINE BOOLEAN
 __FdoMatchDistribution(
     _In_ PXENVKBD_FDO   Fdo,
-    _In_ PSTR           Buffer
+    _Inout_ PSTR        Buffer
     )
 {
     PCHAR               Vendor;
@@ -1327,7 +1327,7 @@ fail1:
=20
 static FORCEINLINE VOID
 __FdoD0ToD3(
-    _In_ PXENVKBD_FDO   Fdo
+    _Inout_ PXENVKBD_FDO    Fdo
     )
 {
     Trace("=3D=3D=3D=3D>\n");
@@ -1367,13 +1367,13 @@ FdoSuspendCallbackLate(
 // This function must not touch pageable code or data
 static DECLSPEC_NOINLINE NTSTATUS
 FdoD3ToD0(
-    _In_ PXENVKBD_FDO   Fdo
+    _Inout_ PXENVKBD_FDO    Fdo
     )
 {
-    POWER_STATE         PowerState;
-    KIRQL               Irql;
-    PLIST_ENTRY         ListEntry;
-    NTSTATUS            status;
+    POWER_STATE             PowerState;
+    KIRQL                   Irql;
+    PLIST_ENTRY             ListEntry;
+    NTSTATUS                status;
=20
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, PASSIVE_LEVEL);
     ASSERT3U(__FdoGetDevicePowerState(Fdo), =3D=3D, PowerDeviceD3);
@@ -1460,12 +1460,12 @@ fail1:
 // This function must not touch pageable code or data
 static DECLSPEC_NOINLINE VOID
 FdoD0ToD3(
-    _In_ PXENVKBD_FDO   Fdo
+    _Inout_ PXENVKBD_FDO    Fdo
     )
 {
-    POWER_STATE         PowerState;
-    PLIST_ENTRY         ListEntry;
-    KIRQL               Irql;
+    POWER_STATE             PowerState;
+    PLIST_ENTRY             ListEntry;
+    KIRQL                   Irql;
=20
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, PASSIVE_LEVEL);
     ASSERT3U(__FdoGetDevicePowerState(Fdo), =3D=3D, PowerDeviceD0);
@@ -1542,12 +1542,12 @@ FdoS3ToS4(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoStartDevice(
-    _In_ PXENVKBD_FDO   Fdo,
-    _In_ PIRP           Irp
+    _Inout_ PXENVKBD_FDO    Fdo,
+    _In_ PIRP               Irp
     )
 {
-    PIO_STACK_LOCATION  StackLocation;
-    NTSTATUS            status;
+    PIO_STACK_LOCATION      StackLocation;
+    NTSTATUS                status;
=20
     status =3D FdoForwardIrpSynchronously(Fdo, Irp);
     if (!NT_SUCCESS(status))
@@ -1637,11 +1637,11 @@ FdoCancelStopDevice(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoStopDevice(
-    _In_ PXENVKBD_FDO   Fdo,
-    _In_ PIRP           Irp
+    _Inout_ PXENVKBD_FDO    Fdo,
+    _In_ PIRP               Irp
     )
 {
-    NTSTATUS            status;
+    NTSTATUS                status;
=20
     if (__FdoGetDevicePowerState(Fdo) =3D=3D PowerDeviceD0)
         FdoD0ToD3(Fdo);
@@ -1735,12 +1735,12 @@ FdoSurpriseRemoval(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoRemoveDevice(
-    _In_ PXENVKBD_FDO   Fdo,
-    _In_ PIRP           Irp
+    _Inout_ PXENVKBD_FDO    Fdo,
+    _In_ PIRP               Irp
     )
 {
-    PLIST_ENTRY         ListEntry;
-    NTSTATUS            status;
+    PLIST_ENTRY             ListEntry;
+    NTSTATUS                status;
=20
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, PASSIVE_LEVEL);
=20
@@ -1817,16 +1817,16 @@ done:
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoQueryDeviceRelations(
-    _In_ PXENVKBD_FDO   Fdo,
-    _In_ PIRP           Irp
+    _Inout_ PXENVKBD_FDO    Fdo,
+    _In_ PIRP               Irp
     )
 {
-    PIO_STACK_LOCATION  StackLocation;
-    ULONG               Size;
-    PDEVICE_RELATIONS   Relations;
-    ULONG               Count;
-    PLIST_ENTRY         ListEntry;
-    NTSTATUS            status;
+    PIO_STACK_LOCATION      StackLocation;
+    ULONG                   Size;
+    PDEVICE_RELATIONS       Relations;
+    ULONG                   Count;
+    PLIST_ENTRY             ListEntry;
+    NTSTATUS                status;
=20
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, PASSIVE_LEVEL);
=20
@@ -1943,7 +1943,7 @@ fail1:
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoQueryCapabilities(
-    _In_ PXENVKBD_FDO       Fdo,
+    _Inout_ PXENVKBD_FDO    Fdo,
     _In_ PIRP               Irp
     )
 {
@@ -1983,7 +1983,7 @@ fail1:
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoDeviceUsageNotification(
-    _In_ PXENVKBD_FDO               Fdo,
+    _Inout_ PXENVKBD_FDO            Fdo,
     _In_ PIRP                       Irp
     )
 {
@@ -2074,13 +2074,13 @@ done:
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoDispatchPnp(
-    _In_ PXENVKBD_FDO   Fdo,
-    _In_ PIRP           Irp
+    _Inout_ PXENVKBD_FDO    Fdo,
+    _In_ PIRP               Irp
     )
 {
-    PIO_STACK_LOCATION  StackLocation;
-    UCHAR               MinorFunction;
-    NTSTATUS            status;
+    PIO_STACK_LOCATION      StackLocation;
+    UCHAR                   MinorFunction;
+    NTSTATUS                status;
=20
     StackLocation =3D IoGetCurrentIrpStackLocation(Irp);
     MinorFunction =3D StackLocation->MinorFunction;
@@ -2154,13 +2154,13 @@ FdoDispatchPnp(
=20
 static FORCEINLINE NTSTATUS
 __FdoSetDevicePowerUp(
-    _In_ PXENVKBD_FDO   Fdo,
-    _In_ PIRP           Irp
+    _Inout_ PXENVKBD_FDO    Fdo,
+    _In_ PIRP               Irp
     )
 {
-    PIO_STACK_LOCATION  StackLocation;
-    DEVICE_POWER_STATE  DeviceState;
-    NTSTATUS            status;
+    PIO_STACK_LOCATION      StackLocation;
+    DEVICE_POWER_STATE      DeviceState;
+    NTSTATUS                status;
=20
     Trace("=3D=3D=3D=3D>\n");
=20
@@ -2192,13 +2192,13 @@ done:
=20
 static FORCEINLINE NTSTATUS
 __FdoSetDevicePowerDown(
-    _In_ PXENVKBD_FDO   Fdo,
-    _In_ PIRP           Irp
+    _Inout_ PXENVKBD_FDO    Fdo,
+    _In_ PIRP               Irp
     )
 {
-    PIO_STACK_LOCATION  StackLocation;
-    DEVICE_POWER_STATE  DeviceState;
-    NTSTATUS            status;
+    PIO_STACK_LOCATION      StackLocation;
+    DEVICE_POWER_STATE      DeviceState;
+    NTSTATUS                status;
=20
     StackLocation =3D IoGetCurrentIrpStackLocation(Irp);
     DeviceState =3D StackLocation->Parameters=2EPower=2EState=2EDeviceSta=
te;
@@ -2223,14 +2223,14 @@ __FdoSetDevicePowerDown(
=20
 static FORCEINLINE NTSTATUS
 __FdoSetDevicePower(
-    _In_ PXENVKBD_FDO   Fdo,
-    _In_ PIRP           Irp
+    _Inout_ PXENVKBD_FDO    Fdo,
+    _In_ PIRP               Irp
     )
 {
-    PIO_STACK_LOCATION  StackLocation;
-    DEVICE_POWER_STATE  DeviceState;
-    POWER_ACTION        PowerAction;
-    NTSTATUS            status;
+    PIO_STACK_LOCATION      StackLocation;
+    DEVICE_POWER_STATE      DeviceState;
+    POWER_ACTION            PowerAction;
+    NTSTATUS                status;
=20
     StackLocation =3D IoGetCurrentIrpStackLocation(Irp);
     DeviceState =3D StackLocation->Parameters=2EPower=2EState=2EDeviceSta=
te;
@@ -2791,15 +2791,15 @@ FdoSystemPower(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 FdoDispatchPower(
-    _In_ PXENVKBD_FDO   Fdo,
-    _In_ PIRP           Irp
+    _Inout_ PXENVKBD_FDO    Fdo,
+    _In_ PIRP               Irp
     )
 {
-    PIO_STACK_LOCATION  StackLocation;
-    UCHAR               MinorFunction;
-    POWER_STATE_TYPE    PowerType;
-    POWER_ACTION        PowerAction;
-    NTSTATUS            status;
+    PIO_STACK_LOCATION      StackLocation;
+    UCHAR                   MinorFunction;
+    POWER_STATE_TYPE        PowerType;
+    POWER_ACTION            PowerAction;
+    NTSTATUS                status;
=20
     StackLocation =3D IoGetCurrentIrpStackLocation(Irp);
     MinorFunction =3D StackLocation->MinorFunction;
@@ -2873,12 +2873,12 @@ FdoDispatchDefault(
=20
 NTSTATUS
 FdoDispatch(
-    _In_ PXENVKBD_FDO   Fdo,
-    _In_ PIRP           Irp
+    _Inout_ PXENVKBD_FDO    Fdo,
+    _In_ PIRP               Irp
     )
 {
-    PIO_STACK_LOCATION  StackLocation;
-    NTSTATUS            status;
+    PIO_STACK_LOCATION      StackLocation;
+    NTSTATUS                status;
=20
     StackLocation =3D IoGetCurrentIrpStackLocation(Irp);
=20
@@ -3231,11 +3231,11 @@ fail1:
=20
 VOID
 FdoDestroy(
-    _In_ PXENVKBD_FDO   Fdo
+    _Inout_ PXENVKBD_FDO    Fdo
     )
 {
-    PXENVKBD_DX         Dx =3D Fdo->Dx;
-    PDEVICE_OBJECT      FunctionDeviceObject =3D Dx->DeviceObject;
+    PXENVKBD_DX             Dx =3D Fdo->Dx;
+    PDEVICE_OBJECT          FunctionDeviceObject =3D Dx->DeviceObject;
=20
     ASSERT(IsListEmpty(&Dx->ListEntry));
     ASSERT3U(Fdo->References, =3D=3D, 0);
diff --git a/src/xenvkbd/fdo=2Eh b/src/xenvkbd/fdo=2Eh
index 29a935a=2E=2Ed23cef6 100644
--- a/src/xenvkbd/fdo=2Eh
+++ b/src/xenvkbd/fdo=2Eh
@@ -57,14 +57,14 @@ FdoGetName(
=20
 extern NTSTATUS
 FdoAddPhysicalDeviceObject(
-    _In_ PXENVKBD_FDO   Fdo,
-    _In_ PXENVKBD_PDO   Pdo
+    _Inout_ PXENVKBD_FDO    Fdo,
+    _In_ PXENVKBD_PDO       Pdo
     );
=20
 extern VOID
 FdoRemovePhysicalDeviceObject(
-    _In_ PXENVKBD_FDO   Fdo,
-    _In_ PXENVKBD_PDO   Pdo
+    _Inout_ PXENVKBD_FDO    Fdo,
+    _In_ PXENVKBD_PDO       Pdo
     );
=20
 extern VOID
@@ -74,7 +74,7 @@ FdoAcquireMutex(
=20
 extern VOID
 FdoReleaseMutex(
-    _In_ PXENVKBD_FDO   Fdo
+    _Inout_ PXENVKBD_FDO    Fdo
     );
=20
 extern PDEVICE_OBJECT
@@ -124,8 +124,8 @@ FdoDelegateIrp(
=20
 extern NTSTATUS
 FdoDispatch(
-    _In_ PXENVKBD_FDO   Fdo,
-    _In_ PIRP           Irp
+    _Inout_ PXENVKBD_FDO    Fdo,
+    _In_ PIRP               Irp
     );
=20
 #define DECLARE_FDO_GET_INTERFACE(_Interface, _Type)    \
@@ -150,7 +150,7 @@ FdoCreate(
=20
 extern VOID
 FdoDestroy(
-    _In_ PXENVKBD_FDO   Fdo
+    _Inout_ PXENVKBD_FDO    Fdo
     );
=20
 #endif  // _XENVKBD_FDO_H
diff --git a/src/xenvkbd/frontend=2Ec b/src/xenvkbd/frontend=2Ec
index 124fefc=2E=2E1d9f8f8 100644
--- a/src/xenvkbd/frontend=2Ec
+++ b/src/xenvkbd/frontend=2Ec
@@ -285,13 +285,13 @@ loop:
=20
 VOID
 FrontendEjectFailed(
-    _In_ PXENVKBD_FRONTEND  Frontend
+    _Inout_ PXENVKBD_FRONTEND   Frontend
     )
 {
-    KIRQL                   Irql;
-    ULONG                   Length;
-    PCHAR                   Path;
-    NTSTATUS                status;
+    KIRQL                       Irql;
+    ULONG                       Length;
+    PCHAR                       Path;
+    NTSTATUS                    status;
=20
     KeAcquireSpinLock(&Frontend->Lock, &Irql);
=20
@@ -336,7 +336,7 @@ fail1:
=20
 static VOID
 FrontendSetOnline(
-    _In_ PXENVKBD_FRONTEND  Frontend
+    _Inout_ PXENVKBD_FRONTEND   Frontend
     )
 {
     Trace("=3D=3D=3D=3D>\n");
@@ -348,7 +348,7 @@ FrontendSetOnline(
=20
 static VOID
 FrontendSetOffline(
-    _In_ PXENVKBD_FRONTEND  Frontend
+    _Inout_ PXENVKBD_FRONTEND   Frontend
     )
 {
     Trace("=3D=3D=3D=3D>\n");
@@ -361,11 +361,11 @@ FrontendSetOffline(
=20
 static VOID
 FrontendSetXenbusState(
-    _In_ PXENVKBD_FRONTEND  Frontend,
-    _In_ XenbusState        State
+    _Inout_ PXENVKBD_FRONTEND   Frontend,
+    _In_ XenbusState            State
     )
 {
-    BOOLEAN                 Online;
+    BOOLEAN                     Online;
=20
     Trace("%s: =3D=3D=3D=3D> %s\n",
           __FrontendGetPath(Frontend),
@@ -487,12 +487,12 @@ FrontendWaitForBackendXenbusStateChange(
=20
 static NTSTATUS
 FrontendUpdatePath(
-    _In_ PXENVKBD_FRONTEND  Frontend
+    _Inout_ PXENVKBD_FRONTEND   Frontend
     )
 {
-    ULONG                   Length;
-    PCHAR                   Buffer;
-    NTSTATUS                status;
+    ULONG                       Length;
+    PCHAR                       Buffer;
+    NTSTATUS                    status;
=20
     status =3D XENBUS_STORE(Read,
                           &Frontend->StoreInterface,
@@ -553,11 +553,11 @@ fail1:
=20
 static NTSTATUS
 FrontendClose(
-    _In_ PXENVKBD_FRONTEND  Frontend
+    _Inout_ PXENVKBD_FRONTEND   Frontend
     )
 {
-    XenbusState             State;
-    NTSTATUS                status;
+    XenbusState                 State;
+    NTSTATUS                    status;
=20
     Trace("=3D=3D=3D=3D=3D>\n");
     if (Frontend->Watch)
@@ -618,11 +618,11 @@ fail1:
=20
 static NTSTATUS
 FrontendPrepare(
-    _In_ PXENVKBD_FRONTEND  Frontend
+    _Inout_ PXENVKBD_FRONTEND   Frontend
     )
 {
-    XenbusState             State;
-    NTSTATUS                status;
+    XenbusState                 State;
+    NTSTATUS                    status;
=20
     Trace("=3D=3D=3D=3D=3D>\n");
=20
@@ -667,11 +667,11 @@ fail1:
=20
 static NTSTATUS
 FrontendConnect(
-    _In_ PXENVKBD_FRONTEND  Frontend
+    _Inout_ PXENVKBD_FRONTEND   Frontend
     )
 {
-    XenbusState             State;
-    NTSTATUS                status;
+    XenbusState                 State;
+    NTSTATUS                    status;
=20
     Trace("=3D=3D=3D=3D=3D>\n");
=20
@@ -790,7 +790,7 @@ FrontendDisable(
=20
 NTSTATUS
 FrontendSetState(
-    _In_ PXENVKBD_FRONTEND      Frontend,
+    _Inout_ PXENVKBD_FRONTEND   Frontend,
     _In_ XENVKBD_FRONTEND_STATE State
     )
 {
@@ -938,7 +938,7 @@ FrontendSetState(
=20
 static FORCEINLINE VOID
 __FrontendResume(
-    _In_ PXENVKBD_FRONTEND  Frontend
+    _Inout_ PXENVKBD_FRONTEND   Frontend
     )
 {
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, DISPATCH_LEVEL);
@@ -949,7 +949,7 @@ __FrontendResume(
=20
 static FORCEINLINE VOID
 __FrontendSuspend(
-    _In_ PXENVKBD_FRONTEND  Frontend
+    _Inout_ PXENVKBD_FRONTEND   Frontend
     )
 {
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, DISPATCH_LEVEL);
@@ -980,11 +980,11 @@ FrontendSuspendCallbackLate(
=20
 NTSTATUS
 FrontendResume(
-    _In_ PXENVKBD_FRONTEND  Frontend
+    _Inout_ PXENVKBD_FRONTEND   Frontend
     )
 {
-    KIRQL                   Irql;
-    NTSTATUS                status;
+    KIRQL                       Irql;
+    NTSTATUS                    status;
=20
     Trace("=3D=3D=3D=3D>\n");
=20
@@ -1056,10 +1056,10 @@ fail1:
=20
 VOID
 FrontendSuspend(
-    _In_ PXENVKBD_FRONTEND  Frontend
+    _Inout_ PXENVKBD_FRONTEND   Frontend
     )
 {
-    KIRQL                   Irql;
+    KIRQL                       Irql;
=20
     Trace("=3D=3D=3D=3D>\n");
=20
@@ -1204,7 +1204,7 @@ fail1:
=20
 VOID
 FrontendTeardown(
-    _In_ PXENVKBD_FRONTEND  Frontend
+    _Inout_ PXENVKBD_FRONTEND   Frontend
     )
 {
     Trace("=3D=3D=3D=3D>\n");
diff --git a/src/xenvkbd/frontend=2Eh b/src/xenvkbd/frontend=2Eh
index e7b6902=2E=2E0e1258a 100644
--- a/src/xenvkbd/frontend=2Eh
+++ b/src/xenvkbd/frontend=2Eh
@@ -65,28 +65,28 @@ FrontendInitialize(
=20
 extern VOID
 FrontendTeardown(
-    _In_ PXENVKBD_FRONTEND  Frontend
+    _Inout_ PXENVKBD_FRONTEND   Frontend
     );
=20
 extern VOID
 FrontendEjectFailed(
-    _In_ PXENVKBD_FRONTEND  Frontend
+    _Inout_ PXENVKBD_FRONTEND   Frontend
     );
=20
 extern NTSTATUS
 FrontendSetState(
-    _In_ PXENVKBD_FRONTEND      Frontend,
+    _Inout_ PXENVKBD_FRONTEND   Frontend,
     _In_ XENVKBD_FRONTEND_STATE State
     );
=20
 extern NTSTATUS
 FrontendResume(
-    _In_ PXENVKBD_FRONTEND  Frontend
+    _Inout_ PXENVKBD_FRONTEND   Frontend
     );
=20
 extern VOID
 FrontendSuspend(
-    _In_ PXENVKBD_FRONTEND  Frontend
+    _Inout_ PXENVKBD_FRONTEND   Frontend
     );
=20
 extern PXENVKBD_PDO
diff --git a/src/xenvkbd/hid=2Ec b/src/xenvkbd/hid=2Ec
index 4e90ac7=2E=2E3e1bd53 100644
--- a/src/xenvkbd/hid=2Ec
+++ b/src/xenvkbd/hid=2Ec
@@ -65,11 +65,11 @@ struct _XENVKBD_HID_CONTEXT {
=20
 static FORCEINLINE NTSTATUS
 HidCopyBuffer(
-    _In_ PVOID      Buffer,
-    _In_ ULONG      Length,
-    _In_ const VOID *Source,
-    _In_ ULONG      SourceLength,
-    _Out_ PULONG    Returned
+    _Out_writes_bytes_opt_(Length) PVOID    Buffer,
+    _In_ ULONG                              Length,
+    _In_ const VOID                         *Source,
+    _In_ ULONG                              SourceLength,
+    _Out_ PULONG                            Returned
     )
 {
     if (Buffer =3D=3D NULL)
@@ -656,7 +656,7 @@ HidGetInterface(
=20
 VOID
 HidTeardown(
-    _In_ PXENVKBD_HID_CONTEXT   Context
+    _Inout_ PXENVKBD_HID_CONTEXT    Context
     )
 {
     Trace("=3D=3D=3D=3D>\n");
diff --git a/src/xenvkbd/hid=2Eh b/src/xenvkbd/hid=2Eh
index 1364a66=2E=2Ef2b4089 100644
--- a/src/xenvkbd/hid=2Eh
+++ b/src/xenvkbd/hid=2Eh
@@ -58,7 +58,7 @@ HidGetInterface(
=20
 extern VOID
 HidTeardown(
-    _In_ PXENVKBD_HID_CONTEXT   Context
+    _Inout_ PXENVKBD_HID_CONTEXT    Context
     );
=20
 // CALLBACKS
diff --git a/src/xenvkbd/pdo=2Ec b/src/xenvkbd/pdo=2Ec
index 5443119=2E=2Eff2e0be 100644
--- a/src/xenvkbd/pdo=2Ec
+++ b/src/xenvkbd/pdo=2Ec
@@ -199,8 +199,8 @@ __PdoGetDevicePowerState(
=20
 static FORCEINLINE VOID
 __PdoSetMissing(
-    _In_ PXENVKBD_PDO   Pdo,
-    _In_ PCSTR          Reason
+    _Inout_ PXENVKBD_PDO    Pdo,
+    _In_ PCSTR              Reason
     )
 {
     Pdo->Reason =3D Reason;
@@ -209,8 +209,8 @@ __PdoSetMissing(
=20
 VOID
 PdoSetMissing(
-    _In_ PXENVKBD_PDO   Pdo,
-    _In_ PCSTR          Reason
+    _Inout_ PXENVKBD_PDO    Pdo,
+    _In_ PCSTR              Reason
     )
 {
     __PdoSetMissing(Pdo, Reason);
@@ -284,7 +284,7 @@ PdoGetName(
=20
 static FORCEINLINE BOOLEAN
 __PdoSetEjectRequested(
-    _In_ PXENVKBD_PDO   Pdo
+    _Inout_ PXENVKBD_PDO    Pdo
     )
 {
     return (InterlockedBitTestAndSet(&Pdo->Eject, 0) =3D=3D 0) ? TRUE : F=
ALSE;
@@ -292,12 +292,12 @@ __PdoSetEjectRequested(
=20
 VOID
 PdoRequestEject(
-    _In_ PXENVKBD_PDO   Pdo
+    _Inout_ PXENVKBD_PDO    Pdo
     )
 {
-    PXENVKBD_DX         Dx =3D Pdo->Dx;
-    PDEVICE_OBJECT      PhysicalDeviceObject =3D Dx->DeviceObject;
-    PXENVKBD_FDO        Fdo =3D __PdoGetFdo(Pdo);
+    PXENVKBD_DX             Dx =3D Pdo->Dx;
+    PDEVICE_OBJECT          PhysicalDeviceObject =3D Dx->DeviceObject;
+    PXENVKBD_FDO            Fdo =3D __PdoGetFdo(Pdo);
=20
     if (!__PdoSetEjectRequested(Pdo))
         return;
@@ -312,7 +312,7 @@ PdoRequestEject(
=20
 static FORCEINLINE BOOLEAN
 __PdoClearEjectRequested(
-    _In_ PXENVKBD_PDO   Pdo
+    _Inout_ PXENVKBD_PDO    Pdo
     )
 {
     return (InterlockedBitTestAndReset(&Pdo->Eject, 0) !=3D 0) ? TRUE : F=
ALSE;
@@ -650,10 +650,10 @@ fail1:
 // This function must not touch pageable code or data
 static DECLSPEC_NOINLINE VOID
 PdoD0ToD3(
-    _In_ PXENVKBD_PDO   Pdo
+    _Inout_ PXENVKBD_PDO    Pdo
     )
 {
-    KIRQL               Irql;
+    KIRQL                   Irql;
=20
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, PASSIVE_LEVEL);
=20
@@ -767,11 +767,11 @@ PdoCancelStopDevice(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoStopDevice(
-    _In_ PXENVKBD_PDO   Pdo,
-    _In_ PIRP           Irp
+    _Inout_ PXENVKBD_PDO    Pdo,
+    _In_ PIRP               Irp
     )
 {
-    NTSTATUS            status;
+    NTSTATUS                status;
=20
     if (__PdoGetDevicePowerState(Pdo) !=3D PowerDeviceD0)
         goto done;
@@ -807,11 +807,11 @@ PdoQueryRemoveDevice(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoCancelRemoveDevice(
-    _In_ PXENVKBD_PDO   Pdo,
-    _In_ PIRP           Irp
+    _Inout_ PXENVKBD_PDO    Pdo,
+    _In_ PIRP               Irp
     )
 {
-    NTSTATUS            status;
+    NTSTATUS                status;
=20
     if (__PdoClearEjectRequested(Pdo))
         FrontendEjectFailed(__PdoGetFrontend(Pdo));
@@ -846,13 +846,13 @@ PdoSurpriseRemoval(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoRemoveDevice(
-    _In_ PXENVKBD_PDO   Pdo,
-    _In_ PIRP           Irp
+    _Inout_ PXENVKBD_PDO    Pdo,
+    _In_ PIRP               Irp
     )
 {
-    PXENVKBD_FDO        Fdo =3D __PdoGetFdo(Pdo);
-    BOOLEAN             NeedInvalidate;
-    NTSTATUS            status;
+    PXENVKBD_FDO            Fdo =3D __PdoGetFdo(Pdo);
+    BOOLEAN                 NeedInvalidate;
+    NTSTATUS                status;
=20
     if (__PdoGetDevicePowerState(Pdo) !=3D PowerDeviceD0)
         goto done;
@@ -1457,12 +1457,12 @@ PdoDeviceUsageNotification(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoEject(
-    _In_ PXENVKBD_PDO   Pdo,
-    _In_ PIRP           Irp
+    _Inout_ PXENVKBD_PDO    Pdo,
+    _In_ PIRP               Irp
     )
 {
-    PXENVKBD_FDO        Fdo =3D __PdoGetFdo(Pdo);
-    NTSTATUS            status;
+    PXENVKBD_FDO            Fdo =3D __PdoGetFdo(Pdo);
+    NTSTATUS                status;
=20
     Trace("%s\n", __PdoGetName(Pdo));
=20
@@ -1486,13 +1486,13 @@ PdoEject(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoDispatchPnp(
-    _In_ PXENVKBD_PDO   Pdo,
-    _In_ PIRP           Irp
+    _Inout_ PXENVKBD_PDO    Pdo,
+    _In_ PIRP               Irp
     )
 {
-    PIO_STACK_LOCATION  StackLocation;
-    UCHAR               MinorFunction;
-    NTSTATUS            status;
+    PIO_STACK_LOCATION      StackLocation;
+    UCHAR                   MinorFunction;
+    NTSTATUS                status;
=20
     StackLocation =3D IoGetCurrentIrpStackLocation(Irp);
     MinorFunction =3D StackLocation->MinorFunction;
@@ -1591,14 +1591,14 @@ PdoDispatchPnp(
=20
 static FORCEINLINE NTSTATUS
 __PdoSetDevicePower(
-    _In_ PXENVKBD_PDO   Pdo,
-    _In_ PIRP           Irp
+    _Inout_ PXENVKBD_PDO    Pdo,
+    _In_ PIRP               Irp
     )
 {
-    PIO_STACK_LOCATION  StackLocation;
-    DEVICE_POWER_STATE  DeviceState;
-    POWER_ACTION        PowerAction;
-    NTSTATUS            status;
+    PIO_STACK_LOCATION      StackLocation;
+    DEVICE_POWER_STATE      DeviceState;
+    POWER_ACTION            PowerAction;
+    NTSTATUS                status;
=20
     StackLocation =3D IoGetCurrentIrpStackLocation(Irp);
     DeviceState =3D StackLocation->Parameters=2EPower=2EState=2EDeviceSta=
te;
@@ -1779,14 +1779,14 @@ PdoSystemPower(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoSetPower(
-    _In_ PXENVKBD_PDO   Pdo,
-    _In_ PIRP           Irp
+    _Inout_ PXENVKBD_PDO    Pdo,
+    _In_ PIRP               Irp
     )
 {
-    PIO_STACK_LOCATION  StackLocation;
-    POWER_STATE_TYPE    PowerType;
-    POWER_ACTION        PowerAction;
-    NTSTATUS            status;
+    PIO_STACK_LOCATION      StackLocation;
+    POWER_STATE_TYPE        PowerType;
+    POWER_ACTION            PowerAction;
+    NTSTATUS                status;
    =20
     StackLocation =3D IoGetCurrentIrpStackLocation(Irp);
     PowerType =3D StackLocation->Parameters=2EPower=2EType;
@@ -1856,13 +1856,13 @@ PdoQueryPower(
=20
 static DECLSPEC_NOINLINE NTSTATUS
 PdoDispatchPower(
-    _In_ PXENVKBD_PDO   Pdo,
-    _In_ PIRP           Irp
+    _Inout_ PXENVKBD_PDO    Pdo,
+    _In_ PIRP               Irp
     )
 {
-    PIO_STACK_LOCATION  StackLocation;
-    UCHAR               MinorFunction;
-    NTSTATUS            status;
+    PIO_STACK_LOCATION      StackLocation;
+    UCHAR                   MinorFunction;
+    NTSTATUS                status;
=20
     StackLocation =3D IoGetCurrentIrpStackLocation(Irp);
     MinorFunction =3D StackLocation->MinorFunction;
@@ -1903,12 +1903,12 @@ PdoDispatchDefault(
=20
 NTSTATUS
 PdoDispatch(
-    _In_ PXENVKBD_PDO   Pdo,
-    _In_ PIRP           Irp
+    _Inout_ PXENVKBD_PDO    Pdo,
+    _In_ PIRP               Irp
     )
 {
-    PIO_STACK_LOCATION  StackLocation;
-    NTSTATUS            status;
+    PIO_STACK_LOCATION      StackLocation;
+    NTSTATUS                status;
=20
     StackLocation =3D IoGetCurrentIrpStackLocation(Irp);
=20
@@ -2093,12 +2093,12 @@ fail1:
=20
 VOID
 PdoDestroy(
-    _In_ PXENVKBD_PDO   Pdo
+    _Inout_ PXENVKBD_PDO    Pdo
     )
 {
-    PXENVKBD_DX         Dx =3D Pdo->Dx;
-    PDEVICE_OBJECT      PhysicalDeviceObject =3D Dx->DeviceObject;
-    PXENVKBD_FDO        Fdo =3D __PdoGetFdo(Pdo);
+    PXENVKBD_DX             Dx =3D Pdo->Dx;
+    PDEVICE_OBJECT          PhysicalDeviceObject =3D Dx->DeviceObject;
+    PXENVKBD_FDO            Fdo =3D __PdoGetFdo(Pdo);
=20
     ASSERT3U(__PdoGetDevicePnpState(Pdo), =3D=3D, Deleted);
=20
diff --git a/src/xenvkbd/pdo=2Eh b/src/xenvkbd/pdo=2Eh
index 1df1fc2=2E=2Ebeb88bc 100644
--- a/src/xenvkbd/pdo=2Eh
+++ b/src/xenvkbd/pdo=2Eh
@@ -52,8 +52,8 @@ PdoGetDevicePnpState(
=20
 extern VOID
 PdoSetMissing(
-    _In_ PXENVKBD_PDO   Pdo,
-    _In_ PCSTR          Reason
+    _Inout_ PXENVKBD_PDO    Pdo,
+    _In_ PCSTR              Reason
     );
=20
 extern BOOLEAN
@@ -63,7 +63,7 @@ PdoIsMissing(
=20
 extern VOID
 PdoRequestEject(
-    _In_ PXENVKBD_PDO   Pdo
+    _Inout_ PXENVKBD_PDO    Pdo
     );
=20
 extern BOOLEAN
@@ -138,7 +138,7 @@ PdoSuspend(
=20
 extern VOID
 PdoDestroy(
-    _In_ PXENVKBD_PDO   Pdo
+    _Inout_ PXENVKBD_PDO    Pdo
     );
=20
 #include "frontend=2Eh"
@@ -157,8 +157,8 @@ PdoGetHidContext(
=20
 extern NTSTATUS
 PdoDispatch(
-    _In_ PXENVKBD_PDO   Pdo,
-    _In_ PIRP           Irp
+    _Inout_ PXENVKBD_PDO    Pdo,
+    _In_ PIRP               Irp
     );
=20
 #endif  // _XENVKBD_PDO_H
diff --git a/src/xenvkbd/ring=2Ec b/src/xenvkbd/ring=2Ec
index 70a069c=2E=2Ea4f5769 100644
--- a/src/xenvkbd/ring=2Ec
+++ b/src/xenvkbd/ring=2Ec
@@ -109,11 +109,11 @@ __RingFree(
=20
 static FORCEINLINE NTSTATUS
 __RingCopyBuffer(
-    _In_ PVOID      Buffer,
-    _In_ ULONG      Length,
-    _In_ const VOID *Source,
-    _In_ ULONG      SourceLength,
-    _Out_ PULONG    Returned
+    _Out_writes_bytes_opt_(Length) PVOID    Buffer,
+    _In_ ULONG                              Length,
+    _In_ const VOID                         *Source,
+    _In_ ULONG                              SourceLength,
+    _Out_ PULONG                            Returned
     )
 {
     if (Buffer =3D=3D NULL)
@@ -148,13 +148,13 @@ SetBit(
=20
 static FORCEINLINE VOID
 SetArray(
-    _In_ PUCHAR     Array,
-    _In_ ULONG      Size,
-    _In_ UCHAR      Value,
-    _In_ BOOLEAN    Pressed
+    _Inout_updates_(Size) PUCHAR    Array,
+    _In_ ULONG                      Size,
+    _In_ UCHAR                      Value,
+    _In_ BOOLEAN                    Pressed
     )
 {
-    ULONG           Idx;
+    ULONG                           Idx;
     if (Pressed) {
         for (Idx =3D 0; Idx < Size; ++Idx) {
             if (Array[Idx] =3D=3D Value)
@@ -194,7 +194,7 @@ static struct _KEY_CODE_TO_USAGE KeyCodeToUsageTable[]=
 =3D {
 #undef DEFINE_USAGE
=20
 static VOID RingBuildKeyCodeToUsageMapping(
-    _In_ PXENVKBD_RING  Ring
+    _Inout_ PXENVKBD_RING Ring
     )
 {
     ULONG               Index;
@@ -240,10 +240,10 @@ __RingKeyCodeToUsage(
=20
 static FORCEINLINE VOID
 __RingEventMotion(
-    _In_ PXENVKBD_RING  Ring,
-    _In_ LONG           dX,
-    _In_ LONG           dY,
-    _In_ LONG           dZ
+    _Inout_ PXENVKBD_RING   Ring,
+    _In_ LONG               dX,
+    _In_ LONG               dY,
+    _In_ LONG               dZ
     )
 {
     Ring->AbsMouseReport=2EX =3D (USHORT)CONSTRAIN(Ring->AbsMouseReport=
=2EX + dX, 0, 32767);
@@ -257,9 +257,9 @@ __RingEventMotion(
=20
 static FORCEINLINE VOID
 __RingEventKeypress(
-    _In_ PXENVKBD_RING  Ring,
-    _In_ ULONG          KeyCode,
-    _In_ BOOLEAN        Pressed
+    _Inout_ PXENVKBD_RING   Ring,
+    _In_ ULONG              KeyCode,
+    _In_ BOOLEAN            Pressed
     )
 {
     if (KeyCode >=3D 0x110 && KeyCode <=3D 0x114) {
@@ -304,10 +304,10 @@ __RingEventKeypress(
=20
 static FORCEINLINE VOID
 __RingEventPosition(
-    _In_ PXENVKBD_RING  Ring,
-    _In_ ULONG          X,
-    _In_ ULONG          Y,
-    _In_ LONG           dZ
+    _Inout_ PXENVKBD_RING   Ring,
+    _In_ ULONG              X,
+    _In_ ULONG              Y,
+    _In_ LONG               dZ
     )
 {
     Ring->AbsMouseReport=2EX =3D (USHORT)CONSTRAIN(X, 0, 32767);
@@ -535,11 +535,11 @@ fail1:
=20
 static FORCEINLINE VOID
 RingReadFeatures(
-    _In_ PXENVKBD_RING  Ring
+    _Inout_ PXENVKBD_RING   Ring
     )
 {
-    PCHAR               Buffer;
-    NTSTATUS            status;
+    PCHAR                   Buffer;
+    NTSTATUS                status;
=20
     status =3D XENBUS_STORE(Read,
                           &Ring->StoreInterface,
@@ -576,12 +576,12 @@ RingReadFeatures(
=20
 NTSTATUS
 RingConnect(
-    _In_ PXENVKBD_RING  Ring
+    _Inout_ PXENVKBD_RING   Ring
     )
 {
-    PFN_NUMBER          Pfn;
-    PXENVKBD_FRONTEND   Frontend;
-    NTSTATUS            status;
+    PFN_NUMBER              Pfn;
+    PXENVKBD_FRONTEND       Frontend;
+    NTSTATUS                status;
=20
     Trace("=3D=3D=3D=3D=3D>\n");
     Frontend =3D Ring->Frontend;
@@ -827,7 +827,7 @@ fail1:
=20
 NTSTATUS
 RingEnable(
-    _In_ PXENVKBD_RING  Ring
+    _Inout_ PXENVKBD_RING   Ring
     )
 {
     Trace("=3D=3D=3D=3D=3D>\n");
@@ -843,7 +843,7 @@ RingEnable(
=20
 VOID
 RingDisable(
-    _In_ PXENVKBD_RING  Ring
+    _Inout_ PXENVKBD_RING   Ring
     )
 {
     Trace("=3D=3D=3D=3D=3D>\n");
@@ -856,7 +856,7 @@ RingDisable(
=20
 VOID
 RingDisconnect(
-    _In_ PXENVKBD_RING  Ring
+    _Inout_ PXENVKBD_RING   Ring
     )
 {
     Trace("=3D=3D=3D=3D=3D>\n");
@@ -908,7 +908,7 @@ RingDisconnect(
=20
 VOID
 RingTeardown(
-    _In_ PXENVKBD_RING  Ring
+    _Inout_ PXENVKBD_RING   Ring
     )
 {
     Trace("=3D=3D=3D=3D=3D>\n");
@@ -950,7 +950,7 @@ RingTeardown(
=20
 VOID
 RingNotify(
-    _In_ PXENVKBD_RING  Ring
+    _Inout_ PXENVKBD_RING   Ring
     )
 {
     if (KeInsertQueueDpc(&Ring->Dpc, NULL, NULL))
@@ -959,11 +959,11 @@ RingNotify(
=20
 NTSTATUS
 RingGetInputReport(
-    _In_ PXENVKBD_RING  Ring,
-    _In_ ULONG          ReportId,
-    _In_ PVOID          Buffer,
-    _In_ ULONG          Length,
-    _Out_ PULONG        Returned
+    _In_ PXENVKBD_RING                      Ring,
+    _In_ ULONG                              ReportId,
+    _Out_writes_bytes_opt_(Length) PVOID    Buffer,
+    _In_ ULONG                              Length,
+    _Out_ PULONG                            Returned
     )
 {
     switch (ReportId) {
@@ -986,7 +986,7 @@ RingGetInputReport(
=20
 VOID
 RingReadReport(
-    _In_ PXENVKBD_RING  Ring
+    _Inout_ PXENVKBD_RING   Ring
     )
 {
     // Check for pending reports, push 1 pending report to subscriber
diff --git a/src/xenvkbd/ring=2Eh b/src/xenvkbd/ring=2Eh
index 0ed1693=2E=2E1781eb2 100644
--- a/src/xenvkbd/ring=2Eh
+++ b/src/xenvkbd/ring=2Eh
@@ -49,7 +49,7 @@ RingInitialize(
=20
 extern NTSTATUS
 RingConnect(
-    _In_ PXENVKBD_RING  Ring
+    _Inout_ PXENVKBD_RING   Ring
     );
=20
 extern NTSTATUS
@@ -60,41 +60,41 @@ RingStoreWrite(
=20
 extern NTSTATUS
 RingEnable(
-    _In_ PXENVKBD_RING  Ring
+    _Inout_ PXENVKBD_RING   Ring
     );
=20
 extern VOID
 RingDisable(
-    _In_ PXENVKBD_RING  Ring
+    _Inout_ PXENVKBD_RING   Ring
     );
=20
 extern VOID
 RingDisconnect(
-    _In_ PXENVKBD_RING  Ring
+    _Inout_ PXENVKBD_RING   Ring
     );
=20
 extern VOID
 RingTeardown(
-    _In_ PXENVKBD_RING  Ring
+    _Inout_ PXENVKBD_RING   Ring
     );
=20
 extern VOID
 RingNotify(
-    _In_ PXENVKBD_RING  Ring
+    _Inout_ PXENVKBD_RING   Ring
     );
=20
 extern NTSTATUS
 RingGetInputReport(
-    _In_ PXENVKBD_RING  Ring,
-    _In_ ULONG          ReportId,
-    _In_ PVOID          Buffer,
-    _In_ ULONG          Length,
-    _Out_ PULONG        Returned
+    _In_ PXENVKBD_RING                      Ring,
+    _In_ ULONG                              ReportId,
+    _Out_writes_bytes_opt_(Length) PVOID    Buffer,
+    _In_ ULONG                              Length,
+    _Out_ PULONG                            Returned
     );
=20
 extern VOID
 RingReadReport(
-    _In_ PXENVKBD_RING  Ring
+    _Inout_ PXENVKBD_RING   Ring
     );
=20
 #endif  // _XENVKBD_RING_H
diff --git a/src/xenvkbd/thread=2Ec b/src/xenvkbd/thread=2Ec
index 5ff6392=2E=2E68178d4 100644
--- a/src/xenvkbd/thread=2Ec
+++ b/src/xenvkbd/thread=2Ec
@@ -66,7 +66,7 @@ __ThreadFree(
=20
 static FORCEINLINE VOID
 __ThreadWake(
-    _In_ PXENVKBD_THREAD    Thread
+    _Inout_ PXENVKBD_THREAD Thread
     )
 {
     KeSetEvent(&Thread->Event, IO_NO_INCREMENT, FALSE);
@@ -74,7 +74,7 @@ __ThreadWake(
=20
 VOID
 ThreadWake(
-    _In_ PXENVKBD_THREAD    Thread
+    _Inout_ PXENVKBD_THREAD Thread
     )
 {
     __ThreadWake(Thread);
@@ -82,7 +82,7 @@ ThreadWake(
=20
 static FORCEINLINE VOID
 __ThreadAlert(
-    _In_ PXENVKBD_THREAD    Thread
+    _Inout_ PXENVKBD_THREAD Thread
     )
 {
     Thread->Alerted =3D TRUE;
@@ -91,7 +91,7 @@ __ThreadAlert(
=20
 VOID
 ThreadAlert(
-    _In_ PXENVKBD_THREAD    Thread
+    _Inout_ PXENVKBD_THREAD Thread
     )
 {
     __ThreadAlert(Thread);
@@ -205,7 +205,7 @@ ThreadIsAlerted(
=20
 VOID
 ThreadJoin(
-    _In_ PXENVKBD_THREAD    Thread
+    _Inout_ PXENVKBD_THREAD Thread
     )
 {
     LONG                    References;
diff --git a/src/xenvkbd/thread=2Eh b/src/xenvkbd/thread=2Eh
index 7f0514b=2E=2E3d8fc27 100644
--- a/src/xenvkbd/thread=2Eh
+++ b/src/xenvkbd/thread=2Eh
@@ -59,17 +59,17 @@ ThreadIsAlerted(
=20
 extern VOID
 ThreadWake(
-    _In_ PXENVKBD_THREAD    Thread
+    _Inout_ PXENVKBD_THREAD Thread
     );
=20
 extern VOID
 ThreadAlert(
-    _In_ PXENVKBD_THREAD    Thread
+    _Inout_ PXENVKBD_THREAD Thread
     );
=20
 extern VOID
 ThreadJoin(
-    _In_ PXENVKBD_THREAD    Thread
+    _Inout_ PXENVKBD_THREAD Thread
     );
=20
 #endif  // _XENVKBD_THREAD_H
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.34d.cf6cbc7772fa2040.1a1544ce352.31a09f8665d4a2fb=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 19 13:14:54 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 19 Oct 2026 13:14:54 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1454344.1667900 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xInCY-0007jT-LL; Mon, 19 Oct 2026 13:14:54 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1454344.1667900; Mon, 19 Oct 2026 13:14:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xInCY-0007jE-Ff; Mon, 19 Oct 2026 13:14:54 +0000
Received: by outflank-mailman (input) for mailman id 1454344;
 Mon, 19 Oct 2026 13:14:52 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1544ce5e10008425@swg.vates.tech>)
 id 1xInCW-0007fE-J2
 for win-pv-devel@lists.xenproject.org; Mon, 19 Oct 2026 13:14:52 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xInCV-00ESJo-Vy
 for win-pv-devel@lists.xenproject.org; Mon, 19 Oct 2026 15:14:52 +0200
Received: from [10.42.69.1] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1544ce5e10008425@swg.vates.tech>)
 id 6ad617c0-8faa-0a2a0a5109dd-0a2a45019e18-28
 for <win-pv-devel@lists.xenproject.org>; Mon, 19 Oct 2026 15:14:51 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1544ce5e10008425@swg.vates.tech>)
 id 6ad617ca-5984-0a2a45010019-b9ff1c229f95-4
 for <win-pv-devel@lists.xenproject.org>; Mon, 19 Oct 2026 15:14:51 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1544ce5e10008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 19 Oct 2026 13:14:48 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id A24AF82E7A;
 Mon, 19 Oct 2026 15:14:47 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=btpvFnV2NP+W33ZXWMNx5cs9spDkhvedsh9yB8eaZNw=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=eiQ2jpenAwdsF9I5VBEXMvYE2w9oRRu50cvWvrX5356wVm+1nMO4MMJI8yLauIU33gn0++nXG
 JQFkhN2pfDh5QhBfzVTUFwfeNuS2bvIXkIcUuH3tvA+dAz2aTIkBxmjCBL+6umn50/QEtVmSHie
 P8q2t6C1sHKgW8pf1MS+9CF+fTFFWW5GosAHkA6Afu1hkxN5S7ZKcvMsiCJkpHoZNGVllzSvinV
 kUZ1X6idmyCTGyQUJQg7UUEpaIFBB8tsC5tKT+iZgE+CDErpWW4qjEKnfblLhvH+jIc2GsW76++
 Jy3kqQaipWEzjzD/XgzmFgSz/ds+0qTlIkT8JkNu+nYg==
X-Zone-Loop: 2cf8e671ee07fa513c93d5970fb54d27725806a5dcc9
x-campaign-type: default
x-transaction-id: 419dd1f4-94c9-4da6-b38a-f14e3eb3e330
x-swg-uid: 01-3a440acb-045c-4cd9-b1ff-502766a01c3c
X-Mailer: Sweego
Message-ID:
 <1792415688.8631fc262581453bbf619ec5b2062170.1a1544ce5e10008425@vates.tech>
x-swg-bid: 1792415688.8631fc262581453bbf619ec5b2062170.1a1544ce5e10008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 08/11] xenvkbd: Add size annotations to buffer parameters
Date: Mon, 19 Oct 2026 15:14:34 +0200
In-Reply-To: <1792415573.8631fc262581453bbf619ec5b2062170.1a1544b27410008425@vates.tech>
References: <1792415573.8631fc262581453bbf619ec5b2062170.1a1544b27410008425@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.34e.406c4edc32169298.1a1544ce44a.3decf1130ef311a=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792415687754
X-purgate-ID: tlsNG-d62444/1792415691-1FA6E757-2183CBC9/0/0
X-purgate-type: clean
X-purgate-size: 12121

---=Part.34e.406c4edc32169298.1a1544ce44a.3decf1130ef311a=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Buffer parameters with a length parameter were annotated as single
elements, so /analyze could not check accesses to them=2E Annotate them
with their size: bus data buffers as _Inout_updates_bytes_(Length),
matching GET_SET_DEVICE_DATA, and copy sources and report buffers as
_In_reads_bytes_=2E
No functional change=2E

Assisted-by: Claude:opus-5=2E5
Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xenvkbd/assert=2Eh   |  8 ++++----
 src/xenvkbd/bus=2Ec      | 20 ++++++++++----------
 src/xenvkbd/fdo=2Ec      | 20 ++++++++++----------
 src/xenvkbd/fdo=2Eh      | 20 ++++++++++----------
 src/xenvkbd/hid=2Ec      | 16 ++++++++--------
 src/xenvkbd/hid=2Eh      |  6 +++---
 src/xenvkbd/pdo=2Ec      | 20 ++++++++++----------
 src/xenvkbd/pdo=2Eh      | 20 ++++++++++----------
 src/xenvkbd/registry=2Ec |  8 ++++----
 src/xenvkbd/registry=2Eh |  8 ++++----
 src/xenvkbd/ring=2Ec     | 10 +++++-----
 11 files changed, 78 insertions(+), 78 deletions(-)

diff --git a/src/xenvkbd/assert=2Eh b/src/xenvkbd/assert=2Eh
index ec2650c=2E=2E6540eb7 100644
--- a/src/xenvkbd/assert=2Eh
+++ b/src/xenvkbd/assert=2Eh
@@ -154,10 +154,10 @@ __Bug(
=20
 static __inline BOOLEAN
 _IsZeroMemory(
-    _In_ PCSTR      Caller,
-    _In_ PCSTR      Name,
-    _In_ PVOID      Buffer,
-    _In_ ULONG      Length
+    _In_ PCSTR                      Caller,
+    _In_ PCSTR                      Name,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Length
     )
 {
     ULONG           Offset;
diff --git a/src/xenvkbd/bus=2Ec b/src/xenvkbd/bus=2Ec
index b1a0c73=2E=2E52dd2ed 100644
--- a/src/xenvkbd/bus=2Ec
+++ b/src/xenvkbd/bus=2Ec
@@ -126,11 +126,11 @@ static
 _Function_class_(GET_SET_DEVICE_DATA)
 ULONG
 BusSetData(
-    _In_ PVOID              _Context,
-    _In_ ULONG              DataType,
-    _In_ PVOID              Buffer,
-    _In_ ULONG              Offset,
-    _In_ ULONG              Length
+    _In_ PVOID                             _Context,
+    _In_ ULONG                             DataType,
+    _Inout_updates_bytes_(Length) PVOID    Buffer,
+    _In_ ULONG                             Offset,
+    _In_ ULONG                             Length
     )
 {
     PXENVKBD_BUS_CONTEXT    Context =3D _Context;
@@ -146,11 +146,11 @@ static
 _Function_class_(GET_SET_DEVICE_DATA)
 ULONG
 BusGetData(
-    _In_ PVOID              _Context,
-    _In_ ULONG              DataType,
-    _In_ PVOID              Buffer,
-    _In_ ULONG              Offset,
-    _In_ ULONG              Length
+    _In_ PVOID                             _Context,
+    _In_ ULONG                             DataType,
+    _Inout_updates_bytes_(Length) PVOID    Buffer,
+    _In_ ULONG                             Offset,
+    _In_ ULONG                             Length
     )
 {
     PXENVKBD_BUS_CONTEXT    Context =3D _Context;
diff --git a/src/xenvkbd/fdo=2Ec b/src/xenvkbd/fdo=2Ec
index 95ed60d=2E=2E133a62b 100644
--- a/src/xenvkbd/fdo=2Ec
+++ b/src/xenvkbd/fdo=2Ec
@@ -370,11 +370,11 @@ FdoTranslateBusAddress(
=20
 ULONG
 FdoSetBusData(
-    _In_ PXENVKBD_FDO       Fdo,
-    _In_ ULONG              DataType,
-    _In_ PVOID              Buffer,
-    _In_ ULONG              Offset,
-    _In_ ULONG              Length
+    _In_ PXENVKBD_FDO                      Fdo,
+    _In_ ULONG                             DataType,
+    _Inout_updates_bytes_(Length) PVOID    Buffer,
+    _In_ ULONG                             Offset,
+    _In_ ULONG                             Length
     )
 {
     PBUS_INTERFACE_STANDARD BusInterface;
@@ -391,11 +391,11 @@ FdoSetBusData(
=20
 ULONG
 FdoGetBusData(
-    _In_ PXENVKBD_FDO       Fdo,
-    _In_ ULONG              DataType,
-    _In_ PVOID              Buffer,
-    _In_ ULONG              Offset,
-    _In_ ULONG              Length
+    _In_ PXENVKBD_FDO                      Fdo,
+    _In_ ULONG                             DataType,
+    _Inout_updates_bytes_(Length) PVOID    Buffer,
+    _In_ ULONG                             Offset,
+    _In_ ULONG                             Length
     )
 {
     PBUS_INTERFACE_STANDARD BusInterface;
diff --git a/src/xenvkbd/fdo=2Eh b/src/xenvkbd/fdo=2Eh
index d23cef6=2E=2E3cd0b2d 100644
--- a/src/xenvkbd/fdo=2Eh
+++ b/src/xenvkbd/fdo=2Eh
@@ -100,20 +100,20 @@ FdoTranslateBusAddress(
=20
 extern ULONG
 FdoSetBusData(
-    _In_ PXENVKBD_FDO   Fdo,
-    _In_ ULONG          DataType,
-    _In_ PVOID          Buffer,
-    _In_ ULONG          Offset,
-    _In_ ULONG          Length
+    _In_ PXENVKBD_FDO                      Fdo,
+    _In_ ULONG                             DataType,
+    _Inout_updates_bytes_(Length) PVOID    Buffer,
+    _In_ ULONG                             Offset,
+    _In_ ULONG                             Length
     );
=20
 extern ULONG
 FdoGetBusData(
-    _In_ PXENVKBD_FDO   Fdo,
-    _In_ ULONG          DataType,
-    _In_ PVOID          Buffer,
-    _In_ ULONG          Offset,
-    _In_ ULONG          Length
+    _In_ PXENVKBD_FDO                      Fdo,
+    _In_ ULONG                             DataType,
+    _Inout_updates_bytes_(Length) PVOID    Buffer,
+    _In_ ULONG                             Offset,
+    _In_ ULONG                             Length
     );
=20
 extern NTSTATUS
diff --git a/src/xenvkbd/hid=2Ec b/src/xenvkbd/hid=2Ec
index 3e1bd53=2E=2E97e2f96 100644
--- a/src/xenvkbd/hid=2Ec
+++ b/src/xenvkbd/hid=2Ec
@@ -65,11 +65,11 @@ struct _XENVKBD_HID_CONTEXT {
=20
 static FORCEINLINE NTSTATUS
 HidCopyBuffer(
-    _Out_writes_bytes_opt_(Length) PVOID    Buffer,
-    _In_ ULONG                              Length,
-    _In_ const VOID                         *Source,
-    _In_ ULONG                              SourceLength,
-    _Out_ PULONG                            Returned
+    _Out_writes_bytes_opt_(Length) PVOID         Buffer,
+    _In_ ULONG                                   Length,
+    _In_reads_bytes_(SourceLength) const VOID    *Source,
+    _In_ ULONG                                   SourceLength,
+    _Out_ PULONG                                 Returned
     )
 {
     if (Buffer =3D=3D NULL)
@@ -674,9 +674,9 @@ HidTeardown(
=20
 BOOLEAN
 HidSendReadReport(
-    _In_ PXENVKBD_HID_CONTEXT   Context,
-    _In_ PVOID                  Buffer,
-    _In_ ULONG                  Length
+    _In_ PXENVKBD_HID_CONTEXT         Context,
+    _In_reads_bytes_(Length) PVOID    Buffer,
+    _In_ ULONG                        Length
     )
 {
     if (!Context->Enabled)
diff --git a/src/xenvkbd/hid=2Eh b/src/xenvkbd/hid=2Eh
index f2b4089=2E=2Ecc7dfd6 100644
--- a/src/xenvkbd/hid=2Eh
+++ b/src/xenvkbd/hid=2Eh
@@ -65,9 +65,9 @@ HidTeardown(
=20
 extern BOOLEAN
 HidSendReadReport(
-    _In_ PXENVKBD_HID_CONTEXT   Context,
-    _In_ PVOID                  Buffer,
-    _In_ ULONG                  Length
+    _In_ PXENVKBD_HID_CONTEXT         Context,
+    _In_reads_bytes_(Length) PVOID    Buffer,
+    _In_ ULONG                        Length
     );
=20
 #endif  // _XENVKBD_VKBD_H
diff --git a/src/xenvkbd/pdo=2Ec b/src/xenvkbd/pdo=2Ec
index ff2e0be=2E=2E60a5ae5 100644
--- a/src/xenvkbd/pdo=2Ec
+++ b/src/xenvkbd/pdo=2Ec
@@ -487,11 +487,11 @@ PdoTranslateBusAddress(
=20
 ULONG
 PdoSetBusData(
-    _In_ PXENVKBD_PDO   Pdo,
-    _In_ ULONG          DataType,
-    _In_ PVOID          Buffer,
-    _In_ ULONG          Offset,
-    _In_ ULONG          Length
+    _In_ PXENVKBD_PDO                      Pdo,
+    _In_ ULONG                             DataType,
+    _Inout_updates_bytes_(Length) PVOID    Buffer,
+    _In_ ULONG                             Offset,
+    _In_ ULONG                             Length
     )
 {
     Trace("<=3D=3D=3D>\n");
@@ -505,11 +505,11 @@ PdoSetBusData(
=20
 ULONG
 PdoGetBusData(
-    _In_ PXENVKBD_PDO   Pdo,
-    _In_ ULONG          DataType,
-    _In_ PVOID          Buffer,
-    _In_ ULONG          Offset,
-    _In_ ULONG          Length
+    _In_ PXENVKBD_PDO                      Pdo,
+    _In_ ULONG                             DataType,
+    _Inout_updates_bytes_(Length) PVOID    Buffer,
+    _In_ ULONG                             Offset,
+    _In_ ULONG                             Length
     )
 {
     Trace("<=3D=3D=3D>\n");
diff --git a/src/xenvkbd/pdo=2Eh b/src/xenvkbd/pdo=2Eh
index beb88bc=2E=2E28f396c 100644
--- a/src/xenvkbd/pdo=2Eh
+++ b/src/xenvkbd/pdo=2Eh
@@ -104,20 +104,20 @@ PdoTranslateBusAddress(
=20
 extern ULONG
 PdoSetBusData(
-    _In_ PXENVKBD_PDO   Pdo,
-    _In_ ULONG          DataType,
-    _In_ PVOID          Buffer,
-    _In_ ULONG          Offset,
-    _In_ ULONG          Length
+    _In_ PXENVKBD_PDO                      Pdo,
+    _In_ ULONG                             DataType,
+    _Inout_updates_bytes_(Length) PVOID    Buffer,
+    _In_ ULONG                             Offset,
+    _In_ ULONG                             Length
     );
=20
 extern ULONG
 PdoGetBusData(
-    _In_ PXENVKBD_PDO   Pdo,
-    _In_ ULONG          DataType,
-    _In_ PVOID          Buffer,
-    _In_ ULONG          Offset,
-    _In_ ULONG          Length
+    _In_ PXENVKBD_PDO                      Pdo,
+    _In_ ULONG                             DataType,
+    _Inout_updates_bytes_(Length) PVOID    Buffer,
+    _In_ ULONG                             Offset,
+    _In_ ULONG                             Length
     );
=20
 extern NTSTATUS
diff --git a/src/xenvkbd/registry=2Ec b/src/xenvkbd/registry=2Ec
index c488fc6=2E=2E52ba33b 100644
--- a/src/xenvkbd/registry=2Ec
+++ b/src/xenvkbd/registry=2Ec
@@ -1240,10 +1240,10 @@ fail1:
=20
 NTSTATUS
 RegistryUpdateBinaryValue(
-    _In_ HANDLE                     Key,
-    _In_ PSTR                       Name,
-    _In_ PVOID                      Buffer,
-    _In_ ULONG                      Length
+    _In_ HANDLE                       Key,
+    _In_ PSTR                         Name,
+    _In_reads_bytes_(Length) PVOID    Buffer,
+    _In_ ULONG                        Length
     )
 {
     ANSI_STRING                     Ansi;
diff --git a/src/xenvkbd/registry=2Eh b/src/xenvkbd/registry=2Eh
index ae3eec1=2E=2E2451e03 100644
--- a/src/xenvkbd/registry=2Eh
+++ b/src/xenvkbd/registry=2Eh
@@ -160,10 +160,10 @@ RegistryQueryBinaryValue(
=20
 extern NTSTATUS
 RegistryUpdateBinaryValue(
-    _In_ HANDLE Key,
-    _In_ PSTR   Name,
-    _In_ PVOID  Buffer,
-    _In_ ULONG  Length
+    _In_ HANDLE                       Key,
+    _In_ PSTR                         Name,
+    _In_reads_bytes_(Length) PVOID    Buffer,
+    _In_ ULONG                        Length
     );
=20
 extern NTSTATUS
diff --git a/src/xenvkbd/ring=2Ec b/src/xenvkbd/ring=2Ec
index a4f5769=2E=2E9a79fc9 100644
--- a/src/xenvkbd/ring=2Ec
+++ b/src/xenvkbd/ring=2Ec
@@ -109,11 +109,11 @@ __RingFree(
=20
 static FORCEINLINE NTSTATUS
 __RingCopyBuffer(
-    _Out_writes_bytes_opt_(Length) PVOID    Buffer,
-    _In_ ULONG                              Length,
-    _In_ const VOID                         *Source,
-    _In_ ULONG                              SourceLength,
-    _Out_ PULONG                            Returned
+    _Out_writes_bytes_opt_(Length) PVOID         Buffer,
+    _In_ ULONG                                   Length,
+    _In_reads_bytes_(SourceLength) const VOID    *Source,
+    _In_ ULONG                                   SourceLength,
+    _Out_ PULONG                                 Returned
     )
 {
     if (Buffer =3D=3D NULL)
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.34e.406c4edc32169298.1a1544ce44a.3decf1130ef311a=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 19 13:14:55 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 19 Oct 2026 13:14:55 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1454347.1667913 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xInCZ-0007le-51; Mon, 19 Oct 2026 13:14:55 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1454347.1667913; Mon, 19 Oct 2026 13:14:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xInCY-0007km-Lc; Mon, 19 Oct 2026 13:14:54 +0000
Received: by outflank-mailman (input) for mailman id 1454347;
 Mon, 19 Oct 2026 13:14:53 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1544ce8a80008425@swg.vates.tech>)
 id 1xInCX-0007fb-Av
 for win-pv-devel@lists.xenproject.org; Mon, 19 Oct 2026 13:14:53 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xInCW-00ESJo-O2
 for win-pv-devel@lists.xenproject.org; Mon, 19 Oct 2026 15:14:52 +0200
Received: from [10.42.69.1] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1544ce8a80008425@swg.vates.tech>)
 id 6ad617c0-8faa-0a2a0a5109dd-0a2a45019e18-32
 for <win-pv-devel@lists.xenproject.org>; Mon, 19 Oct 2026 15:14:52 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1544ce8a80008425@swg.vates.tech>)
 id 6ad617ca-5984-0a2a45010019-b9ff1c229f95-5
 for <win-pv-devel@lists.xenproject.org>; Mon, 19 Oct 2026 15:14:52 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1544ce8a80008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 19 Oct 2026 13:14:48 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 5CEDA82E7A;
 Mon, 19 Oct 2026 15:14:48 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=fuMCVx7Aa8jvNgAkO6QHo6R719T/TJpKjHoc6d60Yo8=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=Udbpp4NUhkzU1aaOSUomUIHUl92L09erz0C4o3UHkq/xPXmyoQ4NpJMRdVR3hJSI8QPZf3X4t
 X97OGgnSxA+N+Wglh7zt+3WUWqKPWAo1NnoS+U2vmpYvShXQCAqvW/zxrhVxYUN+cDWZF1kR21r
 Ky1gpKWcvMDbH6rtR4hc5tZOf2iF34BxDp/FqIzMXFP2iC9HGb7UQS7MzIgq+ZtnDcXJzpZzj0D
 981opRvJUQlxWTrozkn8FB02CuEG5f3tP5oQQGUvCsj78YFvRXGBPcxSKV15xUDzM0Xkuyrkl92
 g73bvebT5PLr9447mwLpK9hAyP4p5jqiPkq9m5GCGQAA==
X-Zone-Loop: 15beb87be4b7d933b459bdac745fe7d483db5849af35
x-campaign-type: default
x-transaction-id: 0a1db67b-f93b-4a65-9090-a7835bc9ac96
x-swg-uid: 01-47574ae3-af7b-4258-bcbc-c96d0023e66b
X-Mailer: Sweego
Message-ID:
 <1792415688.8631fc262581453bbf619ec5b2062170.1a1544ce8a80008425@vates.tech>
x-swg-bid: 1792415688.8631fc262581453bbf619ec5b2062170.1a1544ce8a80008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 11/11] xenvkbd: Add an ASSERT on the array bound in SetArray
Date: Mon, 19 Oct 2026 15:14:37 +0200
In-Reply-To: <1792415573.8631fc262581453bbf619ec5b2062170.1a1544b27410008425@vates.tech>
References: <1792415573.8631fc262581453bbf619ec5b2062170.1a1544b27410008425@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.351.f77dab0eb9abad11.1a1544ce715.2f1c0161be630a95=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792415688469
X-purgate-ID: tlsNG-d62444/1792415692-1D47D757-92933779/0/0
X-purgate-type: clean
X-purgate-size: 1362

---=Part.351.f77dab0eb9abad11.1a1544ce715.2f1c0161be630a95=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Code analysis warns about the bounds of Array in the loop that shifts
the remaining keys down, but Idx + 1 always stays below Size there,
since the loop runs while Idx < Size - 1=2E Add an ASSERT stating it,
so that the analyzer knows the access is in bounds=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xenvkbd/ring=2Ec | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/xenvkbd/ring=2Ec b/src/xenvkbd/ring=2Ec
index 7779b83=2E=2E48b65fd 100644
--- a/src/xenvkbd/ring=2Ec
+++ b/src/xenvkbd/ring=2Ec
@@ -170,8 +170,10 @@ SetArray(
                 break;
             if (Array[Idx] !=3D Value)
                 continue;
-            for (; Idx < Size - 1; ++Idx)
+            for (; Idx < Size - 1; ++Idx) {
+                ASSERT3U(Idx + 1, <, Size);
                 Array[Idx] =3D Array[Idx + 1];
+            }
             Array[Size - 1] =3D 0;
             break;
         }
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.351.f77dab0eb9abad11.1a1544ce715.2f1c0161be630a95=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 19 13:14:55 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 19 Oct 2026 13:14:55 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1454346.1667914 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xInCZ-0007ku-4S; Mon, 19 Oct 2026 13:14:55 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1454346.1667914; Mon, 19 Oct 2026 13:14:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xInCY-0007kF-JM; Mon, 19 Oct 2026 13:14:54 +0000
Received: by outflank-mailman (input) for mailman id 1454346;
 Mon, 19 Oct 2026 13:14:53 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1544ce7bc0008425@swg.vates.tech>)
 id 1xInCX-0007fS-3i
 for win-pv-devel@lists.xenproject.org; Mon, 19 Oct 2026 13:14:53 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xInCW-001agb-Gk
 for win-pv-devel@lists.xenproject.org; Mon, 19 Oct 2026 15:14:52 +0200
Received: from [10.42.69.5] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1544ce7bc0008425@swg.vates.tech>)
 id 6ad617ca-2eae-0a2a0a5409dd-0a2a4505c570-16
 for <win-pv-devel@lists.xenproject.org>; Mon, 19 Oct 2026 15:14:52 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-c201ff.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1544ce7bc0008425@swg.vates.tech>)
 id 6ad617cb-4cb1-0a2a45050019-b9ff1c1293b5-4
 for <win-pv-devel@lists.xenproject.org>; Mon, 19 Oct 2026 15:14:52 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1544ce7bc0008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 19 Oct 2026 13:14:48 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 2303781FEC;
 Mon, 19 Oct 2026 15:14:48 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=R3vT5aIa4ZmjN8EVh8NvLD79q29ia2OA1yySwAmKIho=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=bXwGwUEMO8f7KPGJTXDaaQ7GZbNXNLvBbf3uM4IXnDzBzHgiETY0jvqwvdw1w7xxzhpVNR+3Y
 qc70JxVn2+qZEvqy/WHWP+qQMrduWHbr77nY/g1ngcabWHNmaqMfFq5uu7Fu/UpKwJLjLdjT6zd
 0OK/iPaufVJjBEx/tmBuVVYSR6j8TWT9P3ExVQ0pNycrRw5iqBt3sXwm8j4k8uNd46rgx5+Btdo
 XrBlnyVr2T2MuSmJpd5uPnJ+lINxoVDj8I7p6ivaXzeCypuIT9zzj1q+I9JXcYCa0D0pWP+wjvh
 H6/vKjnRtdVFvF9H6D7gIE3ujabPmX+iXpzac7Au/ocQ==
X-Zone-Loop: 293b30187c35c484bb4bfff658572bab2197d906233c
x-campaign-type: default
x-transaction-id: e2fefd60-4e71-4adf-8cc0-ff1fa0037225
x-swg-uid: 01-62847892-ad5d-4423-8edc-fa8275d819b1
X-Mailer: Sweego
Message-ID:
 <1792415688.8631fc262581453bbf619ec5b2062170.1a1544ce7bc0008425@vates.tech>
x-swg-bid: 1792415688.8631fc262581453bbf619ec5b2062170.1a1544ce7bc0008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 10/11] driver: fix inconsistent annotation
Date: Mon, 19 Oct 2026 15:14:36 +0200
In-Reply-To: <1792415573.8631fc262581453bbf619ec5b2062170.1a1544b27410008425@vates.tech>
References: <1792415573.8631fc262581453bbf619ec5b2062170.1a1544b27410008425@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.350.1c37ef09bd9774d1.1a1544ce624.7c4593f9c2aa738f=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792415688228
X-purgate-ID: tlsNG-c201ff/1792415692-F5AAF2A1-691CD1CD/0/0
X-purgate-type: clean
X-purgate-size: 1325

---=Part.350.1c37ef09bd9774d1.1a1544ce624.7c4593f9c2aa738f=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Annotate Dispatch() with _Use_decl_annotation to make it consistent with
DRIVER_DISPATCH typedef in wdm=2Eh=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xenvkbd/driver=2Ec | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/src/xenvkbd/driver=2Ec b/src/xenvkbd/driver=2Ec
index b7aee4b=2E=2Ec35f9c6 100644
--- a/src/xenvkbd/driver=2Ec
+++ b/src/xenvkbd/driver=2Ec
@@ -275,14 +275,15 @@ fail1:
=20
 DRIVER_DISPATCH Dispatch;
=20
+_Use_decl_annotations_
 NTSTATUS=20
 Dispatch(
-    _In_ PDEVICE_OBJECT DeviceObject,
-    _In_ PIRP           Irp
+    PDEVICE_OBJECT DeviceObject,
+    PIRP           Irp
     )
 {
-    PXENVKBD_DX         Dx;
-    NTSTATUS            status;
+    PXENVKBD_DX    Dx;
+    NTSTATUS       status;
=20
     Dx =3D (PXENVKBD_DX)DeviceObject->DeviceExtension;
     ASSERT3P(Dx->DeviceObject, =3D=3D, DeviceObject);
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.350.1c37ef09bd9774d1.1a1544ce624.7c4593f9c2aa738f=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 19 13:14:55 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 19 Oct 2026 13:14:55 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1454348.1667915 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xInCZ-0007pP-75; Mon, 19 Oct 2026 13:14:55 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1454348.1667915; Mon, 19 Oct 2026 13:14:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xInCZ-0007oz-3M; Mon, 19 Oct 2026 13:14:55 +0000
Received: by outflank-mailman (input) for mailman id 1454348;
 Mon, 19 Oct 2026 13:14:53 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1544ce6d00008425@swg.vates.tech>)
 id 1xInCX-0007ha-N2
 for win-pv-devel@lists.xenproject.org; Mon, 19 Oct 2026 13:14:53 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xInCX-00ESJo-3i
 for win-pv-devel@lists.xenproject.org; Mon, 19 Oct 2026 15:14:53 +0200
Received: from [10.42.69.8] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1544ce6d00008425@swg.vates.tech>)
 id 6ad617cb-8faa-0a2a0a5109dd-0a2a45089f6e-8
 for <win-pv-devel@lists.xenproject.org>; Mon, 19 Oct 2026 15:14:53 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-c1860d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1544ce6d00008425@swg.vates.tech>)
 id 6ad617cc-f659-0a2a45080019-b9ff1c129bf5-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 19 Oct 2026 15:14:52 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1544ce6d00008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 19 Oct 2026 13:14:48 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id DCC8782E7E;
 Mon, 19 Oct 2026 15:14:47 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=f7zuFUPCGhMLu/Gr2oCMk8ax/DcpcrPaF52W1Oo10rM=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=SU406LES0fqkdSyKN4zVoawhRC1t9XxUt3o8jV8VPU4NqQi1dnRqqksX9gOIguK0MlmnjWPUL
 Ud6MPn2D9/ePvVgTG0Mhi4q0tc2B1bmc5R4Ig6JUTgWgLdZ6h+oo8xD6rRQr2axZaGIh/BVIv44
 T/b6VAQiTUG+jEYjYHc9La3eJM1EoLBvbsix+/9PIz1cP0u368Oxa1tqsTDZyFb+mn37iyJWydB
 er0dpbkAxCtXfu7C+qiHdNyu4H18mqRljLP1KD5OmxfD2xaAmcEk/X5MMTOR2ZJALQ9uNLMZXoX
 iNoiCuqWidItNzYh6nZQKUQimpNw6VX8qGGqAU83o3tw==
X-Zone-Loop: 6484abdfdc780fe9c548a4c2143f367d01b77f1e95ae
x-campaign-type: default
x-transaction-id: ba123dce-12b0-40e0-891f-268a65c60e07
x-swg-uid: 01-5410aad4-9ae6-40e9-9c4e-36a9139a90c6
X-Mailer: Sweego
Message-ID:
 <1792415688.8631fc262581453bbf619ec5b2062170.1a1544ce6d00008425@vates.tech>
x-swg-bid: 1792415688.8631fc262581453bbf619ec5b2062170.1a1544ce6d00008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 09/11] xenvkbd: Fix annotations reported by code analysis
Date: Mon, 19 Oct 2026 15:14:35 +0200
In-Reply-To: <1792415573.8631fc262581453bbf619ec5b2062170.1a1544b27410008425@vates.tech>
References: <1792415573.8631fc262581453bbf619ec5b2062170.1a1544b27410008425@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.34f.4822b4e3f496a6ab.1a1544ce537.cf31a47783127fcf=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792415687991
X-purgate-ID: tlsNG-c1860d/1792415692-D775B87B-4D2BC53E/0/0
X-purgate-type: clean
X-purgate-size: 17414

---=Part.34f.4822b4e3f496a6ab.1a1544ce537.cf31a47783127fcf=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

* Mark registry root handles and cleared driver globals as optional
since NULL is valid there
* Annotate the enumerated device list as _Inout_opt_, and
describe the interface filled by IRP_MN_QUERY_INTERFACE as an
_Inout_ buffer=2E
* Fix spacings

No functional change=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xenvkbd/assert=2Eh   |  2 +-
 src/xenvkbd/bus=2Ec      | 24 +++++++--------
 src/xenvkbd/driver=2Ec   |  4 +--
 src/xenvkbd/fdo=2Ec      | 66 +++++++++++++++++++++---------------------
 src/xenvkbd/fdo=2Eh      | 20 ++++++-------
 src/xenvkbd/hid=2Ec      | 16 +++++-----
 src/xenvkbd/hid=2Eh      |  6 ++--
 src/xenvkbd/pdo=2Ec      | 20 ++++++-------
 src/xenvkbd/pdo=2Eh      | 20 ++++++-------
 src/xenvkbd/registry=2Ec | 12 ++++----
 src/xenvkbd/registry=2Eh | 14 ++++-----
 src/xenvkbd/ring=2Ec     | 12 ++++----
 12 files changed, 108 insertions(+), 108 deletions(-)

diff --git a/src/xenvkbd/assert=2Eh b/src/xenvkbd/assert=2Eh
index 6540eb7=2E=2Ec5fab23 100644
--- a/src/xenvkbd/assert=2Eh
+++ b/src/xenvkbd/assert=2Eh
@@ -160,7 +160,7 @@ _IsZeroMemory(
     _In_ ULONG                      Length
     )
 {
-    ULONG           Offset;
+    ULONG                           Offset;
=20
     Offset =3D 0;
     while (Offset < Length) {
diff --git a/src/xenvkbd/bus=2Ec b/src/xenvkbd/bus=2Ec
index 52dd2ed=2E=2Eeeac1d6 100644
--- a/src/xenvkbd/bus=2Ec
+++ b/src/xenvkbd/bus=2Ec
@@ -126,14 +126,14 @@ static
 _Function_class_(GET_SET_DEVICE_DATA)
 ULONG
 BusSetData(
-    _In_ PVOID                             _Context,
-    _In_ ULONG                             DataType,
-    _Inout_updates_bytes_(Length) PVOID    Buffer,
-    _In_ ULONG                             Offset,
-    _In_ ULONG                             Length
+    _In_ PVOID                          _Context,
+    _In_ ULONG                          DataType,
+    _Inout_updates_bytes_(Length) PVOID Buffer,
+    _In_ ULONG                          Offset,
+    _In_ ULONG                          Length
     )
 {
-    PXENVKBD_BUS_CONTEXT    Context =3D _Context;
+    PXENVKBD_BUS_CONTEXT                Context =3D _Context;
=20
     return PdoSetBusData(Context->Pdo,
                          DataType,
@@ -146,14 +146,14 @@ static
 _Function_class_(GET_SET_DEVICE_DATA)
 ULONG
 BusGetData(
-    _In_ PVOID                             _Context,
-    _In_ ULONG                             DataType,
-    _Inout_updates_bytes_(Length) PVOID    Buffer,
-    _In_ ULONG                             Offset,
-    _In_ ULONG                             Length
+    _In_ PVOID                          _Context,
+    _In_ ULONG                          DataType,
+    _Inout_updates_bytes_(Length) PVOID Buffer,
+    _In_ ULONG                          Offset,
+    _In_ ULONG                          Length
     )
 {
-    PXENVKBD_BUS_CONTEXT    Context =3D _Context;
+    PXENVKBD_BUS_CONTEXT                Context =3D _Context;
=20
     return PdoGetBusData(Context->Pdo,
                          DataType,
diff --git a/src/xenvkbd/driver=2Ec b/src/xenvkbd/driver=2Ec
index 2c1adda=2E=2Eb7aee4b 100644
--- a/src/xenvkbd/driver=2Ec
+++ b/src/xenvkbd/driver=2Ec
@@ -71,7 +71,7 @@ DriverSafeMode(
=20
 static FORCEINLINE VOID
 __DriverSetDriverObject(
-    _In_ PDRIVER_OBJECT DriverObject
+    _In_opt_ PDRIVER_OBJECT DriverObject
     )
 {
     Driver=2EDriverObject =3D DriverObject;
@@ -95,7 +95,7 @@ DriverGetDriverObject(
=20
 static FORCEINLINE VOID
 __DriverSetParametersKey(
-    _In_ HANDLE Key
+    _In_opt_ HANDLE Key
     )
 {
     Driver=2EParametersKey =3D Key;
diff --git a/src/xenvkbd/fdo=2Ec b/src/xenvkbd/fdo=2Ec
index 133a62b=2E=2E958e3dd 100644
--- a/src/xenvkbd/fdo=2Ec
+++ b/src/xenvkbd/fdo=2Ec
@@ -370,14 +370,14 @@ FdoTranslateBusAddress(
=20
 ULONG
 FdoSetBusData(
-    _In_ PXENVKBD_FDO                      Fdo,
-    _In_ ULONG                             DataType,
-    _Inout_updates_bytes_(Length) PVOID    Buffer,
-    _In_ ULONG                             Offset,
-    _In_ ULONG                             Length
+    _In_ PXENVKBD_FDO                   Fdo,
+    _In_ ULONG                          DataType,
+    _Inout_updates_bytes_(Length) PVOID Buffer,
+    _In_ ULONG                          Offset,
+    _In_ ULONG                          Length
     )
 {
-    PBUS_INTERFACE_STANDARD BusInterface;
+    PBUS_INTERFACE_STANDARD             BusInterface;
=20
     BusInterface =3D Fdo->LowerBusInterface;
     ASSERT(BusInterface !=3D NULL);
@@ -391,14 +391,14 @@ FdoSetBusData(
=20
 ULONG
 FdoGetBusData(
-    _In_ PXENVKBD_FDO                      Fdo,
-    _In_ ULONG                             DataType,
-    _Inout_updates_bytes_(Length) PVOID    Buffer,
-    _In_ ULONG                             Offset,
-    _In_ ULONG                             Length
+    _In_ PXENVKBD_FDO                   Fdo,
+    _In_ ULONG                          DataType,
+    _Inout_updates_bytes_(Length) PVOID Buffer,
+    _In_ ULONG                          Offset,
+    _In_ ULONG                          Length
     )
 {
-    PBUS_INTERFACE_STANDARD BusInterface;
+    PBUS_INTERFACE_STANDARD             BusInterface;
=20
     BusInterface =3D Fdo->LowerBusInterface;
     ASSERT(BusInterface !=3D NULL);
@@ -715,16 +715,16 @@ FdoReleaseMutex(
=20
 static FORCEINLINE BOOLEAN
 __FdoEnumerate(
-    _In_ PXENVKBD_FDO   Fdo,
-    _In_ PANSI_STRING   Devices
+    _In_ PXENVKBD_FDO           Fdo,
+    _Inout_opt_ PANSI_STRING    Devices
     )
 {
-    BOOLEAN             NeedInvalidate;
-    HANDLE              ParametersKey;
-    ULONG               Enumerate;
-    PLIST_ENTRY         ListEntry;
-    ULONG               Index;
-    NTSTATUS            status;
+    BOOLEAN                     NeedInvalidate;
+    HANDLE                      ParametersKey;
+    ULONG                       Enumerate;
+    PLIST_ENTRY                 ListEntry;
+    ULONG                       Index;
+    NTSTATUS                    status;
=20
     Trace("=3D=3D=3D=3D>\n");
=20
@@ -2902,19 +2902,19 @@ FdoDispatch(
 _IRQL_requires_(PASSIVE_LEVEL)
 static NTSTATUS
 FdoQueryInterface(
-    _In_ PXENVKBD_FDO   Fdo,
-    _In_ const GUID     *Guid,
-    _In_ ULONG          Version,
-    _Out_ PINTERFACE    Interface,
-    _In_ ULONG          Size,
-    _In_ BOOLEAN        Optional
-    )
-{
-    KEVENT              Event;
-    IO_STATUS_BLOCK     StatusBlock;
-    PIRP                Irp;
-    PIO_STACK_LOCATION  StackLocation;
-    NTSTATUS            status;
+    _In_ PXENVKBD_FDO                       Fdo,
+    _In_ const GUID                         *Guid,
+    _In_ ULONG                              Version,
+    _Inout_updates_bytes_(Size) PINTERFACE  Interface,
+    _In_ ULONG                              Size,
+    _In_ BOOLEAN                            Optional
+    )
+{
+    KEVENT                                  Event;
+    IO_STATUS_BLOCK                         StatusBlock;
+    PIRP                                    Irp;
+    PIO_STACK_LOCATION                      StackLocation;
+    NTSTATUS                                status;
=20
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, PASSIVE_LEVEL);
=20
diff --git a/src/xenvkbd/fdo=2Eh b/src/xenvkbd/fdo=2Eh
index 3cd0b2d=2E=2Ed0590da 100644
--- a/src/xenvkbd/fdo=2Eh
+++ b/src/xenvkbd/fdo=2Eh
@@ -100,20 +100,20 @@ FdoTranslateBusAddress(
=20
 extern ULONG
 FdoSetBusData(
-    _In_ PXENVKBD_FDO                      Fdo,
-    _In_ ULONG                             DataType,
-    _Inout_updates_bytes_(Length) PVOID    Buffer,
-    _In_ ULONG                             Offset,
-    _In_ ULONG                             Length
+    _In_ PXENVKBD_FDO                   Fdo,
+    _In_ ULONG                          DataType,
+    _Inout_updates_bytes_(Length) PVOID Buffer,
+    _In_ ULONG                          Offset,
+    _In_ ULONG                          Length
     );
=20
 extern ULONG
 FdoGetBusData(
-    _In_ PXENVKBD_FDO                      Fdo,
-    _In_ ULONG                             DataType,
-    _Inout_updates_bytes_(Length) PVOID    Buffer,
-    _In_ ULONG                             Offset,
-    _In_ ULONG                             Length
+    _In_ PXENVKBD_FDO                   Fdo,
+    _In_ ULONG                          DataType,
+    _Inout_updates_bytes_(Length) PVOID Buffer,
+    _In_ ULONG                          Offset,
+    _In_ ULONG                          Length
     );
=20
 extern NTSTATUS
diff --git a/src/xenvkbd/hid=2Ec b/src/xenvkbd/hid=2Ec
index 97e2f96=2E=2E92912ef 100644
--- a/src/xenvkbd/hid=2Ec
+++ b/src/xenvkbd/hid=2Ec
@@ -65,11 +65,11 @@ struct _XENVKBD_HID_CONTEXT {
=20
 static FORCEINLINE NTSTATUS
 HidCopyBuffer(
-    _Out_writes_bytes_opt_(Length) PVOID         Buffer,
-    _In_ ULONG                                   Length,
-    _In_reads_bytes_(SourceLength) const VOID    *Source,
-    _In_ ULONG                                   SourceLength,
-    _Out_ PULONG                                 Returned
+    _Out_writes_bytes_opt_(Length) PVOID        Buffer,
+    _In_ ULONG                                  Length,
+    _In_reads_bytes_(SourceLength) const VOID   *Source,
+    _In_ ULONG                                  SourceLength,
+    _Out_ PULONG                                Returned
     )
 {
     if (Buffer =3D=3D NULL)
@@ -674,9 +674,9 @@ HidTeardown(
=20
 BOOLEAN
 HidSendReadReport(
-    _In_ PXENVKBD_HID_CONTEXT         Context,
-    _In_reads_bytes_(Length) PVOID    Buffer,
-    _In_ ULONG                        Length
+    _In_ PXENVKBD_HID_CONTEXT       Context,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Length
     )
 {
     if (!Context->Enabled)
diff --git a/src/xenvkbd/hid=2Eh b/src/xenvkbd/hid=2Eh
index cc7dfd6=2E=2E3c626f3 100644
--- a/src/xenvkbd/hid=2Eh
+++ b/src/xenvkbd/hid=2Eh
@@ -65,9 +65,9 @@ HidTeardown(
=20
 extern BOOLEAN
 HidSendReadReport(
-    _In_ PXENVKBD_HID_CONTEXT         Context,
-    _In_reads_bytes_(Length) PVOID    Buffer,
-    _In_ ULONG                        Length
+    _In_ PXENVKBD_HID_CONTEXT       Context,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Length
     );
=20
 #endif  // _XENVKBD_VKBD_H
diff --git a/src/xenvkbd/pdo=2Ec b/src/xenvkbd/pdo=2Ec
index 60a5ae5=2E=2E30e1a49 100644
--- a/src/xenvkbd/pdo=2Ec
+++ b/src/xenvkbd/pdo=2Ec
@@ -487,11 +487,11 @@ PdoTranslateBusAddress(
=20
 ULONG
 PdoSetBusData(
-    _In_ PXENVKBD_PDO                      Pdo,
-    _In_ ULONG                             DataType,
-    _Inout_updates_bytes_(Length) PVOID    Buffer,
-    _In_ ULONG                             Offset,
-    _In_ ULONG                             Length
+    _In_ PXENVKBD_PDO                   Pdo,
+    _In_ ULONG                          DataType,
+    _Inout_updates_bytes_(Length) PVOID Buffer,
+    _In_ ULONG                          Offset,
+    _In_ ULONG                          Length
     )
 {
     Trace("<=3D=3D=3D>\n");
@@ -505,11 +505,11 @@ PdoSetBusData(
=20
 ULONG
 PdoGetBusData(
-    _In_ PXENVKBD_PDO                      Pdo,
-    _In_ ULONG                             DataType,
-    _Inout_updates_bytes_(Length) PVOID    Buffer,
-    _In_ ULONG                             Offset,
-    _In_ ULONG                             Length
+    _In_ PXENVKBD_PDO                   Pdo,
+    _In_ ULONG                          DataType,
+    _Inout_updates_bytes_(Length) PVOID Buffer,
+    _In_ ULONG                          Offset,
+    _In_ ULONG                          Length
     )
 {
     Trace("<=3D=3D=3D>\n");
diff --git a/src/xenvkbd/pdo=2Eh b/src/xenvkbd/pdo=2Eh
index 28f396c=2E=2E10a9329 100644
--- a/src/xenvkbd/pdo=2Eh
+++ b/src/xenvkbd/pdo=2Eh
@@ -104,20 +104,20 @@ PdoTranslateBusAddress(
=20
 extern ULONG
 PdoSetBusData(
-    _In_ PXENVKBD_PDO                      Pdo,
-    _In_ ULONG                             DataType,
-    _Inout_updates_bytes_(Length) PVOID    Buffer,
-    _In_ ULONG                             Offset,
-    _In_ ULONG                             Length
+    _In_ PXENVKBD_PDO                   Pdo,
+    _In_ ULONG                          DataType,
+    _Inout_updates_bytes_(Length) PVOID Buffer,
+    _In_ ULONG                          Offset,
+    _In_ ULONG                          Length
     );
=20
 extern ULONG
 PdoGetBusData(
-    _In_ PXENVKBD_PDO                      Pdo,
-    _In_ ULONG                             DataType,
-    _Inout_updates_bytes_(Length) PVOID    Buffer,
-    _In_ ULONG                             Offset,
-    _In_ ULONG                             Length
+    _In_ PXENVKBD_PDO                   Pdo,
+    _In_ ULONG                          DataType,
+    _Inout_updates_bytes_(Length) PVOID Buffer,
+    _In_ ULONG                          Offset,
+    _In_ ULONG                          Length
     );
=20
 extern NTSTATUS
diff --git a/src/xenvkbd/registry=2Ec b/src/xenvkbd/registry=2Ec
index 52ba33b=2E=2E5cc6b99 100644
--- a/src/xenvkbd/registry=2Ec
+++ b/src/xenvkbd/registry=2Ec
@@ -146,7 +146,7 @@ fail1:
=20
 NTSTATUS
 RegistryOpenKey(
-    _In_ HANDLE             Parent,
+    _In_opt_ HANDLE         Parent,
     _In_ PUNICODE_STRING    Path,
     _In_ ACCESS_MASK        DesiredAccess,
     _Out_ PHANDLE           Key
@@ -208,7 +208,7 @@ fail1:
=20
 NTSTATUS
 RegistryCreateKey(
-    _In_ HANDLE             Parent,
+    _In_opt_ HANDLE         Parent,
     _In_ PUNICODE_STRING    Path,
     _In_ ULONG              Options,
     _Out_ PHANDLE           Key
@@ -1240,10 +1240,10 @@ fail1:
=20
 NTSTATUS
 RegistryUpdateBinaryValue(
-    _In_ HANDLE                       Key,
-    _In_ PSTR                         Name,
-    _In_reads_bytes_(Length) PVOID    Buffer,
-    _In_ ULONG                        Length
+    _In_ HANDLE                     Key,
+    _In_ PSTR                       Name,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Length
     )
 {
     ANSI_STRING                     Ansi;
diff --git a/src/xenvkbd/registry=2Eh b/src/xenvkbd/registry=2Eh
index 2451e03=2E=2E4535747 100644
--- a/src/xenvkbd/registry=2Eh
+++ b/src/xenvkbd/registry=2Eh
@@ -47,7 +47,7 @@ RegistryTeardown(
=20
 extern NTSTATUS
 RegistryOpenKey(
-    _In_ HANDLE             Parent,
+    _In_opt_ HANDLE         Parent,
     _In_ PUNICODE_STRING    Path,
     _In_ ACCESS_MASK        DesiredAccess,
     _Out_ PHANDLE           Key
@@ -55,7 +55,7 @@ RegistryOpenKey(
=20
 extern NTSTATUS
 RegistryCreateKey(
-    _In_ HANDLE             Parent,
+    _In_opt_ HANDLE         Parent,
     _In_ PUNICODE_STRING    Path,
     _In_ ULONG              Options,
     _Out_ PHANDLE           Key
@@ -96,7 +96,7 @@ RegistryOpenSubKey(
=20
 extern NTSTATUS
 RegistryCreateSubKey(
-    _In_ HANDLE     Key,
+    _In_opt_ HANDLE Key,
     _In_ PSTR       Name,
     _In_ ULONG      Options,
     _Out_ PHANDLE   SubKey
@@ -160,10 +160,10 @@ RegistryQueryBinaryValue(
=20
 extern NTSTATUS
 RegistryUpdateBinaryValue(
-    _In_ HANDLE                       Key,
-    _In_ PSTR                         Name,
-    _In_reads_bytes_(Length) PVOID    Buffer,
-    _In_ ULONG                        Length
+    _In_ HANDLE                     Key,
+    _In_ PSTR                       Name,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Length
     );
=20
 extern NTSTATUS
diff --git a/src/xenvkbd/ring=2Ec b/src/xenvkbd/ring=2Ec
index 9a79fc9=2E=2E7779b83 100644
--- a/src/xenvkbd/ring=2Ec
+++ b/src/xenvkbd/ring=2Ec
@@ -109,11 +109,11 @@ __RingFree(
=20
 static FORCEINLINE NTSTATUS
 __RingCopyBuffer(
-    _Out_writes_bytes_opt_(Length) PVOID         Buffer,
-    _In_ ULONG                                   Length,
-    _In_reads_bytes_(SourceLength) const VOID    *Source,
-    _In_ ULONG                                   SourceLength,
-    _Out_ PULONG                                 Returned
+    _Out_writes_bytes_opt_(Length) PVOID        Buffer,
+    _In_ ULONG                                  Length,
+    _In_reads_bytes_(SourceLength) const VOID   *Source,
+    _In_ ULONG                                  SourceLength,
+    _Out_ PULONG                                Returned
     )
 {
     if (Buffer =3D=3D NULL)
@@ -437,7 +437,7 @@ KSERVICE_ROUTINE    RingEvtchnCallback;
 BOOLEAN
 RingEvtchnCallback(
     _In_ PKINTERRUPT    InterruptObject,
-    _In_ PVOID          Argument
+    _In_opt_ PVOID      Argument
     )
 {
     PXENVKBD_RING       Ring =3D Argument;
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.34f.4822b4e3f496a6ab.1a1544ce537.cf31a47783127fcf=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 19 13:14:58 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 19 Oct 2026 13:14:58 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1454349.1667920 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xInCc-0007vT-A8; Mon, 19 Oct 2026 13:14:58 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1454349.1667920; Mon, 19 Oct 2026 13:14:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xInCc-0007vK-62; Mon, 19 Oct 2026 13:14:58 +0000
Received: by outflank-mailman (input) for mailman id 1454349;
 Mon, 19 Oct 2026 13:14:57 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1544cde5f0008425@swg.vates.tech>)
 id 1xInCa-0007te-Mj
 for win-pv-devel@lists.xenproject.org; Mon, 19 Oct 2026 13:14:57 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xInCa-001aeq-2w
 for win-pv-devel@lists.xenproject.org; Mon, 19 Oct 2026 15:14:56 +0200
Received: from [10.42.69.11] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1544cde5f0008425@swg.vates.tech>)
 id 6ad617c3-bab6-0a2a0a5309dd-0a2a450ba31a-12
 for <win-pv-devel@lists.xenproject.org>; Mon, 19 Oct 2026 15:14:50 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-42698a.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1544cde5f0008425@swg.vates.tech>)
 id 6ad617ca-b7e8-0a2a450b0019-b9ff1c128e77-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 19 Oct 2026 15:14:50 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1544cde5f0008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 19 Oct 2026 13:14:46 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 7D18A81FEC;
 Mon, 19 Oct 2026 15:14:45 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=H83MyrtyJuGS6/z8T1sb1bXvWhoDb8JfdYW4ons+n4Q=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=YkXDmcublHdBqt4FSg9evxME/TtKLWnInV9Nu8Vx6pxg2HYffoTimDpewgbZGRhCqCfdxgKS9
 JZtGYgrV55ZVdy1nLZkbVa9k1LiUbmrKVHQRQMuMu34DLDWowAY22fOQMyqBTzHrOGk77ogLz3U
 N2BBQMX462O50gbUWLCg3vkTZ9Q7E5w46+NLzaJ8BfpOJJlIUUc7B0s4mDUt3Yb/d70+IlK+jR1
 NchRiN4vV3QKjKGDvgR4EzUou/YxbPqbULHfx4C0mcuohWhJG+l0UrxfAY0aWGv/hwXB5mikIdO
 WhpZFremjsJApOzakC7IC+KXkGNryriAGo9yN0pbdqzA==
X-Zone-Loop: 57085b07e2965787ffa6ae1e7118a1858dbe06025a61
x-campaign-type: default
x-transaction-id: 463b7eb1-855b-40dd-8489-c4a62559fa00
x-swg-uid: 01-b2af21fb-5be3-49ca-81f9-7f173b9a9525
X-Mailer: Sweego
Message-ID:
 <1792415686.8631fc262581453bbf619ec5b2062170.1a1544cde5f0008425@vates.tech>
x-swg-bid: 1792415686.8631fc262581453bbf619ec5b2062170.1a1544cde5f0008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 01/11] xenvkbd: sync common files with xenbus
Date: Mon, 19 Oct 2026 15:14:27 +0200
In-Reply-To: <1792415573.8631fc262581453bbf619ec5b2062170.1a1544b27410008425@vates.tech>
References: <1792415573.8631fc262581453bbf619ec5b2062170.1a1544b27410008425@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.347.8d7ef4b0bcaa56ca.1a1544cdc2e.d29db527c70b081b=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792415685678
X-purgate-ID: tlsNG-42698a/1792415690-A98C1A4A-722F5A90/0/0
X-purgate-type: clean
X-purgate-size: 69368

---=Part.347.8d7ef4b0bcaa56ca.1a1544cdc2e.d29db527c70b081b=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Sync xenbus interfaces and shared libraries=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 include/cache_interface=2Eh     | 130 ++++++++++++++--------------
 include/debug_interface=2Eh     |  88 +++++++++----------
 include/evtchn_interface=2Eh    | 136 ++++++++++++++---------------
 include/gnttab_interface=2Eh    | 148 ++++++++++++++++----------------
 include/range_set_interface=2Eh | 100 +++++++++++-----------
 include/store_interface=2Eh     | 156 +++++++++++++++++-----------------
 include/suspend_interface=2Eh   |  80 ++++++++---------
 src/xenvkbd/assert=2Eh          |  80 ++++++++---------
 src/xenvkbd/dbg_print=2Eh       |  34 +++-----
 src/xenvkbd/util=2Eh            |  87 ++++++++++---------
 10 files changed, 516 insertions(+), 523 deletions(-)

diff --git a/include/cache_interface=2Eh b/include/cache_interface=2Eh
index 97fa315=2E=2Ee5f4ce9 100644
--- a/include/cache_interface=2Eh
+++ b/include/cache_interface=2Eh
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -51,20 +51,20 @@ typedef struct _XENBUS_CACHE    XENBUS_CACHE, *PXENBUS=
_CACHE;
     \brief Acquire a reference to the CACHE interface
=20
     \param Interface The interface header
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_CACHE_ACQUIRE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_CACHE_RELEASE
     \brief Release a reference to the CACHE interface
=20
     \param Interface The interface header
-*/ =20
+*/
 typedef VOID
 (*XENBUS_CACHE_RELEASE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_CACHE_CTOR
@@ -79,8 +79,8 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENBUS_CACHE_CTOR)(
-    IN  PVOID   Argument,
-    IN  PVOID   Object
+    _In_ PVOID  Argument,
+    _In_ PVOID  Object
     );
=20
 /*! \typedef XENBUS_CACHE_DTOR
@@ -94,8 +94,8 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENBUS_CACHE_DTOR)(
-    IN  PVOID   Argument,
-    IN  PVOID   Object
+    _In_ PVOID  Argument,
+    _In_ PVOID  Object
     );
=20
 /*! \typedef XENBUS_CACHE_ACQUIRE_LOCK
@@ -108,7 +108,7 @@ typedef VOID
 */
 typedef VOID
 (*XENBUS_CACHE_ACQUIRE_LOCK)(
-    IN  PVOID   Argument
+    _In_ PVOID  Argument
     );
=20
 /*! \typedef XENBUS_CACHE_RELEASE_LOCK
@@ -121,21 +121,21 @@ typedef VOID
 */
 typedef VOID
 (*XENBUS_CACHE_RELEASE_LOCK)(
-    IN  PVOID   Argument
+    _In_ PVOID  Argument
     );
=20
 typedef NTSTATUS
 (*XENBUS_CACHE_CREATE_V1)(
-    IN  PINTERFACE                  Interface,
-    IN  const CHAR                  *Name,
-    IN  ULONG                       Size,
-    IN  ULONG                       Reservation,
-    IN  XENBUS_CACHE_CTOR           Ctor,
-    IN  XENBUS_CACHE_DTOR           Dtor,
-    IN  XENBUS_CACHE_ACQUIRE_LOCK   AcquireLock,
-    IN  XENBUS_CACHE_RELEASE_LOCK   ReleaseLock,
-    IN  PVOID                       Argument OPTIONAL,
-    OUT PXENBUS_CACHE               *Cache
+    _In_ PINTERFACE                 Interface,
+    _In_ PCSTR                      Name,
+    _In_ ULONG                      Size,
+    _In_ ULONG                      Reservation,
+    _In_ XENBUS_CACHE_CTOR          Ctor,
+    _In_ XENBUS_CACHE_DTOR          Dtor,
+    _In_ XENBUS_CACHE_ACQUIRE_LOCK  AcquireLock,
+    _In_ XENBUS_CACHE_RELEASE_LOCK  ReleaseLock,
+    _In_opt_ PVOID                  Argument,
+    _Outptr_ PXENBUS_CACHE          *Cache
     );
=20
 /*! \typedef XENBUS_CACHE_CREATE
@@ -155,20 +155,20 @@ typedef NTSTATUS
=20
     If a non-zero \a Reservation is specified then this method will fail
     unless that number of objects can be immediately created=2E
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_CACHE_CREATE)(
-    IN  PINTERFACE                  Interface,
-    IN  const CHAR                  *Name,
-    IN  ULONG                       Size,
-    IN  ULONG                       Reservation,
-    IN  ULONG                       Cap,
-    IN  XENBUS_CACHE_CTOR           Ctor,
-    IN  XENBUS_CACHE_DTOR           Dtor,
-    IN  XENBUS_CACHE_ACQUIRE_LOCK   AcquireLock,
-    IN  XENBUS_CACHE_RELEASE_LOCK   ReleaseLock,
-    IN  PVOID                       Argument OPTIONAL,
-    OUT PXENBUS_CACHE               *Cache
+    _In_ PINTERFACE                 Interface,
+    _In_ PCSTR                      Name,
+    _In_ ULONG                      Size,
+    _In_ ULONG                      Reservation,
+    _In_ ULONG                      Cap,
+    _In_ XENBUS_CACHE_CTOR          Ctor,
+    _In_ XENBUS_CACHE_DTOR          Dtor,
+    _In_ XENBUS_CACHE_ACQUIRE_LOCK  AcquireLock,
+    _In_ XENBUS_CACHE_RELEASE_LOCK  ReleaseLock,
+    _In_opt_ PVOID                  Argument,
+    _Outptr_ PXENBUS_CACHE          *Cache
     );
=20
 /*! \typedef XENBUS_CACHE_GET
@@ -181,9 +181,9 @@ typedef NTSTATUS
 */
 typedef PVOID
 (*XENBUS_CACHE_GET)(
-    IN  PINTERFACE      Interface,
-    IN  PXENBUS_CACHE   Cache,
-    IN  BOOLEAN         Locked
+    _In_ PINTERFACE     Interface,
+    _In_ PXENBUS_CACHE  Cache,
+    _In_ BOOLEAN        Locked
     );
=20
 /*! \typedef XENBUS_CACHE_PUT
@@ -196,10 +196,10 @@ typedef PVOID
 */
 typedef VOID
 (*XENBUS_CACHE_PUT)(
-    IN  PINTERFACE      Interface,
-    IN  PXENBUS_CACHE   Cache,
-    IN  PVOID           Object,
-    IN  BOOLEAN         Locked
+    _In_ PINTERFACE     Interface,
+    _In_ PXENBUS_CACHE  Cache,
+    _In_ PVOID          Object,
+    _In_ BOOLEAN        Locked
     );
=20
 /*! \typedef XENBUS_CACHE_DESTROY
@@ -212,12 +212,12 @@ typedef VOID
 */
 typedef VOID
 (*XENBUS_CACHE_DESTROY)(
-    IN  PINTERFACE      Interface,
-    IN  PXENBUS_CACHE   Cache
+    _In_ PINTERFACE     Interface,
+    _In_ PXENBUS_CACHE  Cache
     );
=20
 // {A98DFD78-416A-4949-92A5-E084F2F4B44E}
-DEFINE_GUID(GUID_XENBUS_CACHE_INTERFACE,=20
+DEFINE_GUID(GUID_XENBUS_CACHE_INTERFACE,
 0xa98dfd78, 0x416a, 0x4949, 0x92, 0xa5, 0xe0, 0x84, 0xf2, 0xf4, 0xb4, 0x4=
e);
=20
 /*! \struct _XENBUS_CACHE_INTERFACE_V1
diff --git a/include/debug_interface=2Eh b/include/debug_interface=2Eh
index 79729c7=2E=2E251902c 100644
--- a/include/debug_interface=2Eh
+++ b/include/debug_interface=2Eh
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -50,20 +50,20 @@ typedef struct _XENBUS_DEBUG_CALLBACK   XENBUS_DEBUG_C=
ALLBACK, *PXENBUS_DEBUG_CA
     \brief Acquire a reference to the DEBUG interface
=20
     \param Interface The interface header
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_DEBUG_ACQUIRE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_DEBUG_RELEASE
     \brief Release a reference to the DEBUG interface
=20
     \param Interface The interface header
-*/ =20
+*/
 typedef VOID
 (*XENBUS_DEBUG_RELEASE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_DEBUG_FUNCTION
@@ -74,11 +74,11 @@ typedef VOID
     part of pre-crash logging
=20
     Debug callback functions are always invoked with IRQL =3D=3D HIGH_LEV=
EL
-*/ =20
+*/
 typedef VOID
 (*XENBUS_DEBUG_FUNCTION)(
-    IN  PVOID   Argument,
-    IN  BOOLEAN Crashing
+    _In_ PVOID      Argument,
+    _In_ BOOLEAN    Crashing
     );
=20
 /*! \typedef XENBUS_DEBUG_REGISTER
@@ -89,14 +89,14 @@ typedef VOID
     \param Function The callback function
     \param Argument An optional context argument passed to the callback
     \param Callback A pointer to a callback handle to be initialized
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_DEBUG_REGISTER)(
-    IN  PINTERFACE              Interface,
-    IN  PCHAR                   Prefix,
-    IN  XENBUS_DEBUG_FUNCTION   Function,
-    IN  PVOID                   Argument OPTIONAL,
-    OUT PXENBUS_DEBUG_CALLBACK  *Callback
+    _In_ PINTERFACE                 Interface,
+    _In_ PSTR                       Prefix,
+    _In_ XENBUS_DEBUG_FUNCTION      Function,
+    _In_opt_ PVOID                  Argument,
+    _Outptr_ PXENBUS_DEBUG_CALLBACK *Callback
     );
=20
 /*! \typedef XENBUS_DEBUG_PRINTF
@@ -108,11 +108,11 @@ typedef NTSTATUS
=20
     This method must only be invoked from the context of a debug
     callback
-*/ =20
+*/
 typedef VOID
 (*XENBUS_DEBUG_PRINTF)(
-    IN  PINTERFACE              Interface,
-    IN  const CHAR              *Format,
+    _In_ PINTERFACE             Interface,
+    _In_ PCSTR                  Format,
     =2E=2E=2E
     );
=20
@@ -124,8 +124,8 @@ typedef VOID
 */
 typedef VOID
 (*XENBUS_DEBUG_DEREGISTER)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_DEBUG_CALLBACK  Callback
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_DEBUG_CALLBACK Callback
     );
=20
 /*! \typedef XENBUS_DEBUG_TRIGGER
@@ -137,12 +137,12 @@ typedef VOID
 */
 typedef VOID
 (*XENBUS_DEBUG_TRIGGER)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_DEBUG_CALLBACK  Callback OPTIONAL
+    _In_ PINTERFACE                 Interface,
+    _In_opt_ PXENBUS_DEBUG_CALLBACK Callback
     );
=20
 // {0DF600AE-6B20-4227-BF94-03DA9A26A114}
-DEFINE_GUID(GUID_XENBUS_DEBUG_INTERFACE,=20
+DEFINE_GUID(GUID_XENBUS_DEBUG_INTERFACE,
 0xdf600ae, 0x6b20, 0x4227, 0xbf, 0x94, 0x3, 0xda, 0x9a, 0x26, 0xa1, 0x14)=
;
=20
 /*! \struct _XENBUS_DEBUG_INTERFACE_V1
diff --git a/include/evtchn_interface=2Eh b/include/evtchn_interface=2Eh
index ef67487=2E=2E5c46f97 100644
--- a/include/evtchn_interface=2Eh
+++ b/include/evtchn_interface=2Eh
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -54,27 +54,27 @@ typedef enum _XENBUS_EVTCHN_TYPE {
=20
 /*! \typedef XENBUS_EVTCHN_CHANNEL
     \brief Event channel handle
-*/ =20
+*/
 typedef struct _XENBUS_EVTCHN_CHANNEL XENBUS_EVTCHN_CHANNEL, *PXENBUS_EVT=
CHN_CHANNEL;
=20
 /*! \typedef XENBUS_EVTCHN_ACQUIRE
     \brief Acquire a reference to the EVTCHN interface
=20
     \param Interface The interface header
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_EVTCHN_ACQUIRE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_EVTCHN_RELEASE
     \brief Release a reference to the EVTCHN interface
=20
     \param Interface The interface header
-*/ =20
+*/
 typedef VOID
 (*XENBUS_EVTCHN_RELEASE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_EVTCHN_OPEN
@@ -105,13 +105,13 @@ typedef VOID
     \param Number The relative number of the CPU that should handle the V=
IRQ
=20
     \return Event channel handle
-*/ =20
+*/
 typedef PXENBUS_EVTCHN_CHANNEL
 (*XENBUS_EVTCHN_OPEN)(
-    IN  PINTERFACE          Interface,
-    IN  XENBUS_EVTCHN_TYPE  Type,
-    IN  PKSERVICE_ROUTINE   Function,
-    IN  PVOID               Argument OPTIONAL,
+    _In_ PINTERFACE         Interface,
+    _In_ XENBUS_EVTCHN_TYPE Type,
+    _In_ PKSERVICE_ROUTINE  Function,
+    _In_opt_ PVOID          Argument,
     =2E=2E=2E
     );
=20
@@ -125,17 +125,17 @@ typedef PXENBUS_EVTCHN_CHANNEL
 */
 typedef NTSTATUS
 (*XENBUS_EVTCHN_BIND)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_EVTCHN_CHANNEL  Channel,
-    IN  USHORT                  Group,
-    IN  UCHAR                   Number
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_EVTCHN_CHANNEL Channel,
+    _In_ USHORT                 Group,
+    _In_ UCHAR                  Number
     );
=20
 typedef VOID
 (*XENBUS_EVTCHN_UNMASK_V4)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_EVTCHN_CHANNEL  Channel,
-    IN  BOOLEAN                 InCallback
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_EVTCHN_CHANNEL Channel,
+    _In_ BOOLEAN                InCallback
     );
=20
 /*! \typedef XENBUS_EVTCHN_UNMASK
@@ -148,16 +148,16 @@ typedef VOID
 */
 typedef BOOLEAN
 (*XENBUS_EVTCHN_UNMASK)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_EVTCHN_CHANNEL  Channel,
-    IN  BOOLEAN                 InCallback,
-    IN  BOOLEAN                 Force
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_EVTCHN_CHANNEL Channel,
+    _In_ BOOLEAN                InCallback,
+    _In_ BOOLEAN                Force
     );
=20
 typedef VOID
 (*XENBUS_EVTCHN_SEND_V1)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_EVTCHN_CHANNEL  Channel
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_EVTCHN_CHANNEL Channel
     );
=20
 /*! \typedef XENBUS_EVTCHN_SEND
@@ -168,11 +168,11 @@ typedef VOID
=20
     \param Interface The interface header
     \param Channel The channel handle
-*/ =20
+*/
 typedef VOID
 (*XENBUS_EVTCHN_SEND)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_EVTCHN_CHANNEL  Channel
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_EVTCHN_CHANNEL Channel
     );
=20
 /*! \typedef XENBUS_EVTCHN_TRIGGER
@@ -180,11 +180,11 @@ typedef VOID
=20
     \param Interface The interface header
     \param Channel The channel handle
-*/ =20
+*/
 typedef VOID
 (*XENBUS_EVTCHN_TRIGGER)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_EVTCHN_CHANNEL  Channel
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_EVTCHN_CHANNEL Channel
     );
=20
 /*! \typedef XENBUS_EVTCHN_GET_COUNT
@@ -196,15 +196,15 @@ typedef VOID
 */
 typedef ULONG
 (*XENBUS_EVTCHN_GET_COUNT)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_EVTCHN_CHANNEL  Channel
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_EVTCHN_CHANNEL Channel
     );
=20
 typedef NTSTATUS
 (*XENBUS_EVTCHN_WAIT_V5)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_EVTCHN_CHANNEL  Channel,
-    IN  PLARGE_INTEGER          Timeout OPTIONAL
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_EVTCHN_CHANNEL Channel,
+    _In_opt_ PLARGE_INTEGER     Timeout
     );
=20
 /*! \typedef XENBUS_EVTCHN_WAIT
@@ -217,10 +217,10 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENBUS_EVTCHN_WAIT)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_EVTCHN_CHANNEL  Channel,
-    IN  ULONG                   Count,
-    IN  PLARGE_INTEGER          Timeout OPTIONAL
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_EVTCHN_CHANNEL Channel,
+    _In_ ULONG                  Count,
+    _In_opt_ PLARGE_INTEGER     Timeout
     );
=20
 /*! \typedef XENBUS_EVTCHN_GET_PORT
@@ -229,11 +229,11 @@ typedef NTSTATUS
     \param Interface The interface header
     \param Channel The channel handle
     \return The port number
-*/ =20
+*/
 typedef ULONG
 (*XENBUS_EVTCHN_GET_PORT)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_EVTCHN_CHANNEL  Channel
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_EVTCHN_CHANNEL Channel
     );
=20
 /*! \typedef XENBUS_EVTCHN_CLOSE
@@ -241,15 +241,15 @@ typedef ULONG
=20
     \param Interface The interface header
     \param Channel The channel handle
-*/ =20
+*/
 typedef VOID
 (*XENBUS_EVTCHN_CLOSE)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_EVTCHN_CHANNEL  Channel
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_EVTCHN_CHANNEL Channel
     );
=20
 // {BE2440AC-1098-4150-AF4D-452FADCEF923}
-DEFINE_GUID(GUID_XENBUS_EVTCHN_INTERFACE,=20
+DEFINE_GUID(GUID_XENBUS_EVTCHN_INTERFACE,
 0xbe2440ac, 0x1098, 0x4150, 0xaf, 0x4d, 0x45, 0x2f, 0xad, 0xce, 0xf9, 0x2=
3);
=20
 /*! \struct _XENBUS_EVTCHN_INTERFACE_V5
diff --git a/include/gnttab_interface=2Eh b/include/gnttab_interface=2Eh
index 4fc8f1f=2E=2E92a95a7 100644
--- a/include/gnttab_interface=2Eh
+++ b/include/gnttab_interface=2Eh
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -57,31 +57,31 @@ typedef struct _XENBUS_GNTTAB_CACHE XENBUS_GNTTAB_CACH=
E, *PXENBUS_GNTTAB_CACHE;
     \brief Acquire a reference to the GNTTAB interface
=20
     \param Interface The interface header
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_GNTTAB_ACQUIRE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_GNTTAB_RELEASE
     \brief Release a reference to the GNTTAB interface
=20
     \param Interface The interface header
-*/ =20
+*/
 typedef VOID
 (*XENBUS_GNTTAB_RELEASE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 typedef NTSTATUS
 (*XENBUS_GNTTAB_CREATE_CACHE_V1)(
-    IN  PINTERFACE                  Interface,
-    IN  const CHAR                  *Name,
-    IN  ULONG                       Reservation,
-    IN  XENBUS_CACHE_ACQUIRE_LOCK   AcquireLock,
-    IN  XENBUS_CACHE_RELEASE_LOCK   ReleaseLock,
-    IN  PVOID                       Argument OPTIONAL,
-    OUT PXENBUS_GNTTAB_CACHE        *Cache
+    _In_ PINTERFACE                 Interface,
+    _In_ PCSTR                      Name,
+    _In_ ULONG                      Reservation,
+    _In_ XENBUS_CACHE_ACQUIRE_LOCK  AcquireLock,
+    _In_ XENBUS_CACHE_RELEASE_LOCK  ReleaseLock,
+    _In_opt_ PVOID                  Argument,
+    _Outptr_ PXENBUS_GNTTAB_CACHE   *Cache
     );
=20
 /*! \typedef XENBUS_GNTTAB_CREATE_CACHE
@@ -95,17 +95,17 @@ typedef NTSTATUS
     \param ReleaseLock A callback invoked to release the spinlock
     \param Argument An optional context argument passed to the callbacks
     \param Cache A pointer to a grant table cache handle to be initialize=
d
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_GNTTAB_CREATE_CACHE)(
-    IN  PINTERFACE                  Interface,
-    IN  const CHAR                  *Name,
-    IN  ULONG                       Reservation,
-    IN  ULONG                       Cap,
-    IN  XENBUS_CACHE_ACQUIRE_LOCK   AcquireLock,
-    IN  XENBUS_CACHE_RELEASE_LOCK   ReleaseLock,
-    IN  PVOID                       Argument OPTIONAL,
-    OUT PXENBUS_GNTTAB_CACHE        *Cache
+    _In_ PINTERFACE                 Interface,
+    _In_ PCSTR                      Name,
+    _In_ ULONG                      Reservation,
+    _In_ ULONG                      Cap,
+    _In_ XENBUS_CACHE_ACQUIRE_LOCK  AcquireLock,
+    _In_ XENBUS_CACHE_RELEASE_LOCK  ReleaseLock,
+    _In_opt_ PVOID                  Argument,
+    _Outptr_ PXENBUS_GNTTAB_CACHE   *Cache
     );
=20
 /*! \typedef XENBUS_GNTTAB_PERMIT_FOREIGN_ACCESS
@@ -123,13 +123,13 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENBUS_GNTTAB_PERMIT_FOREIGN_ACCESS)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_GNTTAB_CACHE        Cache,
-    IN  BOOLEAN                     Locked,
-    IN  USHORT                      Domain,
-    IN  PFN_NUMBER                  Pfn,
-    IN  BOOLEAN                     ReadOnly,
-    OUT PXENBUS_GNTTAB_ENTRY        *Entry
+    _In_ PINTERFACE                 Interface,
+    _In_ PXENBUS_GNTTAB_CACHE       Cache,
+    _In_ BOOLEAN                    Locked,
+    _In_ USHORT                     Domain,
+    _In_ PFN_NUMBER                 Pfn,
+    _In_ BOOLEAN                    ReadOnly,
+    _Outptr_ PXENBUS_GNTTAB_ENTRY   *Entry
     );
=20
 /*! \typedef XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS
@@ -143,10 +143,10 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_GNTTAB_CACHE        Cache,
-    IN  BOOLEAN                     Locked,
-    IN  PXENBUS_GNTTAB_ENTRY        Entry
+    _In_ PINTERFACE                 Interface,
+    _In_ PXENBUS_GNTTAB_CACHE       Cache,
+    _In_ BOOLEAN                    Locked,
+    _In_ PXENBUS_GNTTAB_ENTRY       Entry
     );
=20
 /*! \typedef XENBUS_GNTTAB_GET_REFERENCE
@@ -155,11 +155,11 @@ typedef NTSTATUS
     \param Interface The interface header
     \param Entry The grant table entry handle
     \return The reference number
-*/ =20
+*/
 typedef ULONG
 (*XENBUS_GNTTAB_GET_REFERENCE)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_GNTTAB_ENTRY        Entry
+    _In_ PINTERFACE                 Interface,
+    _In_ PXENBUS_GNTTAB_ENTRY       Entry
     );
=20
 /*! \typedef XENBUS_GNTTAB_QUERY_REFERENCE
@@ -172,10 +172,10 @@ typedef ULONG
 */
 typedef NTSTATUS
 (*XENBUS_GNTTAB_QUERY_REFERENCE)(
-    IN  PINTERFACE  Interface,
-    IN  ULONG       Reference,
-    OUT PPFN_NUMBER Pfn OPTIONAL,
-    OUT PBOOLEAN    ReadOnly OPTIONAL
+    _In_ PINTERFACE         Interface,
+    _In_ ULONG              Reference,
+    _Out_opt_ PPFN_NUMBER   Pfn,
+    _Out_opt_ PBOOLEAN      ReadOnly
     );
=20
 #define XENBUS_GNTTAB_CONSOLE_REFERENCE 0
@@ -189,12 +189,12 @@ typedef NTSTATUS
     \param Cache The grant table cache handle
=20
     All grant table entries must have been revoked prior to destruction
-    of the cache=20
-*/ =20
+    of the cache
+*/
 typedef VOID
 (*XENBUS_GNTTAB_DESTROY_CACHE)(
-    IN  PINTERFACE              Interface,
-    IN  PXENBUS_GNTTAB_CACHE    Cache
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_GNTTAB_CACHE   Cache
     );
=20
 /*! \typedef XENBUS_GNTTAB_MAP_FOREIGN_PAGES
@@ -210,12 +210,12 @@ typedef VOID
=20
 typedef NTSTATUS
 (*XENBUS_GNTTAB_MAP_FOREIGN_PAGES)(
-    IN  PINTERFACE              Interface,
-    IN  USHORT                  Domain,
-    IN  ULONG                   NumberPages,
-    IN  PULONG                  References,
-    IN  BOOLEAN                 ReadOnly,
-    OUT PHYSICAL_ADDRESS        *Address
+    _In_ PINTERFACE             Interface,
+    _In_ USHORT                 Domain,
+    _In_ ULONG                  NumberPages,
+    _In_ PULONG                 References,
+    _In_ BOOLEAN                ReadOnly,
+    _Out_ PHYSICAL_ADDRESS      *Address
     );
=20
 /*! \typedef XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES
@@ -226,12 +226,12 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES)(
-    IN  PINTERFACE              Interface,
-    IN  PHYSICAL_ADDRESS        Address
+    _In_ PINTERFACE             Interface,
+    _In_ PHYSICAL_ADDRESS       Address
     );
=20
 // {763679C5-E5C2-4A6D-8B88-6BB02EC42D8E}
-DEFINE_GUID(GUID_XENBUS_GNTTAB_INTERFACE,=20
+DEFINE_GUID(GUID_XENBUS_GNTTAB_INTERFACE,
 0x763679c5, 0xe5c2, 0x4a6d, 0x8b, 0x88, 0x6b, 0xb0, 0x2e, 0xc4, 0x2d, 0x8=
e);
=20
 /*! \struct _XENBUS_GNTTAB_INTERFACE_V2
diff --git a/include/range_set_interface=2Eh b/include/range_set_interface=
=2Eh
index c45a161=2E=2Ecebe42e 100644
--- a/include/range_set_interface=2Eh
+++ b/include/range_set_interface=2Eh
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -51,20 +51,20 @@ typedef struct _XENBUS_RANGE_SET    XENBUS_RANGE_SET, =
*PXENBUS_RANGE_SET;
     \brief Acquire a reference to the RANGE_SET interface
=20
     \param Interface The interface header
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_RANGE_SET_ACQUIRE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_RANGE_SET_RELEASE
     \brief Release a reference to the RANGE_SET interface
=20
     \param Interface The interface header
-*/ =20
+*/
 typedef VOID
 (*XENBUS_RANGE_SET_RELEASE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_RANGE_SET_CREATE
@@ -73,12 +73,12 @@ typedef VOID
     \param Interface The interface header
     \param Name A name for the ramge-set which will be used in debug outp=
ut
     \param RangeSet A pointer to a range-set handle to be initialized
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_RANGE_SET_CREATE)(
-    IN  PINTERFACE          Interface,
-    IN  const CHAR          *Name,
-    OUT PXENBUS_RANGE_SET   *RangeSet
+    _In_ PINTERFACE             Interface,
+    _In_ PCSTR                  Name,
+    _Outptr_ PXENBUS_RANGE_SET  *RangeSet
     );
=20
 /*! \typedef XENBUS_RANGE_SET_PUT
@@ -88,13 +88,13 @@ typedef NTSTATUS
     \param RangeSet The range-set handle
     \param Start The base of the range
     \param Count The number of items of the range
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_RANGE_SET_PUT)(
-    IN  PINTERFACE          Interface,
-    IN  PXENBUS_RANGE_SET   RangeSet,
-    IN  LONGLONG            Start,
-    IN  ULONGLONG           Count
+    _In_ PINTERFACE         Interface,
+    _In_ PXENBUS_RANGE_SET  RangeSet,
+    _In_ LONGLONG           Start,
+    _In_ ULONGLONG          Count
     );
=20
 /*! \typedef XENBUS_RANGE_SET_POP
@@ -105,13 +105,13 @@ typedef NTSTATUS
     \param Count The number of items required
     \param Start A pointer to a value which will be set to the base of
     a suitable range
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_RANGE_SET_POP)(
-    IN  PINTERFACE          Interface,
-    IN  PXENBUS_RANGE_SET   RangeSet,
-    IN  ULONGLONG           Count,
-    OUT PLONGLONG           Start
+    _In_ PINTERFACE         Interface,
+    _In_ PXENBUS_RANGE_SET  RangeSet,
+    _In_ ULONGLONG          Count,
+    _Out_ PLONGLONG         Start
     );
=20
 /*! \typedef XENBUS_RANGE_SET_GET
@@ -121,13 +121,13 @@ typedef NTSTATUS
     \param RangeSet The range-set handle
     \param Start The base of the range
     \param Count The number of items in the range
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_RANGE_SET_GET)(
-    IN  PINTERFACE          Interface,
-    IN  PXENBUS_RANGE_SET   RangeSet,
-    IN  LONGLONG            Start,
-    IN  ULONGLONG           Count
+    _In_ PINTERFACE         Interface,
+    _In_ PXENBUS_RANGE_SET  RangeSet,
+    _In_ LONGLONG           Start,
+    _In_ ULONGLONG          Count
     );
=20
 /*! \typedef XENBUS_RANGE_SET_DESTROY
@@ -137,15 +137,15 @@ typedef NTSTATUS
     \param RangeSet The range-set handle
=20
     The range-set must be empty when it is destroyed
-*/ =20
+*/
 typedef VOID
 (*XENBUS_RANGE_SET_DESTROY)(
-    IN  PINTERFACE          Interface,
-    IN  PXENBUS_RANGE_SET   RangeSet
+    _In_ PINTERFACE         Interface,
+    _In_ PXENBUS_RANGE_SET  RangeSet
     );
=20
 // {EE7E78A2-6847-48C5-B123-BB012F0EABF4}
-DEFINE_GUID(GUID_XENBUS_RANGE_SET_INTERFACE,=20
+DEFINE_GUID(GUID_XENBUS_RANGE_SET_INTERFACE,
 0xee7e78a2, 0x6847, 0x48c5, 0xb1, 0x23, 0xbb, 0x1, 0x2f, 0xe, 0xab, 0xf4)=
;
=20
 /*! \struct _XENBUS_RANGE_SET_INTERFACE_V1
diff --git a/include/store_interface=2Eh b/include/store_interface=2Eh
index ca883bd=2E=2E208be0e 100644
--- a/include/store_interface=2Eh
+++ b/include/store_interface=2Eh
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -72,20 +72,20 @@ typedef struct _XENBUS_STORE_PERMISSION {
     \brief Acquire a reference to the STORE interface
=20
     \param Interface The interface header
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_ACQUIRE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_STORE_RELEASE
     \brief Release a reference to the STORE interface
=20
     \param Interface The interface header
-*/ =20
+*/
 typedef VOID
 (*XENBUS_STORE_RELEASE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_STORE_FREE
@@ -93,11 +93,11 @@ typedef VOID
=20
     \param Interface The interface header
     \param Buffer Pointer to the memory buffer
-*/ =20
+*/
 typedef VOID
 (*XENBUS_STORE_FREE)(
-    IN  PINTERFACE  Interface,
-    IN  PCHAR       Buffer
+    _In_ PINTERFACE Interface,
+    _In_ PSTR       Buffer
     );
=20
 /*! \typedef XENBUS_STORE_READ
@@ -113,14 +113,14 @@ typedef VOID
     buffer containing the value read
=20
     The \a Buffer should be freed using \a XENBUS_STORE_FREE
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_READ)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node,
-    OUT PCHAR                       *Buffer
+    _In_ PINTERFACE                     Interface,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PSTR                       Prefix,
+    _In_ PSTR                           Node,
+    _Outptr_result_z_ PSTR              *Buffer
     );
=20
 /*! \typedef XENBUS_STORE_PRINTF
@@ -136,14 +136,14 @@ typedef NTSTATUS
     \param =2E=2E=2E Additional parameters required by \a Format
=20
     If the \a Node does not exist then it is created
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_PRINTF)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node,
-    IN  const CHAR                  *Format,
+    _In_ PINTERFACE                     Interface,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PSTR                       Prefix,
+    _In_ PSTR                           Node,
+    _In_ PCSTR                          Format,
     =2E=2E=2E
     );
=20
@@ -156,13 +156,13 @@ typedef NTSTATUS
     \param Prefix An optional prefix for the \a Node
     \param Node The concatenation of the \a Prefix and this value specifi=
es
     the XenStore key to remove
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_REMOVE)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node
+    _In_ PINTERFACE                     Interface,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PSTR                       Prefix,
+    _In_ PSTR                           Node
     );
=20
 /*! \typedef XENBUS_STORE_DIRECTORY
@@ -178,14 +178,14 @@ typedef NTSTATUS
     buffer containing a NUL separated list of key names
=20
     The \a Buffer should be freed using \a XENBUS_STORE_FREE
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_DIRECTORY)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node,
-    OUT PCHAR                       *Buffer
+    _In_ PINTERFACE                     Interface,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PSTR                       Prefix,
+    _In_ PSTR                           Node,
+    _Outptr_result_z_ PSTR              *Buffer
     );
=20
 /*! \typedef XENBUS_STORE_TRANSACTION_START
@@ -193,11 +193,11 @@ typedef NTSTATUS
=20
     \param Interface The interface header
     \param Transaction Pointer to a transaction handle to be initialized
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_TRANSACTION_START)(
-    IN  PINTERFACE                  Interface,
-    OUT PXENBUS_STORE_TRANSACTION   *Transaction
+    _In_ PINTERFACE                     Interface,
+    _Outptr_ PXENBUS_STORE_TRANSACTION  *Transaction
     );
=20
 /*! \typedef XENBUS_STORE_TRANSACTION_END
@@ -210,12 +210,12 @@ typedef NTSTATUS
=20
     If \a Commit is TRUE and the transaction to found to clash then
     STATUS_RETRY will be returned
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_TRANSACTION_END)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction,
-    IN  BOOLEAN                     Commit
+    _In_ PINTERFACE                 Interface,
+    _In_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_ BOOLEAN                    Commit
     );
=20
 /*! \typedef XENBUS_STORE_WATCH_ADD
@@ -228,14 +228,14 @@ typedef NTSTATUS
     \param Event A pointer to an event object to be signalled when the
     watch fires
     \param Watch A pointer to a watch handle to be initialized
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_WATCH_ADD)(
-    IN  PINTERFACE          Interface,
-    IN  PCHAR               Prefix OPTIONAL,
-    IN  PCHAR               Node,
-    IN  PKEVENT             Event,
-    OUT PXENBUS_STORE_WATCH *Watch
+    _In_ PINTERFACE                 Interface,
+    _In_opt_ PSTR                   Prefix,
+    _In_ PSTR                       Node,
+    _In_ PKEVENT                    Event,
+    _Outptr_ PXENBUS_STORE_WATCH    *Watch
     );
=20
 /*! \typedef XENBUS_STORE_WATCH_REMOVE
@@ -243,11 +243,11 @@ typedef NTSTATUS
=20
     \param Interface The interface header
     \param Watch The watch handle
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_WATCH_REMOVE)(
-    IN  PINTERFACE          Interface,
-    IN  PXENBUS_STORE_WATCH Watch
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_STORE_WATCH    Watch
     );
=20
 /*! \typedef XENBUS_STORE_POLL
@@ -259,10 +259,10 @@ typedef NTSTATUS
     activity then this will block the normal STORE interface DPC so this
     method must be regularly invoked during the spin loop to check for
     XenStore activity
-*/ =20
+*/
 typedef VOID
 (*XENBUS_STORE_POLL)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_STORE_PERMISSIONS_SET
@@ -279,16 +279,16 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENBUS_STORE_PERMISSIONS_SET)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
-    IN  PCHAR                       Prefix OPTIONAL,
-    IN  PCHAR                       Node,
-    IN  PXENBUS_STORE_PERMISSION    Permissions,
-    IN  ULONG                       NumberPermissions
+    _In_ PINTERFACE                     Interface,
+    _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
+    _In_opt_ PSTR                       Prefix,
+    _In_ PSTR                           Node,
+    _In_ PXENBUS_STORE_PERMISSION       Permissions,
+    _In_ ULONG                          NumberPermissions
     );
=20
 // {86824C3B-D34E-4753-B281-2F1E3AD214D7}
-DEFINE_GUID(GUID_XENBUS_STORE_INTERFACE,=20
+DEFINE_GUID(GUID_XENBUS_STORE_INTERFACE,
 0x86824c3b, 0xd34e, 0x4753, 0xb2, 0x81, 0x2f, 0x1e, 0x3a, 0xd2, 0x14, 0xd=
7);
=20
 /*! \struct _XENBUS_STORE_INTERFACE_V2
diff --git a/include/suspend_interface=2Eh b/include/suspend_interface=2Eh
index 4176dc3=2E=2Ea20f616 100644
--- a/include/suspend_interface=2Eh
+++ b/include/suspend_interface=2Eh
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -52,27 +52,27 @@ typedef enum _XENBUS_SUSPEND_CALLBACK_TYPE {
=20
 /*! \typedef XENBUS_SUSPEND_CALLBACK
     \brief Suspend callback handle
-*/ =20
+*/
 typedef struct _XENBUS_SUSPEND_CALLBACK   XENBUS_SUSPEND_CALLBACK, *PXENB=
US_SUSPEND_CALLBACK;
=20
 /*! \typedef XENBUS_SUSPEND_ACQUIRE
     \brief Acquire a reference to the SUSPEND interface
=20
     \param Interface The interface header
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_SUSPEND_ACQUIRE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_SUSPEND_RELEASE
     \brief Release a reference to the SUSPEND interface
=20
     \param Interface The interface header
-*/ =20
+*/
 typedef VOID
 (*XENBUS_SUSPEND_RELEASE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_SUSPEND_FUNCTION
@@ -84,10 +84,10 @@ typedef VOID
     vCPUs corralled at the same IRQL as the callback=2E \a Early callback
     functions are always invoked with IRQL =3D=3D HIGH_LEVEL and \a Late =
callback
     functions are always invoked with IRQL =3D=3D DISPATCH_LEVEL
-*/ =20
+*/
 typedef VOID
 (*XENBUS_SUSPEND_FUNCTION)(
-    IN  PVOID   Argument
+    _In_ PVOID  Argument
     );
=20
 /*! \typedef XENBUS_SUSPEND_REGISTER
@@ -98,14 +98,14 @@ typedef VOID
     \param Function The callback function
     \param Argument An optional context argument passed to the callback
     \param Callback A pointer to a callback handle to be initialized
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_SUSPEND_REGISTER)(
-    IN  PINTERFACE                      Interface,
-    IN  XENBUS_SUSPEND_CALLBACK_TYPE    Type,
-    IN  XENBUS_SUSPEND_FUNCTION         Function,
-    IN  PVOID                           Argument OPTIONAL,
-    OUT PXENBUS_SUSPEND_CALLBACK        *Callback
+    _In_ PINTERFACE                     Interface,
+    _In_ XENBUS_SUSPEND_CALLBACK_TYPE   Type,
+    _In_ XENBUS_SUSPEND_FUNCTION        Function,
+    _In_opt_ PVOID                      Argument,
+    _Outptr_ PXENBUS_SUSPEND_CALLBACK   *Callback
     );
=20
 /*! \typedef XENBUS_SUSPEND_DEREGISTER
@@ -116,8 +116,8 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENBUS_SUSPEND_DEREGISTER)(
-    IN  PINTERFACE                  Interface,
-    IN  PXENBUS_SUSPEND_CALLBACK    Callback
+    _In_ PINTERFACE                 Interface,
+    _In_ PXENBUS_SUSPEND_CALLBACK   Callback
     );
=20
 /*! \typedef XENBUS_SUSPEND_TRIGGER
@@ -129,7 +129,7 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENBUS_SUSPEND_TRIGGER)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENBUS_SUSPEND_GET_COUNT
@@ -140,7 +140,7 @@ typedef NTSTATUS
 */
 typedef ULONG
 (*XENBUS_SUSPEND_GET_COUNT)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 // {0554F2AF-B510-4C71-AC03-1C503E394238}
diff --git a/src/xenvkbd/assert=2Eh b/src/xenvkbd/assert=2Eh
index fe76f98=2E=2Eec2650c 100644
--- a/src/xenvkbd/assert=2Eh
+++ b/src/xenvkbd/assert=2Eh
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -39,11 +39,11 @@
=20
 static FORCEINLINE VOID
 __Bug(
-    IN  ULONG       Code,
-    IN  ULONG_PTR   Parameter1,
-    IN  ULONG_PTR   Parameter2,
-    IN  ULONG_PTR   Parameter3,
-    IN  ULONG_PTR   Parameter4
+    _In_ ULONG      Code,
+    _In_ ULONG_PTR  Parameter1,
+    _In_ ULONG_PTR  Parameter2,
+    _In_ ULONG_PTR  Parameter3,
+    _In_ ULONG_PTR  Parameter4
     )
 {
 #pragma prefast(suppress:28159)
@@ -58,8 +58,8 @@ __Bug(
=20
 #define BUG(_TEXT)                                              \
         do {                                                    \
-            const CHAR  *_Text =3D (_TEXT);                       \
-            const CHAR  *_File =3D __FILE__;                      \
+            PCSTR       _Text =3D (_TEXT);                       \
+            PCSTR       _File =3D __FILE__;                      \
             ULONG       _Line =3D __LINE__;                       \
                                                                 \
             Error("BUG: " _TEXT "\n");                          \
@@ -89,7 +89,7 @@ __Bug(
 #define ASSERT(_EXP)                    \
         do {                            \
             __ASSERT(_EXP);             \
-            __analysis_assume(_EXP);    \
+            _Analysis_assume_(_EXP);    \
         } while (FALSE)
=20
 #define ASSERT3U(_X, _OP, _Y)                       \
@@ -132,7 +132,7 @@ __Bug(
=20
 #define ASSERT(_EXP)                    \
         do {                            \
-            __analysis_assume(_EXP);    \
+            _Analysis_assume_(_EXP);    \
         } while (FALSE)
=20
 #define ASSERT3U(_X, _OP, _Y)           \
@@ -154,10 +154,10 @@ __Bug(
=20
 static __inline BOOLEAN
 _IsZeroMemory(
-    IN  const PCHAR Caller,
-    IN  const PCHAR Name,
-    IN  PVOID       Buffer,
-    IN  ULONG       Length
+    _In_ PCSTR      Caller,
+    _In_ PCSTR      Name,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length
     )
 {
     ULONG           Offset;
@@ -178,10 +178,10 @@ _IsZeroMemory(
=20
 static __inline BOOLEAN
 _IsZeroMemory(
-    IN  const PCHAR Caller,
-    IN  const PCHAR Name,
-    IN  PVOID       Buffer,
-    IN  ULONG       Length
+    _In_ PCSTR  Caller,
+    _In_ PCSTR  Name,
+    _In_ PVOID  Buffer,
+    _In_ ULONG  Length
     )
 {
     UNREFERENCED_PARAMETER(Caller);
diff --git a/src/xenvkbd/dbg_print=2Eh b/src/xenvkbd/dbg_print=2Eh
index dc9f8b1=2E=2E6ab4606 100644
--- a/src/xenvkbd/dbg_print=2Eh
+++ b/src/xenvkbd/dbg_print=2Eh
@@ -44,8 +44,8 @@
=20
 static __inline VOID
 __Error(
-    IN  const CHAR  *Prefix,
-    IN  const CHAR  *Format,
+    _In_ PCSTR      Prefix,
+    _In_ PCSTR      Format,
     =2E=2E=2E
     )
 {
@@ -67,8 +67,8 @@ __Error(
=20
 static __inline VOID
 __Warning(
-    IN  const CHAR  *Prefix,
-    IN  const CHAR  *Format,
+    _In_ PCSTR      Prefix,
+    _In_ PCSTR      Format,
     =2E=2E=2E
     )
 {
@@ -92,8 +92,8 @@ __Warning(
=20
 static __inline VOID
 __Trace(
-    IN  const CHAR  *Prefix,
-    IN  const CHAR  *Format,
+    _In_ PCSTR      Prefix,
+    _In_ PCSTR      Format,
     =2E=2E=2E
     )
 {
@@ -110,28 +110,16 @@ __Trace(
     va_end(Arguments);
 }
=20
-#else   // DBG
-
-static __inline VOID
-__Trace(
-    IN  const CHAR  *Prefix,
-    IN  const CHAR  *Format,
-    =2E=2E=2E
-    )
-{
-    UNREFERENCED_PARAMETER(Prefix);
-    UNREFERENCED_PARAMETER(Format);
-}
-
-#endif  // DBG
-
 #define Trace(=2E=2E=2E)  \
         __Trace(__MODULE__ "|" __FUNCTION__ ": ", __VA_ARGS__)
+#else   // DBG
+#define Trace(=2E=2E=2E)  (VOID)(__VA_ARGS__)
+#endif  // DBG
=20
 static __inline VOID
 __Info(
-    IN  const CHAR  *Prefix,
-    IN  const CHAR  *Format,
+    _In_ PCSTR      Prefix,
+    _In_ PCSTR      Format,
     =2E=2E=2E
     )
 {
diff --git a/src/xenvkbd/util=2Eh b/src/xenvkbd/util=2Eh
index 495162e=2E=2E431f433 100644
--- a/src/xenvkbd/util=2Eh
+++ b/src/xenvkbd/util=2Eh
@@ -38,12 +38,12 @@
=20
 #include "assert=2Eh"
=20
-#define	P2ROUNDUP(_x, _a)   \
-        (-(-(_x) & -(_a)))
+#define	P2ROUNDUP(_t, _x, _a)   \
+        (-(-((_t)(_x)) & -(((_t)(_a)))))
=20
 static FORCEINLINE LONG
 __ffs(
-    IN  unsigned long long  mask
+    _In_ unsigned long long mask
     )
 {
     unsigned char           *array =3D (unsigned char *)&mask;
@@ -82,14 +82,14 @@ __ffs(
=20
 static FORCEINLINE VOID
 __CpuId(
-    IN  ULONG   Leaf,
-    OUT PULONG  EAX OPTIONAL,
-    OUT PULONG  EBX OPTIONAL,
-    OUT PULONG  ECX OPTIONAL,
-    OUT PULONG  EDX OPTIONAL
+    _In_ ULONG          Leaf,
+    _Out_opt_ PULONG    EAX,
+    _Out_opt_ PULONG    EBX,
+    _Out_opt_ PULONG    ECX,
+    _Out_opt_ PULONG    EDX
     )
 {
-    int         Value[4] =3D {0};
+    int                 Value[4] =3D {0};
=20
     __cpuid(Value, Leaf);
=20
@@ -108,12 +108,12 @@ __CpuId(
=20
 static FORCEINLINE LONG
 __InterlockedAdd(
-    IN  LONG    *Value,
-    IN  LONG    Delta
+    _Inout_ LONG    *Value,
+    _In_ LONG       Delta
     )
 {
-    LONG        New;
-    LONG        Old;
+    LONG            New;
+    LONG            Old;
=20
     do {
         Old =3D *Value;
@@ -125,12 +125,12 @@ __InterlockedAdd(
=20
 static FORCEINLINE LONG
 __InterlockedSubtract(
-    IN  LONG    *Value,
-    IN  LONG    Delta
+    _Inout_ LONG    *Value,
+    _In_ LONG       Delta
     )
 {
-    LONG        New;
-    LONG        Old;
+    LONG            New;
+    LONG            Old;
=20
     do {
         Old =3D *Value;
@@ -140,23 +140,24 @@ __InterlockedSubtract(
     return New;
 }
=20
-__checkReturn
+_Check_return_
 static FORCEINLINE PVOID
 __AllocatePoolWithTag(
-    IN  POOL_TYPE   PoolType,
-    IN  SIZE_T      NumberOfBytes,
-    IN  ULONG       Tag
+    _In_ POOL_TYPE  PoolType,
+    _In_ SIZE_T     NumberOfBytes,
+    _In_ ULONG      Tag
     )
 {
     PUCHAR          Buffer;
=20
-    __analysis_assume(PoolType =3D=3D NonPagedPool ||
+    _Analysis_assume_(PoolType =3D=3D NonPagedPool ||
                       PoolType =3D=3D PagedPool);
=20
     if (NumberOfBytes =3D=3D 0)
         return NULL;
=20
 #if (_MSC_VER >=3D 1928) // VS 16=2E9 (EWDK 20344 or later)
+#pragma warning(suppress:28160) // annotation error
     Buffer =3D ExAllocatePoolUninitialized(PoolType, NumberOfBytes, Tag);
 #else
 #pragma warning(suppress:28160) // annotation error
@@ -171,8 +172,8 @@ __AllocatePoolWithTag(
=20
 static FORCEINLINE VOID
 __FreePoolWithTag(
-    IN  PVOID   Buffer,
-    IN  ULONG   Tag
+    _In_ PVOID  Buffer,
+    _In_ ULONG  Tag
     )
 {
     ExFreePoolWithTag(Buffer, Tag);
@@ -180,7 +181,7 @@ __FreePoolWithTag(
=20
 static FORCEINLINE PMDL
 __AllocatePages(
-    IN  ULONG           Count
+    _In_ ULONG          Count
     )
 {
     PHYSICAL_ADDRESS    LowAddress;
@@ -249,10 +250,10 @@ fail1:
=20
 static FORCEINLINE VOID
 __FreePages(
-    IN	PMDL	Mdl
+    _In_ PMDL   Mdl
     )
 {
-    PUCHAR	MdlMappedSystemVa;
+    PUCHAR      MdlMappedSystemVa;
=20
     ASSERT(Mdl->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA);
     MdlMappedSystemVa =3D Mdl->MappedSystemVa;
@@ -265,15 +266,17 @@ __FreePages(
=20
 #define __FreePage(_Mdl)    __FreePages(_Mdl)
=20
-static FORCEINLINE PCHAR
+static FORCEINLINE PSTR
 __strtok_r(
-    IN      PCHAR   Buffer,
-    IN      PCHAR   Delimiter,
-    IN OUT  PCHAR   *Context
+    _Inout_opt_ PSTR    Buffer,
+    _In_ PSTR           Delimiter,
+    _When_(Buffer !=3D NULL, _Outptr_)
+    _When_(Buffer =3D=3D NULL, _Inout_)
+    PSTR                *Context
     )
 {
-    PCHAR           Token;
-    PCHAR           End;
+    PSTR                Token;
+    PSTR                End;
=20
     if (Buffer !=3D NULL)
         *Context =3D Buffer;
@@ -303,15 +306,17 @@ __strtok_r(
     return Token;
 }
=20
-static FORCEINLINE PWCHAR
+static FORCEINLINE PWSTR
 __wcstok_r(
-    IN      PWCHAR  Buffer,
-    IN      PWCHAR  Delimiter,
-    IN OUT  PWCHAR  *Context
+    _Inout_opt_ PWSTR   Buffer,
+    _In_ PWSTR          Delimiter,
+    _When_(Buffer !=3D NULL, _Outptr_)
+    _When_(Buffer =3D=3D NULL, _Inout_)
+    PWSTR               *Context
     )
 {
-    PWCHAR          Token;
-    PWCHAR          End;
+    PWSTR               Token;
+    PWSTR               End;
=20
     if (Buffer !=3D NULL)
         *Context =3D Buffer;
@@ -343,7 +348,7 @@ __wcstok_r(
=20
 static FORCEINLINE CHAR
 __toupper(
-    IN  CHAR    Character
+    _In_ CHAR   Character
     )
 {
     if (Character < 'a' || Character > 'z')
@@ -354,7 +359,7 @@ __toupper(
=20
 static FORCEINLINE CHAR
 __tolower(
-    IN  CHAR    Character
+    _In_ CHAR   Character
     )
 {
     if (Character < 'A' || Character > 'Z')
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.347.8d7ef4b0bcaa56ca.1a1544cdc2e.d29db527c70b081b=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 19 13:14:58 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 19 Oct 2026 13:14:58 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1454350.1667926 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xInCc-0007vw-Ey; Mon, 19 Oct 2026 13:14:58 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1454350.1667926; Mon, 19 Oct 2026 13:14:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xInCc-0007ve-85; Mon, 19 Oct 2026 13:14:58 +0000
Received: by outflank-mailman (input) for mailman id 1454350;
 Mon, 19 Oct 2026 13:14:57 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1544cdf170008425@swg.vates.tech>)
 id 1xInCb-0007uN-Cp
 for win-pv-devel@lists.xenproject.org; Mon, 19 Oct 2026 13:14:57 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xInCa-001aeq-Pn
 for win-pv-devel@lists.xenproject.org; Mon, 19 Oct 2026 15:14:56 +0200
Received: from [10.42.69.2] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1544cdf170008425@swg.vates.tech>)
 id 6ad617bc-bab6-0a2a0a5309dd-0a2a4502b4a0-48
 for <win-pv-devel@lists.xenproject.org>; Mon, 19 Oct 2026 15:14:56 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1544cdf170008425@swg.vates.tech>)
 id 6ad617ca-6ca4-0a2a45020019-b9ff1c23ab43-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 19 Oct 2026 15:14:50 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1544cdf170008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 19 Oct 2026 13:14:46 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id DA67582D8F;
 Mon, 19 Oct 2026 15:14:45 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=pE09XfxiL3rs9/u3MPBz/YKSSpA/YBGg+F9GMUhWNXc=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=PzERP/zcRe2Wm4P8ap428z7XSminlJTS1qzUuWx/tm7Tg/lWfTIGucOSbKHS+NDZzzMzSW486
 SevsDaepEzhABLceqVdKpvo1q9S0rGSXDvW6CrtzIYmHbSyvyuvBOSurVsAHzipVuz9jyuNOre1
 fDB5zF9fIAD67Y36bhn5onGgND0oT8zHoVFOm8yAWUbhwidaOZosCxkc8XRCoUiAzDvnpiaZwdi
 uO03xQFYIxKKqyKzhcHv36sxCg/aHk6GKlLtlWMOa5jHcrUxX27hwC8xpHf3pFShKYX2GEQpDsx
 2ROqECqF8qWfY9P/YfQ0Ak14vn5PhO0DbukCMBFhgH5Q==
X-Zone-Loop: 2475ee17e43f41d77a15c1723d117f8a4e5d0394b6d7
x-campaign-type: default
x-transaction-id: 32ffd51f-11c8-4174-b057-18f7ac7fc7ec
x-swg-uid: 01-93c048ba-e699-40d9-b4cd-327c4a55738a
X-Mailer: Sweego
Message-ID:
 <1792415686.8631fc262581453bbf619ec5b2062170.1a1544cdf170008425@vates.tech>
x-swg-bid: 1792415686.8631fc262581453bbf619ec5b2062170.1a1544cdf170008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 02/11] registry: sync with xenbus
Date: Mon, 19 Oct 2026 15:14:28 +0200
In-Reply-To: <1792415573.8631fc262581453bbf619ec5b2062170.1a1544b27410008425@vates.tech>
References: <1792415573.8631fc262581453bbf619ec5b2062170.1a1544b27410008425@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.348.1ae63393854e84d0.1a1544cdd65.259f386e26114a18=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792415685989
X-purgate-ID: tlsNG-720697/1792415690-F0EA32AC-4FB922D0/0/0
X-purgate-type: clean
X-purgate-size: 18540

---=Part.348.1ae63393854e84d0.1a1544cdd65.259f386e26114a18=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Sync registry=2Ec,h with xenbus latest version=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xenvkbd/registry=2Ec | 282 ++++++++++++++++++++++++++++++-----------
 src/xenvkbd/registry=2Eh |   8 +-
 2 files changed, 212 insertions(+), 78 deletions(-)

diff --git a/src/xenvkbd/registry=2Ec b/src/xenvkbd/registry=2Ec
index e498497=2E=2E90a2bbe 100644
--- a/src/xenvkbd/registry=2Ec
+++ b/src/xenvkbd/registry=2Ec
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -38,8 +38,13 @@
=20
 #define REGISTRY_TAG 'GERX'
=20
+static PDRIVER_OBJECT   RegistryDriverObject;
 static UNICODE_STRING   RegistryPath;
=20
+typedef NTSTATUS(*IOOPENDRIVERREGISTRYKEY)(PDRIVER_OBJECT, DRIVER_REGKEY_=
TYPE, ACCESS_MASK, ULONG, PHANDLE);
+
+static IOOPENDRIVERREGISTRYKEY __IoOpenDriverRegistryKey;
+
 static FORCEINLINE PVOID
 __RegistryAllocate(
     IN  ULONG   Length
@@ -82,11 +87,63 @@ RegistryTeardown(
     VOID
     )
 {
+    __IoOpenDriverRegistryKey =3D NULL;
+
+    RegistryDriverObject =3D NULL;
+
     RtlFreeUnicodeString(&RegistryPath);
     RegistryPath=2EBuffer =3D NULL;
     RegistryPath=2EMaximumLength =3D RegistryPath=2ELength =3D 0;
 }
=20
+NTSTATUS
+RegistryOpenParametersKey(
+    _In_ ACCESS_MASK    DesiredAccess,
+    _Out_ PHANDLE       Key
+    )
+{
+    HANDLE              ServiceKey;
+    NTSTATUS            status;
+
+    if (__IoOpenDriverRegistryKey !=3D NULL) {
+        status =3D __IoOpenDriverRegistryKey(RegistryDriverObject,
+                                           DriverRegKeyParameters,
+                                           DesiredAccess,
+                                           0,
+                                           Key);
+        if (!NT_SUCCESS(status))
+            goto fail1;
+
+        goto done;
+    }
+
+    status =3D RegistryOpenKey(NULL, &RegistryPath, DesiredAccess, &Servi=
ceKey);
+    if (!NT_SUCCESS(status))
+        goto fail2;
+
+    status =3D RegistryOpenSubKey(ServiceKey, "Parameters", DesiredAccess=
, Key);
+    if (!NT_SUCCESS(status))
+        goto fail3;
+
+    RegistryCloseKey(ServiceKey);
+
+done:
+    return STATUS_SUCCESS;
+
+fail3:
+    Error("fail3\n");
+
+    RegistryCloseKey(ServiceKey);
+
+fail2:
+    Error("fail2\n");
+
+fail1:
+    Error("fail1 %08x\n", status);
+
+    return status;
+}
+
 NTSTATUS
 RegistryOpenKey(
     IN  HANDLE          Parent,
@@ -118,15 +175,15 @@ fail1:
=20
 static NTSTATUS
 RegistryOpenRoot(
-    IN  PWCHAR          Path,
-    OUT PHANDLE         Parent,
-    OUT PWCHAR          *ChildPath
+    _In_ PWSTR              Path,
+    _Out_ PHANDLE           Parent,
+    _Outptr_result_z_ PWSTR *ChildPath
     )
 {
-    const WCHAR         Prefix[] =3D L"\\Registry\\Machine\\";
-    ULONG               Length;
-    UNICODE_STRING      Unicode;
-    NTSTATUS            status;
+    PCWSTR                  Prefix =3D L"\\Registry\\Machine\\";
+    ULONG                   Length;
+    UNICODE_STRING          Unicode;
+    NTSTATUS                status;
=20
     Length =3D (ULONG)wcslen(Prefix);
=20
@@ -157,11 +214,11 @@ RegistryCreateKey(
     OUT PHANDLE         Key
     )
 {
-    PWCHAR              Buffer;
+    PWSTR               Buffer;
     HANDLE              Root;
-    PWCHAR              ChildPath;
-    PWCHAR              ChildName;
-    PWCHAR              Context;
+    PWSTR               ChildPath;
+    PWSTR               ChildName;
+    PWSTR               Context;
     HANDLE              Child;
     NTSTATUS            status;
=20
@@ -260,7 +317,7 @@ RegistryOpenServiceKey(
=20
 NTSTATUS
 RegistryCreateServiceKey(
-    OUT PHANDLE         Key
+    _Out_ PHANDLE       Key
     )
 {
     return RegistryCreateKey(NULL, &RegistryPath, REG_OPTION_NON_VOLATILE=
, Key);
@@ -298,7 +355,7 @@ RegistryOpenHardwareKey(
     HANDLE                  SubKey;
     ULONG                   Length;
     PKEY_NAME_INFORMATION   Info;
-    PWCHAR                  Cursor;
+    PWSTR                   Cursor;
     UNICODE_STRING          Unicode;
     NTSTATUS                status;
=20
@@ -315,11 +372,11 @@ RegistryOpenHardwareKey(
                         NULL,
                         0,
                         &Length);
-    if (status !=3D STATUS_BUFFER_OVERFLOW &&
+    if (!NT_SUCCESS(status) &&
+        status !=3D STATUS_BUFFER_OVERFLOW &&
         status !=3D STATUS_BUFFER_TOO_SMALL)
         goto fail2;
=20
-#pragma prefast(suppress:6102)
     Info =3D __RegistryAllocate(Length + sizeof (WCHAR));
=20
     status =3D STATUS_NO_MEMORY;
@@ -340,7 +397,7 @@ RegistryOpenHardwareKey(
     ASSERT(Cursor !=3D NULL);
=20
     *Cursor =3D L'\0';
-   =20
+
     RtlInitUnicodeString(&Unicode, Info->Name);
=20
     status =3D RegistryOpenKey(NULL, &Unicode, DesiredAccess, Key);
@@ -367,10 +424,10 @@ fail1:
=20
 NTSTATUS
 RegistryOpenSubKey(
-    IN  PHANDLE         Key,
-    IN  PCHAR           Name,
-    IN  ACCESS_MASK     DesiredAccess,
-    OUT PHANDLE         SubKey
+    _In_opt_ PHANDLE    Key,
+    _In_ PSTR           Name,
+    _In_ ACCESS_MASK    DesiredAccess,
+    _Out_ PHANDLE       SubKey
     )
 {
     ANSI_STRING         Ansi;
@@ -400,10 +457,10 @@ fail1:
=20
 NTSTATUS
 RegistryCreateSubKey(
-    IN  PHANDLE         Key,
-    IN  PCHAR           Name,
-    IN  ULONG           Options,
-    OUT PHANDLE         SubKey
+    _In_opt_ HANDLE     Key,
+    _In_ PSTR           Name,
+    _In_ ULONG          Options,
+    _Out_ PHANDLE       SubKey
     )
 {
     ANSI_STRING         Ansi;
@@ -494,7 +551,6 @@ RegistryEnumerateSubKeys(
         status !=3D STATUS_BUFFER_TOO_SMALL)
         goto fail1;
=20
-#pragma prefast(suppress:6102)
     Full =3D __RegistryAllocate(Size);
=20
     status =3D STATUS_NO_MEMORY;
@@ -545,7 +601,7 @@ RegistryEnumerateSubKeys(
         status =3D RtlUnicodeStringToAnsiString(&Ansi, &Unicode, FALSE);
         ASSERT(NT_SUCCESS(status));
=20
-        Ansi=2ELength =3D (USHORT)(strlen(Ansi=2EBuffer) * sizeof (CHAR))=
;       =20
+        Ansi=2ELength =3D (USHORT)(strlen(Ansi=2EBuffer) * sizeof (CHAR))=
;
=20
         status =3D Callback(Context, Key, &Ansi);
=20
@@ -570,7 +626,7 @@ fail5:
 fail4:
 fail3:
     __RegistryFree(Full);
-   =20
+
 fail2:
 fail1:
     return status;
@@ -598,7 +654,6 @@ RegistryEnumerateValues(
         status !=3D STATUS_BUFFER_TOO_SMALL)
         goto fail1;
=20
-#pragma prefast(suppress:6102)
     Full =3D __RegistryAllocate(Size);
=20
     status =3D STATUS_NO_MEMORY;
@@ -642,17 +697,24 @@ RegistryEnumerateValues(
         Ansi=2EMaximumLength =3D (USHORT)((Basic->NameLength / sizeof (WC=
HAR)) + sizeof (CHAR));
         Ansi=2EBuffer =3D __RegistryAllocate(Ansi=2EMaximumLength);
=20
+        status =3D STATUS_NO_MEMORY;
+        if (Ansi=2EBuffer =3D=3D NULL)
+            goto fail6;
+
         status =3D RtlUnicodeStringToAnsiString(&Ansi, &Unicode, FALSE);
-        ASSERT(NT_SUCCESS(status));
+        if (!NT_SUCCESS(status)) {
+            __RegistryFree(Ansi=2EBuffer);
+            goto fail7;
+        }
=20
-        Ansi=2ELength =3D (USHORT)(strlen(Ansi=2EBuffer) * sizeof (CHAR))=
;       =20
+        Ansi=2ELength =3D (USHORT)(strlen(Ansi=2EBuffer) * sizeof (CHAR))=
;
=20
         status =3D Callback(Context, Key, &Ansi, Basic->Type);
=20
         __RegistryFree(Ansi=2EBuffer);
=20
         if (!NT_SUCCESS(status))
-            goto fail6;
+            goto fail8;
     }
=20
     __RegistryFree(Basic);
@@ -661,6 +723,8 @@ RegistryEnumerateValues(
=20
     return STATUS_SUCCESS;
=20
+fail8:
+fail7:
 fail6:
 fail5:
     __RegistryFree(Basic);
@@ -668,7 +732,7 @@ fail5:
 fail4:
 fail3:
     __RegistryFree(Full);
-   =20
+
 fail2:
 fail1:
     return status;
@@ -723,18 +787,18 @@ RegistryQueryDwordValue(
     status =3D RtlAnsiStringToUnicodeString(&Unicode, &Ansi, TRUE);
     if (!NT_SUCCESS(status))
         goto fail1;
-       =20
+
     status =3D ZwQueryValueKey(Key,
                              &Unicode,
                              KeyValuePartialInformation,
                              NULL,
                              0,
                              &Size);
-    if (status !=3D STATUS_BUFFER_OVERFLOW &&
+    if (!NT_SUCCESS(status) &&
+        status !=3D STATUS_BUFFER_OVERFLOW &&
         status !=3D STATUS_BUFFER_TOO_SMALL)
         goto fail2;
=20
-#pragma prefast(suppress:6102)
     Partial =3D __RegistryAllocate(Size);
=20
     status =3D STATUS_NO_MEMORY;
@@ -755,7 +819,77 @@ RegistryQueryDwordValue(
         Partial->DataLength !=3D sizeof (ULONG))
         goto fail5;
=20
-    *Value =3D *(PULONG)Partial->Data;           =20
+    *Value =3D *(PULONG)Partial->Data;
+
+    __RegistryFree(Partial);
+
+    RtlFreeUnicodeString(&Unicode);
+
+    return STATUS_SUCCESS;
+
+fail5:
+fail4:
+    __RegistryFree(Partial);
+
+fail3:
+fail2:
+    RtlFreeUnicodeString(&Unicode);
+
+fail1:
+    return status;
+}
+
+NTSTATUS
+RegistryQueryQwordValue(
+    _In_ HANDLE                     Key,
+    _In_ PSTR                       Name,
+    _Out_ PULONGLONG                Value
+    )
+{
+    ANSI_STRING                     Ansi;
+    UNICODE_STRING                  Unicode;
+    PKEY_VALUE_PARTIAL_INFORMATION  Partial;
+    ULONG                           Size;
+    NTSTATUS                        status;
+
+    RtlInitAnsiString(&Ansi, Name);
+
+    status =3D RtlAnsiStringToUnicodeString(&Unicode, &Ansi, TRUE);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    status =3D ZwQueryValueKey(Key,
+                             &Unicode,
+                             KeyValuePartialInformation,
+                             NULL,
+                             0,
+                             &Size);
+    if (!NT_SUCCESS(status) &&
+        status !=3D STATUS_BUFFER_OVERFLOW &&
+        status !=3D STATUS_BUFFER_TOO_SMALL)
+        goto fail2;
+
+    Partial =3D __RegistryAllocate(Size);
+
+    status =3D STATUS_NO_MEMORY;
+    if (Partial =3D=3D NULL)
+        goto fail3;
+
+    status =3D ZwQueryValueKey(Key,
+                             &Unicode,
+                             KeyValuePartialInformation,
+                             Partial,
+                             Size,
+                             &Size);
+    if (!NT_SUCCESS(status))
+        goto fail4;
+
+    status =3D STATUS_INVALID_PARAMETER;
+    if (Partial->Type !=3D REG_QWORD ||
+        Partial->DataLength !=3D sizeof (ULONGLONG))
+        goto fail5;
+
+    *Value =3D *(PULONGLONG)Partial->Data;
=20
     __RegistryFree(Partial);
=20
@@ -792,7 +926,7 @@ RegistryUpdateDwordValue(
     status =3D RtlAnsiStringToUnicodeString(&Unicode, &Ansi, TRUE);
     if (!NT_SUCCESS(status))
         goto fail1;
-       =20
+
     Partial =3D __RegistryAllocate(FIELD_OFFSET(KEY_VALUE_PARTIAL_INFORMA=
TION, Data) +
                                  sizeof (ULONG));
=20
@@ -803,7 +937,7 @@ RegistryUpdateDwordValue(
     Partial->TitleIndex =3D 0;
     Partial->Type =3D REG_DWORD;
     Partial->DataLength =3D sizeof (ULONG);
-    *(PULONG)Partial->Data =3D Value;           =20
+    *(PULONG)Partial->Data =3D Value;
=20
     status =3D ZwSetValueKey(Key,
                            &Unicode,
@@ -951,18 +1085,18 @@ RegistryQuerySzValue(
     status =3D RtlAnsiStringToUnicodeString(&Unicode, &Ansi, TRUE);
     if (!NT_SUCCESS(status))
         goto fail1;
-       =20
+
     status =3D ZwQueryValueKey(Key,
                              &Unicode,
                              KeyValuePartialInformation,
                              NULL,
                              0,
                              &Size);
-    if (status !=3D STATUS_BUFFER_OVERFLOW &&
+    if (!NT_SUCCESS(status) &&
+        status !=3D STATUS_BUFFER_OVERFLOW &&
         status !=3D STATUS_BUFFER_TOO_SMALL)
         goto fail2;
=20
-#pragma prefast(suppress:6102)
     Value =3D __RegistryAllocate(Size);
=20
     status =3D STATUS_NO_MEMORY;
@@ -981,12 +1115,12 @@ RegistryQuerySzValue(
     switch (Value->Type) {
     case REG_SZ:
         status =3D STATUS_NO_MEMORY;
-        *Array =3D RegistrySzToAnsi((PWCHAR)Value->Data);
+        *Array =3D RegistrySzToAnsi((PWSTR)Value->Data);
         break;
=20
     case REG_MULTI_SZ:
         status =3D STATUS_NO_MEMORY;
-        *Array =3D RegistryMultiSzToAnsi((PWCHAR)Value->Data);
+        *Array =3D RegistryMultiSzToAnsi((PWSTR)Value->Data);
         break;
=20
     default:
@@ -1045,11 +1179,11 @@ RegistryQueryBinaryValue(
                              NULL,
                              0,
                              &Size);
-    if (status !=3D STATUS_BUFFER_OVERFLOW &&
+    if (!NT_SUCCESS(status) &&
+        status !=3D STATUS_BUFFER_OVERFLOW &&
         status !=3D STATUS_BUFFER_TOO_SMALL)
         goto fail2;
=20
-#pragma prefast(suppress:6102)
     Partial =3D __RegistryAllocate(Size);
=20
     status =3D STATUS_NO_MEMORY;
@@ -1176,12 +1310,12 @@ RegistryQueryKeyName(
                         NULL,
                         0,
                         &Size);
-    if (status !=3D STATUS_BUFFER_OVERFLOW &&
+    if (!NT_SUCCESS(status) &&
+        status !=3D STATUS_BUFFER_OVERFLOW &&
         status !=3D STATUS_BUFFER_TOO_SMALL)
         goto fail1;
=20
     // Name information is not intrinsically NULL terminated
-#pragma prefast(suppress:6102)
     Value =3D __RegistryAllocate(Size + sizeof (WCHAR));
=20
     status =3D STATUS_NO_MEMORY;
@@ -1197,7 +1331,7 @@ RegistryQueryKeyName(
         goto fail3;
=20
     Value->Name[Value->NameLength / sizeof (WCHAR)] =3D L'\0';
-    *Array =3D RegistrySzToAnsi((PWCHAR)Value->Name);
+    *Array =3D RegistrySzToAnsi((PWSTR)Value->Name);
=20
     status =3D STATUS_NO_MEMORY;
     if (*Array =3D=3D NULL)
@@ -1226,12 +1360,12 @@ RegistryQuerySystemStartOption(
     HANDLE                          Key;
     PANSI_STRING                    Ansi;
     ULONG                           Length;
-    PCHAR                           Option;
-    PCHAR                           Context;
+    PSTR                            Option;
+    PSTR                            Context;
     NTSTATUS                        status;
=20
     RtlInitUnicodeString(&Unicode, L"\\Registry\\Machine\\SYSTEM\\Current=
ControlSet\\Control");
-   =20
+
     status =3D RegistryOpenKey(NULL, &Unicode, KEY_READ, &Key);
     if (!NT_SUCCESS(status))
         goto fail1;
diff --git a/src/xenvkbd/registry=2Eh b/src/xenvkbd/registry=2Eh
index 904ff10=2E=2E08f0def 100644
--- a/src/xenvkbd/registry=2Eh
+++ b/src/xenvkbd/registry=2Eh
@@ -88,10 +88,10 @@ RegistryOpenHardwareKey(
=20
 extern NTSTATUS
 RegistryOpenSubKey(
-    IN  HANDLE      Key,
-    IN  PCHAR       Name,
-    IN  ACCESS_MASK DesiredAccess,
-    OUT PHANDLE     SubKey
+    _In_opt_ HANDLE     Key,
+    _In_ PSTR           Name,
+    _In_ ACCESS_MASK    DesiredAccess,
+    _Out_ PHANDLE       SubKey
     );
=20
 extern NTSTATUS
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.348.1ae63393854e84d0.1a1544cdd65.259f386e26114a18=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 19 13:14:59 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 19 Oct 2026 13:14:59 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1454351.1667929 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xInCd-0007zT-Ej; Mon, 19 Oct 2026 13:14:59 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1454351.1667929; Mon, 19 Oct 2026 13:14:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xInCd-0007zI-Ag; Mon, 19 Oct 2026 13:14:59 +0000
Received: by outflank-mailman (input) for mailman id 1454351;
 Mon, 19 Oct 2026 13:14:58 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1544ce0020008425@swg.vates.tech>)
 id 1xInCc-0007vH-5g
 for win-pv-devel@lists.xenproject.org; Mon, 19 Oct 2026 13:14:58 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xInCb-001aeq-Id
 for win-pv-devel@lists.xenproject.org; Mon, 19 Oct 2026 15:14:57 +0200
Received: from [10.42.69.10] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1544ce0020008425@swg.vates.tech>)
 id 6ad617ca-bab6-0a2a0a5309dd-0a2a450a8c3c-6
 for <win-pv-devel@lists.xenproject.org>; Mon, 19 Oct 2026 15:14:57 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-4011c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1544ce0020008425@swg.vates.tech>)
 id 6ad617ca-f2d2-0a2a450a0019-b9ff1c12a039-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 19 Oct 2026 15:14:50 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1544ce0020008425.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 19 Oct 2026 13:14:46 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 2336F82E5C;
 Mon, 19 Oct 2026 15:14:46 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=SfaCysac3YthSMG/K/4aqBEQi8diiTIuAoib+Lq/zCs=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=WtkSd74IZB7ANr2u6v1pzXCgCWL/U8sKf+vWwq6zmqBqcvOi2DIW5HuPjL19oeD5tztXZndTQ
 E1BXL8jigsN5cuStTRtOXvLSP2NC2tOaOC6ZuIOMkRjQCUUFFCravaCyQhspWK3h59WOY8vZlAT
 8+mVTgy5ehnKMNT4XCC3RQKjL5cMGqWP/Eb7aIsJfOaOgEzYC4mcxVu5rWSZ9Z781ywCWv7eA6L
 EtMCclxnaqnTQAU0/DSQNmVi5BFGrsb9XuzAgcLvPYcUbjjNZB0nyQukDpLQGQLFjhJFjwtDHVI
 zDzDKThhGV93/HZj0xKg/PToDMe6jzPD3+Xho9Xko/hw==
X-Zone-Loop: b9d687b77473c8085621c0893d5a9d054ac89642ca56
x-campaign-type: default
x-transaction-id: 1c3a374d-ac19-4d9c-aa6d-bfb97859c974
x-swg-uid: 01-44f844b5-8cca-4b6c-8ee6-c33f66e0086f
X-Mailer: Sweego
Message-ID:
 <1792415686.8631fc262581453bbf619ec5b2062170.1a1544ce0020008425@vates.tech>
x-swg-bid: 1792415686.8631fc262581453bbf619ec5b2062170.1a1544ce0020008425
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 03/11] xenvkbd: sync xenhid interface
Date: Mon, 19 Oct 2026 15:14:29 +0200
In-Reply-To: <1792415573.8631fc262581453bbf619ec5b2062170.1a1544b27410008425@vates.tech>
References: <1792415573.8631fc262581453bbf619ec5b2062170.1a1544b27410008425@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.349.e4a76d60db3e789b.1a1544cde5b.9a84469afb7e7531=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792415686235
X-purgate-ID: tlsNG-4011c0/1792415690-520C1CFC-155C043B/0/0
X-purgate-type: clean
X-purgate-size: 6716

---=Part.349.e4a76d60db3e789b.1a1544cde5b.9a84469afb7e7531=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 include/hid_interface=2Eh | 108 ++++++++++++++++++++--------------------
 1 file changed, 54 insertions(+), 54 deletions(-)

diff --git a/include/hid_interface=2Eh b/include/hid_interface=2Eh
index 2e2d9e6=2E=2E5de30cf 100644
--- a/include/hid_interface=2Eh
+++ b/include/hid_interface=2Eh
@@ -48,7 +48,7 @@
 */ =20
 typedef NTSTATUS
 (*XENHID_HID_ACQUIRE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENHID_HID_RELEASE
@@ -58,7 +58,7 @@ typedef NTSTATUS
 */ =20
 typedef VOID
 (*XENHID_HID_RELEASE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENHID_HID_CALLBACK
@@ -70,9 +70,9 @@ typedef VOID
 */
 typedef BOOLEAN
 (*XENHID_HID_CALLBACK)(
-    IN  PVOID       Argument OPTIONAL,
-    IN  PVOID       Buffer,
-    IN  ULONG       Length
+    _In_opt_ PVOID  Argument,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length
     );
=20
 /*! \typedef XENHID_HID_ENABLE
@@ -87,9 +87,9 @@ typedef BOOLEAN
 */
 typedef NTSTATUS
 (*XENHID_HID_ENABLE)(
-    IN  PINTERFACE          Interface,
-    IN  XENHID_HID_CALLBACK Callback,
-    IN  PVOID               Argument OPTIONAL
+    _In_ PINTERFACE             Interface,
+    _In_ XENHID_HID_CALLBACK    Callback,
+    _In_opt_ PVOID              Argument
     );
=20
 /*! \typedef XENHID_HID_DISABLE
@@ -102,7 +102,7 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENHID_HID_DISABLE)(
-    IN  PINTERFACE  Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENHID_HID_GET_DEVICE_ATTRIBUTES
@@ -111,10 +111,10 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENHID_HID_GET_DEVICE_ATTRIBUTES)(
-    IN  PINTERFACE      Interface,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length,
-    OUT PULONG          Returned
+    _In_ PINTERFACE Interface,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length,
+    _Out_ PULONG    Returned
     );
=20
 /*! \typedef XENHID_HID_GET_DEVICE_DESCRIPTOR
@@ -127,10 +127,10 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENHID_HID_GET_DEVICE_DESCRIPTOR)(
-    IN  PINTERFACE      Interface,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length,
-    OUT PULONG          Returned
+    _In_ PINTERFACE Interface,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length,
+    _Out_ PULONG    Returned
     );
=20
 /*! \typedef XENHID_HID_GET_REPORT_DESCRIPTOR
@@ -143,10 +143,10 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENHID_HID_GET_REPORT_DESCRIPTOR)(
-    IN  PINTERFACE      Interface,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length,
-    OUT PULONG          Returned
+    _In_ PINTERFACE Interface,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length,
+    _Out_ PULONG    Returned
     );
=20
 /*! \typedef XENHID_HID_GET_STRING
@@ -160,11 +160,11 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENHID_HID_GET_STRING)(
-    IN  PINTERFACE      Interface,
-    IN  ULONG           Identifier,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length,
-    OUT PULONG          Returned
+    _In_ PINTERFACE Interface,
+    _In_ ULONG      Identifier,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length,
+    _Out_ PULONG    Returned
     );
=20
 /*! \typedef XENHID_HID_GET_INDEXED_STRING
@@ -178,11 +178,11 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENHID_HID_GET_INDEXED_STRING)(
-    IN  PINTERFACE      Interface,
-    IN  ULONG           Index,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length,
-    OUT PULONG          Returned
+    _In_ PINTERFACE Interface,
+    _In_ ULONG      Index,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length,
+    _Out_ PULONG    Returned
     );
=20
 /*! \typedef XENHID_HID_GET_FEATURE
@@ -196,11 +196,11 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENHID_HID_GET_FEATURE)(
-    IN  PINTERFACE      Interface,
-    IN  ULONG           ReportId,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length,
-    OUT PULONG          Returned
+    _In_ PINTERFACE Interface,
+    _In_ ULONG      ReportId,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length,
+    _Out_ PULONG    Returned
     );
=20
 /*! \typedef XENHID_HID_SET_FEATURE
@@ -213,10 +213,10 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENHID_HID_SET_FEATURE)(
-    IN  PINTERFACE      Interface,
-    IN  ULONG           ReportId,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length
+    _In_ PINTERFACE Interface,
+    _In_ ULONG      ReportId,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length
     );
=20
 /*! \typedef XENHID_HID_GET_INPUT_REPORT
@@ -230,11 +230,11 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENHID_HID_GET_INPUT_REPORT)(
-    IN  PINTERFACE      Interface,
-    IN  ULONG           ReportId,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length,
-    OUT PULONG          Returned
+    _In_ PINTERFACE Interface,
+    _In_ ULONG      ReportId,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length,
+    _Out_ PULONG    Returned
     );
=20
 /*! \typedef XENHID_HID_SET_OUTPUT_REPORT
@@ -247,10 +247,10 @@ typedef NTSTATUS
 */
 typedef NTSTATUS
 (*XENHID_HID_SET_OUTPUT_REPORT)(
-    IN  PINTERFACE      Interface,
-    IN  ULONG           ReportId,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length
+    _In_ PINTERFACE Interface,
+    _In_ ULONG      ReportId,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length
     );
=20
 /*! \typedef XENHID_HID_READ_REPORT
@@ -262,7 +262,7 @@ typedef NTSTATUS
 */
 typedef VOID
 (*XENHID_HID_READ_REPORT)(
-    IN  PINTERFACE      Interface
+    _In_ PINTERFACE Interface
     );
=20
 /*! \typedef XENHID_HID_WRITE_REPORT
@@ -275,10 +275,10 @@ typedef VOID
 */
 typedef NTSTATUS
 (*XENHID_HID_WRITE_REPORT)(
-    IN  PINTERFACE      Interface,
-    IN  ULONG           ReportId,
-    IN  PVOID           Buffer,
-    IN  ULONG           Length
+    _In_ PINTERFACE Interface,
+    _In_ ULONG      ReportId,
+    _In_ PVOID      Buffer,
+    _In_ ULONG      Length
     );
=20
 // {D215E1B5-8C38-420A-AEA6-02520DF3A621}
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.349.e4a76d60db3e789b.1a1544cde5b.9a84469afb7e7531=---


From win-pv-devel-bounces@lists.xenproject.org Tue Oct 20 08:41:51 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 20 Oct 2026 08:41:51 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1455147.1668678 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJ5Pp-0005Tc-VW; Tue, 20 Oct 2026 08:41:49 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1455147.1668678; Tue, 20 Oct 2026 08:41:49 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJ5Pp-0005TV-Ss; Tue, 20 Oct 2026 08:41:49 +0000
Received: by outflank-mailman (input) for mailman id 1455147;
 Tue, 20 Oct 2026 08:41:48 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <owen.smith@citrix.com>) id 1xJ5Po-0005TP-PX
 for win-pv-devel@lists.xenproject.org; Tue, 20 Oct 2026 08:41:48 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJ5Pn-004B5a-R1
 for win-pv-devel@lists.xenproject.org; Tue, 20 Oct 2026 10:41:47 +0200
Received: from [10.42.69.9] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ad7293a-bab6-0a2a0a5309dd-0a2a450988f6-44
 for <win-pv-devel@lists.xenproject.org>; Tue, 20 Oct 2026 10:41:47 +0200
Received: from [40.93.194.65]
 (helo=SN4PR0501CU005.outbound.protection.outlook.com)
 by tlsNG-bad1c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ad7294a-be1a-0a2a45090019-285dc241d389-3
 for <win-pv-devel@lists.xenproject.org>; Tue, 20 Oct 2026 10:41:47 +0200
Received: from SA6PR03MB7760.namprd03.prod.outlook.com (2603:10b6:806:43c::5)
 by SA1PR03MB6354.namprd03.prod.outlook.com (2603:10b6:806:1b5::15)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.522.19; Tue, 20 Oct
 2026 08:41:42 +0000
Received: from SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38]) by SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38%5]) with mapi id 15.21.0522.017; Tue, 20 Oct 2026
 08:41:42 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:x-ms-exchange-senderadcheck"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
 b=fQK6X5Hv2klcLbRY/oPT2hXbWN3kMw7TsIQRnXu2N8yjd1g7JCU6jm8pXgxMKtDqjrTFQlTtNDc04Thx9VbVF8JW2mwjjX0qcH+FpePwZmxAiEQs+eMTBRYDI3AczvuI9L+cgU/CSh3kcsDmI50n2rcry/OHbZKZz1cYyDZ5Cxks+FOUUo1Sl88LvHnraqs8C/uHPqgXSGG7hO/0yD8UdAX5bjglwkR2JTwsKtFuprWDVtKoGxTQyiveYqAL0Cg1h3oJqAktj5ZhYfqetfFK3Mjtipnm+Pav31ycILfaKcYnKuKDvt8hi5AmJl+SdfasiSyqfC5mprsgV2xE3MX+ZQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector10001;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=fE4bubXOAcWs1EQ+C4HIknOinO1Am/Cz4qv9yoOvC7k=;
 b=mxlG0jR036hCD/bpUnJ5RW2BWBIGm40zLpUH3gIo1wxNDCq/oIvTaDkVcpx+FLLC3QLL463+WvwblWCWKrmNI+1ordOGAbCTIBTAlzEI3WizLcdtmaQ3mHmPEwAb0+ACxtFbPgc20xkU0zOVgf9PU1gk2D004eBsyXPbp9oZHi5m3mgiG3RkmYhDoR99dY69FOPmxiBIyaK0MTj368fZOiyCdxJ8YWlljnmtTzKh2JQCOaRl0Lkh8SJvAeQt1P9bC/hVxK5kGJ9TxEbZuMPuw23c4LEf5GUbrxNGmiYPxIyZMNKUdNB+4yoWvf/i1nIo38+YSpTAySxtJRpjUJwHPw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=fE4bubXOAcWs1EQ+C4HIknOinO1Am/Cz4qv9yoOvC7k=;
 b=bpmOc6pG/efPDd8JJM/xY1nMhDEdMy6LZEHnr9BeTC/Kp6NnA3EGxm1LII5bmESQeDVPr3+qNu4sBkaN+kAcC9gPDj/VnP4zEAfNjjE4UoMhsEw0j/kE0hDPvsV48O2gpRzAKDcI7aHgHIjiUXVSz8mV5tD6mth4XwEc6qwNzYg=
From: Owen Smith <owen.smith@citrix.com>
To: =?iso-8859-1?Q?C=E9saire_Mounah?= <cesaire.mounah@vates.tech>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Subject: Re: [PATCH 00/11] xenvkbd: Update annotations to SAL 2.0
Thread-Topic: [PATCH 00/11] xenvkbd: Update annotations to SAL 2.0
Thread-Index: AQHdX8ub3x0vpzJs40ii3INj6cdkErcGHaZg
Date: Tue, 20 Oct 2026 08:41:42 +0000
Message-ID:
 <SA6PR03MB7760B02D5319FA9241F05F5AFE672@SA6PR03MB7760.namprd03.prod.outlook.com>
References:
 <1792415573.8631fc262581453bbf619ec5b2062170.1a1544b27410008425@vates.tech>
In-Reply-To:
 <1792415573.8631fc262581453bbf619ec5b2062170.1a1544b27410008425@vates.tech>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
msip_labels:
authentication-results: mx.microsoft.com 1; dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=citrix.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: SA6PR03MB7760:EE_|SA1PR03MB6354:EE_
x-ms-office365-filtering-correlation-id: fa07c8dc-713e-4a94-b448-08df2e85f77a
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam:
 BCL:0;ARA:13230040|376014|366016|23010399003|1800799024|261009223027099003|10067099003|56012099006|3023799007|6133799003|22082099003|18002099003|11063799006|38070700021;
x-microsoft-antispam-message-info:
 3Xi0UbjsB+i5x02PAjZidfwE5DgWADvz5Djs+Miv8IQdLfDvfXWYlRgtRW/BKtNRfpyLaWZlhdPyBySXykq4HZOdgt43yyzOVPaLEO9lqQmzsu7LvPTcoWMASrKThhSxsZ06+fRvftCn9++DAJZMVfnE/KY7KCxN59iTAgUHImcon1bA4Oj7ykG7XtrBG0GUsWo0uBKOdx6OhXT1zc9gXSd1uK0C6BjdaHKylhOP//vps+BL+9BnNU4mO4N/25Z11sGU1tcaNPPZHeb2i1VW64xAXDFMpUTbLbOoFzGWqtgDORxDxb2erl5wKMb8WKpZOvMdXIXJqabHPHHAtcf8QBiD2kPb9kFOGc4tI8u4ouCNYi/sFNMX8+0trdSqIbDgD148vFSVWTesjPmUuE81ZrMy5ETCHnjoj8gk9xDKVndXntZkY//gbW/iXzd1x31efxN/sZuxl8N2koxDdRSaHnch/LsweO9wy4zvhqmcYrn7W0SQiOiyIYImHdi8AWg3hHxbgtWSRRmYYamJ/A3xuXj/3dWZLrcGJUbdtJIlYMf8hkqInrwYv7hcrM8ude/NtsEyx57lcgZUHqUuBCeOsEHVZJ1jmDFftL7Mx53KrET36rinSee0lq7dUvPiUH1SBUCRGaIGSBA+RrXIlrA/qSHAivAt+hcXVhdRgGn0zwo=
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SA6PR03MB7760.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(366016)(23010399003)(1800799024)(261009223027099003)(10067099003)(56012099006)(3023799007)(6133799003)(22082099003)(18002099003)(11063799006)(38070700021);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?iso-8859-1?Q?O9O8RhBVhOELRG89lTgsiuDA1kISxlm3OK8aIgW6nTF74BpzUBfOTcjol2?=
 =?iso-8859-1?Q?fWiPRwCf/yU3GK2xgc2wOtjcACdSrcNrY9HfeHfddo/ftgryT8TfOJe2qe?=
 =?iso-8859-1?Q?TltBMKObAzLF/wAx5RCJkWFHgKDJba0oUhAlaOKnB8GfGQLiHGpeMU6cD1?=
 =?iso-8859-1?Q?SX5K0QnlZ2ny9M1sNsMxKOsDcihWoo8lM5ByFAnK7GYt1EYH7bBUjlnojZ?=
 =?iso-8859-1?Q?axdh9lmyItsi1cEyyBQyowGW/o1hcvQPXVhBvwgu52vyZYlglRlgV50lSr?=
 =?iso-8859-1?Q?dsdNrdNesGIcpH14gd4apbQ02GrR74r8O4a8uvhI69J182NWp9F/z9kgC8?=
 =?iso-8859-1?Q?ws8hXxtG9I08x4xttQMDBHoZ0v1LO5N9A5q4B7gtXe5afOovo/jqfHYtDU?=
 =?iso-8859-1?Q?+YvQeJf6QV96lgy8T2CN6Hsu+rVGU4hxpv8LqTG66LOnumyAso/OMZknO9?=
 =?iso-8859-1?Q?JZXxVQsES3g4rMmysd8WrsFtoo9NYBZVpSEuzNZ0sHPbsRNypWm2D0x5W7?=
 =?iso-8859-1?Q?BXNP5p6/G8Npm4DHtaXLOs4GqyMmffWG6x1XEDyVU0zsaKm2pJpemOYFbD?=
 =?iso-8859-1?Q?TxwSZKiSkN3pz2DIkf2Fo3oXgrt+No78JQRJprGGqDgWKBfrwdpVYfr/f4?=
 =?iso-8859-1?Q?EvVTpm6IU8IoQk94KbTl/1QD8txkY5qj+k7Jj5zjr9p09rbomp5sGZ34E0?=
 =?iso-8859-1?Q?n94vOtvIXv2IpLLfnNKxvnI9CGwMQAjQEThvB75JdGQdfn3vBSRzIdYIBX?=
 =?iso-8859-1?Q?SY0pbHERPqadfwV3BM+qfVWlKh3B0b4L+D0+V8mzwDH30RW3NB/1rcWU6D?=
 =?iso-8859-1?Q?X/SZbR7AK3AA+qrSTuXtHM0SS0TRuMgUTJLsQti5BCqq1ygsboK7kBQwAF?=
 =?iso-8859-1?Q?dyVCplD0SHXR2WlW3OSiaKSuTEIqd9/h0AVUANVUkd45DCjMCM08rEzmpu?=
 =?iso-8859-1?Q?dHfnEH2YRsICq6HKFmXxDT/zxXSaKDzKBvVUkzqc/h5iToGVS9D473RpNr?=
 =?iso-8859-1?Q?rPdUtaUWVutd0hohoGF3XE5oVwDc7oihRn7F4Py+bc3WtllzuBoNj3ER/E?=
 =?iso-8859-1?Q?1Ku4KYqhwZ8cklhMRenMqpRv4Xiet0RC1yA1mJTH3JUzMAuVoydU8CxE6X?=
 =?iso-8859-1?Q?JQWAE26wk4eIy14S7dcfTorVM42Y7Jtr9eC7/dPSdV26355RkHZDKG0NAO?=
 =?iso-8859-1?Q?2GREbOU9hjfon7DngvCptcaCcToeEoIzuRYEzys7F1USTqry+k97juIWXX?=
 =?iso-8859-1?Q?eNNIXyYavySlUvMC8UXDmhEOfi7ddgCoAAnnLjYnqvvTSQJckh0M8HYGq+?=
 =?iso-8859-1?Q?ALmWxXWVU/HVtS0jrULOXhjUNoGm5AYLXbyr8fl4H3pQe9H+uJSvSQNP/B?=
 =?iso-8859-1?Q?16SKLSqmrX5RCNWv4TYEVAzPSIe7u5pLz7TtFGKQx1KbT/AX/GGSZSEiK9?=
 =?iso-8859-1?Q?Rd+cQB8fz3XdQ3KmbmPVpvnZgRsNCHJG1WI6c4VeI39uGB/iB6gLVRZjAp?=
 =?iso-8859-1?Q?L3ABDcMs83+dS6wyBw51hj/0AamZKS8imUxQ+qgyaX1Xjm88gpO4Twoiqi?=
 =?iso-8859-1?Q?aIFTADNR9Ct3E5o5HWfvFJeqgVyr0A3bbOFHeQI405HD5QUqVTm1Zt5S40?=
 =?iso-8859-1?Q?bdlQkzzRmc8uv1LmOhkCe6/ZJ6sV4NvUePAhxaw1nM1b1eScigM6/aTvuJ?=
 =?iso-8859-1?Q?HhNeTCTJSnIkDOZ6xj3UmeDn0LGKCz4I8mMJzAIpyGNw/daU9mzb3Voeys?=
 =?iso-8859-1?Q?UmzTlz3jAov4PadIJYqKptTvGKrremF2gWDqkrLQ2eG6cw?=
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-OriginatorOrg: citrix.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: SA6PR03MB7760.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: fa07c8dc-713e-4a94-b448-08df2e85f77a
X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Oct 2026 08:41:42.6865
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: FNlyN43o7eq6/szvNfatLCgm62sF+ZCiFt5P4NNc+n/PHBZkzouNJFjucUhD98xsNq2tWAjerl+Bbrro2LPiNQ==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR03MB6354
X-purgate-ID: tlsNG-bad1c0/1792485707-FCE14034-BD67970A/0/0
X-purgate-type: clean
X-purgate-size: 3658

This series looks good.
I did notice no change to the INF, but since there is no interface version =
changes,
INF binding changes are not required. It may become needed later.

Reviewed-by: Owen Smith <owen.smith@citrix.com>

________________________________________
From: win-pv-devel <win-pv-devel-bounces@lists.xenproject.org> on behalf of=
 C=E9saire Mounah <cesaire.mounah@vates.tech>
Sent: 19 October 2026 2:12 PM
To: win-pv-devel@lists.xenproject.org
Cc: C=E9saire Mounah
Subject: [PATCH 00/11] xenvkbd: Update annotations to SAL 2.0

This patch series updates the xenvkbd driver to use SAL 2.0
annotations and fixes the issues found after code analysis.

It is organized into three parts: sync common files with xenbus,
update annotations to SAL 2.0, and fix issues found after code analysis.

Part 1: Sync common files with xenbus
* xenvkbd: sync common files with xenbus
* registry: sync with xenbus
* xenvkbd: sync xenhid interface

Part 2: Update annotations to SAL 2.0
* xenvkbd: convert annotations to SAL 2.0
* xenvkbd: Update string typedefs
* xenvkbd: Annotate remaining unannotated parameters
* xenvkbd: Annotate modified parameters as _Out_ or _Inout_
* xenvkbd: Add size annotations to buffer parameters

Part 3: Fix issues found after code analysis
* xenvkbd: Fix annotations reported by code analysis
* driver: fix inconsistent annotation
* xenvkbd: Add an ASSERT on the array bound in SetArray

C=E9saire Mounah (11):
  xenvkbd: sync common files with xenbus
  registry: sync with xenbus
  xenvkbd: sync xenhid interface
  xenvkbd: convert annotations to SAL 2.0
  xenvkbd: Update string typedefs
  xenvkbd: Annotate remaining unannotated parameters
  xenvkbd: Annotate modified parameters as _Out_ or _Inout_
  xenvkbd: Add size annotations to buffer parameters
  xenvkbd: Fix annotations reported by code analysis
  driver: fix inconsistent annotation
  xenvkbd: Add an ASSERT on the array bound in SetArray

 include/cache_interface.h     | 130 ++++-----
 include/debug_interface.h     |  88 +++---
 include/evtchn_interface.h    | 136 +++++-----
 include/gnttab_interface.h    | 148 +++++------
 include/hid_interface.h       | 108 ++++----
 include/range_set_interface.h | 100 +++----
 include/store_interface.h     | 156 +++++------
 include/suspend_interface.h   |  80 +++---
 src/xenvkbd/assert.h          |  82 +++---
 src/xenvkbd/bus.c             |  68 ++---
 src/xenvkbd/bus.h             |   6 +-
 src/xenvkbd/dbg_print.h       |  34 +--
 src/xenvkbd/driver.c          |  31 +--
 src/xenvkbd/fdo.c             | 486 +++++++++++++++++-----------------
 src/xenvkbd/fdo.h             |  70 ++---
 src/xenvkbd/frontend.c        | 132 ++++-----
 src/xenvkbd/frontend.h        |  28 +-
 src/xenvkbd/hid.c             | 144 +++++-----
 src/xenvkbd/hid.h             |  20 +-
 src/xenvkbd/mrsw.h            |  24 +-
 src/xenvkbd/mutex.h           |  10 +-
 src/xenvkbd/names.h           |  24 +-
 src/xenvkbd/pdo.c             | 334 +++++++++++------------
 src/xenvkbd/pdo.h             |  76 +++---
 src/xenvkbd/registry.c        | 418 +++++++++++++++++++----------
 src/xenvkbd/registry.h        | 130 ++++-----
 src/xenvkbd/ring.c            | 136 +++++-----
 src/xenvkbd/ring.h            |  32 +--
 src/xenvkbd/thread.c          |  34 +--
 src/xenvkbd/thread.h          |  18 +-
 src/xenvkbd/util.h            |  87 +++---
 31 files changed, 1750 insertions(+), 1620 deletions(-)

--
2.55.0.windows.5



--
C=E9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen Orchestra - Vates solutions

web: https://vates.tech


From win-pv-devel-bounces@lists.xenproject.org Tue Oct 20 11:53:17 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 20 Oct 2026 11:53:17 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1455760.1669439 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJ8P6-0008Cc-Iw; Tue, 20 Oct 2026 11:53:16 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1455760.1669439; Tue, 20 Oct 2026 11:53:16 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJ8P6-0008CV-Fy; Tue, 20 Oct 2026 11:53:16 +0000
Received: by outflank-mailman (input) for mailman id 1455760;
 Tue, 20 Oct 2026 11:53:15 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a159288539000f79f@swg.vates.tech>)
 id 1xJ8P4-0008Au-O6
 for win-pv-devel@lists.xenproject.org; Tue, 20 Oct 2026 11:53:15 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJ8P3-00D8X1-Sx
 for win-pv-devel@lists.xenproject.org; Tue, 20 Oct 2026 13:53:13 +0200
Received: from [10.42.69.3] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a159288539000f79f@swg.vates.tech>)
 id 6ad7561b-bab6-0a2a0a5309dd-0a2a4503cbe8-32
 for <win-pv-devel@lists.xenproject.org>; Tue, 20 Oct 2026 13:53:13 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-33051d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a159288539000f79f@swg.vates.tech>)
 id 6ad75629-fae8-0a2a45030019-b9ff1c2392a9-3
 for <win-pv-devel@lists.xenproject.org>; Tue, 20 Oct 2026 13:53:13 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a159288539000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Tue, 20 Oct 2026 11:53:10 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 2CF44820C3;
 Tue, 20 Oct 2026 13:53:09 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=O/37HRZyRAZon9D64ogLlhyx3Y2atkvSYuEjrfkoMlY=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:feedback-id;
 b=mBi4ud0kVjeurr0lqD2FqB2n4CTOHdFZd6e1ulcfdoCOiXwwzUg41pyQtgaqUKW1Mc3HKzs2n
 SUjqd6M6JgrOylEhNLx3Khw6ILH9ZoB5D+rHYy+atnSdxhlEEwBopPcrxfG7TbX9Mh7C4dGXyHn
 p1YWFt2N8RiZFBnVSZu5Rgw+vk5cxlXQQtXlGl6MEkA2GnZJJLtGLndf0SAXrcOFJO6yhI81cLI
 i+gue/Q3URV1v0nDLrGvp8konYNRsU5u8D1g1f/HVfWSS0fJY6BwNmoh++eXglEHvybBS+HT7iz
 GWc5zsNLZfTSgwrxCdzhKEiWjEyjMZ2XAdeFRHWcWcYw==
X-Zone-Loop: fe91ddd616366f96ea662974050120c9d22f8f7e75ea
x-campaign-type: default
x-transaction-id: c3b4f372-4ebb-4068-951f-2314f4e068e4
x-swg-uid: 01-6dfc6760-b5f7-4510-82be-c21fb3fbde7e
X-Mailer: Sweego
Message-ID:
 <1792497190.8631fc262581453bbf619ec5b2062170.1a159288539000f79f@vates.tech>
x-swg-bid: 1792497190.8631fc262581453bbf619ec5b2062170.1a159288539000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 0/5] xeniface: fixes from static analysis
Date: Tue, 20 Oct 2026 13:53:02 +0200
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.34.15527b010ede0a2a.1a1592881ca.6909eec53d06ded0=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792497189328
X-purgate-ID: tlsNG-33051d/1792497193-766FB4E9-BAB2220E/0/0
X-purgate-type: clean
X-purgate-size: 1261

---=Part.34.15527b010ede0a2a.1a1592881ca.6909eec53d06ded0=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

These patches fix issues found by running CodeQL (Microsoft
windows-drivers suites and cpp-security-extended) on xeniface=2E

C=C3=A9saire Mounah (5):
  xenagent: Use new (std::nothrow) where the result is checked for NULL
  xenagent: Let CXenIfaceDevice release its own registrations
  xeniface: Reject unaligned addresses in
    GNTTAB_PERMIT_FOREIGN_ACCESS_V2
  xeniface: Size converted MAP_FOREIGN_PAGES input with the V2 header
  xeniface: Bound NumberPermissions before checking the input length

 src/xenagent/convdevice=2Ecpp     |   3 +-
 src/xenagent/devicelist=2Ecpp     |  11 +-
 src/xenagent/xenifacedevice=2Ecpp | 177 +++++++++++++++++---------------
 src/xenagent/xenifacedevice=2Eh   |  20 ++--
 src/xeniface/ioctl_gnttab=2Ec     |   6 +-
 src/xeniface/ioctl_store=2Ec      |   5 +
 6 files changed, 125 insertions(+), 97 deletions(-)

--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.34.15527b010ede0a2a.1a1592881ca.6909eec53d06ded0=---


From win-pv-devel-bounces@lists.xenproject.org Tue Oct 20 11:55:27 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 20 Oct 2026 11:55:27 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1455763.1669447 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJ8RD-0001Ag-Sf; Tue, 20 Oct 2026 11:55:27 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1455763.1669447; Tue, 20 Oct 2026 11:55:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJ8RD-0001AS-NP; Tue, 20 Oct 2026 11:55:27 +0000
Received: by outflank-mailman (input) for mailman id 1455763;
 Tue, 20 Oct 2026 11:55:26 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1592a900e000f79f@swg.vates.tech>)
 id 1xJ8RC-00019u-Oh
 for win-pv-devel@lists.xenproject.org; Tue, 20 Oct 2026 11:55:26 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJ8RC-002Rjq-1r
 for win-pv-devel@lists.xenproject.org; Tue, 20 Oct 2026 13:55:26 +0200
Received: from [10.42.69.2] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1592a900e000f79f@swg.vates.tech>)
 id 6ad756a9-bab6-0a2a0a5309dd-0a2a4502a36e-16
 for <win-pv-devel@lists.xenproject.org>; Tue, 20 Oct 2026 13:55:26 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1592a900e000f79f@swg.vates.tech>)
 id 6ad756ad-6ca4-0a2a45020019-b9ff1c23938b-3
 for <win-pv-devel@lists.xenproject.org>; Tue, 20 Oct 2026 13:55:25 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1592a900e000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Tue, 20 Oct 2026 11:55:24 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 6E20182426;
 Tue, 20 Oct 2026 13:55:23 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=mEB4cIS/KALW72qeR60a7RnMhhaABcCJr35O4opIUDc=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=CfMbJkfAWLhC0FBQrFYUuZEUUDwoExCIH0Hjo7y3FM3BTnCRmUmvweWN2ku66gi+ePY7QMpuG
 Cl1VXi1u+zv57lqY62oWESc6S6i9MwZ6KWGxzOnSyPc7uk9cOQwd9rhiQaBtodmG6PonrebM/Cx
 zR/KMuijoWdUWCR2PAu4YrNH2ELTe+bNsh//IslmWAkbnzolzaLmJYNhHHd2OVND0LHWSTzHIeW
 iV0qga9ZTz0d/1EJaVTs9RiWA9+XRJYGYrXFv4UND3WM24ii2NWG3FrE/2jaMyFZinA7rhw+q9l
 6CMFojrEGI+KBNt5a8imV9V88nIWc7/U+QbcoIUb2+HQ==
X-Zone-Loop: 7eec0ed1fe2c2ac58cc2c11d87495efe5a851cb53f86
x-campaign-type: default
x-transaction-id: ef7a52b1-9a6b-45f0-b572-91f61678cd71
x-swg-uid: 01-9d387c90-37e4-4c28-90f9-d35a029c78a1
X-Mailer: Sweego
Message-ID:
 <1792497324.8631fc262581453bbf619ec5b2062170.1a1592a900e000f79f@vates.tech>
x-swg-bid: 1792497324.8631fc262581453bbf619ec5b2062170.1a1592a900e000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 3/5] xeniface: Reject unaligned addresses in GNTTAB_PERMIT_FOREIGN_ACCESS_V2
Date: Tue, 20 Oct 2026 13:55:16 +0200
In-Reply-To: <1792497190.8631fc262581453bbf619ec5b2062170.1a159288539000f79f@vates.tech>
References: <1792497190.8631fc262581453bbf619ec5b2062170.1a159288539000f79f@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.38.d89ebe6694cdf3c1.1a1592a8e13.26592612cb926a70=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792497323539
X-purgate-ID: tlsNG-720697/1792497325-664B62AC-79795DFE/0/0
X-purgate-type: clean
X-purgate-size: 1550

---=Part.38.d89ebe6694cdf3c1.1a1592a8e13.26592612cb926a70=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

IOCTL_XENIFACE_GNTTAB_PERMIT_FOREIGN_ACCESS_V2 lets user mode pass the
address of the memory to share, but the address was never checked for
page alignment=2E Pages are granted whole, so an unaligned address makes
the MDL span one more page than NumberPages and shares partial pages at
both ends=2E

Fail the request with STATUS_INVALID_PARAMETER instead=2E The legacy IOCTL
always passes NULL and is not affected=2E

Assisted-by: Claude:Opus-5=2E5
Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xeniface/ioctl_gnttab=2Ec | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/xeniface/ioctl_gnttab=2Ec b/src/xeniface/ioctl_gnttab=2Ec
index 0dab8e2=2E=2E8256012 100644
--- a/src/xeniface/ioctl_gnttab=2Ec
+++ b/src/xeniface/ioctl_gnttab=2Ec
@@ -393,7 +393,9 @@ IoctlGnttabPermitForeignAccess(
     }
=20
     Status =3D STATUS_INVALID_PARAMETER;
-    if (In->NumberPages =3D=3D 0 || In->NumberPages > GNTTAB_MAX_PAGES) {
+    if (In->NumberPages =3D=3D 0 ||
+        In->NumberPages > GNTTAB_MAX_PAGES ||
+        BYTE_OFFSET(In->Address) !=3D 0) {
         goto fail4;
     }
=20
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.38.d89ebe6694cdf3c1.1a1592a8e13.26592612cb926a70=---


From win-pv-devel-bounces@lists.xenproject.org Tue Oct 20 11:55:27 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 20 Oct 2026 11:55:27 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1455762.1669445 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJ8RD-0001AO-Rp; Tue, 20 Oct 2026 11:55:27 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1455762.1669445; Tue, 20 Oct 2026 11:55:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJ8RD-0001AG-Lz; Tue, 20 Oct 2026 11:55:27 +0000
Received: by outflank-mailman (input) for mailman id 1455762;
 Tue, 20 Oct 2026 11:55:26 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1592a8db6000f79f@swg.vates.tech>)
 id 1xJ8RC-00019K-OV
 for win-pv-devel@lists.xenproject.org; Tue, 20 Oct 2026 11:55:26 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJ8RB-002Rjq-U1
 for win-pv-devel@lists.xenproject.org; Tue, 20 Oct 2026 13:55:25 +0200
Received: from [10.42.69.2] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1592a8db6000f79f@swg.vates.tech>)
 id 6ad756a9-bab6-0a2a0a5309dd-0a2a4502a36e-14
 for <win-pv-devel@lists.xenproject.org>; Tue, 20 Oct 2026 13:55:25 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1592a8db6000f79f@swg.vates.tech>)
 id 6ad756ad-6ca4-0a2a45020019-b9ff1c229f43-3
 for <win-pv-devel@lists.xenproject.org>; Tue, 20 Oct 2026 13:55:25 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1592a8db6000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Tue, 20 Oct 2026 11:55:23 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 9AA5A81CB9;
 Tue, 20 Oct 2026 13:55:22 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=juYEUAqHhSwHHnfu+tJfF7KmpwDFsP23jo9g67FI7V4=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=UY0WcolUbzuNUF0r5pDj6SyaGDjOoq1Bojw1Jx593yxtX6pk9vWVR/PChHfkujJpUxTaadZYC
 zNvwQKt8UA10lmQFkHXW6Glapn4Dygel4DDBpqY+5T9ZRWH5dcrqyOcT7Ooe00lrVzuDcLkeXRO
 EI3YiuqTM48lgQ23zSqC37tWQllNxLSFsYsEdxOTMr2IbQt+G0mKQ0jLkpeGyWEDthor+D+gl0/
 wnieNWI+if72Lx6S1qXoaYkm189n96So/QMiA1RymDE2yfyjvLFO8cUcGu/g6NKU1179kNPfdOo
 ainz9ZF1AbRvef4C0vCVBvogsGsMB19TOsS5twzj/SHA==
X-Zone-Loop: 4beda6b5e9681c4775b4ac4b992a194d149d768161b4
x-campaign-type: default
x-transaction-id: ed1170af-3463-47aa-8ad7-39cd116d342b
x-swg-uid: 01-faa86712-cf67-4847-b91c-02c61288fc33
X-Mailer: Sweego
Message-ID:
 <1792497323.8631fc262581453bbf619ec5b2062170.1a1592a8db6000f79f@vates.tech>
x-swg-bid: 1792497323.8631fc262581453bbf619ec5b2062170.1a1592a8db6000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 1/5] xenagent: Use new (std::nothrow) where the result is checked for NULL
Date: Tue, 20 Oct 2026 13:55:14 +0200
In-Reply-To: <1792497190.8631fc262581453bbf619ec5b2062170.1a159288539000f79f@vates.tech>
References: <1792497190.8631fc262581453bbf619ec5b2062170.1a159288539000f79f@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.36.89be18e759c9d105.1a1592a8ae6.6e7f475e0e31f66b=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792497322726
X-purgate-ID: tlsNG-720697/1792497325-31BC82AC-D1245FD4/0/0
X-purgate-type: clean
X-purgate-size: 3850

---=Part.36.89be18e759c9d105.1a1592a8ae6.6e7f475e0e31f66b=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Plain operator new throws std::bad_alloc instead of returning NULL, so
the NULL checks after these allocations were dead code=2E Use the nothrow
form so that the existing failure paths are taken on allocation failure=2E

Assisted-By: Claude:Claude-Opus-5=2E5
Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xenagent/convdevice=2Ecpp     | 3 ++-
 src/xenagent/devicelist=2Ecpp     | 3 ++-
 src/xenagent/xenifacedevice=2Ecpp | 7 ++++---
 3 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/src/xenagent/convdevice=2Ecpp b/src/xenagent/convdevice=2Ecpp
index 5a25be1=2E=2Eb77fe5b 100644
--- a/src/xenagent/convdevice=2Ecpp
+++ b/src/xenagent/convdevice=2Ecpp
@@ -34,6 +34,7 @@
 #include <stdio=2Eh>
 #include <powrprof=2Eh>
 #include <winuser=2Eh>
+#include <new>
=20
 #include "service=2Eh"
 #include "convdevice=2Eh"
@@ -154,7 +155,7 @@ CConvDeviceList::CConvDeviceList(CXenAgent* agent) : C=
DeviceList(GUID_GPIOBUTTON
=20
 /*virtual*/ CDevice* CConvDeviceList::Create(const wchar_t* path)
 {
-    return new CConvDevice(path);
+    return new (std::nothrow) CConvDevice(path);
 }
=20
 /*virtual*/ void CConvDeviceList::OnDeviceAdded(CDevice* dev)
diff --git a/src/xenagent/devicelist=2Ecpp b/src/xenagent/devicelist=2Ecpp
index d6af5d4=2E=2E8bf9b2b 100644
--- a/src/xenagent/devicelist=2Ecpp
+++ b/src/xenagent/devicelist=2Ecpp
@@ -31,6 +31,7 @@
=20
 #include <windows=2Eh>
 #include <string>
+#include <new>
 #include <setupapi=2Eh>
 #pragma comment (lib , "setupapi=2Elib" )
=20
@@ -247,7 +248,7 @@ void CDeviceList::EnumerateDevices()
                                         0,
                                         &len,
                                         NULL);
-        detail =3D (PSP_DEVICE_INTERFACE_DETAIL_DATA)new BYTE[len];
+        detail =3D (PSP_DEVICE_INTERFACE_DETAIL_DATA)new (std::nothrow) B=
YTE[len];
         if (detail =3D=3D NULL)
             continue;
         detail->cbSize =3D sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
diff --git a/src/xenagent/xenifacedevice=2Ecpp b/src/xenagent/xenifacedevi=
ce=2Ecpp
index f81a838=2E=2E763abf0 100644
--- a/src/xenagent/xenifacedevice=2Ecpp
+++ b/src/xenagent/xenifacedevice=2Ecpp
@@ -33,6 +33,7 @@
 #include <windows=2Eh>
 #include <winioctl=2Eh>
 #include <powrprof=2Eh>
+#include <new>
=20
 #include "service=2Eh"
 #include "xenifacedevice=2Eh"
@@ -65,7 +66,7 @@ bool CXenIfaceDevice::StoreRead(const std::string& path,=
 std::string& value)
           NULL, 0,
           &bytes);
=20
-    buffer =3D new char[(size_t)bytes + 1];
+    buffer =3D new (std::nothrow) char[(size_t)bytes + 1];
     if (buffer =3D=3D NULL)
         return false;
=20
@@ -85,7 +86,7 @@ bool CXenIfaceDevice::StoreWrite(const std::string& path=
, const std::string& val
 {
     bool   result;
     size_t length =3D path=2Elength() + 1 + value=2Elength() + 1 + 1;
-    char*  buffer =3D new char[length];
+    char*  buffer =3D new (std::nothrow) char[length];
     if (buffer =3D=3D NULL)
         return false;
=20
@@ -202,7 +203,7 @@ CXenIfaceDeviceList::CXenIfaceDeviceList(CXenAgent* ag=
ent) : CDeviceList(GUID_IN
=20
 /*virtual*/ CDevice* CXenIfaceDeviceList::Create(const wchar_t* path)
 {
-    return new CXenIfaceDevice(path);
+    return new (std::nothrow) CXenIfaceDevice(path);
 }
=20
 /*virtual*/ void CXenIfaceDeviceList::OnDeviceAdded(CDevice* dev)
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.36.89be18e759c9d105.1a1592a8ae6.6e7f475e0e31f66b=---


From win-pv-devel-bounces@lists.xenproject.org Tue Oct 20 11:55:28 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 20 Oct 2026 11:55:28 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1455764.1669451 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJ8RE-0001Ek-Tb; Tue, 20 Oct 2026 11:55:28 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1455764.1669451; Tue, 20 Oct 2026 11:55:28 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJ8RE-0001Ed-Qi; Tue, 20 Oct 2026 11:55:28 +0000
Received: by outflank-mailman (input) for mailman id 1455764;
 Tue, 20 Oct 2026 11:55:26 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1592a8eb5000f79f@swg.vates.tech>)
 id 1xJ8RC-00019t-Og
 for win-pv-devel@lists.xenproject.org; Tue, 20 Oct 2026 11:55:26 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJ8RC-002Rjq-0r
 for win-pv-devel@lists.xenproject.org; Tue, 20 Oct 2026 13:55:26 +0200
Received: from [10.42.69.9] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1592a8eb5000f79f@swg.vates.tech>)
 id 6ad756a2-bab6-0a2a0a5309dd-0a2a4509e4d6-40
 for <win-pv-devel@lists.xenproject.org>; Tue, 20 Oct 2026 13:55:26 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-bad1c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1592a8eb5000f79f@swg.vates.tech>)
 id 6ad756ad-be1a-0a2a45090019-b9ff1c22b45d-3
 for <win-pv-devel@lists.xenproject.org>; Tue, 20 Oct 2026 13:55:25 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1592a8eb5000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Tue, 20 Oct 2026 11:55:23 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 2EB6A823AA;
 Tue, 20 Oct 2026 13:55:23 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=XzWOYAwXphzK3X31TNSbe1hsy0SQk12Mqvvowf46bGQ=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=Ua0wajYqRtk7jM4PtNMG2DmNrIMZ8lVSedqccW/myWxam64V6IBXUgelPVWd1K3RSWAYfoUAx
 Zsp2D3egumSduVBW355YMLIjb9qyVRhjDv/1WpccdtLz1dqqQCrO/R8E4bAL/3pjN2txLbRAPo/
 rwpZbj2EFZC5aL6Ga6FriOFwnAg1w5Z+XBUI7yYwYFry9rnC7NaSVr+9JO0hmXjxbRPyBAhRCXt
 4UaQdXigRECJXy4W9oen4yCywGqrwjs16wCe9zpdI6f3Eiuv+QgPnxPJNGxSsX9xYLRW1cNvW0L
 7YTps7RQXd+nYojTIITqbBcdG98D/x1Q9vmq8rPEAE9g==
X-Zone-Loop: 96a330e8c57f59e4a69be7217931d4b9d4d83870db6e
x-campaign-type: default
x-transaction-id: a444f37a-ee4b-4615-9ba0-bfc3e70e09b9
x-swg-uid: 01-9b9b7948-db9e-411e-bf50-4b137ebcb396
X-Mailer: Sweego
Message-ID:
 <1792497323.8631fc262581453bbf619ec5b2062170.1a1592a8eb5000f79f@vates.tech>
x-swg-bid: 1792497323.8631fc262581453bbf619ec5b2062170.1a1592a8eb5000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 2/5] xenagent: Let CXenIfaceDevice release its own registrations
Date: Tue, 20 Oct 2026 13:55:15 +0200
In-Reply-To: <1792497190.8631fc262581453bbf619ec5b2062170.1a159288539000f79f@vates.tech>
References: <1792497190.8631fc262581453bbf619ec5b2062170.1a159288539000f79f@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.37.5012ccf6fb9f633d.1a1592a8d12.8e207595ec17b49f=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792497323283
X-purgate-ID: tlsNG-bad1c0/1792497325-BF4D3034-FD059AAF/0/0
X-purgate-type: clean
X-purgate-size: 10401

---=Part.37.5012ccf6fb9f633d.1a1592a8d12.8e207595ec17b49f=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

The CDeviceList destructor called CleanupDeviceList(), which calls the
pure virtual OnDeviceRemoved() after the derived class has already been
destroyed=2E

The suspend registration and the shutdown and slate-mode watches are
registered on the device handle, but their contexts were kept in
CXenIfaceDeviceList, so only that callback could release them=2E Move the
contexts into CXenIfaceDevice and release them in its destructor, before
~CDevice() closes the handle=2E ~CDeviceList() now only deletes the
devices=2E

Assisted-by: Claude:Opus-5=2E5
Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xenagent/devicelist=2Ecpp     |   8 +-
 src/xenagent/xenifacedevice=2Ecpp | 170 +++++++++++++++++---------------
 src/xenagent/xenifacedevice=2Eh   |  20 ++--
 3 files changed, 108 insertions(+), 90 deletions(-)

diff --git a/src/xenagent/devicelist=2Ecpp b/src/xenagent/devicelist=2Ecpp
index 8bf9b2b=2E=2E63aa7dd 100644
--- a/src/xenagent/devicelist=2Ecpp
+++ b/src/xenagent/devicelist=2Ecpp
@@ -185,7 +185,13 @@ CDeviceList::CDeviceList(const GUID& itf) :
 CDeviceList::~CDeviceList()
 {
     UnregisterForDeviceChange();
-    CleanupDeviceList();
+
+    for (DeviceMap::iterator it =3D m_devs=2Ebegin();
+         it !=3D m_devs=2Eend();
+         ++it) {
+        delete *it;
+    }
+    m_devs=2Eclear();
=20
     DeleteCriticalSection(&m_crit);
 }
diff --git a/src/xenagent/xenifacedevice=2Ecpp b/src/xenagent/xenifacedevi=
ce=2Ecpp
index 763abf0=2E=2Ed3e02a9 100644
--- a/src/xenagent/xenifacedevice=2Ecpp
+++ b/src/xenagent/xenifacedevice=2Ecpp
@@ -48,11 +48,18 @@
=20
 #define TIME_SYNC_MODE_DISABLED 0
=20
-CXenIfaceDevice::CXenIfaceDevice(const wchar_t* path) : CDevice(path)
+CXenIfaceDevice::CXenIfaceDevice(const wchar_t* path) : CDevice(path),
+    m_ctxt_suspend(NULL),
+    m_ctxt_shutdown(NULL),
+    m_ctxt_slate_mode(NULL)
 {}
=20
 /*virtual*/ CXenIfaceDevice::~CXenIfaceDevice()
-{}
+{
+    StopSlateModeWatch();
+    StopShutdownWatch();
+    StopSuspendWatch();
+}
=20
 // store interface
 bool CXenIfaceDevice::StoreRead(const std::string& path, std::string& val=
ue)
@@ -182,11 +189,72 @@ bool CXenIfaceDevice::Log(const std::string& msg)
                  NULL, 0);
 }
=20
+void CXenIfaceDevice::StartSuspendWatch(HANDLE evt)
+{
+    if (m_ctxt_suspend)
+        return;
+
+    SuspendRegister(evt, &m_ctxt_suspend);
+}
+
+void CXenIfaceDevice::StopSuspendWatch()
+{
+    if (!m_ctxt_suspend)
+        return;
+
+    SuspendDeregister(m_ctxt_suspend);
+    m_ctxt_suspend =3D NULL;
+}
+
+void CXenIfaceDevice::StartShutdownWatch(HANDLE evt)
+{
+    if (m_ctxt_shutdown)
+        return;
+
+    StoreAddWatch("control/shutdown", evt, &m_ctxt_shutdown);
+
+    StoreWrite("control/feature-poweroff", "1");
+    StoreWrite("control/feature-reboot", "1");
+    StoreWrite("control/feature-s3", "1");
+    StoreWrite("control/feature-s4", "1");
+}
+
+void CXenIfaceDevice::StopShutdownWatch()
+{
+    if (!m_ctxt_shutdown)
+        return;
+
+    StoreWrite("control/feature-poweroff", "");
+    StoreWrite("control/feature-reboot", "");
+    StoreWrite("control/feature-s3", "");
+    StoreWrite("control/feature-s4", "");
+
+    StoreRemoveWatch(m_ctxt_shutdown);
+    m_ctxt_shutdown =3D NULL;
+}
+
+void CXenIfaceDevice::StartSlateModeWatch(HANDLE evt)
+{
+    if (m_ctxt_slate_mode)
+        return;
+
+    StoreAddWatch("control/laptop-slate-mode", evt, &m_ctxt_slate_mode);
+    StoreWrite("control/feature-laptop-slate-mode", "1");
+}
+
+void CXenIfaceDevice::StopSlateModeWatch()
+{
+    if (!m_ctxt_slate_mode)
+        return;
+
+    StoreRemove("control/feature-laptop-slate-mode");
+
+    StoreRemoveWatch(m_ctxt_slate_mode);
+    m_ctxt_slate_mode =3D NULL;
+}
+
 CXenIfaceDeviceList::CXenIfaceDeviceList(CXenAgent* agent) : CDeviceList(=
GUID_INTERFACE_XENIFACE),
-    m_agent(agent),
-    m_ctxt_suspend(NULL),
-    m_ctxt_shutdown(NULL),
-    m_ctxt_slate_mode(NULL)
+    m_agent(agent)
 {
     m_evt_shutdown =3D CreateEvent(NULL, TRUE, FALSE, NULL);
     m_evt_suspend =3D CreateEvent(NULL, TRUE, FALSE, NULL);
@@ -215,11 +283,11 @@ CXenIfaceDeviceList::CXenIfaceDeviceList(CXenAgent* =
agent) : CDeviceList(GUID_IN
=20
     CXenIfaceDevice* device =3D (CXenIfaceDevice*)dev;
=20
-    device->SuspendRegister(m_evt_suspend, &m_ctxt_suspend);
-    StartShutdownWatch(device);
+    device->StartSuspendWatch(m_evt_suspend);
+    device->StartShutdownWatch(m_evt_shutdown);
=20
     if (m_agent->ConvDevicePresent())
-        StartSlateModeWatch(device);
+        device->StartSlateModeWatch(m_evt_slate_mode);
=20
     SetXenTime(device, false);
 }
@@ -229,17 +297,9 @@ CXenIfaceDeviceList::CXenIfaceDeviceList(CXenAgent* a=
gent) : CDeviceList(GUID_IN
     CCritSec crit(&m_crit);
     CXenIfaceDevice* device =3D (CXenIfaceDevice*)dev;
=20
-    if (dev !=3D GetFirstDevice())
-        return;
-
-    if (m_ctxt_suspend)
-        device->SuspendDeregister(m_ctxt_suspend);
-    m_ctxt_suspend =3D NULL;
-
-    if (m_agent->ConvDevicePresent())
-        StopSlateModeWatch(device);
-
-    StopShutdownWatch(device);
+    device->StopSuspendWatch();
+    device->StopSlateModeWatch();
+    device->StopShutdownWatch();
 }
=20
 /*virtual*/ void CXenIfaceDeviceList::OnDeviceSuspend(CDevice* dev)
@@ -247,13 +307,8 @@ CXenIfaceDeviceList::CXenIfaceDeviceList(CXenAgent* a=
gent) : CDeviceList(GUID_IN
     CCritSec crit(&m_crit);
     CXenIfaceDevice* device =3D (CXenIfaceDevice*)dev;
=20
-    if (dev !=3D GetFirstDevice())
-        return;
-
-    if (m_agent->ConvDevicePresent())
-        StopSlateModeWatch(device);
-
-    StopShutdownWatch(device);
+    device->StopSlateModeWatch();
+    device->StopShutdownWatch();
 }
=20
 /*virtual*/ void CXenIfaceDeviceList::OnDeviceResume(CDevice* dev)
@@ -264,10 +319,10 @@ CXenIfaceDeviceList::CXenIfaceDeviceList(CXenAgent* =
agent) : CDeviceList(GUID_IN
     if (dev !=3D GetFirstDevice())
         return;
=20
-    StartShutdownWatch(device);
+    device->StartShutdownWatch(m_evt_shutdown);
=20
     if (m_agent->ConvDevicePresent())
-        StartSlateModeWatch(device);
+        device->StartSlateModeWatch(m_evt_slate_mode);
 }
=20
 void CXenIfaceDeviceList::Log(const char* message)
@@ -379,15 +434,13 @@ void CXenIfaceDeviceList::CheckSuspend()
     m_agent->EventLog(EVENT_XENUSER_UNSUSPENDED);
=20
     // recreate watches, as suspending deactivated the watch
-    if (m_agent->ConvDevicePresent())
-        StopSlateModeWatch(device);
-
-    StopShutdownWatch(device);
+    device->StopSlateModeWatch();
+    device->StopShutdownWatch();
=20
-    StartShutdownWatch(device);
+    device->StartShutdownWatch(m_evt_shutdown);
=20
     if (m_agent->ConvDevicePresent())
-        StartSlateModeWatch(device);
+        device->StartSlateModeWatch(m_evt_slate_mode);
=20
     m_count =3D count;
 }
@@ -427,53 +480,6 @@ void CXenIfaceDeviceList::LogIfRebootPending()
     CXenAgent::Log("RebootRequired detected\n");
 }
=20
-void CXenIfaceDeviceList::StartShutdownWatch(CXenIfaceDevice* device)
-{
-    if (m_ctxt_shutdown)
-        return;
-
-    device->StoreAddWatch("control/shutdown", m_evt_shutdown, &m_ctxt_shu=
tdown);
-
-    device->StoreWrite("control/feature-poweroff", "1");
-    device->StoreWrite("control/feature-reboot", "1");
-    device->StoreWrite("control/feature-s3", "1");
-    device->StoreWrite("control/feature-s4", "1");
-}
-
-void CXenIfaceDeviceList::StopShutdownWatch(CXenIfaceDevice* device)
-{
-    if (!m_ctxt_shutdown)
-        return;
-
-    device->StoreWrite("control/feature-poweroff", "");
-    device->StoreWrite("control/feature-reboot", "");
-    device->StoreWrite("control/feature-s3", "");
-    device->StoreWrite("control/feature-s4", "");
-
-    device->StoreRemoveWatch(m_ctxt_shutdown);
-    m_ctxt_shutdown =3D NULL;
-}
-
-void CXenIfaceDeviceList::StartSlateModeWatch(CXenIfaceDevice* device)
-{
-    if (m_ctxt_slate_mode)
-        return;
-
-    device->StoreAddWatch("control/laptop-slate-mode", m_evt_slate_mode, =
&m_ctxt_slate_mode);
-    device->StoreWrite("control/feature-laptop-slate-mode", "1");
-}
-
-void CXenIfaceDeviceList::StopSlateModeWatch(CXenIfaceDevice* device)
-{
-    if (!m_ctxt_slate_mode)
-        return;
-
-    device->StoreRemove("control/feature-laptop-slate-mode");
-
-    device->StoreRemoveWatch(m_ctxt_slate_mode);
-    m_ctxt_slate_mode =3D NULL;
-}
-
 void CXenIfaceDeviceList::AcquireShutdownPrivilege()
 {
     HANDLE          token;
diff --git a/src/xenagent/xenifacedevice=2Eh b/src/xenagent/xenifacedevice=
=2Eh
index 8a89036=2E=2E1ddd454 100644
--- a/src/xenagent/xenifacedevice=2Eh
+++ b/src/xenagent/xenifacedevice=2Eh
@@ -60,6 +60,19 @@ public: // sharedinfo interface
=20
 public: // logging
     bool Log(const std::string& msg);
+
+public:
+    void StartSuspendWatch(HANDLE evt);
+    void StopSuspendWatch();
+    void StartShutdownWatch(HANDLE evt);
+    void StopShutdownWatch();
+    void StartSlateModeWatch(HANDLE evt);
+    void StopSlateModeWatch();
+
+private:
+    void*   m_ctxt_suspend;
+    void*   m_ctxt_shutdown;
+    void*   m_ctxt_slate_mode;
 };
=20
 class CXenAgent;
@@ -90,19 +103,12 @@ public:
     void LogIfRebootPending();
=20
 private:
-    void StartShutdownWatch(CXenIfaceDevice* device);
-    void StopShutdownWatch(CXenIfaceDevice* device);
-    void StartSlateModeWatch(CXenIfaceDevice* device);
-    void StopSlateModeWatch(CXenIfaceDevice* device);
     void AcquireShutdownPrivilege();
     void SetXenTime(CXenIfaceDevice* device, bool forced);
=20
 private:
     CXenAgent*  m_agent;
     DWORD       m_count;
-    void*       m_ctxt_suspend;
-    void*       m_ctxt_shutdown;
-    void*       m_ctxt_slate_mode;
 };
=20
 #endif
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.37.5012ccf6fb9f633d.1a1592a8d12.8e207595ec17b49f=---


From win-pv-devel-bounces@lists.xenproject.org Tue Oct 20 11:55:29 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 20 Oct 2026 11:55:29 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1455765.1669454 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJ8RF-0001FE-0o; Tue, 20 Oct 2026 11:55:29 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1455765.1669454; Tue, 20 Oct 2026 11:55:28 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJ8RE-0001Er-S3; Tue, 20 Oct 2026 11:55:28 +0000
Received: by outflank-mailman (input) for mailman id 1455765;
 Tue, 20 Oct 2026 11:55:27 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1592a908e000f79f@swg.vates.tech>)
 id 1xJ8RD-00019v-0T
 for win-pv-devel@lists.xenproject.org; Tue, 20 Oct 2026 11:55:27 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJ8RC-004pxV-6C
 for win-pv-devel@lists.xenproject.org; Tue, 20 Oct 2026 13:55:26 +0200
Received: from [10.42.69.10] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1592a908e000f79f@swg.vates.tech>)
 id 6ad756a2-2eae-0a2a0a5409dd-0a2a450abdea-28
 for <win-pv-devel@lists.xenproject.org>; Tue, 20 Oct 2026 13:55:26 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-4011c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1592a908e000f79f@swg.vates.tech>)
 id 6ad756ad-f2d2-0a2a450a0019-b9ff1c129625-3
 for <win-pv-devel@lists.xenproject.org>; Tue, 20 Oct 2026 13:55:26 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1592a908e000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Tue, 20 Oct 2026 11:55:24 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id A801282799;
 Tue, 20 Oct 2026 13:55:23 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=dQy7cBVhhLfC1Vet5ZcEQV38vLB3FRu0FMTwuCdgBbU=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=KO57iTqk1+KaFt5yrIQ/1hBcZ2B0VtBIykOqjwVGchuenXud/HxL+tzTMfssJkW43bw1SPiHe
 4XOsyz9L+utWipR7g+2J/nYgua9GrolEd2tEQ81yq+oBOghL/BBpjNCo4W78qp/kDJa+DMT4mk0
 2FFDHXlDvwfFCdZ3Z8SJTBCZ88SW99uECdL+2d1mHL5dOjGKPc3PVkBYu5wEKiBBfn1J+4tWsag
 gyC4EYyEYIleSLvx2mcBuV1cahnIl9otLfJ2YIqWa4n3SzLfiCj9o7ByvdFa7P0y4l/OchdHfot
 dIePfqDG7sWkNd8iJdrVuD4L1zrPb5omhWZumifyCklA==
X-Zone-Loop: b27b870f5cb75c9ad11d8001c3ba6675473337058ae6
x-campaign-type: default
x-transaction-id: b2f11705-4bbb-4c04-8f54-6cd914461dfb
x-swg-uid: 01-b5150547-a939-4c55-87f3-1c793dc76f30
X-Mailer: Sweego
Message-ID:
 <1792497324.8631fc262581453bbf619ec5b2062170.1a1592a908e000f79f@vates.tech>
x-swg-bid: 1792497324.8631fc262581453bbf619ec5b2062170.1a1592a908e000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 4/5] xeniface: Size converted MAP_FOREIGN_PAGES input with the V2 header
Date: Tue, 20 Oct 2026 13:55:17 +0200
In-Reply-To: <1792497190.8631fc262581453bbf619ec5b2062170.1a159288539000f79f@vates.tech>
References: <1792497190.8631fc262581453bbf619ec5b2062170.1a159288539000f79f@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.39.d9c52b00626aa788.1a1592a8efc.8e49053c6f6373b3=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792497323773
X-purgate-ID: tlsNG-4011c0/1792497326-5A7DACFC-16FD29B6/0/0
X-purgate-type: clean
X-purgate-size: 1601

---=Part.39.d9c52b00626aa788.1a1592a8efc.8e49053c6f6373b3=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

The legacy IOCTL_XENIFACE_GNTTAB_MAP_FOREIGN_PAGES input is converted
into a XENIFACE_GNTTAB_MAP_FOREIGN_PAGES_IN_V2 buffer, but that buffer
was sized with the V1 header, which also holds RequestId=2E This
over-allocated it by 4 bytes=2E Use the V2 header size=2E

Assisted-by: Claude:Opus-5=2E5
Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xeniface/ioctl_gnttab=2Ec | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/xeniface/ioctl_gnttab=2Ec b/src/xeniface/ioctl_gnttab=2Ec
index 8256012=2E=2Ec6d82bc 100644
--- a/src/xeniface/ioctl_gnttab=2Ec
+++ b/src/xeniface/ioctl_gnttab=2Ec
@@ -676,7 +676,7 @@ IoctlGnttabMapForeignPages(
         // legacy IOCTL, convert the input to v2
         status =3D STATUS_NO_MEMORY;
         In =3D __AllocatePoolWithTag(NonPagedPool,
-                                   (ULONG)FIELD_OFFSET(XENIFACE_GNTTAB_MA=
P_FOREIGN_PAGES_IN, References) + ReferenceSize,
+                                   (ULONG)FIELD_OFFSET(XENIFACE_GNTTAB_MA=
P_FOREIGN_PAGES_IN_V2, References) + ReferenceSize,
                                    XENIFACE_POOL_TAG);
         if (In =3D=3D NULL)
             goto fail5;
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.39.d9c52b00626aa788.1a1592a8efc.8e49053c6f6373b3=---


From win-pv-devel-bounces@lists.xenproject.org Tue Oct 20 11:55:33 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 20 Oct 2026 11:55:33 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1455766.1669459 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJ8RJ-0001JD-1C; Tue, 20 Oct 2026 11:55:33 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1455766.1669459; Tue, 20 Oct 2026 11:55:33 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJ8RI-0001J4-Uj; Tue, 20 Oct 2026 11:55:32 +0000
Received: by outflank-mailman (input) for mailman id 1455766;
 Tue, 20 Oct 2026 11:55:31 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1592a91a3000f79f@swg.vates.tech>)
 id 1xJ8RH-0001Ih-FD
 for win-pv-devel@lists.xenproject.org; Tue, 20 Oct 2026 11:55:31 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJ8RG-004Svi-S8
 for win-pv-devel@lists.xenproject.org; Tue, 20 Oct 2026 13:55:30 +0200
Received: from [10.42.69.6] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1592a91a3000f79f@swg.vates.tech>)
 id 6ad756ad-e002-0a2a0a5209dd-0a2a4506d7fc-8
 for <win-pv-devel@lists.xenproject.org>; Tue, 20 Oct 2026 13:55:30 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-16d1c6.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1592a91a3000f79f@swg.vates.tech>)
 id 6ad756ae-195a-0a2a45060019-b9ff1c238189-3
 for <win-pv-devel@lists.xenproject.org>; Tue, 20 Oct 2026 13:55:26 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1592a91a3000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Tue, 20 Oct 2026 11:55:24 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id E27E481BA1;
 Tue, 20 Oct 2026 13:55:23 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=IW24MekLzvT+OV5oF8CQxW0cfRBRe6GkIcMkZRHnMAo=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=nPeFaAwLauQj+Ipl83NzDFNe9TxaeV42kCntGw+aOLypESbd1A9QUssNepTTB+h11fKk7b6fX
 UICgkwGithmQFp6YK+V08AZiYCy68DySfGnlZNLAbM1ZwZgGvkFgJj2Qwh3lqehnENkiB4sZ3z/
 LFc4alMbcGQvQIHTDQboIWYLXOi5nBvGyVG6ELt1sv2e2otweeI7gzfD4nAfeqNb/me5u0m4qTO
 AAN7KZeUxZBsW00QBJlytW0UaWAU03sgeuoFObbJbS6wwjABeUkMTFUz6bAzChJavJ2PGkjyW2Z
 oJSL4SeJRvkO8XyYXWuRc5aKVNZ/5jjZmP70miUTGIjQ==
X-Zone-Loop: c08e493d8c71c9f70f708cdbcedab46e1c82d8ec7d64
x-campaign-type: default
x-transaction-id: 7ce9fbbc-34a7-4f05-b8bc-675e81d44c58
x-swg-uid: 01-211f249e-2ea3-4f86-bc3d-3423168596bd
X-Mailer: Sweego
Message-ID:
 <1792497324.8631fc262581453bbf619ec5b2062170.1a1592a91a3000f79f@vates.tech>
x-swg-bid: 1792497324.8631fc262581453bbf619ec5b2062170.1a1592a91a3000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 5/5] xeniface: Bound NumberPermissions before checking the input length
Date: Tue, 20 Oct 2026 13:55:18 +0200
In-Reply-To: <1792497190.8631fc262581453bbf619ec5b2062170.1a159288539000f79f@vates.tech>
References: <1792497190.8631fc262581453bbf619ec5b2062170.1a159288539000f79f@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.3a.43dd460cc269fe5b.1a1592a8ff2.784e9d33962c83be=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792497324019
X-purgate-ID: tlsNG-16d1c6/1792497326-FE67277B-6504CFAD/0/0
X-purgate-type: clean
X-purgate-size: 1550

---=Part.3a.43dd460cc269fe5b.1a1592a8ff2.784e9d33962c83be=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

IoctlStoreSetPermissions() compares InLen with
FIELD_OFFSET(XENIFACE_STORE_SET_PERMISSIONS_IN, Permissions[N]), whose
64-bit result is truncated to ULONG=2E The count was only capped to 255
later, in __ConvertPermissions(), so the length check alone could be
satisfied by a huge count=2E

Check the cap first, with the same STATUS_INVALID_PARAMETER as before=2E
The check in __ConvertPermissions() is kept=2E

Assisted-by: Claude:Opus-5=2E5
Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xeniface/ioctl_store=2Ec | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/src/xeniface/ioctl_store=2Ec b/src/xeniface/ioctl_store=2Ec
index 97bef75=2E=2Ecb9f2ff 100644
--- a/src/xeniface/ioctl_store=2Ec
+++ b/src/xeniface/ioctl_store=2Ec
@@ -417,6 +417,11 @@ IoctlStoreSetPermissions(
         goto fail1;
     }
=20
+    status =3D STATUS_INVALID_PARAMETER;
+    if (In->NumberPermissions > 255)
+        goto fail2;
+
+    status =3D STATUS_INVALID_BUFFER_SIZE;
     if (InLen !=3D (ULONG)FIELD_OFFSET(XENIFACE_STORE_SET_PERMISSIONS_IN,=
 Permissions[In->NumberPermissions]))
         goto fail2;
=20
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.3a.43dd460cc269fe5b.1a1592a8ff2.784e9d33962c83be=---


From win-pv-devel-bounces@lists.xenproject.org Tue Oct 20 12:21:20 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 20 Oct 2026 12:21:20 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1455787.1669463 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJ8qF-0003Jo-Ti; Tue, 20 Oct 2026 12:21:19 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1455787.1669463; Tue, 20 Oct 2026 12:21:19 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJ8qF-0003Jh-Qe; Tue, 20 Oct 2026 12:21:19 +0000
Received: by outflank-mailman (input) for mailman id 1455787;
 Tue, 20 Oct 2026 12:21:19 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a15942387f000f79f@swg.vates.tech>)
 id 1xJ8qF-0003Jb-FV
 for win-pv-devel@lists.xenproject.org; Tue, 20 Oct 2026 12:21:19 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJ8qE-00DEHV-L3
 for win-pv-devel@lists.xenproject.org; Tue, 20 Oct 2026 14:21:18 +0200
Received: from [10.42.69.3] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a15942387f000f79f@swg.vates.tech>)
 id 6ad75cae-2eae-0a2a0a5409dd-0a2a45038f3c-44
 for <win-pv-devel@lists.xenproject.org>; Tue, 20 Oct 2026 14:21:18 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-33051d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a15942387f000f79f@swg.vates.tech>)
 id 6ad75cbe-fae8-0a2a45030019-b9ff1c22ab5f-3
 for <win-pv-devel@lists.xenproject.org>; Tue, 20 Oct 2026 14:21:18 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a15942387f000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Tue, 20 Oct 2026 12:21:14 +0000
Received: from [192.168.1.61] (142.220.66.37.rev.sfr.net [37.66.220.142])
 (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id A0F7880F92;
 Tue, 20 Oct 2026 14:21:13 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=CV6aGJCYDAM1xjJ2qorHIRbGfqF6U/jcB6dsFO50fjQ=;
 h=from:subject:date:message-id:to:mime-version:content-type:in-reply-to:references:feedback-id;
 b=L7rDiPCSoisTlQd9ne9XbQN9nGa+Ixjq+rRAC71q6M5sc+IhszI/tB8nyNAAAhyFQAYrhRP2E
 M/8fsGbBWAV7K2jR8g/4NvyGJyhHOGWNeCzCxcJKHauZOI1yCwVxjj9HlCQFWoKP5m37GY/MzP0
 xDXK+uMnnwtfnrnJL5H4knku+5JWbhPmlHGgx98ll/CgOg8/cefJ+ZrWWyNMpEm2ol/Ivig9wlW
 4ZU8neE2XE8bfFbx9OOLGMhV8s8DgWyrOFkWDjhdQehvW+DBcbyeetlb7g/HIk7P8K9/TeYtw0m
 Lu0WHM3Bsiq2fCE2IPMpHq7vblHJjiTfJA9Ne94cz5Kw==
X-Zone-Loop: f5ac60e0de546048c28d92609aa0b35d442d89fb548c
x-campaign-type: default
x-transaction-id: f74620ee-5017-415e-a7cf-0b8cc916e1ea
x-swg-uid: 01-1e9551ac-363e-400d-ae6d-e2f279b4b28c
X-Mailer: Sweego
Message-ID:
 <1792498874.8631fc262581453bbf619ec5b2062170.1a15942387f000f79f@vates.tech>
x-swg-bid: 1792498874.8631fc262581453bbf619ec5b2062170.1a15942387f000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
Date: Tue, 20 Oct 2026 14:21:13 +0200
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH 1/5] xenagent: Use new (std::nothrow) where the result is
 checked for NULL
Content-Language: en-US
To: =?UTF-8?Q?C=C3=A9saire_Mounah?= <cesaire.mounah@vates.tech>,
 win-pv-devel@lists.xenproject.org
References: <1792497190.8631fc262581453bbf619ec5b2062170.1a159288539000f79f@vates.tech>
 <1792497323.8631fc262581453bbf619ec5b2062170.1a1592a8db6000f79f@vates.tech>
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
In-Reply-To: <1792497323.8631fc262581453bbf619ec5b2062170.1a1592a8db6000f79f@vates.tech>
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.3d.ce6f17c6d6bfb388.1a159423578.d8cd63c1de1d9aaa=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792498873725
X-purgate-ID: tlsNG-33051d/1792498878-6EECA4E9-93A5B376/0/0
X-purgate-type: clean
X-purgate-size: 4157

---=Part.3d.ce6f17c6d6bfb388.1a159423578.d8cd63c1de1d9aaa=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

On 20/10/2026 13:55, C=C3=A9saire Mounah wrote:
> Plain operator new throws std::bad_alloc instead of returning NULL, so
> the NULL checks after these allocations were dead code=2E Use the nothro=
w
> form so that the existing failure paths are taken on allocation failure=
=2E
>=20
> Assisted-By: Claude:Claude-Opus-5=2E5
> Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>

Reviewed-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>

> ---
>   src/xenagent/convdevice=2Ecpp     | 3 ++-
>   src/xenagent/devicelist=2Ecpp     | 3 ++-
>   src/xenagent/xenifacedevice=2Ecpp | 7 ++++---
>   3 files changed, 8 insertions(+), 5 deletions(-)
>=20
> diff --git a/src/xenagent/convdevice=2Ecpp b/src/xenagent/convdevice=2Ec=
pp
> index 5a25be1=2E=2Eb77fe5b 100644
> --- a/src/xenagent/convdevice=2Ecpp
> +++ b/src/xenagent/convdevice=2Ecpp
> @@ -34,6 +34,7 @@
>   #include <stdio=2Eh>
>   #include <powrprof=2Eh>
>   #include <winuser=2Eh>
> +#include <new>
>  =20
>   #include "service=2Eh"
>   #include "convdevice=2Eh"
> @@ -154,7 +155,7 @@ CConvDeviceList::CConvDeviceList(CXenAgent* agent) :=
 CDeviceList(GUID_GPIOBUTTON
>  =20
>   /*virtual*/ CDevice* CConvDeviceList::Create(const wchar_t* path)
>   {
> -    return new CConvDevice(path);
> +    return new (std::nothrow) CConvDevice(path);
>   }
>  =20
>   /*virtual*/ void CConvDeviceList::OnDeviceAdded(CDevice* dev)
> diff --git a/src/xenagent/devicelist=2Ecpp b/src/xenagent/devicelist=2Ec=
pp
> index d6af5d4=2E=2E8bf9b2b 100644
> --- a/src/xenagent/devicelist=2Ecpp
> +++ b/src/xenagent/devicelist=2Ecpp
> @@ -31,6 +31,7 @@
>  =20
>   #include <windows=2Eh>
>   #include <string>
> +#include <new>
>   #include <setupapi=2Eh>
>   #pragma comment (lib , "setupapi=2Elib" )
>  =20
> @@ -247,7 +248,7 @@ void CDeviceList::EnumerateDevices()
>                                           0,
>                                           &len,
>                                           NULL);
> -        detail =3D (PSP_DEVICE_INTERFACE_DETAIL_DATA)new BYTE[len];
> +        detail =3D (PSP_DEVICE_INTERFACE_DETAIL_DATA)new (std::nothrow)=
 BYTE[len];
>           if (detail =3D=3D NULL)
>               continue;
>           detail->cbSize =3D sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
> diff --git a/src/xenagent/xenifacedevice=2Ecpp b/src/xenagent/xenifacede=
vice=2Ecpp
> index f81a838=2E=2E763abf0 100644
> --- a/src/xenagent/xenifacedevice=2Ecpp
> +++ b/src/xenagent/xenifacedevice=2Ecpp
> @@ -33,6 +33,7 @@
>   #include <windows=2Eh>
>   #include <winioctl=2Eh>
>   #include <powrprof=2Eh>
> +#include <new>
>  =20
>   #include "service=2Eh"
>   #include "xenifacedevice=2Eh"
> @@ -65,7 +66,7 @@ bool CXenIfaceDevice::StoreRead(const std::string& pat=
h, std::string& value)
>             NULL, 0,
>             &bytes);
>  =20
> -    buffer =3D new char[(size_t)bytes + 1];
> +    buffer =3D new (std::nothrow) char[(size_t)bytes + 1];
>       if (buffer =3D=3D NULL)
>           return false;
>  =20
> @@ -85,7 +86,7 @@ bool CXenIfaceDevice::StoreWrite(const std::string& pa=
th, const std::string& val
>   {
>       bool   result;
>       size_t length =3D path=2Elength() + 1 + value=2Elength() + 1 + 1;
> -    char*  buffer =3D new char[length];
> +    char*  buffer =3D new (std::nothrow) char[length];
>       if (buffer =3D=3D NULL)
>           return false;
>  =20
> @@ -202,7 +203,7 @@ CXenIfaceDeviceList::CXenIfaceDeviceList(CXenAgent* =
agent) : CDeviceList(GUID_IN
>  =20
>   /*virtual*/ CDevice* CXenIfaceDeviceList::Create(const wchar_t* path)
>   {
> -    return new CXenIfaceDevice(path);
> +    return new (std::nothrow) CXenIfaceDevice(path);
>   }
>  =20
>   /*virtual*/ void CXenIfaceDeviceList::OnDeviceAdded(CDevice* dev)



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.3d.ce6f17c6d6bfb388.1a159423578.d8cd63c1de1d9aaa=---


From win-pv-devel-bounces@lists.xenproject.org Tue Oct 20 12:21:40 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 20 Oct 2026 12:21:40 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1455788.1669467 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJ8qZ-0003QO-VU; Tue, 20 Oct 2026 12:21:39 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1455788.1669467; Tue, 20 Oct 2026 12:21:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJ8qZ-0003QH-St; Tue, 20 Oct 2026 12:21:39 +0000
Received: by outflank-mailman (input) for mailman id 1455788;
 Tue, 20 Oct 2026 12:21:39 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a159428fe1000f79f@swg.vates.tech>)
 id 1xJ8qZ-0003QB-IO
 for win-pv-devel@lists.xenproject.org; Tue, 20 Oct 2026 12:21:39 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJ8qY-004Z65-OI
 for win-pv-devel@lists.xenproject.org; Tue, 20 Oct 2026 14:21:38 +0200
Received: from [10.42.69.1] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a159428fe1000f79f@swg.vates.tech>)
 id 6ad75cc1-e002-0a2a0a5209dd-0a2a4501db66-42
 for <win-pv-devel@lists.xenproject.org>; Tue, 20 Oct 2026 14:21:38 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a159428fe1000f79f@swg.vates.tech>)
 id 6ad75cd2-5984-0a2a45010019-b9ff1c12818f-3
 for <win-pv-devel@lists.xenproject.org>; Tue, 20 Oct 2026 14:21:38 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a159428fe1000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Tue, 20 Oct 2026 12:21:36 +0000
Received: from [192.168.1.61] (142.220.66.37.rev.sfr.net [37.66.220.142])
 (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 0D0FD80C20;
 Tue, 20 Oct 2026 14:21:36 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=j4wzj9iYm9RLaMA6R1VN5XijIRM6wFNp9lggMhz99iA=;
 h=from:subject:date:message-id:to:mime-version:content-type:in-reply-to:references:feedback-id;
 b=oGfiJ7LK70GzD0LafLAs/bF/WcMVH4PNJKOenJRit5r4LFlrA95J8ZRRmHdC+FXU8SCBZ8Hq1
 /ySvLZ/1ZMEDjTAtWt2yecfbw9WjSES8rASilE5sUWeOuELb7DA2IQ09NwCF3ryJLqkG8YmBca5
 ulVPcQ9nI729rKoUJUgmAyr83snt0pImrlw/dsHKXriZQretksV/QLL1CwZm5HB9FiO4fHT4OOY
 dtwa40reVCkrsJxNl6Rp4qMQsFga/NFMyBxAVwKVpTlI0c/1AY6McX5toYQEIPbU2hvqdHadwKq
 g7sDQHPnq94eAFzLN2KLKe4cCf36jQ17FyVdQktEIfgQ==
X-Zone-Loop: b15b99c7996646a6bb175b24096e6ee04a3770cbee8f
x-campaign-type: default
x-transaction-id: 31e9d443-2c60-4b0d-a215-700c240ed157
x-swg-uid: 01-0489ecca-4750-45b5-ab7d-298782582d26
X-Mailer: Sweego
Message-ID:
 <1792498896.8631fc262581453bbf619ec5b2062170.1a159428fe1000f79f@vates.tech>
x-swg-bid: 1792498896.8631fc262581453bbf619ec5b2062170.1a159428fe1000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
Date: Tue, 20 Oct 2026 14:21:35 +0200
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH 3/5] xeniface: Reject unaligned addresses in
 GNTTAB_PERMIT_FOREIGN_ACCESS_V2
Content-Language: en-US
To: =?UTF-8?Q?C=C3=A9saire_Mounah?= <cesaire.mounah@vates.tech>,
 win-pv-devel@lists.xenproject.org
References: <1792497190.8631fc262581453bbf619ec5b2062170.1a159288539000f79f@vates.tech>
 <1792497324.8631fc262581453bbf619ec5b2062170.1a1592a900e000f79f@vates.tech>
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
In-Reply-To: <1792497324.8631fc262581453bbf619ec5b2062170.1a1592a900e000f79f@vates.tech>
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.3e.c987adc9092f085e.1a159428e3a.bbc45bef69c7e28d=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792498896442
X-purgate-ID: tlsNG-d62444/1792498898-1FE68757-812BB68F/0/0
X-purgate-type: clean
X-purgate-size: 1686

---=Part.3e.c987adc9092f085e.1a159428e3a.bbc45bef69c7e28d=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

On 20/10/2026 13:55, C=C3=A9saire Mounah wrote:
> IOCTL_XENIFACE_GNTTAB_PERMIT_FOREIGN_ACCESS_V2 lets user mode pass the
> address of the memory to share, but the address was never checked for
> page alignment=2E Pages are granted whole, so an unaligned address makes
> the MDL span one more page than NumberPages and shares partial pages at
> both ends=2E
>=20
> Fail the request with STATUS_INVALID_PARAMETER instead=2E The legacy IOC=
TL
> always passes NULL and is not affected=2E
>=20
> Assisted-by: Claude:Opus-5=2E5
> Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>

Reviewed-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>

> ---
>   src/xeniface/ioctl_gnttab=2Ec | 4 +++-
>   1 file changed, 3 insertions(+), 1 deletion(-)
>=20
> diff --git a/src/xeniface/ioctl_gnttab=2Ec b/src/xeniface/ioctl_gnttab=
=2Ec
> index 0dab8e2=2E=2E8256012 100644
> --- a/src/xeniface/ioctl_gnttab=2Ec
> +++ b/src/xeniface/ioctl_gnttab=2Ec
> @@ -393,7 +393,9 @@ IoctlGnttabPermitForeignAccess(
>       }
>  =20
>       Status =3D STATUS_INVALID_PARAMETER;
> -    if (In->NumberPages =3D=3D 0 || In->NumberPages > GNTTAB_MAX_PAGES)=
 {
> +    if (In->NumberPages =3D=3D 0 ||
> +        In->NumberPages > GNTTAB_MAX_PAGES ||
> +        BYTE_OFFSET(In->Address) !=3D 0) {
>           goto fail4;
>       }
>  =20



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.3e.c987adc9092f085e.1a159428e3a.bbc45bef69c7e28d=---


From win-pv-devel-bounces@lists.xenproject.org Tue Oct 20 12:22:20 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 20 Oct 2026 12:22:20 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1455790.1669471 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJ8rE-0003Y3-23; Tue, 20 Oct 2026 12:22:20 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1455790.1669471; Tue, 20 Oct 2026 12:22:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJ8rD-0003Xu-Vc; Tue, 20 Oct 2026 12:22:19 +0000
Received: by outflank-mailman (input) for mailman id 1455790;
 Tue, 20 Oct 2026 12:22:19 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1594324aa000f79f@swg.vates.tech>)
 id 1xJ8rD-0003Xo-HJ
 for win-pv-devel@lists.xenproject.org; Tue, 20 Oct 2026 12:22:19 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJ8rC-004wjZ-Sw
 for win-pv-devel@lists.xenproject.org; Tue, 20 Oct 2026 14:22:18 +0200
Received: from [10.42.69.10] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1594324aa000f79f@swg.vates.tech>)
 id 6ad75cee-8faa-0a2a0a5109dd-0a2a450ac2f2-36
 for <win-pv-devel@lists.xenproject.org>; Tue, 20 Oct 2026 14:22:18 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-4011c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1594324aa000f79f@swg.vates.tech>)
 id 6ad75cfa-f2d2-0a2a450a0019-b9ff1c22928d-3
 for <win-pv-devel@lists.xenproject.org>; Tue, 20 Oct 2026 14:22:18 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1594324aa000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Tue, 20 Oct 2026 12:22:14 +0000
Received: from [192.168.1.61] (142.220.66.37.rev.sfr.net [37.66.220.142])
 (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 4FC3781B46;
 Tue, 20 Oct 2026 14:22:14 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=83xakML9NngoVwABQOz/jI9zzumuYxhUM8vCnVY20xY=;
 h=from:subject:date:message-id:to:mime-version:content-type:in-reply-to:references:feedback-id;
 b=NhLnms8Ny+Nov1pdDdkSjultD22QdQ07JBX9o6FxxEr3ozOYu2yVf7t5LgtXJRfgSAmlcuJhK
 eqW/cahrtOlf/6ua3EUOhPb8JKOYvmvM589a0KArt/54nQv0tl3n8VxJdkbLw/PLglvzNgiaqK9
 oNt6g9EUkqEslUYMyNw5I0t86GCo4CXlnFRd45cjqySFKCewSIVi/I9v8Ad1qIY7WIJAzFrPUoJ
 zxPdVwLGddQ67d/ZO35boBGwOPvUiFvxFjRZ3Y2ezGana5596Av6YGcBXytfCxXRhDoBUOeC+6x
 pBlzaZGUvkJr1k8W5M2nuzQWdWtBzgzbBlBvNTI+Jg7A==
X-Zone-Loop: f399e69854968d4d6dcb3a6f291928bd7a4754542b9e
x-campaign-type: default
x-transaction-id: 06a1f009-ab0e-4570-80c6-1c8c39648b6c
x-swg-uid: 01-b09fcf13-5681-40d8-afd7-821867c77728
X-Mailer: Sweego
Message-ID:
 <1792498935.8631fc262581453bbf619ec5b2062170.1a1594324aa000f79f@vates.tech>
x-swg-bid: 1792498935.8631fc262581453bbf619ec5b2062170.1a1594324aa000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
Date: Tue, 20 Oct 2026 14:22:14 +0200
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH 4/5] xeniface: Size converted MAP_FOREIGN_PAGES input with
 the V2 header
Content-Language: en-US
To: =?UTF-8?Q?C=C3=A9saire_Mounah?= <cesaire.mounah@vates.tech>,
 win-pv-devel@lists.xenproject.org
References: <1792497190.8631fc262581453bbf619ec5b2062170.1a159288539000f79f@vates.tech>
 <1792497324.8631fc262581453bbf619ec5b2062170.1a1592a908e000f79f@vates.tech>
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
In-Reply-To: <1792497324.8631fc262581453bbf619ec5b2062170.1a1592a908e000f79f@vates.tech>
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.3f.be35eaccc423aaa6.1a159432263.b42ef1f2e85b9138=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792498934371
X-purgate-ID: tlsNG-4011c0/1792498938-4B8D5CFC-3546431F/0/0
X-purgate-type: clean
X-purgate-size: 1717

---=Part.3f.be35eaccc423aaa6.1a159432263.b42ef1f2e85b9138=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

On 20/10/2026 13:55, C=C3=A9saire Mounah wrote:
> The legacy IOCTL_XENIFACE_GNTTAB_MAP_FOREIGN_PAGES input is converted
> into a XENIFACE_GNTTAB_MAP_FOREIGN_PAGES_IN_V2 buffer, but that buffer
> was sized with the V1 header, which also holds RequestId=2E This
> over-allocated it by 4 bytes=2E Use the V2 header size=2E
>=20
> Assisted-by: Claude:Opus-5=2E5
> Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>

Reviewed-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>

> ---
>   src/xeniface/ioctl_gnttab=2Ec | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
>=20
> diff --git a/src/xeniface/ioctl_gnttab=2Ec b/src/xeniface/ioctl_gnttab=
=2Ec
> index 8256012=2E=2Ec6d82bc 100644
> --- a/src/xeniface/ioctl_gnttab=2Ec
> +++ b/src/xeniface/ioctl_gnttab=2Ec
> @@ -676,7 +676,7 @@ IoctlGnttabMapForeignPages(
>           // legacy IOCTL, convert the input to v2
>           status =3D STATUS_NO_MEMORY;
>           In =3D __AllocatePoolWithTag(NonPagedPool,
> -                                   (ULONG)FIELD_OFFSET(XENIFACE_GNTTAB_=
MAP_FOREIGN_PAGES_IN, References) + ReferenceSize,
> +                                   (ULONG)FIELD_OFFSET(XENIFACE_GNTTAB_=
MAP_FOREIGN_PAGES_IN_V2, References) + ReferenceSize,
>                                      XENIFACE_POOL_TAG);
>           if (In =3D=3D NULL)
>               goto fail5;



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.3f.be35eaccc423aaa6.1a159432263.b42ef1f2e85b9138=---


From win-pv-devel-bounces@lists.xenproject.org Tue Oct 20 12:23:01 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 20 Oct 2026 12:23:01 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1455793.1669474 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJ8rt-0003fg-4a; Tue, 20 Oct 2026 12:23:01 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1455793.1669474; Tue, 20 Oct 2026 12:23:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJ8rt-0003fZ-25; Tue, 20 Oct 2026 12:23:01 +0000
Received: by outflank-mailman (input) for mailman id 1455793;
 Tue, 20 Oct 2026 12:23:00 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a15943c3d1000f79f@swg.vates.tech>)
 id 1xJ8rs-0003fT-FZ
 for win-pv-devel@lists.xenproject.org; Tue, 20 Oct 2026 12:23:00 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJ8rr-004wuO-Rx
 for win-pv-devel@lists.xenproject.org; Tue, 20 Oct 2026 14:22:59 +0200
Received: from [10.42.69.1] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a15943c3d1000f79f@swg.vates.tech>)
 id 6ad75d11-bab6-0a2a0a5309dd-0a2a4501e9a2-34
 for <win-pv-devel@lists.xenproject.org>; Tue, 20 Oct 2026 14:22:59 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a15943c3d1000f79f@swg.vates.tech>)
 id 6ad75d22-5984-0a2a45010019-b9ff1c238105-3
 for <win-pv-devel@lists.xenproject.org>; Tue, 20 Oct 2026 14:22:58 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a15943c3d1000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Tue, 20 Oct 2026 12:22:55 +0000
Received: from [192.168.1.61] (142.220.66.37.rev.sfr.net [37.66.220.142])
 (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 18D7481D2D;
 Tue, 20 Oct 2026 14:22:55 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=IxonQBOHTrzvOo8cHEXWzWDVE3DWh4BHjGQZrfZTeKY=;
 h=from:subject:date:message-id:to:mime-version:content-type:in-reply-to:references:feedback-id;
 b=trdv618roebopcelzcVHf/Ap8sNvZCRGw7HLHahW+dheQPY6vN/RaiQrpSUDQM4EOVRsb2Mfu
 UksMsJzfPMrm7BKJOXSJikCbDkeVKPKh2SyNVxal2a4C7SwY8GieRdwl72xUHbF2whZywHmMNM4
 tizQz+iv67koQdI9T3VczOu/OjZ62FB3zqIRlOGq7bKlZ8DGelKoljU2dqPY3rf00zl4I2EH9wy
 9SLStpC2EG09jOrEf60yGIhexZrIyyVsTkTuZaz7mf0K9VDGLhi9Ux5elvVLnDJg7PcXymoTLU+
 QTTzdOvhaC92gXgFbs7MSCTm2bvLbQOwwx8vePd8P8Og==
X-Zone-Loop: 5ad125a1083008361fdc7072c8d17a85d745de9ba747
x-campaign-type: default
x-transaction-id: f8858080-99fd-450b-a974-1a35231f5ed7
x-swg-uid: 01-d1e5e575-27df-4a4a-9f7f-56fc67f47882
X-Mailer: Sweego
Message-ID:
 <1792498975.8631fc262581453bbf619ec5b2062170.1a15943c3d1000f79f@vates.tech>
x-swg-bid: 1792498975.8631fc262581453bbf619ec5b2062170.1a15943c3d1000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
Date: Tue, 20 Oct 2026 14:22:54 +0200
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH 5/5] xeniface: Bound NumberPermissions before checking the
 input length
Content-Language: en-US
To: =?UTF-8?Q?C=C3=A9saire_Mounah?= <cesaire.mounah@vates.tech>,
 win-pv-devel@lists.xenproject.org
References: <1792497190.8631fc262581453bbf619ec5b2062170.1a159288539000f79f@vates.tech>
 <1792497324.8631fc262581453bbf619ec5b2062170.1a1592a91a3000f79f@vates.tech>
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
In-Reply-To: <1792497324.8631fc262581453bbf619ec5b2062170.1a1592a91a3000f79f@vates.tech>
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.40.c3e02849ca443c85.1a15943c1ab.60301f9c64b22e2d=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792498975147
X-purgate-ID: tlsNG-d62444/1792498978-BEA66757-F54C7C12/0/0
X-purgate-type: clean
X-purgate-size: 1693

---=Part.40.c3e02849ca443c85.1a15943c1ab.60301f9c64b22e2d=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

On 20/10/2026 13:55, C=C3=A9saire Mounah wrote:
> IoctlStoreSetPermissions() compares InLen with
> FIELD_OFFSET(XENIFACE_STORE_SET_PERMISSIONS_IN, Permissions[N]), whose
> 64-bit result is truncated to ULONG=2E The count was only capped to 255
> later, in __ConvertPermissions(), so the length check alone could be
> satisfied by a huge count=2E
>=20
> Check the cap first, with the same STATUS_INVALID_PARAMETER as before=2E
> The check in __ConvertPermissions() is kept=2E
>=20
> Assisted-by: Claude:Opus-5=2E5
> Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
> ---
>   src/xeniface/ioctl_store=2Ec | 5 +++++
>   1 file changed, 5 insertions(+)
>=20
> diff --git a/src/xeniface/ioctl_store=2Ec b/src/xeniface/ioctl_store=2Ec
> index 97bef75=2E=2Ecb9f2ff 100644
> --- a/src/xeniface/ioctl_store=2Ec
> +++ b/src/xeniface/ioctl_store=2Ec
> @@ -417,6 +417,11 @@ IoctlStoreSetPermissions(
>           goto fail1;
>       }
>  =20
> +    status =3D STATUS_INVALID_PARAMETER;
> +    if (In->NumberPermissions > 255)
> +        goto fail2;
> +

I think the check in __ConvertPermissions can then be removed=2E

> +    status =3D STATUS_INVALID_BUFFER_SIZE;
>       if (InLen !=3D (ULONG)FIELD_OFFSET(XENIFACE_STORE_SET_PERMISSIONS_=
IN, Permissions[In->NumberPermissions]))
>           goto fail2;
>  =20



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.40.c3e02849ca443c85.1a15943c1ab.60301f9c64b22e2d=---


From win-pv-devel-bounces@lists.xenproject.org Tue Oct 20 12:24:21 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 20 Oct 2026 12:24:21 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1455796.1669479 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJ8tB-0003wO-8n; Tue, 20 Oct 2026 12:24:21 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1455796.1669479; Tue, 20 Oct 2026 12:24:21 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJ8tB-0003wH-65; Tue, 20 Oct 2026 12:24:21 +0000
Received: by outflank-mailman (input) for mailman id 1455796;
 Tue, 20 Oct 2026 12:24:20 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a15944f6d7000f79f@swg.vates.tech>)
 id 1xJ8tA-0003vV-7C
 for win-pv-devel@lists.xenproject.org; Tue, 20 Oct 2026 12:24:20 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJ8t9-0008wq-K6
 for win-pv-devel@lists.xenproject.org; Tue, 20 Oct 2026 14:24:19 +0200
Received: from [10.42.69.10] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a15944f6d7000f79f@swg.vates.tech>)
 id 6ad75d6c-bab6-0a2a0a5309dd-0a2a450a878a-32
 for <win-pv-devel@lists.xenproject.org>; Tue, 20 Oct 2026 14:24:19 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-4011c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a15944f6d7000f79f@swg.vates.tech>)
 id 6ad75d73-f2d2-0a2a450a0019-b9ff1c22a517-3
 for <win-pv-devel@lists.xenproject.org>; Tue, 20 Oct 2026 14:24:19 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a15944f6d7000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Tue, 20 Oct 2026 12:24:14 +0000
Received: from [192.168.1.61] (142.220.66.37.rev.sfr.net [37.66.220.142])
 (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 7E0A981B2E;
 Tue, 20 Oct 2026 14:24:13 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=KWAn7xv7xRWGNvDFVXHOaDVgyeY8eNgoGmypN7v6o28=;
 h=from:subject:date:message-id:to:mime-version:content-type:in-reply-to:references:feedback-id;
 b=ri9sbyTNsRuhH155PW+8Robl/hC6gP9oaIuzBGPSHvn8CoruYgj8PzxJRr9FCXUiQ/8acxVlm
 0AiyzYVvG2aJc/FOhmh/Y66EEoConB2bBqg2vwTmJStexM0JBSTp91Ldf1iz0ZaDiEFtdv2bkx4
 fdYDhI1W1pQW3ZRfwVKK3EcJHyi6ZqTxjIb4KuATjcRpmreu0E6avEix18SqYtFLvIO07P85so6
 zLBGh8fUKiOn08xxTuYskBuPpcEn2P+40B+05G/tYqynQAbvVpqonrAEtEAcq5XkZ6x9HwWP6Dg
 FVg21TOg9sXCcRUMZIIfh4dHPFTjC6hLQQ+yD4oyI7ZA==
X-Zone-Loop: 3910cb3044a4a2dcdbe5dd97e1a55adbc12c0c6ab999
x-campaign-type: default
x-transaction-id: f358dbc4-6ebe-417b-a728-ce9b42cbfaf1
x-swg-uid: 01-93dda1dd-ef75-4b1f-8de9-2a1fd52df127
X-Mailer: Sweego
Message-ID:
 <1792499054.8631fc262581453bbf619ec5b2062170.1a15944f6d7000f79f@vates.tech>
x-swg-bid: 1792499054.8631fc262581453bbf619ec5b2062170.1a15944f6d7000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
Date: Tue, 20 Oct 2026 14:24:13 +0200
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH 2/5] xenagent: Let CXenIfaceDevice release its own
 registrations
Content-Language: en-US
To: =?UTF-8?Q?C=C3=A9saire_Mounah?= <cesaire.mounah@vates.tech>,
 win-pv-devel@lists.xenproject.org
References: <1792497190.8631fc262581453bbf619ec5b2062170.1a159288539000f79f@vates.tech>
 <1792497323.8631fc262581453bbf619ec5b2062170.1a1592a8eb5000f79f@vates.tech>
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
In-Reply-To: <1792497323.8631fc262581453bbf619ec5b2062170.1a1592a8eb5000f79f@vates.tech>
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.41.626669dd4ebe71f.1a15944f3ff.2b2d13336e2e6e7b=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792499053567
X-purgate-ID: tlsNG-4011c0/1792499059-4B8D5CFC-72CF30B7/0/0
X-purgate-type: clean
X-purgate-size: 11274

---=Part.41.626669dd4ebe71f.1a15944f3ff.2b2d13336e2e6e7b=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

On 20/10/2026 13:55, C=C3=A9saire Mounah wrote:
> The CDeviceList destructor called CleanupDeviceList(), which calls the
> pure virtual OnDeviceRemoved() after the derived class has already been
> destroyed=2E
>=20
> The suspend registration and the shutdown and slate-mode watches are
> registered on the device handle, but their contexts were kept in
> CXenIfaceDeviceList, so only that callback could release them=2E Move th=
e
> contexts into CXenIfaceDevice and release them in its destructor, before
> ~CDevice() closes the handle=2E ~CDeviceList() now only deletes the
> devices=2E
>=20
> Assisted-by: Claude:Opus-5=2E5
> Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>

It looks good to me in principle but I haven't checked that closely=2E

Acked-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>

> ---
>   src/xenagent/devicelist=2Ecpp     |   8 +-
>   src/xenagent/xenifacedevice=2Ecpp | 170 +++++++++++++++++-------------=
--
>   src/xenagent/xenifacedevice=2Eh   |  20 ++--
>   3 files changed, 108 insertions(+), 90 deletions(-)
>=20
> diff --git a/src/xenagent/devicelist=2Ecpp b/src/xenagent/devicelist=2Ec=
pp
> index 8bf9b2b=2E=2E63aa7dd 100644
> --- a/src/xenagent/devicelist=2Ecpp
> +++ b/src/xenagent/devicelist=2Ecpp
> @@ -185,7 +185,13 @@ CDeviceList::CDeviceList(const GUID& itf) :
>   CDeviceList::~CDeviceList()
>   {
>       UnregisterForDeviceChange();
> -    CleanupDeviceList();
> +
> +    for (DeviceMap::iterator it =3D m_devs=2Ebegin();
> +         it !=3D m_devs=2Eend();
> +         ++it) {
> +        delete *it;
> +    }
> +    m_devs=2Eclear();
>  =20
>       DeleteCriticalSection(&m_crit);
>   }
> diff --git a/src/xenagent/xenifacedevice=2Ecpp b/src/xenagent/xenifacede=
vice=2Ecpp
> index 763abf0=2E=2Ed3e02a9 100644
> --- a/src/xenagent/xenifacedevice=2Ecpp
> +++ b/src/xenagent/xenifacedevice=2Ecpp
> @@ -48,11 +48,18 @@
>  =20
>   #define TIME_SYNC_MODE_DISABLED 0
>  =20
> -CXenIfaceDevice::CXenIfaceDevice(const wchar_t* path) : CDevice(path)
> +CXenIfaceDevice::CXenIfaceDevice(const wchar_t* path) : CDevice(path),
> +    m_ctxt_suspend(NULL),
> +    m_ctxt_shutdown(NULL),
> +    m_ctxt_slate_mode(NULL)
>   {}
>  =20
>   /*virtual*/ CXenIfaceDevice::~CXenIfaceDevice()
> -{}
> +{
> +    StopSlateModeWatch();
> +    StopShutdownWatch();
> +    StopSuspendWatch();
> +}
>  =20
>   // store interface
>   bool CXenIfaceDevice::StoreRead(const std::string& path, std::string& =
value)
> @@ -182,11 +189,72 @@ bool CXenIfaceDevice::Log(const std::string& msg)
>                    NULL, 0);
>   }
>  =20
> +void CXenIfaceDevice::StartSuspendWatch(HANDLE evt)
> +{
> +    if (m_ctxt_suspend)
> +        return;
> +
> +    SuspendRegister(evt, &m_ctxt_suspend);
> +}
> +
> +void CXenIfaceDevice::StopSuspendWatch()
> +{
> +    if (!m_ctxt_suspend)
> +        return;
> +
> +    SuspendDeregister(m_ctxt_suspend);
> +    m_ctxt_suspend =3D NULL;
> +}
> +
> +void CXenIfaceDevice::StartShutdownWatch(HANDLE evt)
> +{
> +    if (m_ctxt_shutdown)
> +        return;
> +
> +    StoreAddWatch("control/shutdown", evt, &m_ctxt_shutdown);
> +
> +    StoreWrite("control/feature-poweroff", "1");
> +    StoreWrite("control/feature-reboot", "1");
> +    StoreWrite("control/feature-s3", "1");
> +    StoreWrite("control/feature-s4", "1");
> +}
> +
> +void CXenIfaceDevice::StopShutdownWatch()
> +{
> +    if (!m_ctxt_shutdown)
> +        return;
> +
> +    StoreWrite("control/feature-poweroff", "");
> +    StoreWrite("control/feature-reboot", "");
> +    StoreWrite("control/feature-s3", "");
> +    StoreWrite("control/feature-s4", "");
> +
> +    StoreRemoveWatch(m_ctxt_shutdown);
> +    m_ctxt_shutdown =3D NULL;
> +}
> +
> +void CXenIfaceDevice::StartSlateModeWatch(HANDLE evt)
> +{
> +    if (m_ctxt_slate_mode)
> +        return;
> +
> +    StoreAddWatch("control/laptop-slate-mode", evt, &m_ctxt_slate_mode)=
;
> +    StoreWrite("control/feature-laptop-slate-mode", "1");
> +}
> +
> +void CXenIfaceDevice::StopSlateModeWatch()
> +{
> +    if (!m_ctxt_slate_mode)
> +        return;
> +
> +    StoreRemove("control/feature-laptop-slate-mode");
> +
> +    StoreRemoveWatch(m_ctxt_slate_mode);
> +    m_ctxt_slate_mode =3D NULL;
> +}
> +
>   CXenIfaceDeviceList::CXenIfaceDeviceList(CXenAgent* agent) : CDeviceLi=
st(GUID_INTERFACE_XENIFACE),
> -    m_agent(agent),
> -    m_ctxt_suspend(NULL),
> -    m_ctxt_shutdown(NULL),
> -    m_ctxt_slate_mode(NULL)
> +    m_agent(agent)
>   {
>       m_evt_shutdown =3D CreateEvent(NULL, TRUE, FALSE, NULL);
>       m_evt_suspend =3D CreateEvent(NULL, TRUE, FALSE, NULL);
> @@ -215,11 +283,11 @@ CXenIfaceDeviceList::CXenIfaceDeviceList(CXenAgent=
* agent) : CDeviceList(GUID_IN
>  =20
>       CXenIfaceDevice* device =3D (CXenIfaceDevice*)dev;
>  =20
> -    device->SuspendRegister(m_evt_suspend, &m_ctxt_suspend);
> -    StartShutdownWatch(device);
> +    device->StartSuspendWatch(m_evt_suspend);
> +    device->StartShutdownWatch(m_evt_shutdown);
>  =20
>       if (m_agent->ConvDevicePresent())
> -        StartSlateModeWatch(device);
> +        device->StartSlateModeWatch(m_evt_slate_mode);
>  =20
>       SetXenTime(device, false);
>   }
> @@ -229,17 +297,9 @@ CXenIfaceDeviceList::CXenIfaceDeviceList(CXenAgent*=
 agent) : CDeviceList(GUID_IN
>       CCritSec crit(&m_crit);
>       CXenIfaceDevice* device =3D (CXenIfaceDevice*)dev;
>  =20
> -    if (dev !=3D GetFirstDevice())
> -        return;
> -
> -    if (m_ctxt_suspend)
> -        device->SuspendDeregister(m_ctxt_suspend);
> -    m_ctxt_suspend =3D NULL;
> -
> -    if (m_agent->ConvDevicePresent())
> -        StopSlateModeWatch(device);
> -
> -    StopShutdownWatch(device);
> +    device->StopSuspendWatch();
> +    device->StopSlateModeWatch();
> +    device->StopShutdownWatch();
>   }
>  =20
>   /*virtual*/ void CXenIfaceDeviceList::OnDeviceSuspend(CDevice* dev)
> @@ -247,13 +307,8 @@ CXenIfaceDeviceList::CXenIfaceDeviceList(CXenAgent*=
 agent) : CDeviceList(GUID_IN
>       CCritSec crit(&m_crit);
>       CXenIfaceDevice* device =3D (CXenIfaceDevice*)dev;
>  =20
> -    if (dev !=3D GetFirstDevice())
> -        return;
> -
> -    if (m_agent->ConvDevicePresent())
> -        StopSlateModeWatch(device);
> -
> -    StopShutdownWatch(device);
> +    device->StopSlateModeWatch();
> +    device->StopShutdownWatch();
>   }
>  =20
>   /*virtual*/ void CXenIfaceDeviceList::OnDeviceResume(CDevice* dev)
> @@ -264,10 +319,10 @@ CXenIfaceDeviceList::CXenIfaceDeviceList(CXenAgent=
* agent) : CDeviceList(GUID_IN
>       if (dev !=3D GetFirstDevice())
>           return;
>  =20
> -    StartShutdownWatch(device);
> +    device->StartShutdownWatch(m_evt_shutdown);
>  =20
>       if (m_agent->ConvDevicePresent())
> -        StartSlateModeWatch(device);
> +        device->StartSlateModeWatch(m_evt_slate_mode);
>   }
>  =20
>   void CXenIfaceDeviceList::Log(const char* message)
> @@ -379,15 +434,13 @@ void CXenIfaceDeviceList::CheckSuspend()
>       m_agent->EventLog(EVENT_XENUSER_UNSUSPENDED);
>  =20
>       // recreate watches, as suspending deactivated the watch
> -    if (m_agent->ConvDevicePresent())
> -        StopSlateModeWatch(device);
> -
> -    StopShutdownWatch(device);
> +    device->StopSlateModeWatch();
> +    device->StopShutdownWatch();
>  =20
> -    StartShutdownWatch(device);
> +    device->StartShutdownWatch(m_evt_shutdown);
>  =20
>       if (m_agent->ConvDevicePresent())
> -        StartSlateModeWatch(device);
> +        device->StartSlateModeWatch(m_evt_slate_mode);
>  =20
>       m_count =3D count;
>   }
> @@ -427,53 +480,6 @@ void CXenIfaceDeviceList::LogIfRebootPending()
>       CXenAgent::Log("RebootRequired detected\n");
>   }
>  =20
> -void CXenIfaceDeviceList::StartShutdownWatch(CXenIfaceDevice* device)
> -{
> -    if (m_ctxt_shutdown)
> -        return;
> -
> -    device->StoreAddWatch("control/shutdown", m_evt_shutdown, &m_ctxt_s=
hutdown);
> -
> -    device->StoreWrite("control/feature-poweroff", "1");
> -    device->StoreWrite("control/feature-reboot", "1");
> -    device->StoreWrite("control/feature-s3", "1");
> -    device->StoreWrite("control/feature-s4", "1");
> -}
> -
> -void CXenIfaceDeviceList::StopShutdownWatch(CXenIfaceDevice* device)
> -{
> -    if (!m_ctxt_shutdown)
> -        return;
> -
> -    device->StoreWrite("control/feature-poweroff", "");
> -    device->StoreWrite("control/feature-reboot", "");
> -    device->StoreWrite("control/feature-s3", "");
> -    device->StoreWrite("control/feature-s4", "");
> -
> -    device->StoreRemoveWatch(m_ctxt_shutdown);
> -    m_ctxt_shutdown =3D NULL;
> -}
> -
> -void CXenIfaceDeviceList::StartSlateModeWatch(CXenIfaceDevice* device)
> -{
> -    if (m_ctxt_slate_mode)
> -        return;
> -
> -    device->StoreAddWatch("control/laptop-slate-mode", m_evt_slate_mode=
, &m_ctxt_slate_mode);
> -    device->StoreWrite("control/feature-laptop-slate-mode", "1");
> -}
> -
> -void CXenIfaceDeviceList::StopSlateModeWatch(CXenIfaceDevice* device)
> -{
> -    if (!m_ctxt_slate_mode)
> -        return;
> -
> -    device->StoreRemove("control/feature-laptop-slate-mode");
> -
> -    device->StoreRemoveWatch(m_ctxt_slate_mode);
> -    m_ctxt_slate_mode =3D NULL;
> -}
> -
>   void CXenIfaceDeviceList::AcquireShutdownPrivilege()
>   {
>       HANDLE          token;
> diff --git a/src/xenagent/xenifacedevice=2Eh b/src/xenagent/xenifacedevi=
ce=2Eh
> index 8a89036=2E=2E1ddd454 100644
> --- a/src/xenagent/xenifacedevice=2Eh
> +++ b/src/xenagent/xenifacedevice=2Eh
> @@ -60,6 +60,19 @@ public: // sharedinfo interface
>  =20
>   public: // logging
>       bool Log(const std::string& msg);
> +
> +public:
> +    void StartSuspendWatch(HANDLE evt);
> +    void StopSuspendWatch();
> +    void StartShutdownWatch(HANDLE evt);
> +    void StopShutdownWatch();
> +    void StartSlateModeWatch(HANDLE evt);
> +    void StopSlateModeWatch();
> +
> +private:
> +    void*   m_ctxt_suspend;
> +    void*   m_ctxt_shutdown;
> +    void*   m_ctxt_slate_mode;
>   };
>  =20
>   class CXenAgent;
> @@ -90,19 +103,12 @@ public:
>       void LogIfRebootPending();
>  =20
>   private:
> -    void StartShutdownWatch(CXenIfaceDevice* device);
> -    void StopShutdownWatch(CXenIfaceDevice* device);
> -    void StartSlateModeWatch(CXenIfaceDevice* device);
> -    void StopSlateModeWatch(CXenIfaceDevice* device);
>       void AcquireShutdownPrivilege();
>       void SetXenTime(CXenIfaceDevice* device, bool forced);
>  =20
>   private:
>       CXenAgent*  m_agent;
>       DWORD       m_count;
> -    void*       m_ctxt_suspend;
> -    void*       m_ctxt_shutdown;
> -    void*       m_ctxt_slate_mode;
>   };
>  =20
>   #endif



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.41.626669dd4ebe71f.1a15944f3ff.2b2d13336e2e6e7b=---


From win-pv-devel-bounces@lists.xenproject.org Wed Oct 21 06:51:32 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 21 Oct 2026 06:51:32 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1456763.1669887 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJQAd-0005VY-Qg; Wed, 21 Oct 2026 06:51:31 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1456763.1669887; Wed, 21 Oct 2026 06:51:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJQAd-0005VQ-Nk; Wed, 21 Oct 2026 06:51:31 +0000
Received: by outflank-mailman (input) for mailman id 1456763;
 Wed, 21 Oct 2026 06:51:31 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <owen.smith@citrix.com>) id 1xJQAc-0005VK-Vb
 for win-pv-devel@lists.xenproject.org; Wed, 21 Oct 2026 06:51:31 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJQAb-002MkZ-Uj
 for win-pv-devel@lists.xenproject.org; Wed, 21 Oct 2026 08:51:29 +0200
Received: from [10.42.69.2] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ad860e7-8faa-0a2a0a5109dd-0a2a4502a22e-38
 for <win-pv-devel@lists.xenproject.org>; Wed, 21 Oct 2026 08:51:29 +0200
Received: from [40.107.209.58]
 (helo=PH8PR06CU001.outbound.protection.outlook.com)
 by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ad860ef-6ca4-0a2a45020019-286bd13aaf31-4
 for <win-pv-devel@lists.xenproject.org>; Wed, 21 Oct 2026 08:51:29 +0200
Received: from SA6PR03MB7760.namprd03.prod.outlook.com (2603:10b6:806:43c::5)
 by CHBPR03MB983735.namprd03.prod.outlook.com (2603:10b6:610:409::6)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.546.15; Wed, 21 Oct
 2026 06:51:25 +0000
Received: from SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38]) by SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38%5]) with mapi id 15.21.0522.017; Wed, 21 Oct 2026
 06:51:25 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:x-ms-exchange-senderadcheck"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
 b=udXzPeRXiEONTKd26WyY34JPuhi8J1adbFpY1TQFMBStr33q5kuElMjRBFANoHddfgroxTFFj1PH8aPStvPZnHjXMXVS6BFGtWOIwf9kfMvRMSLUxB7OnHg3GJCmA6O0VEX0jc9OA3aXsE4ufuaQixL8tCn5Hp+dnYStK35cu9UtpOe7vK1sQV15Q/BZ6ahRkCZ1aM6iHWoXPgUlMgiTZbapRQMKFdlU/3Sc8fbC6WI4X/4KdrMMlMox+RevNYypg4ZACzMslQFrkgqx13eGOe2arO0BS2UOdKAoCrvjxZf/m/krCHgFBh1P3ZL5ADvE/R0Jw2qW5/OMerUAxipZHg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector10001;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=G/9xPd+3BajkGD+XUaX/iBzoCLWzLcpF6JBJLdN9D4s=;
 b=LUurrm9Ic4umTYbYftuwwwKMBVo1ZlcyDYgNKAgyIg/4Rrw6yZE3JKCeT1NsXsKoGPuZl1KaIkXjCXi4whybwsNqWZj5TwrYTdW4zvxBfOowVMqjL12SckEH8hNsawx8YL5RLUobFHNjHSlFGrtWm8X/baAsfWt/hFDHl4E/NfxdHkz1fzIHDJhh2uYJE5FcmzZjqyRaSZnjM3eDv1wDMHBZBMh9MFYPPgBG07AegaNogVWWbkK505qw8hAN3eFzyhaD9ectlC/EYj3zUmh1XAfY4+x9TWFfcEZyP/vIGdeJeqQ+/916UxcQhJMbgiK5oJ8NpUCy0HqVfxHYJsJe5w==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=G/9xPd+3BajkGD+XUaX/iBzoCLWzLcpF6JBJLdN9D4s=;
 b=B/Zb7fuTcTV5U3pm1q1nPd7eIhQ+CBSsePWwkFC2fwCE//3rrvucPhsgLyjZKvWTYJcApBFu8dg4Cozmwa9U0Mlb89ENuxbukUemsj5njPcnk4Ktx/DtWiko4Df31tzEnIjx6GSAS+rzbwdzT8Tl6+bptAELn0W9YNUObeDJ+MU=
From: Owen Smith <owen.smith@citrix.com>
To: Tu Dinh <ngoc-tu.dinh@vates.tech>, =?iso-8859-1?Q?C=E9saire_Mounah?=
	<cesaire.mounah@vates.tech>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Subject: Re: [PATCH 5/5] xeniface: Bound NumberPermissions before checking the
 input length
Thread-Topic: [PATCH 5/5] xeniface: Bound NumberPermissions before checking
 the input length
Thread-Index: AQHdYInwO11ITiWjP0iE8qp3V4LDSrcGWmIAgAE1Vfo=
Date: Wed, 21 Oct 2026 06:51:25 +0000
Message-ID:
 <SA6PR03MB776069CE47F00944A0B3AAD2FE662@SA6PR03MB7760.namprd03.prod.outlook.com>
References:
 <1792497190.8631fc262581453bbf619ec5b2062170.1a159288539000f79f@vates.tech>
 <1792497324.8631fc262581453bbf619ec5b2062170.1a1592a91a3000f79f@vates.tech>
 <1792498975.8631fc262581453bbf619ec5b2062170.1a15943c3d1000f79f@vates.tech>
In-Reply-To:
 <1792498975.8631fc262581453bbf619ec5b2062170.1a15943c3d1000f79f@vates.tech>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
msip_labels:
authentication-results: mx.microsoft.com 1; dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=citrix.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: SA6PR03MB7760:EE_|CHBPR03MB983735:EE_
x-ms-office365-filtering-correlation-id: 327c7298-f779-4b7b-be9a-08df2f3fb98c
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam:
 BCL:0;ARA:13230040|23010399003|1800799024|376014|366016|38070700021|56012099006|4143699003|11063799006|261009223027099003|10067099003|18002099003|22082099003;
x-microsoft-antispam-message-info:
 tG5OVJV5vnJHXzt3sdTfyew6mBT+FfPhWpQLU7TMdkWew3efkySRPu5Ngy34rjqpwbfMJoNTDqX1rlLo/bfMnGOmjkFbIXPebFWgJY8fqxZ3ponZhEJ8q3pV/ELIZ1bFITpJsJrLkcqlT0SQB+QMtMlLGIXGockEkRFHCMgV0H32qopix1/KuIzVyVqeHCkLslwKFWyJjzgde0I933IogbUEPHtLFBnbJafxs+Lk1LkA4eaRHtXy3bC/+XKG6gFBjgjF/ljz5cofwXO6BCzdczX1Gjl5IbWNmfsq6dCUhaOQCYDQ7fwmzC7pHalEtk7TE8UqHopz4MLVgNMg32f866Q7e95Yf/soqDvqwUtmXfw+GNj/s1GbgsG8IeKjbanvQ5epyzr3az6wkSLXkdi/UKJRz86+MWVUFtccWv6EeyQ0NuIAm17mKk7gD3aWLtLtuRjjs/fRGPActsy5BfqpKDyF1gdH3spQrQpvHjQH/RSEYxhvx9adX69VkAZCIY00qjRguumizy0/tPimL/qyc1Kzh14JCEHIVcsq/wkmp8jY0nZwNwd7iyqbB3NFJW6Nez7zaz91m26RzGSzXMmAFqmk98vieIvxuDy6L+rhBKp2+PjuG1OYAPjhO1cIEkjHOwKlMTH0nQi7DY6GIh2q8rQp721TfGwbhlu3Au2SiqVTNLTuuGZhllYwL7lncWH9d4FrBAsQs0Rv4o5NyCAZtpcIo8vNxiyj9YyyRlqHm10=
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SA6PR03MB7760.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(1800799024)(376014)(366016)(38070700021)(56012099006)(4143699003)(11063799006)(261009223027099003)(10067099003)(18002099003)(22082099003);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?iso-8859-1?Q?GwK+KO+A3+uscYO4vZ1Y96D+0pqZb8IFB8utGp9ewsATo6OQHZYVdRpiDy?=
 =?iso-8859-1?Q?yI9QTU/N1taIEID6bjvZNbDqzH+U/jm/SFWOu6hz/soKKXpSXrHyciMBFU?=
 =?iso-8859-1?Q?vdAZjyif40WNBK9Qp8qJzE9nkBwGYZPw55WuC6ciwtZ5hWrREEm/vPQgb/?=
 =?iso-8859-1?Q?3Ok17Q/4DD4M7UF0vPqR/7oz49Khq38OQeHUILR5RDHKYrfiN5c3bxIF7x?=
 =?iso-8859-1?Q?maCHkkyA+SbZU1nxqPQcCoGKvHOQ+CKlscoe3E7+cMMpxOJpExRUrQuCx/?=
 =?iso-8859-1?Q?yiOR2aBvmH/FoKqCBVEaxdt30VZKov/OB41dXAWdBCQrdbEUNZDRfcc9jV?=
 =?iso-8859-1?Q?En6+xWesF+fesTHOxhEKfURfzZJ0U9TN8AqsiBE66XSN8DUVow3yW7oako?=
 =?iso-8859-1?Q?otel41wvEsBnuB6Ayx3NqGcI+xcJKWyXK3rLbzlBvvIbRcVYi58C390GXJ?=
 =?iso-8859-1?Q?5aHwq+0uHIGN/wKicqpeF4wiqxvrlZKjxj0woXoEKNhkSUtyw0zOtzHmHB?=
 =?iso-8859-1?Q?Lj5w77nqST8JFO81TjTqj5ILQvIJa3A1zyvY6+oH/FO9cy9Qho9sactkkp?=
 =?iso-8859-1?Q?Pjw1AK6qxnjsvMG4DQwGM+ZG+q9oy2SUxjQ8Gn2mvAwyWJGQenDkr0KNJ/?=
 =?iso-8859-1?Q?f06J816FaJpOqalpa8EKqdN169VrY1Z5BNa3lGb0cZ6L4Jze7mA024gNt/?=
 =?iso-8859-1?Q?PYxxybvSk8+SdO4mZUYHauhGJ+4FEllkhTRb0QIrtlJ98RNcwt+zBFuX/3?=
 =?iso-8859-1?Q?c3gpK7MC0uPYhWknq6uoeqc9w0v5FH06her66FsH3d9H/w6c8Cg6/UUcns?=
 =?iso-8859-1?Q?MaasaQqTmsmi82NXG6SuCkao9r06O/yIZ4kioB+QSkmvpKDv9PTuZGueim?=
 =?iso-8859-1?Q?mvBU331gCA792E8uvxwXkTjcDhPImrDdOJkQH3Yt7sQ2kE1UmqXP+9HIla?=
 =?iso-8859-1?Q?vbkU+l0l0mC1cRmC3oGNE2rNpjv6THYBaMlL62UHKOT0Jh9bdLMmCiFkLE?=
 =?iso-8859-1?Q?Elz9/vBqYRvoIvAb86vZWX6iaJOqhCUkVdsnKtTLpopzCZztVMsvp4Neq1?=
 =?iso-8859-1?Q?rCtZ/3SWRsQySi28/VvbbDLrj0BWLz3gl+eQBqZ+aaUYuP2o2Pi8xNjFtO?=
 =?iso-8859-1?Q?JUtMiiOVupwVYLjY9CFjB5zNGMy4BLfL3Mh40NsnMGp0zrf/KmmbDkgnsZ?=
 =?iso-8859-1?Q?sqJqhr0UpJWiPUqOFUMHS13BGRZNG1QSpVeouyOBiCH6bNKOtGhdgPnt4D?=
 =?iso-8859-1?Q?iLlN91xcYlV1tNL53gD6uv3hgh4fAxmAIr8oQbm+ANUzBtOCnKYC+WJj2W?=
 =?iso-8859-1?Q?GSwv59sgwV4s/axlZEn8aHiGhEiqXkoWknAu2hPvn6hD22wDnxs70QhP4n?=
 =?iso-8859-1?Q?tYVHh8Ugkrk+bkfeCni5ok2GO7DXoWits3UOjpvtANNPqDEG4zfTErdQKk?=
 =?iso-8859-1?Q?wHeeis6c5e8NHGsX7S3FO4zr8feyjHQb2smos3NUXjZqqjgu9+EIWeIo1D?=
 =?iso-8859-1?Q?t9AeJNpaY++sLLlLl7OvyvPhcLrKgut9vmRMuS5eLslAKzWfr+Vak9OvD4?=
 =?iso-8859-1?Q?og2AWCG/1DkWrUU1XVuNbcuwdAd2I13l4DdBzUbjnKRBUY5gJ0ffmJxAFi?=
 =?iso-8859-1?Q?x8zPQkKwY5cSxILTMMd6csG/U0iWG3WpI+OfXLT4U+yr+YjA+gBxig7pt0?=
 =?iso-8859-1?Q?A4R64ne4sI1XkOKG6p5qmGa1C16ZwmrSMrt+s633iIGu4NQQP0zovOqsFA?=
 =?iso-8859-1?Q?6lE8mZE5faq8acB5bJ1f1FVZ3NINaplgvu7vMBhoAzkNCWfHQP0gF4MBjD?=
 =?iso-8859-1?Q?TfXztEqC6A=3D=3D?=
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-OriginatorOrg: citrix.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: SA6PR03MB7760.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 327c7298-f779-4b7b-be9a-08df2f3fb98c
X-MS-Exchange-CrossTenant-originalarrivaltime: 21 Oct 2026 06:51:25.2201
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: pgPwp3VG3AoPr71qbpZkIUfD3AXJkChDSQrjCI+9aNHgkLMAEIHNgYcMV/sDShr++1JFDSJU88IG1vZKvjW0DQ==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: CHBPR03MB983735
X-purgate-ID: tlsNG-720697/1792565489-F26B72AC-E016F939/0/0
X-purgate-type: clean
X-purgate-size: 980

=0A=
>>   src/xeniface/ioctl_store.c | 5 +++++=0A=
>>   1 file changed, 5 insertions(+)=0A=
>>=0A=
>> diff --git a/src/xeniface/ioctl_store.c b/src/xeniface/ioctl_store.c=0A=
>> index 97bef75..cb9f2ff 100644=0A=
>> --- a/src/xeniface/ioctl_store.c=0A=
>> +++ b/src/xeniface/ioctl_store.c=0A=
>> @@ -417,6 +417,11 @@ IoctlStoreSetPermissions(=0A=
>>           goto fail1;=0A=
>>       }=0A=
>>=0A=
>> +    status =3D STATUS_INVALID_PARAMETER;=0A=
>> +    if (In->NumberPermissions > 255)=0A=
>> +        goto fail2;=0A=
>> +=0A=
>=0A=
>I think the check in __ConvertPermissions can then be removed.=0A=
>=0A=
>> +    status =3D STATUS_INVALID_BUFFER_SIZE;=0A=
>>       if (InLen !=3D (ULONG)FIELD_OFFSET(XENIFACE_STORE_SET_PERMISSIONS_=
IN, Permissions[In->NumberPermissions]))=0A=
>>           goto fail2;=0A=
>>=0A=
=0A=
The subsequent "goto failX;" and "failX:" labels will need renumbering=0A=
Apart from that, this patch looks good=0A=
=0A=
Owen=


From win-pv-devel-bounces@lists.xenproject.org Wed Oct 21 06:59:53 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 21 Oct 2026 06:59:53 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1456765.1669890 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJQIi-0005lW-D2; Wed, 21 Oct 2026 06:59:52 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1456765.1669890; Wed, 21 Oct 2026 06:59:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJQIi-0005lP-AN; Wed, 21 Oct 2026 06:59:52 +0000
Received: by outflank-mailman (input) for mailman id 1456765;
 Wed, 21 Oct 2026 06:59:51 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <owen.smith@citrix.com>) id 1xJQIh-0005lJ-4r
 for win-pv-devel@lists.xenproject.org; Wed, 21 Oct 2026 06:59:51 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJQIg-002Lqy-3T
 for win-pv-devel@lists.xenproject.org; Wed, 21 Oct 2026 08:59:50 +0200
Received: from [10.42.69.6] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ad862e5-e002-0a2a0a5209dd-0a2a45068c36-0
 for <win-pv-devel@lists.xenproject.org>; Wed, 21 Oct 2026 08:59:49 +0200
Received: from [40.107.201.68]
 (helo=CH4PR04CU002.outbound.protection.outlook.com)
 by tlsNG-16d1c6.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ad862e4-195a-0a2a45060019-286bc944436a-4
 for <win-pv-devel@lists.xenproject.org>; Wed, 21 Oct 2026 08:59:49 +0200
Received: from SA6PR03MB7760.namprd03.prod.outlook.com (2603:10b6:806:43c::5)
 by BN5PR03MB8041.namprd03.prod.outlook.com (2603:10b6:408:2a8::5)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.522.19; Wed, 21 Oct
 2026 06:59:47 +0000
Received: from SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38]) by SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38%5]) with mapi id 15.21.0522.017; Wed, 21 Oct 2026
 06:59:46 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:x-ms-exchange-senderadcheck"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
 b=q5HOTPxW6sN0yOV7dGCUkWtTpNF1OFcalKWba/XPz2n070fjY6uZTMWb6EfiFp+12y632/74K7TstXbdwAykiNCuozc8ppSQV45nr2E1EZCOQ0QxS0I27wtSUx4n2oD57uWfXXxAZq1QWce0OW56oSSDljIQ6LK6CSIsRsKfxqFBCuHrXowT61y668KJtFmSATWUcOtiyjrjpCg7J7VwN1UJnJwwtvvPHEdFbijGIzIDUckESEvjKVa+pWYEeoKm4gpWcakeR8GO8A/dhU4fzOeVLmJUlSNcC3yL3AjsxjS/mcrGQsqqitaMHTberO1IwYYAzCWcVguTIibKItS7Tw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector10001;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=yBQE+666W6wzjSgvOw+GmloD7BUZ/9Gu2tIpc+8wwKU=;
 b=pokdE31CR2TG7n71MfCjsaUpDwkpR7AkYz4GqUmbDiOINhDfgZ4sx2n4mFHDUQpNGpJM9v0R7N2BHcLjxrGeXsoyXGzZjPNZOegQl6BGKnjI5ZNjnC//NCID72t+cxahTH4mI34rzTCRUV/VFpmeV9/GB98sIQ4KE11ROa0qocrAx/VNZ/EeoKcTbhjSScruCnOPkKmzgcLGluchmxhY94saZxBtyZTYNJutcFxulHDF4x4ilkTIYznmLC66ZpL5KWGf+Q41se2QOsHAPkV5D9glCignmyoHAQTIfeSRQzXka1rp7nYMwzFA2JybN0ypo7CLscCgNDMXIvMWxJSv2w==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=yBQE+666W6wzjSgvOw+GmloD7BUZ/9Gu2tIpc+8wwKU=;
 b=Q7yuPWfynkb19wHMp+4tZxewCdAMJsl5idCh1Te3wKwpo8eW1D7gHvLSxETtLtrAEOjZqM0t8DbJ2+rGKvPkW68hIcfNDVZ5o5eO30Pd42tS/WgdlACnVICkpraN9E4bFrjf/a4sr500dQ5s1KZhQAkRcpIwIzNJZeOnyDOPJX8=
From: Owen Smith <owen.smith@citrix.com>
To: Tu Dinh <ngoc-tu.dinh@vates.tech>, =?iso-8859-1?Q?C=E9saire_Mounah?=
	<cesaire.mounah@vates.tech>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Subject: Re: [PATCH 2/5] xenagent: Let CXenIfaceDevice release its own
 registrations
Thread-Topic: [PATCH 2/5] xenagent: Let CXenIfaceDevice release its own
 registrations
Thread-Index: AQHdYInuUNI8hzGc+Uml1kPacW/+LbcGWsCAgAE3ngM=
Date: Wed, 21 Oct 2026 06:59:46 +0000
Message-ID:
 <SA6PR03MB7760E04BBBCCA53CDA472209FE662@SA6PR03MB7760.namprd03.prod.outlook.com>
References:
 <1792497190.8631fc262581453bbf619ec5b2062170.1a159288539000f79f@vates.tech>
 <1792497323.8631fc262581453bbf619ec5b2062170.1a1592a8eb5000f79f@vates.tech>
 <1792499054.8631fc262581453bbf619ec5b2062170.1a15944f6d7000f79f@vates.tech>
In-Reply-To:
 <1792499054.8631fc262581453bbf619ec5b2062170.1a15944f6d7000f79f@vates.tech>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
msip_labels:
authentication-results: mx.microsoft.com 1; dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=citrix.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: SA6PR03MB7760:EE_|BN5PR03MB8041:EE_
x-ms-office365-filtering-correlation-id: 815ae5d4-d4c8-41b7-4ec4-08df2f40e499
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam:
 BCL:0;ARA:13230040|23010399003|1800799024|366016|376014|18002099003|22082099003|38070700021|4143699003|11063799006|261009223027099003|261009221227099003|10067099003|56012099006;
x-microsoft-antispam-message-info:
 WvY9upNotIn6lmVh5PiPpnRUtpYJu/1WA7R2QE72rk+gLwB3GrKsgzodzLYaQY1JmjsCYsaRk+jFzm7jzii6T/PMaS8W8E5zesZ//9nhb0bT2FEkvJgx9+uEyioUFw6z+yshdHS1/0f6z2iI/7Qp3fChZ1Byx+iYrz3BSGYGBEecj+0Hr5Rt7GbUTzAV9YuAI8ur0QI9xoaaxE55SuOpNaNS8yMhF9nILvEjmqJ/y1D757urzDd1cSoG8+QWHQ3RQX+Y+KAAzotE6Ho2O+ik9ktaIIIfXF8D+HWBtZ1Zhlqi8ZPxN0Rx7kCaytWHDNjjIrweXffgx2QQUhAmztcjJb8le8gbo1q6opeUaysIBWzcJuKROVYgoHayfz3b4oXoKzgdDuVfwsuNOl7XwOBs7L5mXDhlAREBHL1Qzv2uBI/GNfrUOoyyPDOlbjQ91kki80qF3hvkYNhkEp1uSQs66e2VqxIJLx/FXfL36kJTOBolD7NyGIFYN6Y7DWnKr8OovShk9vOu/cOqXwQIgb1e7C1UD6bzHX4sLm2tM7NEeOqmk8Hm8eSEmHLq6aAhnM1jLN4ZkH38tQoa0n4qZ1BGn0FWWBLG7PLBat1JyEe4sIU6a/6/SGcSvjliBedkyCJX0xDBgp1SPs0/gOg4ZigMv9PQCsbr/b+/nPj1Fi8/zn8=
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SA6PR03MB7760.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(1800799024)(366016)(376014)(18002099003)(22082099003)(38070700021)(4143699003)(11063799006)(261009223027099003)(261009221227099003)(10067099003)(56012099006);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?iso-8859-1?Q?bCzdakUJQ16a38TIYNxNHLOsVPW7JpG52WYtWWit1k85gSc25gOwUBzdde?=
 =?iso-8859-1?Q?6SMYqI7Zz+jegFJnpa07J8NNn2QybMg4tIeUzqSbxFFwF0xys6jOe2k4la?=
 =?iso-8859-1?Q?quD1uSrMinBNAPt3tG5Zvl/P0OkohltQzUljleAsKQ3IjOe4KTaQkmwAWJ?=
 =?iso-8859-1?Q?VE7/5BjDzm7Lz7VOYLsycBoNJSAgs/vwl8KKHqHvBsgkiwhq5Ii1E9MCNA?=
 =?iso-8859-1?Q?K2zBjXKz6lNxh4EjHTm1vNANBWZCuk3+LI/TEFzfYZz1XvSilzPtexNopW?=
 =?iso-8859-1?Q?LDxvEggBUTiImkpoXBLpMxzgV1Ou2HYOrn4stVGBVX/WV+7d7CZsbSKYHN?=
 =?iso-8859-1?Q?ffPN2aUTBCjo9gvheiaiQzUdMulbMrxE2c2lYNMC7m302SP8vbahtOr8M7?=
 =?iso-8859-1?Q?leJ1kQchJleJ4HxIMot+gWMq5M1oGMR7+lz1VvqVawQz3VMTgnr+8cTsVq?=
 =?iso-8859-1?Q?h92BhusiYZu1b+oEuiO/BtxyIkqlRpPqhXLwcBuItfDSZ5fcFgWMtGYW0J?=
 =?iso-8859-1?Q?jjmWXTd0ASC+JgHwZCyBR1vPGS0xQL3PqMk4J2+hrgHOBzvoR05IMuWrqn?=
 =?iso-8859-1?Q?xMnuAaurv5Ysr7nG7H4rjSmXGwJbGwgilbv4DWcOjw4sVR+BcybaQV+vBw?=
 =?iso-8859-1?Q?Kb8B5WoneqNlreIbf4Uz/C79m8lupB3TMNBVIzOn/nlW3HSo2CBoPC7jp1?=
 =?iso-8859-1?Q?NcC4hxYmPqY3Xfqiw9WY7Kx5JRl5fizNeoyFHUzTAcqyzHOTxhNyhjR8Wi?=
 =?iso-8859-1?Q?YPYgQBzhdnsvWn3kGMp9AwCC528QZTGAWahmrqWuJmG90Vqekxoyp6EOhN?=
 =?iso-8859-1?Q?IFyfsfpZh+d2eYGR3cugTwmkGxUAZjwMS9V3ent0cjK6c5X2q7kQ6bhCOf?=
 =?iso-8859-1?Q?W89ZJPaqP/VrJjJQXSk9w5MsfANKfLaMhyAvNQTQCzBCeHj6MHS3KrjXXo?=
 =?iso-8859-1?Q?rh7SLpDxt7CYvax5aZsraT+IktF0FVd3Ao/fSwQlqEbT0GTuFS91IdzwfL?=
 =?iso-8859-1?Q?2eJtivNnY+ocIMNfRWygmG/IcjJl9ZQLSwbli5LdBIxVghWF3nuPWcc+uU?=
 =?iso-8859-1?Q?CELIVz0CRMAGGd5wiADmWIQFxsgJAqCO0uMzthyj+gXD8CjWBzwqaCGq3P?=
 =?iso-8859-1?Q?R5QzC57U4L7uGdVWExGaqgBlMn4tNCXX1LP4BFyVJM4WRma4Z+uNYnES8d?=
 =?iso-8859-1?Q?5QJ+CUM6tT5wZ3UiR8AXtW1vA7WSgR8eKfETrgiYyzrub+yPTn6q9OwLu1?=
 =?iso-8859-1?Q?XEazWSTxLNW3r8HEJ4nLZjZNsDOBlzj7380mpYzuVzK2qC1Vn+tjyD92C6?=
 =?iso-8859-1?Q?3zjN2n4ITqv0sReN8ZVRIHJL1PJrIfeLBk2Cq1Fjchq1UuBXGnnQR5mvkv?=
 =?iso-8859-1?Q?SeweLSgVjjsVnceJfG6tf4upkctsWe5KqxV0Xi1rSdRryEcxjlSWlUmfci?=
 =?iso-8859-1?Q?JMVu8aAcNspB69M5gYYLB/I0bjSaWHFUtBIFaPIxCuGfe7Ikx+cDgP7TtU?=
 =?iso-8859-1?Q?pKwFqYzVVj9+ZmVThBlJ8NDsUe0uHcKfckFaHYhn+qziQNAHy2m4VC0xGJ?=
 =?iso-8859-1?Q?dDxUaskqVzAbWcQ6+yEQQeo6LFb9r0f4eppzqryhE9JaNwoU5kgySdMXrb?=
 =?iso-8859-1?Q?ss9BX2j7RR3Hp6A4d0oY88JSV6Q0iuNo3eUNxRATiy0JU0YevluynxjQfQ?=
 =?iso-8859-1?Q?PMl8KV5sueEUFQz/KwkGACt1Rlv5s0PISieh5ho4YH8GKRofheFBQhKJao?=
 =?iso-8859-1?Q?OZm+y4141VNVS1yqMb1Oog8bhQU6lazUZ8Nl3DIEmJL99j?=
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-OriginatorOrg: citrix.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: SA6PR03MB7760.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 815ae5d4-d4c8-41b7-4ec4-08df2f40e499
X-MS-Exchange-CrossTenant-originalarrivaltime: 21 Oct 2026 06:59:46.8773
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: In+2L8ufay9Z/5TG7tVv8aTPs+iRm70uEfnW2urHR8jAB7ncvbi4Cbjp1FRhp8mFCwLInMyT7RzK2YirywI8zA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN5PR03MB8041
X-purgate-ID: tlsNG-16d1c6/1792565989-FE87577B-02ECA644/0/0
X-purgate-type: clean
X-purgate-size: 11214

Reviewed-by: Owen Smith <owen.smith@citrix.com>

________________________________________
From: win-pv-devel <win-pv-devel-bounces@lists.xenproject.org> on behalf of=
 Tu Dinh <ngoc-tu.dinh@vates.tech>
Sent: 20 October 2026 1:24 PM
To: C=E9saire Mounah; win-pv-devel@lists.xenproject.org
Subject: Re: [PATCH 2/5] xenagent: Let CXenIfaceDevice release its own regi=
strations

On 20/10/2026 13:55, C=E9saire Mounah wrote:
> The CDeviceList destructor called CleanupDeviceList(), which calls the
> pure virtual OnDeviceRemoved() after the derived class has already been
> destroyed.
>
> The suspend registration and the shutdown and slate-mode watches are
> registered on the device handle, but their contexts were kept in
> CXenIfaceDeviceList, so only that callback could release them. Move the
> contexts into CXenIfaceDevice and release them in its destructor, before
> ~CDevice() closes the handle. ~CDeviceList() now only deletes the
> devices.
>
> Assisted-by: Claude:Opus-5.5
> Signed-off-by: C=E9saire Mounah <cesaire.mounah@vates.tech>

It looks good to me in principle but I haven't checked that closely.

Acked-by: Tu Dinh <ngoc-tu.dinh@vates.tech>

> ---
>   src/xenagent/devicelist.cpp     |   8 +-
>   src/xenagent/xenifacedevice.cpp | 170 +++++++++++++++++---------------
>   src/xenagent/xenifacedevice.h   |  20 ++--
>   3 files changed, 108 insertions(+), 90 deletions(-)
>
> diff --git a/src/xenagent/devicelist.cpp b/src/xenagent/devicelist.cpp
> index 8bf9b2b..63aa7dd 100644
> --- a/src/xenagent/devicelist.cpp
> +++ b/src/xenagent/devicelist.cpp
> @@ -185,7 +185,13 @@ CDeviceList::CDeviceList(const GUID& itf) :
>   CDeviceList::~CDeviceList()
>   {
>       UnregisterForDeviceChange();
> -    CleanupDeviceList();
> +
> +    for (DeviceMap::iterator it =3D m_devs.begin();
> +         it !=3D m_devs.end();
> +         ++it) {
> +        delete *it;
> +    }
> +    m_devs.clear();
>
>       DeleteCriticalSection(&m_crit);
>   }
> diff --git a/src/xenagent/xenifacedevice.cpp b/src/xenagent/xenifacedevic=
e.cpp
> index 763abf0..d3e02a9 100644
> --- a/src/xenagent/xenifacedevice.cpp
> +++ b/src/xenagent/xenifacedevice.cpp
> @@ -48,11 +48,18 @@
>
>   #define TIME_SYNC_MODE_DISABLED 0
>
> -CXenIfaceDevice::CXenIfaceDevice(const wchar_t* path) : CDevice(path)
> +CXenIfaceDevice::CXenIfaceDevice(const wchar_t* path) : CDevice(path),
> +    m_ctxt_suspend(NULL),
> +    m_ctxt_shutdown(NULL),
> +    m_ctxt_slate_mode(NULL)
>   {}
>
>   /*virtual*/ CXenIfaceDevice::~CXenIfaceDevice()
> -{}
> +{
> +    StopSlateModeWatch();
> +    StopShutdownWatch();
> +    StopSuspendWatch();
> +}
>
>   // store interface
>   bool CXenIfaceDevice::StoreRead(const std::string& path, std::string& v=
alue)
> @@ -182,11 +189,72 @@ bool CXenIfaceDevice::Log(const std::string& msg)
>                    NULL, 0);
>   }
>
> +void CXenIfaceDevice::StartSuspendWatch(HANDLE evt)
> +{
> +    if (m_ctxt_suspend)
> +        return;
> +
> +    SuspendRegister(evt, &m_ctxt_suspend);
> +}
> +
> +void CXenIfaceDevice::StopSuspendWatch()
> +{
> +    if (!m_ctxt_suspend)
> +        return;
> +
> +    SuspendDeregister(m_ctxt_suspend);
> +    m_ctxt_suspend =3D NULL;
> +}
> +
> +void CXenIfaceDevice::StartShutdownWatch(HANDLE evt)
> +{
> +    if (m_ctxt_shutdown)
> +        return;
> +
> +    StoreAddWatch("control/shutdown", evt, &m_ctxt_shutdown);
> +
> +    StoreWrite("control/feature-poweroff", "1");
> +    StoreWrite("control/feature-reboot", "1");
> +    StoreWrite("control/feature-s3", "1");
> +    StoreWrite("control/feature-s4", "1");
> +}
> +
> +void CXenIfaceDevice::StopShutdownWatch()
> +{
> +    if (!m_ctxt_shutdown)
> +        return;
> +
> +    StoreWrite("control/feature-poweroff", "");
> +    StoreWrite("control/feature-reboot", "");
> +    StoreWrite("control/feature-s3", "");
> +    StoreWrite("control/feature-s4", "");
> +
> +    StoreRemoveWatch(m_ctxt_shutdown);
> +    m_ctxt_shutdown =3D NULL;
> +}
> +
> +void CXenIfaceDevice::StartSlateModeWatch(HANDLE evt)
> +{
> +    if (m_ctxt_slate_mode)
> +        return;
> +
> +    StoreAddWatch("control/laptop-slate-mode", evt, &m_ctxt_slate_mode);
> +    StoreWrite("control/feature-laptop-slate-mode", "1");
> +}
> +
> +void CXenIfaceDevice::StopSlateModeWatch()
> +{
> +    if (!m_ctxt_slate_mode)
> +        return;
> +
> +    StoreRemove("control/feature-laptop-slate-mode");
> +
> +    StoreRemoveWatch(m_ctxt_slate_mode);
> +    m_ctxt_slate_mode =3D NULL;
> +}
> +
>   CXenIfaceDeviceList::CXenIfaceDeviceList(CXenAgent* agent) : CDeviceLis=
t(GUID_INTERFACE_XENIFACE),
> -    m_agent(agent),
> -    m_ctxt_suspend(NULL),
> -    m_ctxt_shutdown(NULL),
> -    m_ctxt_slate_mode(NULL)
> +    m_agent(agent)
>   {
>       m_evt_shutdown =3D CreateEvent(NULL, TRUE, FALSE, NULL);
>       m_evt_suspend =3D CreateEvent(NULL, TRUE, FALSE, NULL);
> @@ -215,11 +283,11 @@ CXenIfaceDeviceList::CXenIfaceDeviceList(CXenAgent*=
 agent) : CDeviceList(GUID_IN
>
>       CXenIfaceDevice* device =3D (CXenIfaceDevice*)dev;
>
> -    device->SuspendRegister(m_evt_suspend, &m_ctxt_suspend);
> -    StartShutdownWatch(device);
> +    device->StartSuspendWatch(m_evt_suspend);
> +    device->StartShutdownWatch(m_evt_shutdown);
>
>       if (m_agent->ConvDevicePresent())
> -        StartSlateModeWatch(device);
> +        device->StartSlateModeWatch(m_evt_slate_mode);
>
>       SetXenTime(device, false);
>   }
> @@ -229,17 +297,9 @@ CXenIfaceDeviceList::CXenIfaceDeviceList(CXenAgent* =
agent) : CDeviceList(GUID_IN
>       CCritSec crit(&m_crit);
>       CXenIfaceDevice* device =3D (CXenIfaceDevice*)dev;
>
> -    if (dev !=3D GetFirstDevice())
> -        return;
> -
> -    if (m_ctxt_suspend)
> -        device->SuspendDeregister(m_ctxt_suspend);
> -    m_ctxt_suspend =3D NULL;
> -
> -    if (m_agent->ConvDevicePresent())
> -        StopSlateModeWatch(device);
> -
> -    StopShutdownWatch(device);
> +    device->StopSuspendWatch();
> +    device->StopSlateModeWatch();
> +    device->StopShutdownWatch();
>   }
>
>   /*virtual*/ void CXenIfaceDeviceList::OnDeviceSuspend(CDevice* dev)
> @@ -247,13 +307,8 @@ CXenIfaceDeviceList::CXenIfaceDeviceList(CXenAgent* =
agent) : CDeviceList(GUID_IN
>       CCritSec crit(&m_crit);
>       CXenIfaceDevice* device =3D (CXenIfaceDevice*)dev;
>
> -    if (dev !=3D GetFirstDevice())
> -        return;
> -
> -    if (m_agent->ConvDevicePresent())
> -        StopSlateModeWatch(device);
> -
> -    StopShutdownWatch(device);
> +    device->StopSlateModeWatch();
> +    device->StopShutdownWatch();
>   }
>
>   /*virtual*/ void CXenIfaceDeviceList::OnDeviceResume(CDevice* dev)
> @@ -264,10 +319,10 @@ CXenIfaceDeviceList::CXenIfaceDeviceList(CXenAgent*=
 agent) : CDeviceList(GUID_IN
>       if (dev !=3D GetFirstDevice())
>           return;
>
> -    StartShutdownWatch(device);
> +    device->StartShutdownWatch(m_evt_shutdown);
>
>       if (m_agent->ConvDevicePresent())
> -        StartSlateModeWatch(device);
> +        device->StartSlateModeWatch(m_evt_slate_mode);
>   }
>
>   void CXenIfaceDeviceList::Log(const char* message)
> @@ -379,15 +434,13 @@ void CXenIfaceDeviceList::CheckSuspend()
>       m_agent->EventLog(EVENT_XENUSER_UNSUSPENDED);
>
>       // recreate watches, as suspending deactivated the watch
> -    if (m_agent->ConvDevicePresent())
> -        StopSlateModeWatch(device);
> -
> -    StopShutdownWatch(device);
> +    device->StopSlateModeWatch();
> +    device->StopShutdownWatch();
>
> -    StartShutdownWatch(device);
> +    device->StartShutdownWatch(m_evt_shutdown);
>
>       if (m_agent->ConvDevicePresent())
> -        StartSlateModeWatch(device);
> +        device->StartSlateModeWatch(m_evt_slate_mode);
>
>       m_count =3D count;
>   }
> @@ -427,53 +480,6 @@ void CXenIfaceDeviceList::LogIfRebootPending()
>       CXenAgent::Log("RebootRequired detected\n");
>   }
>
> -void CXenIfaceDeviceList::StartShutdownWatch(CXenIfaceDevice* device)
> -{
> -    if (m_ctxt_shutdown)
> -        return;
> -
> -    device->StoreAddWatch("control/shutdown", m_evt_shutdown, &m_ctxt_sh=
utdown);
> -
> -    device->StoreWrite("control/feature-poweroff", "1");
> -    device->StoreWrite("control/feature-reboot", "1");
> -    device->StoreWrite("control/feature-s3", "1");
> -    device->StoreWrite("control/feature-s4", "1");
> -}
> -
> -void CXenIfaceDeviceList::StopShutdownWatch(CXenIfaceDevice* device)
> -{
> -    if (!m_ctxt_shutdown)
> -        return;
> -
> -    device->StoreWrite("control/feature-poweroff", "");
> -    device->StoreWrite("control/feature-reboot", "");
> -    device->StoreWrite("control/feature-s3", "");
> -    device->StoreWrite("control/feature-s4", "");
> -
> -    device->StoreRemoveWatch(m_ctxt_shutdown);
> -    m_ctxt_shutdown =3D NULL;
> -}
> -
> -void CXenIfaceDeviceList::StartSlateModeWatch(CXenIfaceDevice* device)
> -{
> -    if (m_ctxt_slate_mode)
> -        return;
> -
> -    device->StoreAddWatch("control/laptop-slate-mode", m_evt_slate_mode,=
 &m_ctxt_slate_mode);
> -    device->StoreWrite("control/feature-laptop-slate-mode", "1");
> -}
> -
> -void CXenIfaceDeviceList::StopSlateModeWatch(CXenIfaceDevice* device)
> -{
> -    if (!m_ctxt_slate_mode)
> -        return;
> -
> -    device->StoreRemove("control/feature-laptop-slate-mode");
> -
> -    device->StoreRemoveWatch(m_ctxt_slate_mode);
> -    m_ctxt_slate_mode =3D NULL;
> -}
> -
>   void CXenIfaceDeviceList::AcquireShutdownPrivilege()
>   {
>       HANDLE          token;
> diff --git a/src/xenagent/xenifacedevice.h b/src/xenagent/xenifacedevice.=
h
> index 8a89036..1ddd454 100644
> --- a/src/xenagent/xenifacedevice.h
> +++ b/src/xenagent/xenifacedevice.h
> @@ -60,6 +60,19 @@ public: // sharedinfo interface
>
>   public: // logging
>       bool Log(const std::string& msg);
> +
> +public:
> +    void StartSuspendWatch(HANDLE evt);
> +    void StopSuspendWatch();
> +    void StartShutdownWatch(HANDLE evt);
> +    void StopShutdownWatch();
> +    void StartSlateModeWatch(HANDLE evt);
> +    void StopSlateModeWatch();
> +
> +private:
> +    void*   m_ctxt_suspend;
> +    void*   m_ctxt_shutdown;
> +    void*   m_ctxt_slate_mode;
>   };
>
>   class CXenAgent;
> @@ -90,19 +103,12 @@ public:
>       void LogIfRebootPending();
>
>   private:
> -    void StartShutdownWatch(CXenIfaceDevice* device);
> -    void StopShutdownWatch(CXenIfaceDevice* device);
> -    void StartSlateModeWatch(CXenIfaceDevice* device);
> -    void StopSlateModeWatch(CXenIfaceDevice* device);
>       void AcquireShutdownPrivilege();
>       void SetXenTime(CXenIfaceDevice* device, bool forced);
>
>   private:
>       CXenAgent*  m_agent;
>       DWORD       m_count;
> -    void*       m_ctxt_suspend;
> -    void*       m_ctxt_shutdown;
> -    void*       m_ctxt_slate_mode;
>   };
>
>   #endif



--
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates solutions

web: https://vates.tech


From win-pv-devel-bounces@lists.xenproject.org Wed Oct 21 07:00:59 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 21 Oct 2026 07:00:59 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1456767.1669894 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJQJn-0006q0-HT; Wed, 21 Oct 2026 07:00:59 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1456767.1669894; Wed, 21 Oct 2026 07:00:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJQJn-0006pt-Ek; Wed, 21 Oct 2026 07:00:59 +0000
Received: by outflank-mailman (input) for mailman id 1456767;
 Wed, 21 Oct 2026 07:00:58 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <owen.smith@citrix.com>) id 1xJQJm-0006pn-GR
 for win-pv-devel@lists.xenproject.org; Wed, 21 Oct 2026 07:00:58 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJQJl-00FRp2-LF
 for win-pv-devel@lists.xenproject.org; Wed, 21 Oct 2026 09:00:57 +0200
Received: from [10.42.69.9] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ad86324-8faa-0a2a0a5109dd-0a2a4509edba-42
 for <win-pv-devel@lists.xenproject.org>; Wed, 21 Oct 2026 09:00:57 +0200
Received: from [40.107.201.40]
 (helo=CH4PR04CU002.outbound.protection.outlook.com)
 by tlsNG-bad1c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ad86327-be1a-0a2a45090019-286bc9283841-3
 for <win-pv-devel@lists.xenproject.org>; Wed, 21 Oct 2026 09:00:57 +0200
Received: from SA6PR03MB7760.namprd03.prod.outlook.com (2603:10b6:806:43c::5)
 by BN5PR03MB8041.namprd03.prod.outlook.com (2603:10b6:408:2a8::5)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.522.19; Wed, 21 Oct
 2026 07:00:54 +0000
Received: from SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38]) by SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38%5]) with mapi id 15.21.0522.017; Wed, 21 Oct 2026
 07:00:53 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:x-ms-exchange-senderadcheck"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
 b=ev2Guw2GIgtkgHz7sSipIeucsQ31P+15LSBtZfrKbEzXkvaIcmvr+LxqToc2EbmW70nYhr5wkTqZho60jJOua8xjaGrdrp7LBxCIEbgYYUTB5K7LmIpLVx0idmUGLMW33bZru84X5JSOs9IXipvJojHRcSf6WH2DZ+YQPx5t6i6amBJsSLVdVY53eY6xXWHfMcRuVQ3BtrfC4hxD1XZXuagdVueYK6CAPLczCR5u2LYI60n38Z2rcL4LqgfHAlQPC4/b1W+qOJXSjfZRjBmF7fk4y90eTV7V/6hJ19k/+393V8eginoWx9YJ+mQQTfqUHHaFhKQ4K23IxIOoXopGVg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector10001;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=GaUdD6XOcNqJp1cXP0a21HmHosFsiH5febToYQtayuo=;
 b=rkghsVJ9xJWfit0h9E6Roy3lQINLf9scEIeX00rBvS/+aAM7Ld7D6/5OU2f/Sr2D/tK2e60RkACuxOgmtcytke1dXBLWhdP2HA6B5GANfATm1iy8T1iW4qcUKOz8ohQ+GAp2YDHuxXmNDTn5+CnfPYWvsMNECyq/+TlBccySrwlsE3v1Z/Jsfgake/yMmjafGrslD7vJ2qjOLY+ZvJkOj/yNbEvpNn0goqP36/63SfKRbWP+I3omzhJhYFUynfbZMzIguG9CXcs9rng2ebj7kFREBo5NVNDaJe+jcsPLfcBNG9pXQsIKemc+5zC0s4nzGpccdENYY99LswpTgqUh4Q==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=GaUdD6XOcNqJp1cXP0a21HmHosFsiH5febToYQtayuo=;
 b=g367rEob661fZqpy8aCVitYnAnXXeFqfcYWtL5cHxAtwnXpO1kE59rpwnEBvK+BExHNC/VhFvljvudccTZYtxt7URWv2JBOlwSjV6JlSqCaK9f9cCkE4xsyhpaDp0OfFFRTx2XL1Cv2Uy24Ty8Vp+L52wY+tHfMw8DKsiX3CDS4=
From: Owen Smith <owen.smith@citrix.com>
To: =?iso-8859-1?Q?C=E9saire_Mounah?= <cesaire.mounah@vates.tech>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Subject: Re: [PATCH 0/5] xeniface: fixes from static analysis
Thread-Topic: [PATCH 0/5] xeniface: fixes from static analysis
Thread-Index: AQHdYImeehpwnnBaOk2CIKWeI3EbgrcHknXO
Date: Wed, 21 Oct 2026 07:00:53 +0000
Message-ID:
 <SA6PR03MB7760A6C67DA040A4DB0E85A3FE662@SA6PR03MB7760.namprd03.prod.outlook.com>
References:
 <1792497190.8631fc262581453bbf619ec5b2062170.1a159288539000f79f@vates.tech>
In-Reply-To:
 <1792497190.8631fc262581453bbf619ec5b2062170.1a159288539000f79f@vates.tech>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
msip_labels:
authentication-results: mx.microsoft.com 1; dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=citrix.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: SA6PR03MB7760:EE_|BN5PR03MB8041:EE_
x-ms-office365-filtering-correlation-id: 57f31b0d-cc89-4e54-13a3-08df2f410c30
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam:
 BCL:0;ARA:13230040|23010399003|1800799024|366016|376014|6133799003|18002099003|22082099003|38070700021|11063799006|261009223027099003|10067099003|56012099006;
x-microsoft-antispam-message-info:
 IXJteFU6xjOSwRDq2bxZy6Vg1QzUOZTw0Q0wgLzqODmdoO6Q1Yf8cdmvVQeFfmWq5RMg47L34sdaRg2897MYwPy+TElXyRgY+GZPKduH+Stj6/slrEM1yRWWUSd9PQroUxjymQkizHHN6P3drTiPVJGG9YRbCXGtJtVbAQ517Qb2R+e5N+Z5useyy16/JAWcCEDBJrJmlU9frDY0NQ2vB59mlBEfSFCCzgLQ5Vd37wURsHo++UpsuDPsWnrn21w6Fyl5mJOrqNn7Lvj9hIUhDznidWuJ5geXabEK2I+XqdvOsrHT1aeEtzuBfmnOF0C1mgHpVWkpoTLKu7UGDwxW+RDwIGiHsM/3hzLLxHpQoIjqjUYU8y133/7DW0UCCQV/D4AaX5OwJHAjBYl/EvTv9JN/LcqoTWOfd9MHNO1I/C+fDRScapNzCaLO9oFnMRfFpuETh8evOjFC2HNVOZ48cApWPsg3lrb6RGxrNa03P49qfW2es41DEiFF9pRigAZkjc2m7ShW1ltCKlNmSw9peMVuC0o+pnSm28ElIwTrGXgasMvkZu8hTO3U/LC4hijbn1AH/aOXqa4YwSFhkC150HyrENUOsxQdJVGSc850l+xpNJPrZNzpDNf768OeWcSUpdiJz03C/u+M7/b+FAZIoTEvpV+uvrTiHWbxBCD3DTs=
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SA6PR03MB7760.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(1800799024)(366016)(376014)(6133799003)(18002099003)(22082099003)(38070700021)(11063799006)(261009223027099003)(10067099003)(56012099006);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?iso-8859-1?Q?lGFguoxbjGHyDq2LaeYrGYQ24UueTtS3A2G5NhgZs9pMPinySIgItOTLGx?=
 =?iso-8859-1?Q?8F+zYL0sZx6emUdJGvmNqNKvjhhHjA5AEh8XMbX1syiccNHX5vxDkZ6H3p?=
 =?iso-8859-1?Q?QgjlNm4YvEfgrC6xDvrVpxlnzfsBQZytZvgbjGgV3jLvCHkLg2XMJdI540?=
 =?iso-8859-1?Q?tvPiy6HH6sbk0FV7trGzphBB35gy/jUSNQFqp3isacOhEPqdmr1Byw3ZRa?=
 =?iso-8859-1?Q?j4qYtpw1xCXcS7iEGxtTM+sQ69C5BGJxdTbMDy9q9YWEIB2uYYw/5TEJH1?=
 =?iso-8859-1?Q?nXmIClDMG2GyfaRYuDRsoQYtQ0rLTOhk4+nTtjdlc3u9ozBB3+WX+acGWO?=
 =?iso-8859-1?Q?Gea9wxNRsT308WzRI9nb8hCjWb/7XHlrXxOu4U+Ig1+Zm+XaUMSQy10C8S?=
 =?iso-8859-1?Q?Qjn5Qni3VdAaxJ5bY5mVWHbJ8mopWOYti0sBRa0N+O7g7Hoyn92B3uiFtG?=
 =?iso-8859-1?Q?DB4XVkHci+eMmjr3inDvkMk2lQCC4F91ipatg89KDYSih4U1z1MIoJJLqt?=
 =?iso-8859-1?Q?iHaO6w2hj57llZfSBhPgq4ej+i0fOVUMjiO+geyMF5ifRiH7MF0lR0E/y4?=
 =?iso-8859-1?Q?5q+LDIMvMgKAzO6jZsLkB5xzLlbENuIR/Xjg7FhUgmh/T5n5Y9ebSth0cW?=
 =?iso-8859-1?Q?hFAN6b+C7l/0xJIoEGthb6gzVrsu2R45U45p5tgExNDezi2Um0VpQ01+W6?=
 =?iso-8859-1?Q?rEC32PMWQJMjHHzdNxK2sTapFTpRSuPZlkKQGykx7PNn7pwRULpnauNwMw?=
 =?iso-8859-1?Q?X5n5eJfO1pCDKxmnwLjJlTXSmqwb1af1lG9TZAYwWjUbWPMBnTAWTRlLjF?=
 =?iso-8859-1?Q?UTZbVRjsfN2JTXamXDNJceNdi02ODIosrrc+lu85gQ53fap+mQrUSSWbel?=
 =?iso-8859-1?Q?KAER/KLeWN9V7FJEY+PIRmhk4sfyKu94s7kHTbwp1Aews5IRk8QQX9AOBc?=
 =?iso-8859-1?Q?Gu4QHwEHFI75XIeJ4lhSBTK4xY9BVIq0TnGL8vKF2Ze2mZZFUPIPlF+igE?=
 =?iso-8859-1?Q?8C2Ic0RyTeaqC4s74H8CfraMbhIo6SCIQ0rGDkDanJ2vBz4Al9z8Bok16j?=
 =?iso-8859-1?Q?JErrwtVr+znlCQmQqxwscsQwE9hBe9btfqyVnvsZu0kdvH/8FuZKIipKI4?=
 =?iso-8859-1?Q?SceN7qRBEzMmQXzsfXc5G2pGad2snZt0pjHfN4rkctYZv4SoMiuSwUcqmX?=
 =?iso-8859-1?Q?9dbB5/BYebOfiMVQ5f78J3mtgaS7C4s1LCHdDPe8ibXJbTn1Sgnv2sLqkB?=
 =?iso-8859-1?Q?55DZywxbt78kkwSqp/Jh4r+MwA92x6uSigSJxMxpjjNkCKG/nCMaV4WtHs?=
 =?iso-8859-1?Q?+cy2/xvX/LCU71JaSyYJ3tNbijE47ae+oSj5n91N5zWzNmG2wTtJeslPke?=
 =?iso-8859-1?Q?KUPf1mNW8apaPSGGGEjlletX8KnJv0Zgb4POsP2WFsD9Lfcoh5mi3tWnwn?=
 =?iso-8859-1?Q?uTpiduUv0D24KcjqLyyUDUUY00mc/x+I07t2QngyuZVzeDQElSe06yWYH4?=
 =?iso-8859-1?Q?wPI3+LHOanN2P+RFXiqGSFH9w1za861lUIaHMBfQDKkvvU1XgaUL5w7qXu?=
 =?iso-8859-1?Q?TjBu9D8FVj+j1gw7sE8jJUGojSVCbuDdFBzO8quAtZVt4wWPS3RFBeDYNo?=
 =?iso-8859-1?Q?xQeoDTZzSNQgj5F1+7n9evbCAbJQo0cGEB3N2hBHh5h5gSU2kkrhjBb2vp?=
 =?iso-8859-1?Q?XAg2Rk6F4Kh3M1yX4qchw3EWZIODuPEppGFfJwhd+l+OO5STB0imQrReiO?=
 =?iso-8859-1?Q?36i4t6XPsgqN5TArdVx2YuQjOZ9tqgkmc+Ny2102BgRIA0?=
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-OriginatorOrg: citrix.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: SA6PR03MB7760.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 57f31b0d-cc89-4e54-13a3-08df2f410c30
X-MS-Exchange-CrossTenant-originalarrivaltime: 21 Oct 2026 07:00:53.3424
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: GPz2KBTgWWd/lrR7B84TlhjoD+q3uiaT6jiDzEKqRQPRZjFNHLRanb6eq34rYv0yFWf02ECuC6Rgeb1HP+AF4Q==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN5PR03MB8041
X-purgate-ID: tlsNG-bad1c0/1792566057-BD6C2034-174A015B/0/0
X-purgate-type: clean
X-purgate-size: 1498

The first 4 patches look good - a minor issue with the last patch.
I will apply the first 4 patches

First 4 - Reviewed-by: Owen Smith <owen.smith@citrix.com>

________________________________________
From: win-pv-devel <win-pv-devel-bounces@lists.xenproject.org> on behalf of=
 C=E9saire Mounah <cesaire.mounah@vates.tech>
Sent: 20 October 2026 12:53 PM
To: win-pv-devel@lists.xenproject.org
Cc: C=E9saire Mounah
Subject: [PATCH 0/5] xeniface: fixes from static analysis

These patches fix issues found by running CodeQL (Microsoft
windows-drivers suites and cpp-security-extended) on xeniface.

C=E9saire Mounah (5):
  xenagent: Use new (std::nothrow) where the result is checked for NULL
  xenagent: Let CXenIfaceDevice release its own registrations
  xeniface: Reject unaligned addresses in
    GNTTAB_PERMIT_FOREIGN_ACCESS_V2
  xeniface: Size converted MAP_FOREIGN_PAGES input with the V2 header
  xeniface: Bound NumberPermissions before checking the input length

 src/xenagent/convdevice.cpp     |   3 +-
 src/xenagent/devicelist.cpp     |  11 +-
 src/xenagent/xenifacedevice.cpp | 177 +++++++++++++++++---------------
 src/xenagent/xenifacedevice.h   |  20 ++--
 src/xeniface/ioctl_gnttab.c     |   6 +-
 src/xeniface/ioctl_store.c      |   5 +
 6 files changed, 125 insertions(+), 97 deletions(-)

--
2.55.0.windows.5



--
C=E9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen Orchestra - Vates solutions

web: https://vates.tech


From win-pv-devel-bounces@lists.xenproject.org Wed Oct 21 15:07:40 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 21 Oct 2026 15:07:40 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1457364.1670208 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJXul-0007eP-OL; Wed, 21 Oct 2026 15:07:39 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1457364.1670208; Wed, 21 Oct 2026 15:07:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJXul-0007eI-LY; Wed, 21 Oct 2026 15:07:39 +0000
Received: by outflank-mailman (input) for mailman id 1457364;
 Wed, 21 Oct 2026 15:07:39 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a15f00de8a000f79f@swg.vates.tech>)
 id 1xJXul-0007eB-30
 for win-pv-devel@lists.xenproject.org; Wed, 21 Oct 2026 15:07:39 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJXuk-00AWU6-CX
 for win-pv-devel@lists.xenproject.org; Wed, 21 Oct 2026 17:07:38 +0200
Received: from [10.42.69.5] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a15f00de8a000f79f@swg.vates.tech>)
 id 6ad8d50e-2eae-0a2a0a5409dd-0a2a4505bce0-40
 for <win-pv-devel@lists.xenproject.org>; Wed, 21 Oct 2026 17:07:38 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-c201ff.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a15f00de8a000f79f@swg.vates.tech>)
 id 6ad8d539-4cb1-0a2a45050019-b9ff1c22afdf-3
 for <win-pv-devel@lists.xenproject.org>; Wed, 21 Oct 2026 17:07:38 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a15f00de8a000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Wed, 21 Oct 2026 15:07:34 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 043CC823AA;
 Wed, 21 Oct 2026 17:07:33 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=Dwopn2b+oE4iNd2QslMH5No6gcAUGzjt/kBUyuvs26k=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=pMa0Zzd/TmFDp7/0JpSCZejjMn+51EFB6GCTJmeA1vEKdB+kIyMFz2AFGC176nd+Eh0+UgDSU
 rtUMJtLiP3P10n5inK9HVNtmebQ5rZA6PKOIA9NGuMLkGaxbNhaOcTDUdc9hTok4p14V5W2fGTx
 M7HisInJu63vjGGQ+PZbaWhAQfJcbhZACpLyUKtsevb1jvTIIcScRihDTYrVVjsGZgtIklDX6Rv
 XlTi7RwOt3WJcwaHZ0Whv00YQFf+yjdPAhSXpFcPU29mnwVlWm/STNfhybxFUps3q1WXXFUirxf
 aAyjjxc5tDHHqstkI9ewlzr6cPhdJaopXvf3Vx41dUfQ==
X-Zone-Loop: 148253a5512a790e938e02f14d39d3204112f71418f8
x-campaign-type: default
x-transaction-id: c10e6f68-85b4-4a6e-b770-73d0e60d4594
x-swg-uid: 01-0ef457fc-6ab9-46bd-97af-fdcf091cb777
X-Mailer: Sweego
Message-ID:
 <1792595254.8631fc262581453bbf619ec5b2062170.1a15f00de8a000f79f@vates.tech>
x-swg-bid: 1792595254.8631fc262581453bbf619ec5b2062170.1a15f00de8a000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCHv2 5/5] xeniface: Bound NumberPermissions before checking the input length
Date: Wed, 21 Oct 2026 17:07:27 +0200
In-Reply-To: <1792497190.8631fc262581453bbf619ec5b2062170.1a159288539000f79f@vates.tech>
References: <1792497190.8631fc262581453bbf619ec5b2062170.1a159288539000f79f@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.b6.d45009a4a9b89e1b.1a15f00db66.72f52b867842aba5=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792595254118
X-purgate-ID: tlsNG-c201ff/1792595258-F5EA92A1-2EF59E22/0/0
X-purgate-type: clean
X-purgate-size: 2853

---=Part.b6.d45009a4a9b89e1b.1a15f00db66.72f52b867842aba5=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

IoctlStoreSetPermissions() compares InLen with
FIELD_OFFSET(XENIFACE_STORE_SET_PERMISSIONS_IN, Permissions[N]), whose
64-bit result is truncated to ULONG=2E The count was only capped to 255
later, in __ConvertPermissions(), so the length check alone could be
satisfied by a huge count=2E

Check the cap first, with the same STATUS_INVALID_PARAMETER as before=2E
The check in __ConvertPermissions() is removed and fails are updated
accordingly=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xeniface/ioctl_store=2Ec | 22 ++++++++++------------
 1 file changed, 10 insertions(+), 12 deletions(-)

diff --git a/src/xeniface/ioctl_store=2Ec b/src/xeniface/ioctl_store=2Ec
index 97bef75=2E=2Ebbd46df 100644
--- a/src/xeniface/ioctl_store=2Ec
+++ b/src/xeniface/ioctl_store=2Ec
@@ -417,6 +417,11 @@ IoctlStoreSetPermissions(
         goto fail1;
     }
=20
+    status =3D STATUS_INVALID_PARAMETER;
+    if (In->NumberPermissions > 255)
+        goto fail2;
+
+    status =3D STATUS_INVALID_BUFFER_SIZE;
     if (InLen !=3D (ULONG)FIELD_OFFSET(XENIFACE_STORE_SET_PERMISSIONS_IN,=
 Permissions[In->NumberPermissions]))
         goto fail2;
=20
@@ -426,18 +431,14 @@ IoctlStoreSetPermissions(
         goto fail3;
     }
=20
-    Permissions =3D __ConvertPermissions(In->NumberPermissions, In->Permi=
ssions);
-    if (Permissions =3D=3D NULL)
-        goto fail4;
-
     status =3D __CaptureUserBuffer(In->Path, In->PathLength, &Path);
     if (!NT_SUCCESS(status))
-        goto fail5;
+        goto fail4;
=20
     Path[In->PathLength - 1] =3D 0;
     status =3D STATUS_INVALID_PARAMETER;
     if (!__IsValidPath(Path, In->PathLength))
-        goto fail6;
+        goto fail5;
=20
     Trace("> Path '%s', NumberPermissions %lu\n", Path, In->NumberPermiss=
ions);
=20
@@ -457,25 +458,22 @@ IoctlStoreSetPermissions(
                           In->NumberPermissions);
=20
     if (!NT_SUCCESS(status))
-        goto fail7;
+        goto fail6;
=20
     __FreePermissions(Permissions);
     __FreeCapturedBuffer(Path);
     return status;
=20
-fail7:
-    Error("Fail7\n");
-
 fail6:
     Error("Fail6\n");
-    __FreeCapturedBuffer(Path);
=20
 fail5:
     Error("Fail5\n");
-    __FreePermissions(Permissions);
+    __FreeCapturedBuffer(Path);
=20
 fail4:
     Error("Fail4\n");
+    __FreePermissions(Permissions);
=20
 fail3:
     Error("Fail3\n");
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.b6.d45009a4a9b89e1b.1a15f00db66.72f52b867842aba5=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 07:27:21 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 07:27:21 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1457806.1670290 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJnCq-0004Fj-Rr; Thu, 22 Oct 2026 07:27:20 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1457806.1670290; Thu, 22 Oct 2026 07:27:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJnCq-0004Fb-PC; Thu, 22 Oct 2026 07:27:20 +0000
Received: by outflank-mailman (input) for mailman id 1457806;
 Thu, 22 Oct 2026 07:27:19 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16281c9f3000f79f@swg.vates.tech>)
 id 1xJnCo-0004FV-SD
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 07:27:19 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJnCn-00AoYb-Ok
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 09:27:17 +0200
Received: from [10.42.69.4] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16281c9f3000f79f@swg.vates.tech>)
 id 6ad9bad2-e002-0a2a0a5209dd-0a2a4504ddfa-10
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 09:27:17 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-ebf023.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16281c9f3000f79f@swg.vates.tech>)
 id 6ad9bad5-b57f-0a2a45040019-b9ff1c23906b-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 09:27:17 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a16281c9f3000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 07:27:15 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 81DAD81AD6;
 Thu, 22 Oct 2026 09:27:14 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=cmPoajHGrBGqkSOX9P4D3W26IsrQWH3LvVpr8Rq6COo=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:feedback-id;
 b=fz1ArLy9wOieSWPJggbUW2GnzbRvgSuaJTQUAduJlK6e3dk/mgxGK+tI0tYoQ76Y7uKVYU6UZ
 XVy4MS2BTiWUfwUnZIqkH84GmkiAyxX+BNlHjcukoA89xPZtR0V7ORFY5el3lhb7/8/Bb0wi+aR
 iIH/DPr60mVF6q6AdgkMmLrIg4qEa7TxtfyxcuT0dy1oh/MrWc3Xs6uTQGmAzqke6DZWdJGBuFd
 0YfYFwLvUizydkfzlvfqvmkfHer3qxMzdKmy9B57I+iIrm56p7QvwpqY/cG6R+7XfToRJyT2oZT
 b+0p17vkclS7nJw7zZg7v0NnWPOMox6tdzrtjLGN/JEg==
X-Zone-Loop: fb3ea958289d778ab778b0eec57acc5e0a0de102b796
x-campaign-type: default
x-transaction-id: 8374611d-bbdf-4b65-9d1f-b3ce6653b3e1
x-swg-uid: 01-13f0156f-2f6b-44ee-a037-240793431d71
X-Mailer: Sweego
Message-ID:
 <1792654035.8631fc262581453bbf619ec5b2062170.1a16281c9f3000f79f@vates.tech>
x-swg-bid: 1792654035.8631fc262581453bbf619ec5b2062170.1a16281c9f3000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH SERIES] Sync common helper across all drivers
Date: Thu, 22 Oct 2026 09:27:08 +0200
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.cf.f390a5e182073c38.1a16281c6f0.6f1f19088954b16b=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792654034672
X-purgate-ID: tlsNG-ebf023/1792654037-516D2B50-DE0B8270/0/0
X-purgate-type: clean
X-purgate-size: 667

---=Part.cf.f390a5e182073c38.1a16281c6f0.6f1f19088954b16b=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

This patch series synchronizes the common helper files across all drivers,=
=20
ensuring consistency and reducing code duplication=2E

There are bug fixes in xencrsh and xeniface=2E

xeniface patch set is meant to be applied after the fixes from static anal=
ysis=2E

--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.cf.f390a5e182073c38.1a16281c6f0.6f1f19088954b16b=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 07:30:35 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 07:30:35 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1457808.1670294 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJnFz-0005V7-3w; Thu, 22 Oct 2026 07:30:35 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1457808.1670294; Thu, 22 Oct 2026 07:30:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJnFz-0005V0-1K; Thu, 22 Oct 2026 07:30:35 +0000
Received: by outflank-mailman (input) for mailman id 1457808;
 Thu, 22 Oct 2026 07:30:33 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16284af79000f79f@swg.vates.tech>)
 id 1xJnFx-0005Up-NT
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 07:30:33 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJnFw-008IpU-JV
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 09:30:32 +0200
Received: from [10.42.69.1] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16284af79000f79f@swg.vates.tech>)
 id 6ad9bb89-e002-0a2a0a5209dd-0a2a4501a9a6-30
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 09:30:28 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16284af79000f79f@swg.vates.tech>)
 id 6ad9bb93-5984-0a2a45010019-b9ff1c229e21-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 09:30:28 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a16284af79000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 07:30:25 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 8DA9A81AD6;
 Thu, 22 Oct 2026 09:30:24 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=moRfBYt1syElprHgkhqQ9iBLaQA9j651S8nu3/BcUZQ=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=sMHA0W3gPS8gIziPAGTrje0y6Ko4aMag1uBbmMSfFxsubqFgfDHQFg9PkLvKA0+zZhGSyNQCd
 Wn0WGIDGWHMvNc0vyo0xmTroeQuqryw89qRrrzKhPU8kLiowc5cP30nJBMJBb2xxRGbNDVXC6lr
 etmcwKMW6bwaJJuqiwb3jYTA9PsCoBUzlW/sHSwXPcmg5FJCfoT9yi86MqoBKl9od84HTaOUv3x
 7+64q9xIFSqv8KecvXcoqn4wtRaGIHE5DIUfQPwJYjGluUBKFxILgaqphGbCfK9lQwPqBVejE/o
 e+JRJOrASG/MKhUY7SbWM4zOOgbF26I1Bx3QcVEIFGWw==
X-Zone-Loop: 560495a82a29f73169a7bfa19a8407e647a3c6b9d3ce
x-campaign-type: default
x-transaction-id: f55ba64b-bbdc-4107-ab61-0c4043ca99ec
x-swg-uid: 01-bcb4b160-51ac-43df-8c89-84972419cbd9
X-Mailer: Sweego
Message-ID:
 <1792654225.8631fc262581453bbf619ec5b2062170.1a16284af79000f79f@vates.tech>
x-swg-bid: 1792654225.8631fc262581453bbf619ec5b2062170.1a16284af79000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 1/2] include: Annotate Local as _Out_opt_ in XENBUS_SHARED_INFO_GET_TIME
Date: Thu, 22 Oct 2026 09:30:18 +0200
In-Reply-To: <792654035.8631fc262581453bbf619ec5b2062170.1a16281c9f3000f79f@vates.tech>
References: <792654035.8631fc262581453bbf619ec5b2062170.1a16281c9f3000f79f@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.d0.bc8f6825d471edff.1a16284ad20.b0bf81196c4f171=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792654224673
X-purgate-ID: tlsNG-d62444/1792654228-1E867757-670D92F4/0/0
X-purgate-type: clean
X-purgate-size: 1332

---=Part.d0.bc8f6825d471edff.1a16284ad20.b0bf81196c4f171=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

SharedInfoGetTime() tests Local for NULL before writing it, and callers
pass NULL (SharedInfoGetTimeVersion2() in xenbus, wmi=2Ec in xeniface)=2E
Annotate the parameter as _Out_opt_, as the implementation already does,
and sync the header with the copy in xeniface=2E
No functional change=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 include/shared_info_interface=2Eh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/shared_info_interface=2Eh b/include/shared_info_inter=
face=2Eh
index 5fdedfd=2E=2Eeb9adcb 100644
--- a/include/shared_info_interface=2Eh
+++ b/include/shared_info_interface=2Eh
@@ -139,7 +139,7 @@ typedef VOID
 (*XENBUS_SHARED_INFO_GET_TIME)(
     _In_ PINTERFACE         Interface,
     _Out_ PLARGE_INTEGER    Time,
-    _Out_ PBOOLEAN          Local
+    _Out_opt_ PBOOLEAN      Local
     );
=20
 // {7E73C34F-1640-4649-A8F3-263BC930A004}
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.d0.bc8f6825d471edff.1a16284ad20.b0bf81196c4f171=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 07:30:35 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 07:30:35 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1457809.1670299 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJnFz-0005VS-7s; Thu, 22 Oct 2026 07:30:35 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1457809.1670299; Thu, 22 Oct 2026 07:30:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJnFz-0005VE-2X; Thu, 22 Oct 2026 07:30:35 +0000
Received: by outflank-mailman (input) for mailman id 1457809;
 Thu, 22 Oct 2026 07:30:33 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16284b069000f79f@swg.vates.tech>)
 id 1xJnFx-0005Uo-NU
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 07:30:33 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJnFw-00CTZi-CL
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 09:30:32 +0200
Received: from [10.42.69.8] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16284b069000f79f@swg.vates.tech>)
 id 6ad9bb8d-8faa-0a2a0a5109dd-0a2a4508bfce-22
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 09:30:28 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-c1860d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16284b069000f79f@swg.vates.tech>)
 id 6ad9bb93-f659-0a2a45080019-b9ff1c23a2e9-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 09:30:28 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a16284b069000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 07:30:25 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id F12008212E;
 Thu, 22 Oct 2026 09:30:24 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=k/Az/Qylxqr7fZDMOKNGHIdxorMqbAbgOO8y6ism+tU=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=Du+MeCsuD8fffTpYB0+OQ1zb4bvfMLxIrWB7Do2nry7aduoue7DqONzfcsChtrwrNNdqMkNdl
 7oO6UBM8H2+kBOorB1VrzNM/CbZf+OXfYY5Hu85EbgRh9SaTNi3XnkNbsoGa+LLsUvr50b/6YLA
 90Qfb9Hrpty2T/UBkK2Kz9bvFay3+1Aa+WfPoSOcBos5POxelDAOBe7S4m5ET2TRaG0Cv/Q3lEI
 jXIJSxZxoD6xjyXbNviooR6XdoBoR81ODx50GKwmIUvtwTCVZiYN9JmbStEta1WjQ36Xe9D7OBE
 nvqm+ylmfnw85RB1zE9TNLwj7jj958FWms+qWPvvI68w==
X-Zone-Loop: e0830c5a89fd56395c6b1f994f8d8bd6df7525593b02
x-campaign-type: default
x-transaction-id: 899adec4-61c3-4f79-9981-3610e6feaf86
x-swg-uid: 01-f3e4bda8-cabc-4724-abd4-51d82a0c0cd8
X-Mailer: Sweego
Message-ID:
 <1792654225.8631fc262581453bbf619ec5b2062170.1a16284b069000f79f@vates.tech>
x-swg-bid: 1792654225.8631fc262581453bbf619ec5b2062170.1a16284b069000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 2/2] Annotate common helpers with their actual direction and size
Date: Thu, 22 Oct 2026 09:30:19 +0200
In-Reply-To: <792654035.8631fc262581453bbf619ec5b2062170.1a16281c9f3000f79f@vates.tech>
References: <792654035.8631fc262581453bbf619ec5b2062170.1a16281c9f3000f79f@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.d1.de9ca31ade5ba2c8.1a16284aeba.b92e60df3be8b48a=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792654225082
X-purgate-ID: tlsNG-c1860d/1792654228-CDB4987B-2880393A/0/0
X-purgate-type: clean
X-purgate-size: 12098

---=Part.d1.de9ca31ade5ba2c8.1a16284aeba.b92e60df3be8b48a=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Some parameters of the common helpers were annotated _In_ although the
function writes them (mutex, thread, interlocked and tokenizer helpers),
used const PSTR (a const pointer to mutable characters) for read-only
strings, or had no size on byte buffers=2E

Annotate them with their actual direction, use PCSTR for read-only
strings, and give the buffers of IsZeroMemory and the registry binary
value functions their size in bytes=2E Apply the same change to the
xenfilt copy of thread=2Ec/h=2E
No functional change=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/common/assert=2Eh   | 18 +++++++++---------
 src/common/mutex=2Eh    | 10 +++++-----
 src/common/registry=2Ec | 24 ++++++++++++------------
 src/common/registry=2Eh | 16 ++++++++--------
 src/common/util=2Eh     | 36 ++++++++++++++++++------------------
 src/xenbus/thread=2Ec   | 10 +++++-----
 src/xenbus/thread=2Eh   |  6 +++---
 src/xenfilt/thread=2Ec  | 10 +++++-----
 src/xenfilt/thread=2Eh  |  6 +++---
 9 files changed, 68 insertions(+), 68 deletions(-)

diff --git a/src/common/assert=2Eh b/src/common/assert=2Eh
index 90a839f=2E=2E7e88216 100644
--- a/src/common/assert=2Eh
+++ b/src/common/assert=2Eh
@@ -154,13 +154,13 @@ __Bug(
=20
 static __inline BOOLEAN
 _IsZeroMemory(
-    _In_ const PSTR     Caller,
-    _In_ const PSTR     Name,
-    _In_ PVOID          Buffer,
-    _In_ ULONG          Length
+    _In_ PCSTR                      Caller,
+    _In_ PCSTR                      Name,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Length
     )
 {
-    ULONG           Offset;
+    ULONG                           Offset;
=20
     Offset =3D 0;
     while (Offset < Length) {
@@ -178,10 +178,10 @@ _IsZeroMemory(
=20
 static __inline BOOLEAN
 _IsZeroMemory(
-    _In_ const PSTR     Caller,
-    _In_ const PSTR     Name,
-    _In_ PVOID          Buffer,
-    _In_ ULONG          Length
+    _In_ PCSTR                      Caller,
+    _In_ PCSTR                      Name,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Length
     )
 {
     UNREFERENCED_PARAMETER(Caller);
diff --git a/src/common/mutex=2Eh b/src/common/mutex=2Eh
index bdacddb=2E=2Ed311a91 100644
--- a/src/common/mutex=2Eh
+++ b/src/common/mutex=2Eh
@@ -44,7 +44,7 @@ typedef struct _MUTEX {
=20
 static FORCEINLINE VOID
 InitializeMutex(
-    _In_ PMUTEX Mutex
+    _Out_ PMUTEX    Mutex
     )
 {
     RtlZeroMemory(Mutex, sizeof (MUTEX));
@@ -55,7 +55,7 @@ InitializeMutex(
 static FORCEINLINE BOOLEAN
 _IRQL_requires_max_(PASSIVE_LEVEL)
 TryAcquireMutex(
-    _In_ PMUTEX     Mutex
+    _Inout_ PMUTEX  Mutex
     )
 {
     LARGE_INTEGER   Timeout;
@@ -82,10 +82,10 @@ TryAcquireMutex(
 static FORCEINLINE VOID
 _IRQL_requires_max_(PASSIVE_LEVEL)
 AcquireMutex(
-    _In_ PMUTEX Mutex
+    _Inout_ PMUTEX  Mutex
     )
 {
-    NTSTATUS    status;
+    NTSTATUS        status;
=20
     status =3D KeWaitForSingleObject(&Mutex->Event,
                                    Executive,
@@ -102,7 +102,7 @@ AcquireMutex(
 static FORCEINLINE VOID
 _IRQL_requires_max_(PASSIVE_LEVEL)
 ReleaseMutex(
-    _In_ PMUTEX Mutex
+    _Inout_ PMUTEX  Mutex
     )
 {
     ASSERT3P(Mutex->Owner, =3D=3D, KeGetCurrentThread());
diff --git a/src/common/registry=2Ec b/src/common/registry=2Ec
index 4f7c5ef=2E=2Ed576990 100644
--- a/src/common/registry=2Ec
+++ b/src/common/registry=2Ec
@@ -1169,17 +1169,17 @@ fail1:
=20
 NTSTATUS
 RegistryQueryBinaryValue(
-    _In_ HANDLE                     Key,
-    _In_ PSTR                       Name,
-    _Outptr_ PVOID                  *Buffer,
-    _Out_ PULONG                    Length
+    _In_ HANDLE                                 Key,
+    _In_ PSTR                                   Name,
+    _Outptr_result_bytebuffer_(*Length) PVOID   *Buffer,
+    _Out_ PULONG                                Length
     )
 {
-    ANSI_STRING                     Ansi;
-    UNICODE_STRING                  Unicode;
-    PKEY_VALUE_PARTIAL_INFORMATION  Partial;
-    ULONG                           Size;
-    NTSTATUS                        status;
+    ANSI_STRING                                 Ansi;
+    UNICODE_STRING                              Unicode;
+    PKEY_VALUE_PARTIAL_INFORMATION              Partial;
+    ULONG                                       Size;
+    NTSTATUS                                    status;
=20
     RtlInitAnsiString(&Ansi, Name);
=20
@@ -1256,7 +1256,7 @@ NTSTATUS
 RegistryUpdateBinaryValue(
     _In_ HANDLE                     Key,
     _In_ PSTR                       Name,
-    _In_ PVOID                      Buffer,
+    _In_reads_bytes_(Length) PVOID  Buffer,
     _In_ ULONG                      Length
     )
 {
@@ -1444,7 +1444,7 @@ fail1:
=20
 static PKEY_VALUE_PARTIAL_INFORMATION
 RegistryAnsiToSz(
-    PANSI_STRING                    Ansi
+    _In_ PANSI_STRING               Ansi
     )
 {
     ULONG                           Length;
@@ -1490,7 +1490,7 @@ fail1:
=20
 static PKEY_VALUE_PARTIAL_INFORMATION
 RegistryAnsiToMultiSz(
-    PANSI_STRING                    Ansi
+    _In_ PANSI_STRING               Ansi
     )
 {
     ULONG                           Length;
diff --git a/src/common/registry=2Eh b/src/common/registry=2Eh
index 26bc0c6=2E=2Eba1eace 100644
--- a/src/common/registry=2Eh
+++ b/src/common/registry=2Eh
@@ -166,18 +166,18 @@ RegistryQuerySzValue(
=20
 extern NTSTATUS
 RegistryQueryBinaryValue(
-    _In_ HANDLE         Key,
-    _In_ PSTR           Name,
-    _Outptr_ PVOID      *Buffer,
-    _Out_ PULONG        Length
+    _In_ HANDLE                                 Key,
+    _In_ PSTR                                   Name,
+    _Outptr_result_bytebuffer_(*Length) PVOID   *Buffer,
+    _Out_ PULONG                                Length
     );
=20
 extern NTSTATUS
 RegistryUpdateBinaryValue(
-    _In_ HANDLE         Key,
-    _In_ PSTR           Name,
-    _In_ PVOID          Buffer,
-    _In_ ULONG          Length
+    _In_ HANDLE                     Key,
+    _In_ PSTR                       Name,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Length
     );
=20
 extern NTSTATUS
diff --git a/src/common/util=2Eh b/src/common/util=2Eh
index 9709a10=2E=2Edb40d4f 100644
--- a/src/common/util=2Eh
+++ b/src/common/util=2Eh
@@ -113,12 +113,12 @@ __CpuId(
=20
 static FORCEINLINE LONG
 __InterlockedAdd(
-    _In_ LONG   *Value,
-    _In_ LONG   Delta
+    _Inout_ LONG    *Value,
+    _In_ LONG       Delta
     )
 {
-    LONG        New;
-    LONG        Old;
+    LONG            New;
+    LONG            Old;
=20
     do {
         Old =3D *Value;
@@ -130,12 +130,12 @@ __InterlockedAdd(
=20
 static FORCEINLINE LONG
 __InterlockedSubtract(
-    _In_ LONG   *Value,
-    _In_ LONG   Delta
+    _Inout_ LONG    *Value,
+    _In_ LONG       Delta
     )
 {
-    LONG        New;
-    LONG        Old;
+    LONG            New;
+    LONG            Old;
=20
     do {
         Old =3D *Value;
@@ -281,15 +281,15 @@ __FreePages(
=20
 static FORCEINLINE PSTR
 __strtok_r(
-    _In_opt_ PSTR   Buffer,
-    _In_ PSTR       Delimiter,
+    _Inout_opt_ PSTR    Buffer,
+    _In_ PSTR           Delimiter,
     _When_(Buffer !=3D NULL, _Outptr_)
     _When_(Buffer =3D=3D NULL, _Inout_)
-    PSTR            *Context
+    PSTR                *Context
     )
 {
-    PSTR            Token;
-    PSTR            End;
+    PSTR                Token;
+    PSTR                End;
=20
     if (Buffer !=3D NULL)
         *Context =3D Buffer;
@@ -321,15 +321,15 @@ __strtok_r(
=20
 static FORCEINLINE PWSTR
 __wcstok_r(
-    _In_opt_ PWSTR  Buffer,
-    _In_ PWSTR      Delimiter,
+    _Inout_opt_ PWSTR   Buffer,
+    _In_ PWSTR          Delimiter,
     _When_(Buffer !=3D NULL, _Outptr_)
     _When_(Buffer =3D=3D NULL, _Inout_)
-    PWSTR           *Context
+    PWSTR               *Context
     )
 {
-    PWSTR           Token;
-    PWSTR           End;
+    PWSTR               Token;
+    PWSTR               End;
=20
     if (Buffer !=3D NULL)
         *Context =3D Buffer;
diff --git a/src/xenbus/thread=2Ec b/src/xenbus/thread=2Ec
index 2a3c190=2E=2Ea8cfce2 100644
--- a/src/xenbus/thread=2Ec
+++ b/src/xenbus/thread=2Ec
@@ -66,7 +66,7 @@ __ThreadFree(
=20
 static FORCEINLINE VOID
 __ThreadWake(
-    _In_ PXENBUS_THREAD Thread
+    _Inout_ PXENBUS_THREAD  Thread
     )
 {
     KeSetEvent(&Thread->Event, IO_NO_INCREMENT, FALSE);
@@ -74,7 +74,7 @@ __ThreadWake(
=20
 VOID
 ThreadWake(
-    _In_ PXENBUS_THREAD Thread
+    _Inout_ PXENBUS_THREAD  Thread
     )
 {
     __ThreadWake(Thread);
@@ -82,7 +82,7 @@ ThreadWake(
=20
 static FORCEINLINE VOID
 __ThreadAlert(
-    _In_ PXENBUS_THREAD Thread
+    _Inout_ PXENBUS_THREAD  Thread
     )
 {
     Thread->Alerted =3D TRUE;
@@ -91,7 +91,7 @@ __ThreadAlert(
=20
 VOID
 ThreadAlert(
-    _In_ PXENBUS_THREAD Thread
+    _Inout_ PXENBUS_THREAD  Thread
     )
 {
     __ThreadAlert(Thread);
@@ -205,7 +205,7 @@ ThreadIsAlerted(
=20
 VOID
 ThreadJoin(
-    _In_ PXENBUS_THREAD Thread
+    _Inout_ PXENBUS_THREAD  Thread
     )
 {
     LONG                References;
diff --git a/src/xenbus/thread=2Eh b/src/xenbus/thread=2Eh
index 28d6f9d=2E=2E4597f14 100644
--- a/src/xenbus/thread=2Eh
+++ b/src/xenbus/thread=2Eh
@@ -59,17 +59,17 @@ ThreadIsAlerted(
=20
 extern VOID
 ThreadWake(
-    _In_ PXENBUS_THREAD Thread
+    _Inout_ PXENBUS_THREAD  Thread
     );
=20
 extern VOID
 ThreadAlert(
-    _In_ PXENBUS_THREAD Thread
+    _Inout_ PXENBUS_THREAD  Thread
     );
=20
 extern VOID
 ThreadJoin(
-    _In_ PXENBUS_THREAD Thread
+    _Inout_ PXENBUS_THREAD  Thread
     );
=20
 #endif  // _XENBUS_THREAD_H
diff --git a/src/xenfilt/thread=2Ec b/src/xenfilt/thread=2Ec
index 3f3b008=2E=2Ee26469b 100644
--- a/src/xenfilt/thread=2Ec
+++ b/src/xenfilt/thread=2Ec
@@ -66,7 +66,7 @@ __ThreadFree(
=20
 static FORCEINLINE VOID
 __ThreadWake(
-    _In_ PXENFILT_THREAD    Thread
+    _Inout_ PXENFILT_THREAD Thread
     )
 {
     KeSetEvent(&Thread->Event, IO_NO_INCREMENT, FALSE);
@@ -74,7 +74,7 @@ __ThreadWake(
=20
 VOID
 ThreadWake(
-    _In_ PXENFILT_THREAD    Thread
+    _Inout_ PXENFILT_THREAD Thread
     )
 {
     __ThreadWake(Thread);
@@ -82,7 +82,7 @@ ThreadWake(
=20
 static FORCEINLINE VOID
 __ThreadAlert(
-    _In_ PXENFILT_THREAD    Thread
+    _Inout_ PXENFILT_THREAD Thread
     )
 {
     Thread->Alerted =3D TRUE;
@@ -91,7 +91,7 @@ __ThreadAlert(
=20
 VOID
 ThreadAlert(
-    _In_ PXENFILT_THREAD    Thread
+    _Inout_ PXENFILT_THREAD Thread
     )
 {
     __ThreadAlert(Thread);
@@ -205,7 +205,7 @@ ThreadIsAlerted(
=20
 VOID
 ThreadJoin(
-    _In_ PXENFILT_THREAD    Thread
+    _Inout_ PXENFILT_THREAD Thread
     )
 {
     LONG                References;
diff --git a/src/xenfilt/thread=2Eh b/src/xenfilt/thread=2Eh
index 9cc35a0=2E=2E4d85ead 100644
--- a/src/xenfilt/thread=2Eh
+++ b/src/xenfilt/thread=2Eh
@@ -59,17 +59,17 @@ ThreadIsAlerted(
=20
 extern VOID
 ThreadWake(
-    _In_ PXENFILT_THREAD    Thread
+    _Inout_ PXENFILT_THREAD Thread
     );
=20
 extern VOID
 ThreadAlert(
-    _In_ PXENFILT_THREAD    Thread
+    _Inout_ PXENFILT_THREAD Thread
     );
=20
 extern VOID
 ThreadJoin(
-    _In_ PXENFILT_THREAD    Thread
+    _Inout_ PXENFILT_THREAD Thread
     );
=20
 #endif  // _XENFILT_THREAD_H
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.d1.de9ca31ade5ba2c8.1a16284aeba.b92e60df3be8b48a=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 07:31:06 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 07:31:06 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1457812.1670303 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJnGU-0005cX-AA; Thu, 22 Oct 2026 07:31:06 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1457812.1670303; Thu, 22 Oct 2026 07:31:06 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJnGU-0005cQ-7P; Thu, 22 Oct 2026 07:31:06 +0000
Received: by outflank-mailman (input) for mailman id 1457812;
 Thu, 22 Oct 2026 07:31:05 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16285328b000f79f@swg.vates.tech>)
 id 1xJnGS-0005cK-UN
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 07:31:05 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJnGS-008J0G-B4
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 09:31:04 +0200
Received: from [10.42.69.1] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16285328b000f79f@swg.vates.tech>)
 id 6ad9bbb8-2eae-0a2a0a5409dd-0a2a4501a0b8-2
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 09:31:04 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16285328b000f79f@swg.vates.tech>)
 id 6ad9bbb7-5984-0a2a45010019-b9ff1c23a447-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 09:31:04 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a16285328b000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 07:30:58 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 459CD82308;
 Thu, 22 Oct 2026 09:30:58 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=DbZAq86XEXFNiljlOX0rofDWUdUnzLez69Ym8kRTQ8M=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=l+yr1I2ZIt/FEdGS78u/Y8KIC8Ulqm0H8IBfypiJ1TlVdAItmloQDYXQQleUOs9bJTrakeR3B
 F799BR6dD6xs7AAyISgboxIpsjrd9EEUachBpp3CHoZiD6OOMQ5baoxcn5qF9S0COmAcq/IiVC0
 HSro4CnKI8eMNDnjwKNONnREk5YEy5Dk+gJD+awgzhj7lIadzAZlH7JBO01kdrpQcINGjACsUOq
 hiTgaWpTVBPdj27Lrh+N2ZVZmciwDY+scDDp0WsUCC/hHVpy6VoRA6sxwuFDhHpP8W0Rw3v2DZU
 aeLxMwJK4FV/Lsw+rjOOecWvM/h8ZYU4Vg2pG4ZiuDow==
X-Zone-Loop: beebbb9b28868a23a8a99d8d466a35d83031905ebf78
x-campaign-type: default
x-transaction-id: 4261e98d-dd62-4257-aa22-7c66817d4f9d
x-swg-uid: 01-e49081d9-5c20-433b-bb12-3e93d9ad8799
X-Mailer: Sweego
Message-ID:
 <1792654258.8631fc262581453bbf619ec5b2062170.1a16285328b000f79f@vates.tech>
x-swg-bid: 1792654258.8631fc262581453bbf619ec5b2062170.1a16285328b000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH] xencons: Sync common helper files with xenbus
Date: Thu, 22 Oct 2026 09:30:50 +0200
In-Reply-To: <792654035.8631fc262581453bbf619ec5b2062170.1a16281c9f3000f79f@vates.tech>
References: <792654035.8631fc262581453bbf619ec5b2062170.1a16281c9f3000f79f@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.d3.10a13c0f0db92ed8.1a1628530d0.2f052cafff4ef13a=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792654258385
X-purgate-ID: tlsNG-d62444/1792654264-1E664757-B34E5D9A/0/0
X-purgate-type: clean
X-purgate-size: 15269

---=Part.d3.10a13c0f0db92ed8.1a1628530d0.2f052cafff4ef13a=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Take assert=2Eh, dbg_print=2Eh, mutex=2Eh, util=2Eh, registry=2Ec/h and
thread=2Ec/h from xenbus=2E This replaces the remaining IN annotations of
mutex=2Eh, brings TryAcquireMutex and annotates the helpers with their
actual direction and buffer sizes=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xencons/assert=2Eh    |  18 +++----
 src/xencons/dbg_print=2Eh |  16 ++++++
 src/xencons/mutex=2Eh     | 117 +++++++++++++++++++++++++---------------
 src/xencons/registry=2Ec  |  24 ++++-----
 src/xencons/registry=2Eh  |  16 +++---
 src/xencons/thread=2Ec    |  10 ++--
 src/xencons/thread=2Eh    |   6 +--
 src/xencons/util=2Eh      |  36 ++++++-------
 8 files changed, 145 insertions(+), 98 deletions(-)

diff --git a/src/xencons/assert=2Eh b/src/xencons/assert=2Eh
index 9db2d0c=2E=2Ed99333a 100644
--- a/src/xencons/assert=2Eh
+++ b/src/xencons/assert=2Eh
@@ -154,13 +154,13 @@ __Bug(
=20
 static __inline BOOLEAN
 _IsZeroMemory(
-    _In_ PCSTR          Caller,
-    _In_ PCSTR          Name,
-    _In_ PVOID          Buffer,
-    _In_ ULONG          Length
+    _In_ PCSTR                      Caller,
+    _In_ PCSTR                      Name,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Length
     )
 {
-    ULONG           Offset;
+    ULONG                           Offset;
=20
     Offset =3D 0;
     while (Offset < Length) {
@@ -178,10 +178,10 @@ _IsZeroMemory(
=20
 static __inline BOOLEAN
 _IsZeroMemory(
-    _In_ PCSTR          Caller,
-    _In_ PCSTR          Name,
-    _In_ PVOID          Buffer,
-    _In_ ULONG          Length
+    _In_ PCSTR                      Caller,
+    _In_ PCSTR                      Name,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Length
     )
 {
     UNREFERENCED_PARAMETER(Caller);
diff --git a/src/xencons/dbg_print=2Eh b/src/xencons/dbg_print=2Eh
index 132c051=2E=2E80b8a24 100644
--- a/src/xencons/dbg_print=2Eh
+++ b/src/xencons/dbg_print=2Eh
@@ -138,4 +138,20 @@ __Info(
 #define Info(=2E=2E=2E)  \
         __Info(__MODULE__ "|"  __FUNCTION__ ": ", __VA_ARGS__)
=20
+#define DBG_PRINT_ENABLE_FILTER(_Id, _Level)                       \
+        do {                                                        \
+            DbgSetDebugFilterState((_Id), (_Level), TRUE);          \
+        } while (FALSE)
+
+static __inline VOID
+__DbgPrintEnable(
+    VOID
+    )
+{
+    DBG_PRINT_ENABLE_FILTER(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL);
+    DBG_PRINT_ENABLE_FILTER(DPFLTR_IHVDRIVER_ID, DPFLTR_WARNING_LEVEL);
+    DBG_PRINT_ENABLE_FILTER(DPFLTR_IHVDRIVER_ID, DPFLTR_TRACE_LEVEL);
+    DBG_PRINT_ENABLE_FILTER(DPFLTR_IHVDRIVER_ID, DPFLTR_INFO_LEVEL);
+}
+
 #endif  // _XENCONS_DBG_PRINT_H
diff --git a/src/xencons/mutex=2Eh b/src/xencons/mutex=2Eh
index c6cd2f9=2E=2E578165f 100644
--- a/src/xencons/mutex=2Eh
+++ b/src/xencons/mutex=2Eh
@@ -1,34 +1,34 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
-* All rights reserved=2E
-*
-* Redistribution and use in source and binary forms,
-* with or without modification, are permitted provided
-* that the following conditions are met:
-*
-* *   Redistributions of source code must retain the above
-*     copyright notice, this list of conditions and the
-*     following disclaimer=2E
-* *   Redistributions in binary form must reproduce the above
-*     copyright notice, this list of conditions and the
-*     following disclaimer in the documentation and/or other
-*     materials provided with the distribution=2E
-*
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
-* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
-* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-* DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
-* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-* SUCH DAMAGE=2E
-*/
+ * All rights reserved=2E
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
+ * that the following conditions are met:
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer=2E
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
+ *     materials provided with the distribution=2E
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE=2E
+ */
=20
 #ifndef _XENCONS_MUTEX_H
 #define _XENCONS_MUTEX_H
@@ -44,37 +44,68 @@ typedef struct _MUTEX {
=20
 static FORCEINLINE VOID
 InitializeMutex(
-    IN  PMUTEX  Mutex
-)
+    _Out_ PMUTEX    Mutex
+    )
 {
-    RtlZeroMemory(Mutex, sizeof(MUTEX));
+    RtlZeroMemory(Mutex, sizeof (MUTEX));
=20
     KeInitializeEvent(&Mutex->Event, SynchronizationEvent, TRUE);
 }
=20
+static FORCEINLINE BOOLEAN
+_IRQL_requires_max_(PASSIVE_LEVEL)
+TryAcquireMutex(
+    _Inout_ PMUTEX  Mutex
+    )
+{
+    LARGE_INTEGER   Timeout;
+    NTSTATUS        status;
+
+    Timeout=2EQuadPart =3D 0;
+
+    status =3D KeWaitForSingleObject(&Mutex->Event,
+                                   Executive,
+                                   KernelMode,
+                                   FALSE,
+                                   &Timeout);
+    if (status =3D=3D STATUS_TIMEOUT)
+        return FALSE;
+
+    ASSERT(NT_SUCCESS(status));
+
+    ASSERT3P(Mutex->Owner, =3D=3D, NULL);
+    Mutex->Owner =3D KeGetCurrentThread();
+
+    return TRUE;
+}
+
 static FORCEINLINE VOID
 _IRQL_requires_max_(PASSIVE_LEVEL)
 AcquireMutex(
-    IN  PMUTEX  Mutex
-)
+    _Inout_ PMUTEX  Mutex
+    )
 {
-    (VOID)KeWaitForSingleObject(&Mutex->Event,
-                                Executive,
-                                KernelMode,
-                                FALSE,
-                                NULL);
+    NTSTATUS        status;
+
+    status =3D KeWaitForSingleObject(&Mutex->Event,
+                                   Executive,
+                                   KernelMode,
+                                   FALSE,
+                                   NULL);
+
+    ASSERT(NT_SUCCESS(status));
=20
-    ASSERT3P(Mutex->Owner, =3D=3D , NULL);
+    ASSERT3P(Mutex->Owner, =3D=3D, NULL);
     Mutex->Owner =3D KeGetCurrentThread();
 }
=20
 static FORCEINLINE VOID
 _IRQL_requires_max_(PASSIVE_LEVEL)
 ReleaseMutex(
-    IN  PMUTEX  Mutex
-)
+    _Inout_ PMUTEX  Mutex
+    )
 {
-    ASSERT3P(Mutex->Owner, =3D=3D , KeGetCurrentThread());
+    ASSERT3P(Mutex->Owner, =3D=3D, KeGetCurrentThread());
     Mutex->Owner =3D NULL;
=20
     KeSetEvent(&Mutex->Event, IO_NO_INCREMENT, FALSE);
diff --git a/src/xencons/registry=2Ec b/src/xencons/registry=2Ec
index 4f7c5ef=2E=2Ed576990 100644
--- a/src/xencons/registry=2Ec
+++ b/src/xencons/registry=2Ec
@@ -1169,17 +1169,17 @@ fail1:
=20
 NTSTATUS
 RegistryQueryBinaryValue(
-    _In_ HANDLE                     Key,
-    _In_ PSTR                       Name,
-    _Outptr_ PVOID                  *Buffer,
-    _Out_ PULONG                    Length
+    _In_ HANDLE                                 Key,
+    _In_ PSTR                                   Name,
+    _Outptr_result_bytebuffer_(*Length) PVOID   *Buffer,
+    _Out_ PULONG                                Length
     )
 {
-    ANSI_STRING                     Ansi;
-    UNICODE_STRING                  Unicode;
-    PKEY_VALUE_PARTIAL_INFORMATION  Partial;
-    ULONG                           Size;
-    NTSTATUS                        status;
+    ANSI_STRING                                 Ansi;
+    UNICODE_STRING                              Unicode;
+    PKEY_VALUE_PARTIAL_INFORMATION              Partial;
+    ULONG                                       Size;
+    NTSTATUS                                    status;
=20
     RtlInitAnsiString(&Ansi, Name);
=20
@@ -1256,7 +1256,7 @@ NTSTATUS
 RegistryUpdateBinaryValue(
     _In_ HANDLE                     Key,
     _In_ PSTR                       Name,
-    _In_ PVOID                      Buffer,
+    _In_reads_bytes_(Length) PVOID  Buffer,
     _In_ ULONG                      Length
     )
 {
@@ -1444,7 +1444,7 @@ fail1:
=20
 static PKEY_VALUE_PARTIAL_INFORMATION
 RegistryAnsiToSz(
-    PANSI_STRING                    Ansi
+    _In_ PANSI_STRING               Ansi
     )
 {
     ULONG                           Length;
@@ -1490,7 +1490,7 @@ fail1:
=20
 static PKEY_VALUE_PARTIAL_INFORMATION
 RegistryAnsiToMultiSz(
-    PANSI_STRING                    Ansi
+    _In_ PANSI_STRING               Ansi
     )
 {
     ULONG                           Length;
diff --git a/src/xencons/registry=2Eh b/src/xencons/registry=2Eh
index 170445b=2E=2E98801d5 100644
--- a/src/xencons/registry=2Eh
+++ b/src/xencons/registry=2Eh
@@ -166,18 +166,18 @@ RegistryQuerySzValue(
=20
 extern NTSTATUS
 RegistryQueryBinaryValue(
-    _In_ HANDLE         Key,
-    _In_ PSTR           Name,
-    _Outptr_ PVOID      *Buffer,
-    _Out_ PULONG        Length
+    _In_ HANDLE                                 Key,
+    _In_ PSTR                                   Name,
+    _Outptr_result_bytebuffer_(*Length) PVOID   *Buffer,
+    _Out_ PULONG                                Length
     );
=20
 extern NTSTATUS
 RegistryUpdateBinaryValue(
-    _In_ HANDLE         Key,
-    _In_ PSTR           Name,
-    _In_ PVOID          Buffer,
-    _In_ ULONG          Length
+    _In_ HANDLE                     Key,
+    _In_ PSTR                       Name,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Length
     );
=20
 extern NTSTATUS
diff --git a/src/xencons/thread=2Ec b/src/xencons/thread=2Ec
index e8e4a6c=2E=2Ead30f8f 100644
--- a/src/xencons/thread=2Ec
+++ b/src/xencons/thread=2Ec
@@ -66,7 +66,7 @@ __ThreadFree(
=20
 static FORCEINLINE VOID
 __ThreadWake(
-    _In_ PXENCONS_THREAD    Thread
+    _Inout_ PXENCONS_THREAD Thread
     )
 {
     KeSetEvent(&Thread->Event, IO_NO_INCREMENT, FALSE);
@@ -74,7 +74,7 @@ __ThreadWake(
=20
 VOID
 ThreadWake(
-    _In_ PXENCONS_THREAD    Thread
+    _Inout_ PXENCONS_THREAD Thread
     )
 {
     __ThreadWake(Thread);
@@ -82,7 +82,7 @@ ThreadWake(
=20
 static FORCEINLINE VOID
 __ThreadAlert(
-    _In_ PXENCONS_THREAD    Thread
+    _Inout_ PXENCONS_THREAD Thread
     )
 {
     Thread->Alerted =3D TRUE;
@@ -91,7 +91,7 @@ __ThreadAlert(
=20
 VOID
 ThreadAlert(
-    _In_ PXENCONS_THREAD    Thread
+    _Inout_ PXENCONS_THREAD Thread
     )
 {
     __ThreadAlert(Thread);
@@ -205,7 +205,7 @@ ThreadIsAlerted(
=20
 VOID
 ThreadJoin(
-    _In_ PXENCONS_THREAD    Thread
+    _Inout_ PXENCONS_THREAD Thread
     )
 {
     LONG                    References;
diff --git a/src/xencons/thread=2Eh b/src/xencons/thread=2Eh
index d344cb8=2E=2Eb934e8d 100644
--- a/src/xencons/thread=2Eh
+++ b/src/xencons/thread=2Eh
@@ -59,17 +59,17 @@ ThreadIsAlerted(
=20
 extern VOID
 ThreadWake(
-    _In_ PXENCONS_THREAD Thread
+    _Inout_ PXENCONS_THREAD Thread
     );
=20
 extern VOID
 ThreadAlert(
-    _In_ PXENCONS_THREAD Thread
+    _Inout_ PXENCONS_THREAD Thread
     );
=20
 extern VOID
 ThreadJoin(
-    _In_ PXENCONS_THREAD Thread
+    _Inout_ PXENCONS_THREAD Thread
     );
=20
 #endif  // _XENCONS_THREAD_H
diff --git a/src/xencons/util=2Eh b/src/xencons/util=2Eh
index 9709a10=2E=2Edb40d4f 100644
--- a/src/xencons/util=2Eh
+++ b/src/xencons/util=2Eh
@@ -113,12 +113,12 @@ __CpuId(
=20
 static FORCEINLINE LONG
 __InterlockedAdd(
-    _In_ LONG   *Value,
-    _In_ LONG   Delta
+    _Inout_ LONG    *Value,
+    _In_ LONG       Delta
     )
 {
-    LONG        New;
-    LONG        Old;
+    LONG            New;
+    LONG            Old;
=20
     do {
         Old =3D *Value;
@@ -130,12 +130,12 @@ __InterlockedAdd(
=20
 static FORCEINLINE LONG
 __InterlockedSubtract(
-    _In_ LONG   *Value,
-    _In_ LONG   Delta
+    _Inout_ LONG    *Value,
+    _In_ LONG       Delta
     )
 {
-    LONG        New;
-    LONG        Old;
+    LONG            New;
+    LONG            Old;
=20
     do {
         Old =3D *Value;
@@ -281,15 +281,15 @@ __FreePages(
=20
 static FORCEINLINE PSTR
 __strtok_r(
-    _In_opt_ PSTR   Buffer,
-    _In_ PSTR       Delimiter,
+    _Inout_opt_ PSTR    Buffer,
+    _In_ PSTR           Delimiter,
     _When_(Buffer !=3D NULL, _Outptr_)
     _When_(Buffer =3D=3D NULL, _Inout_)
-    PSTR            *Context
+    PSTR                *Context
     )
 {
-    PSTR            Token;
-    PSTR            End;
+    PSTR                Token;
+    PSTR                End;
=20
     if (Buffer !=3D NULL)
         *Context =3D Buffer;
@@ -321,15 +321,15 @@ __strtok_r(
=20
 static FORCEINLINE PWSTR
 __wcstok_r(
-    _In_opt_ PWSTR  Buffer,
-    _In_ PWSTR      Delimiter,
+    _Inout_opt_ PWSTR   Buffer,
+    _In_ PWSTR          Delimiter,
     _When_(Buffer !=3D NULL, _Outptr_)
     _When_(Buffer =3D=3D NULL, _Inout_)
-    PWSTR           *Context
+    PWSTR               *Context
     )
 {
-    PWSTR           Token;
-    PWSTR           End;
+    PWSTR               Token;
+    PWSTR               End;
=20
     if (Buffer !=3D NULL)
         *Context =3D Buffer;
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.d3.10a13c0f0db92ed8.1a1628530d0.2f052cafff4ef13a=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 07:31:32 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 07:31:32 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1457813.1670306 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJnGu-0005fG-Cf; Thu, 22 Oct 2026 07:31:32 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1457813.1670306; Thu, 22 Oct 2026 07:31:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJnGu-0005f9-9v; Thu, 22 Oct 2026 07:31:32 +0000
Received: by outflank-mailman (input) for mailman id 1457813;
 Thu, 22 Oct 2026 07:31:31 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16285a173000f79f@swg.vates.tech>)
 id 1xJnGt-0005f3-8y
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 07:31:31 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJnGs-008JDI-M9
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 09:31:30 +0200
Received: from [10.42.69.10] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16285a173000f79f@swg.vates.tech>)
 id 6ad9bbcc-2eae-0a2a0a5409dd-0a2a450aa2f2-34
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 09:31:30 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-4011c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16285a173000f79f@swg.vates.tech>)
 id 6ad9bbd2-f2d2-0a2a450a0019-b9ff1c23a78b-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 09:31:30 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a16285a173000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 07:31:27 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 78A4D829BC;
 Thu, 22 Oct 2026 09:31:26 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=TWnGS7xmYrLcSfTzn30V4zGKmPYMJhFJUA6V6zpbFyY=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=Ejpxbri2WAgVHQSRaasrCaRbg41z8r3HivgTPpFm/aDMWPm3kUsCSM55OJFiC+WAh8qYKNAG9
 IvKNdgkNm3/ZEqQqmarQw/1RKdPTcHyn5S9GCi64XQ14pKJ5Hz3YDmGzsUHdnVM8BaOXUPgZIj/
 FhYSjczTC/xf47iVepYlXv9ynxqjC+dI8BLnj8Pk8Q6EMC0YBueQ+qhtBMwqm21VAyJm0E63e9o
 qjH7/Aw6mQExGQXkvPz0I8/bsEMRNDElFopWkAc3mN/lWpCmHJ5ZUCvBUpap9xOcMvs6SmIi0W9
 +Od8l67HdQJuEauouEvFP8BBJWp6hUX2+aKtUhM7nieg==
X-Zone-Loop: 6cfc96737b5a0be27fdb6dfb3ff4cb3a3c20555e3f97
x-campaign-type: default
x-transaction-id: 858937bf-07ff-4d9b-993a-262af8ee6e4e
x-swg-uid: 01-73210bd8-018b-4c6e-b935-cca3f1f51d81
X-Mailer: Sweego
Message-ID:
 <1792654287.8631fc262581453bbf619ec5b2062170.1a16285a173000f79f@vates.tech>
x-swg-bid: 1792654287.8631fc262581453bbf619ec5b2062170.1a16285a173000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH] xenhid: Sync common helper files with xenbus
Date: Thu, 22 Oct 2026 09:31:15 +0200
In-Reply-To: <792654035.8631fc262581453bbf619ec5b2062170.1a16281c9f3000f79f@vates.tech>
References: <792654035.8631fc262581453bbf619ec5b2062170.1a16281c9f3000f79f@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.d4.efe2a20ebd6edbc7.1a162859f02.7be1ef741a49a38f=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792654286594
X-purgate-ID: tlsNG-4011c0/1792654290-4AEDACFC-8C76639C/0/0
X-purgate-type: clean
X-purgate-size: 17844

---=Part.d4.efe2a20ebd6edbc7.1a162859f02.7be1ef741a49a38f=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Take assert=2Eh, dbg_print=2Eh, util=2Eh and thread=2Ec/h from xenbus=2E Th=
is
replaces __analysis_assume with _Analysis_assume_, uses PCSTR for
read-only strings, drops the Warning-level log of every thread creation
and brings the updated direction and buffer-size annotations=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xenhid/assert=2Eh    | 72 ++++++++++++++++++-------------------
 src/xenhid/dbg_print=2Eh | 81 ++++++++++++++++++++++--------------------
 src/xenhid/names=2Eh     | 18 +++++-----
 src/xenhid/string=2Ec    |  2 +-
 src/xenhid/thread=2Ec    | 20 +++++------
 src/xenhid/thread=2Eh    |  6 ++--
 src/xenhid/util=2Eh      | 36 +++++++++----------
 7 files changed, 118 insertions(+), 117 deletions(-)

diff --git a/src/xenhid/assert=2Eh b/src/xenhid/assert=2Eh
index 3c7398e=2E=2Ed24dbd8 100644
--- a/src/xenhid/assert=2Eh
+++ b/src/xenhid/assert=2Eh
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -58,8 +58,8 @@ __Bug(
=20
 #define BUG(_TEXT)                                              \
         do {                                                    \
-            const CHAR  *_Text =3D (_TEXT);                       \
-            const CHAR  *_File =3D __FILE__;                      \
+            PCSTR       _Text =3D (_TEXT);                       \
+            PCSTR       _File =3D __FILE__;                      \
             ULONG       _Line =3D __LINE__;                       \
                                                                 \
             Error("BUG: " _TEXT "\n");                          \
@@ -89,7 +89,7 @@ __Bug(
 #define ASSERT(_EXP)                    \
         do {                            \
             __ASSERT(_EXP);             \
-            __analysis_assume(_EXP);    \
+            _Analysis_assume_(_EXP);    \
         } while (FALSE)
=20
 #define ASSERT3U(_X, _OP, _Y)                       \
@@ -132,7 +132,7 @@ __Bug(
=20
 #define ASSERT(_EXP)                    \
         do {                            \
-            __analysis_assume(_EXP);    \
+            _Analysis_assume_(_EXP);    \
         } while (FALSE)
=20
 #define ASSERT3U(_X, _OP, _Y)           \
@@ -154,13 +154,13 @@ __Bug(
=20
 static __inline BOOLEAN
 _IsZeroMemory(
-    _In_ PCSTR          Caller,
-    _In_ PCSTR          Name,
-    _In_ PVOID          Buffer,
-    _In_ ULONG          Length
+    _In_ PCSTR                      Caller,
+    _In_ PCSTR                      Name,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Length
     )
 {
-    ULONG               Offset;
+    ULONG                           Offset;
=20
     Offset =3D 0;
     while (Offset < Length) {
@@ -178,10 +178,10 @@ _IsZeroMemory(
=20
 static __inline BOOLEAN
 _IsZeroMemory(
-    _In_ PCSTR  Caller,
-    _In_ PCSTR  Name,
-    _In_ PVOID  Buffer,
-    _In_ ULONG  Length
+    _In_ PCSTR                      Caller,
+    _In_ PCSTR                      Name,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Length
     )
 {
     UNREFERENCED_PARAMETER(Caller);
diff --git a/src/xenhid/dbg_print=2Eh b/src/xenhid/dbg_print=2Eh
index e13cd8e=2E=2Ed6d3a27 100644
--- a/src/xenhid/dbg_print=2Eh
+++ b/src/xenhid/dbg_print=2Eh
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -89,7 +89,6 @@ __Warning(
         __Warning(__MODULE__ "|" __FUNCTION__ ": ", __VA_ARGS__)
=20
 #if DBG
-
 static __inline VOID
 __Trace(
     _In_ PCSTR      Prefix,
@@ -110,23 +109,11 @@ __Trace(
     va_end(Arguments);
 }
=20
-#else   // DBG
-
-static __inline VOID
-__Trace(
-    _In_ PCSTR  Prefix,
-    _In_ PCSTR  Format,
-    =2E=2E=2E
-    )
-{
-    UNREFERENCED_PARAMETER(Prefix);
-    UNREFERENCED_PARAMETER(Format);
-}
-
-#endif  // DBG
-
 #define Trace(=2E=2E=2E)  \
         __Trace(__MODULE__ "|" __FUNCTION__ ": ", __VA_ARGS__)
+#else   // DBG
+#define Trace(=2E=2E=2E)  (VOID)(__VA_ARGS__)
+#endif  // DBG
=20
 static __inline VOID
 __Info(
@@ -151,4 +138,20 @@ __Info(
 #define Info(=2E=2E=2E)  \
         __Info(__MODULE__ "|"  __FUNCTION__ ": ", __VA_ARGS__)
=20
+#define DBG_PRINT_ENABLE_FILTER(_Id, _Level)                       \
+        do {                                                        \
+            DbgSetDebugFilterState((_Id), (_Level), TRUE);          \
+        } while (FALSE)
+
+static __inline VOID
+__DbgPrintEnable(
+    VOID
+    )
+{
+    DBG_PRINT_ENABLE_FILTER(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL);
+    DBG_PRINT_ENABLE_FILTER(DPFLTR_IHVDRIVER_ID, DPFLTR_WARNING_LEVEL);
+    DBG_PRINT_ENABLE_FILTER(DPFLTR_IHVDRIVER_ID, DPFLTR_TRACE_LEVEL);
+    DBG_PRINT_ENABLE_FILTER(DPFLTR_IHVDRIVER_ID, DPFLTR_INFO_LEVEL);
+}
+
 #endif  // _XENHID_DBG_PRINT_H
diff --git a/src/xenhid/names=2Eh b/src/xenhid/names=2Eh
index 1dacb4b=2E=2Eadc7608 100644
--- a/src/xenhid/names=2Eh
+++ b/src/xenhid/names=2Eh
@@ -37,7 +37,7 @@
=20
 #include "types=2Eh"
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PowerTypeName(
     _In_ POWER_STATE_TYPE   Type
     )
@@ -57,7 +57,7 @@ PowerTypeName(
 #undef  _POWER_ACTION_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PowerSystemStateName(
     _In_ SYSTEM_POWER_STATE State
     )
@@ -83,7 +83,7 @@ PowerSystemStateName(
 #undef  _POWER_SYSTEM_STATE_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PowerDeviceStateName(
     _In_ DEVICE_POWER_STATE State
     )
@@ -107,7 +107,7 @@ PowerDeviceStateName(
 #undef  _POWER_DEVICE_STATE_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PowerActionName(
     _In_ POWER_ACTION   Type
     )
@@ -133,7 +133,7 @@ PowerActionName(
 #undef  _POWER_ACTION_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PowerMinorFunctionName(
     _In_ ULONG  MinorFunction
     )
@@ -155,7 +155,7 @@ PowerMinorFunctionName(
 #undef  _POWER_MINOR_FUNCTION_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PnpDeviceStateName(
     _In_ DEVICE_PNP_STATE   State
     )
@@ -182,7 +182,7 @@ PnpDeviceStateName(
 #undef  _STATE_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PnpMinorFunctionName(
     _In_ ULONG  Function
     )
@@ -225,7 +225,7 @@ PnpMinorFunctionName(
 #undef  _PNP_MINOR_FUNCTION_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PartialResourceDescriptorTypeName(
     _In_ UCHAR  Type
     )
@@ -254,7 +254,7 @@ PartialResourceDescriptorTypeName(
 #undef  _PARTIAL_RESOURCE_DESCRIPTOR_TYPE_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 DeviceUsageTypeName(
     _In_ DEVICE_USAGE_NOTIFICATION_TYPE Type
     )
diff --git a/src/xenhid/string=2Ec b/src/xenhid/string=2Ec
index ad82053=2E=2E5b84568 100644
--- a/src/xenhid/string=2Ec
+++ b/src/xenhid/string=2Ec
@@ -53,7 +53,7 @@ __StringPut(
=20
 static PCHAR
 FormatNumber(
-    _Inout_ PSTR    Buffer,
+    _Out_ PSTR      Buffer,
     _In_ ULONGLONG  Value,
     _In_ UCHAR      Base,
     _In_ BOOLEAN    UpperCase
diff --git a/src/xenhid/thread=2Ec b/src/xenhid/thread=2Ec
index 36d82d0=2E=2E954e060 100644
--- a/src/xenhid/thread=2Ec
+++ b/src/xenhid/thread=2Ec
@@ -33,11 +33,11 @@
 #include <ntddk=2Eh>
=20
 #include "thread=2Eh"
-#include "util=2Eh"
 #include "dbg_print=2Eh"
 #include "assert=2Eh"
+#include "util=2Eh"
=20
-#define THREAD_POOL 'ERHT'
+#define THREAD_TAG 'ERHT'
=20
 struct _XENHID_THREAD {
     XENHID_THREAD_FUNCTION  Function;
@@ -53,7 +53,7 @@ __ThreadAllocate(
     _In_ ULONG  Length
     )
 {
-    return __AllocatePoolWithTag(NonPagedPool, Length, THREAD_POOL);
+    return __AllocatePoolWithTag(NonPagedPool, Length, THREAD_TAG);
 }
=20
 static FORCEINLINE VOID
@@ -61,12 +61,12 @@ __ThreadFree(
     _In_ PVOID  Buffer
     )
 {
-    __FreePoolWithTag(Buffer, THREAD_POOL);
+    __FreePoolWithTag(Buffer, THREAD_TAG);
 }
=20
 static FORCEINLINE VOID
 __ThreadWake(
-    _In_ PXENHID_THREAD Thread
+    _Inout_ PXENHID_THREAD  Thread
     )
 {
     KeSetEvent(&Thread->Event, IO_NO_INCREMENT, FALSE);
@@ -74,7 +74,7 @@ __ThreadWake(
=20
 VOID
 ThreadWake(
-    _In_ PXENHID_THREAD Thread
+    _Inout_ PXENHID_THREAD  Thread
     )
 {
     __ThreadWake(Thread);
@@ -82,7 +82,7 @@ ThreadWake(
=20
 static FORCEINLINE VOID
 __ThreadAlert(
-    _In_ PXENHID_THREAD Thread
+    _Inout_ PXENHID_THREAD  Thread
     )
 {
     Thread->Alerted =3D TRUE;
@@ -91,7 +91,7 @@ __ThreadAlert(
=20
 VOID
 ThreadAlert(
-    _In_ PXENHID_THREAD Thread
+    _Inout_ PXENHID_THREAD  Thread
     )
 {
     __ThreadAlert(Thread);
@@ -131,8 +131,6 @@ ThreadCreate(
=20
     (*Thread) =3D __ThreadAllocate(sizeof (XENHID_THREAD));
=20
-    Warning("Create thread %p %p\n", Function, Thread);
-
     status =3D STATUS_NO_MEMORY;
     if (*Thread =3D=3D NULL)
         goto fail1;
@@ -207,7 +205,7 @@ ThreadIsAlerted(
=20
 VOID
 ThreadJoin(
-    _In_ PXENHID_THREAD Thread
+    _Inout_ PXENHID_THREAD  Thread
     )
 {
     LONG                References;
diff --git a/src/xenhid/thread=2Eh b/src/xenhid/thread=2Eh
index adb9a62=2E=2E3358171 100644
--- a/src/xenhid/thread=2Eh
+++ b/src/xenhid/thread=2Eh
@@ -59,17 +59,17 @@ ThreadIsAlerted(
=20
 extern VOID
 ThreadWake(
-    _In_ PXENHID_THREAD Thread
+    _Inout_ PXENHID_THREAD  Thread
     );
=20
 extern VOID
 ThreadAlert(
-    _In_ PXENHID_THREAD Thread
+    _Inout_ PXENHID_THREAD  Thread
     );
=20
 extern VOID
 ThreadJoin(
-    _In_ PXENHID_THREAD Thread
+    _Inout_ PXENHID_THREAD  Thread
     );
=20
 #endif  // _XENHID_THREAD_H
diff --git a/src/xenhid/util=2Eh b/src/xenhid/util=2Eh
index 9709a10=2E=2Edb40d4f 100644
--- a/src/xenhid/util=2Eh
+++ b/src/xenhid/util=2Eh
@@ -113,12 +113,12 @@ __CpuId(
=20
 static FORCEINLINE LONG
 __InterlockedAdd(
-    _In_ LONG   *Value,
-    _In_ LONG   Delta
+    _Inout_ LONG    *Value,
+    _In_ LONG       Delta
     )
 {
-    LONG        New;
-    LONG        Old;
+    LONG            New;
+    LONG            Old;
=20
     do {
         Old =3D *Value;
@@ -130,12 +130,12 @@ __InterlockedAdd(
=20
 static FORCEINLINE LONG
 __InterlockedSubtract(
-    _In_ LONG   *Value,
-    _In_ LONG   Delta
+    _Inout_ LONG    *Value,
+    _In_ LONG       Delta
     )
 {
-    LONG        New;
-    LONG        Old;
+    LONG            New;
+    LONG            Old;
=20
     do {
         Old =3D *Value;
@@ -281,15 +281,15 @@ __FreePages(
=20
 static FORCEINLINE PSTR
 __strtok_r(
-    _In_opt_ PSTR   Buffer,
-    _In_ PSTR       Delimiter,
+    _Inout_opt_ PSTR    Buffer,
+    _In_ PSTR           Delimiter,
     _When_(Buffer !=3D NULL, _Outptr_)
     _When_(Buffer =3D=3D NULL, _Inout_)
-    PSTR            *Context
+    PSTR                *Context
     )
 {
-    PSTR            Token;
-    PSTR            End;
+    PSTR                Token;
+    PSTR                End;
=20
     if (Buffer !=3D NULL)
         *Context =3D Buffer;
@@ -321,15 +321,15 @@ __strtok_r(
=20
 static FORCEINLINE PWSTR
 __wcstok_r(
-    _In_opt_ PWSTR  Buffer,
-    _In_ PWSTR      Delimiter,
+    _Inout_opt_ PWSTR   Buffer,
+    _In_ PWSTR          Delimiter,
     _When_(Buffer !=3D NULL, _Outptr_)
     _When_(Buffer =3D=3D NULL, _Inout_)
-    PWSTR           *Context
+    PWSTR               *Context
     )
 {
-    PWSTR           Token;
-    PWSTR           End;
+    PWSTR               Token;
+    PWSTR               End;
=20
     if (Buffer !=3D NULL)
         *Context =3D Buffer;
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.d4.efe2a20ebd6edbc7.1a162859f02.7be1ef741a49a38f=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 07:32:18 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 07:32:18 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1457816.1670311 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJnHe-0005jv-HA; Thu, 22 Oct 2026 07:32:18 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1457816.1670311; Thu, 22 Oct 2026 07:32:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJnHe-0005jn-EJ; Thu, 22 Oct 2026 07:32:18 +0000
Received: by outflank-mailman (input) for mailman id 1457816;
 Thu, 22 Oct 2026 07:32:17 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16286527d000f79f@swg.vates.tech>)
 id 1xJnHd-0005jh-5J
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 07:32:17 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJnHc-005qFb-B0
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 09:32:16 +0200
Received: from [10.42.69.1] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16286527d000f79f@swg.vates.tech>)
 id 6ad9bbff-e002-0a2a0a5209dd-0a2a4501e414-6
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 09:32:16 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16286527d000f79f@swg.vates.tech>)
 id 6ad9bbff-5984-0a2a45010019-b9ff1c229735-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 09:32:16 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a16286527d000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 07:32:12 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 06AC481FCF;
 Thu, 22 Oct 2026 09:32:12 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=6jzSsHHeTzR/O3iI0/anEoe4dsTCQEfy9DB3vMjb8QU=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=Tkb8uxm0GyJ4x/VBl5vUuYUjClFv3F+i8/TN/0oc0+PDIiHs0I+BimA0Z/HHz0t1TdbGZcrDB
 ypRQ6bblC+dL4KR5Lo52EvQc3j/9bzapb+9Wptfzw76lIk52/yhsRQsu+r6eEzQ6CfCzqsOoQYP
 K17gHmCSfXYqMzEW6fP4mcRCXa95KBvhy08qTCWdldIgjmHgo7wPnplA86aPyF7Vf+Y6a1bT7EW
 D/noxdzkMw0v/6DSKK+L2FLO7IkgERPtrn4NgZZVIK1BLNP+2Bvg4GGg98Ldg8Dz+ox9Mziyehd
 V/d3nL8wFGqww4x9pYc5akMfYG1BXY826o0R7+9mKWmw==
X-Zone-Loop: b1c47d326b717d7fc2cb5fd30f80a144c34160d15fed
x-campaign-type: default
x-transaction-id: 7f7d72b0-f9c0-429c-b3e7-d368a1936ee5
x-swg-uid: 01-9199a4c0-1405-44e9-aa3c-332a22129241
X-Mailer: Sweego
Message-ID:
 <1792654332.8631fc262581453bbf619ec5b2062170.1a16286527d000f79f@vates.tech>
x-swg-bid: 1792654332.8631fc262581453bbf619ec5b2062170.1a16286527d000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH] xennet: Sync common helper files with xenbus
Date: Thu, 22 Oct 2026 09:32:05 +0200
In-Reply-To: <792654035.8631fc262581453bbf619ec5b2062170.1a16281c9f3000f79f@vates.tech>
References: <792654035.8631fc262581453bbf619ec5b2062170.1a16281c9f3000f79f@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.d5.abdded8db9d56831.1a1628650dd.3079d981eac603d8=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792654332125
X-purgate-ID: tlsNG-d62444/1792654336-C475B757-2DF0A2E6/0/0
X-purgate-type: clean
X-purgate-size: 8092

---=Part.d5.abdded8db9d56831.1a1628650dd.3079d981eac603d8=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Take assert=2Eh, dbg_print=2Eh and util=2Eh from xenbus, bringing the
updated direction and buffer-size annotations=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xennet/assert=2Eh    | 18 ++++++------
 src/xennet/dbg_print=2Eh | 66 ++++++++++++++++++++++++++----------------
 src/xennet/util=2Eh      | 36 +++++++++++------------
 3 files changed, 68 insertions(+), 52 deletions(-)

diff --git a/src/xennet/assert=2Eh b/src/xennet/assert=2Eh
index ac25718=2E=2Ea858f67 100644
--- a/src/xennet/assert=2Eh
+++ b/src/xennet/assert=2Eh
@@ -154,13 +154,13 @@ __Bug(
=20
 static __inline BOOLEAN
 _IsZeroMemory(
-    _In_ PCSTR      Caller,
-    _In_ PCSTR      Name,
-    _In_ PVOID      Buffer,
-    _In_ ULONG      Length
+    _In_ PCSTR                      Caller,
+    _In_ PCSTR                      Name,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Length
     )
 {
-    ULONG           Offset;
+    ULONG                           Offset;
=20
     Offset =3D 0;
     while (Offset < Length) {
@@ -178,10 +178,10 @@ _IsZeroMemory(
=20
 static __inline BOOLEAN
 _IsZeroMemory(
-    _In_ PCSTR  Caller,
-    _In_ PCSTR  Name,
-    _In_ PVOID  Buffer,
-    _In_ ULONG  Length
+    _In_ PCSTR                      Caller,
+    _In_ PCSTR                      Name,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Length
     )
 {
     UNREFERENCED_PARAMETER(Caller);
diff --git a/src/xennet/dbg_print=2Eh b/src/xennet/dbg_print=2Eh
index 9c2acdf=2E=2E86a0296 100644
--- a/src/xennet/dbg_print=2Eh
+++ b/src/xennet/dbg_print=2Eh
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -36,12 +36,12 @@
 #include <ntddk=2Eh>
 #include <stdarg=2Eh>
=20
-#pragma warning(disable:4127)   // conditional expression is constant
-
 #define stringify_literal(_text) #_text
 #define stringify(_text) stringify_literal(_text)
 #define __MODULE__ stringify(PROJECT)
=20
+#pragma warning(disable:4127)   // conditional expression is constant
+
 static __inline VOID
 __Error(
     _In_ PCSTR      Prefix,
@@ -138,4 +138,20 @@ __Info(
 #define Info(=2E=2E=2E)  \
         __Info(__MODULE__ "|"  __FUNCTION__ ": ", __VA_ARGS__)
=20
+#define DBG_PRINT_ENABLE_FILTER(_Id, _Level)                       \
+        do {                                                        \
+            DbgSetDebugFilterState((_Id), (_Level), TRUE);          \
+        } while (FALSE)
+
+static __inline VOID
+__DbgPrintEnable(
+    VOID
+    )
+{
+    DBG_PRINT_ENABLE_FILTER(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL);
+    DBG_PRINT_ENABLE_FILTER(DPFLTR_IHVDRIVER_ID, DPFLTR_WARNING_LEVEL);
+    DBG_PRINT_ENABLE_FILTER(DPFLTR_IHVDRIVER_ID, DPFLTR_TRACE_LEVEL);
+    DBG_PRINT_ENABLE_FILTER(DPFLTR_IHVDRIVER_ID, DPFLTR_INFO_LEVEL);
+}
+
 #endif  // _XENNET_DBG_PRINT_H
diff --git a/src/xennet/util=2Eh b/src/xennet/util=2Eh
index 9709a10=2E=2Edb40d4f 100644
--- a/src/xennet/util=2Eh
+++ b/src/xennet/util=2Eh
@@ -113,12 +113,12 @@ __CpuId(
=20
 static FORCEINLINE LONG
 __InterlockedAdd(
-    _In_ LONG   *Value,
-    _In_ LONG   Delta
+    _Inout_ LONG    *Value,
+    _In_ LONG       Delta
     )
 {
-    LONG        New;
-    LONG        Old;
+    LONG            New;
+    LONG            Old;
=20
     do {
         Old =3D *Value;
@@ -130,12 +130,12 @@ __InterlockedAdd(
=20
 static FORCEINLINE LONG
 __InterlockedSubtract(
-    _In_ LONG   *Value,
-    _In_ LONG   Delta
+    _Inout_ LONG    *Value,
+    _In_ LONG       Delta
     )
 {
-    LONG        New;
-    LONG        Old;
+    LONG            New;
+    LONG            Old;
=20
     do {
         Old =3D *Value;
@@ -281,15 +281,15 @@ __FreePages(
=20
 static FORCEINLINE PSTR
 __strtok_r(
-    _In_opt_ PSTR   Buffer,
-    _In_ PSTR       Delimiter,
+    _Inout_opt_ PSTR    Buffer,
+    _In_ PSTR           Delimiter,
     _When_(Buffer !=3D NULL, _Outptr_)
     _When_(Buffer =3D=3D NULL, _Inout_)
-    PSTR            *Context
+    PSTR                *Context
     )
 {
-    PSTR            Token;
-    PSTR            End;
+    PSTR                Token;
+    PSTR                End;
=20
     if (Buffer !=3D NULL)
         *Context =3D Buffer;
@@ -321,15 +321,15 @@ __strtok_r(
=20
 static FORCEINLINE PWSTR
 __wcstok_r(
-    _In_opt_ PWSTR  Buffer,
-    _In_ PWSTR      Delimiter,
+    _Inout_opt_ PWSTR   Buffer,
+    _In_ PWSTR          Delimiter,
     _When_(Buffer !=3D NULL, _Outptr_)
     _When_(Buffer =3D=3D NULL, _Inout_)
-    PWSTR           *Context
+    PWSTR               *Context
     )
 {
-    PWSTR           Token;
-    PWSTR           End;
+    PWSTR               Token;
+    PWSTR               End;
=20
     if (Buffer !=3D NULL)
         *Context =3D Buffer;
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.d5.abdded8db9d56831.1a1628650dd.3079d981eac603d8=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 07:32:40 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 07:32:40 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1457817.1670314 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJnI0-0005mn-JK; Thu, 22 Oct 2026 07:32:40 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1457817.1670314; Thu, 22 Oct 2026 07:32:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJnI0-0005mg-Gp; Thu, 22 Oct 2026 07:32:40 +0000
Received: by outflank-mailman (input) for mailman id 1457817;
 Thu, 22 Oct 2026 07:32:38 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16286a100000f79f@swg.vates.tech>)
 id 1xJnHy-0005mP-PY
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 07:32:38 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJnHy-001LSo-3C
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 09:32:38 +0200
Received: from [10.42.69.2] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16286a100000f79f@swg.vates.tech>)
 id 6ad9bc13-bab6-0a2a0a5309dd-0a2a4502d90c-20
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 09:32:38 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16286a100000f79f@swg.vates.tech>)
 id 6ad9bc15-6ca4-0a2a45020019-b9ff1c23a1f1-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 09:32:37 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a16286a100000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 07:32:32 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 8731C81FCF;
 Thu, 22 Oct 2026 09:32:31 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=IuUndHDi+5siDde6vx0eDmXpqjzz46TgjNBY1aiEoRM=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=hnfcSJX/TDyAYHeVz+N7paanF0j2vXHKzEFXbymWpIEyES5UutlakRNL5Q9TeJn3JBlt6iJDl
 3K/Q8sd+3uN4NYotlEkQqj425qOUI9h4gOPGBZFbmau4mb6m6CeBsm7v5wy0+Zlvj5eWGAyQroh
 fjiIcYwkhMexWU1WpAhoa6pzGABbi5PeMvyAuDe1QnF7PZ5dwvccdUquRXChU4lwbwJsDiZhjCU
 jeQpEElkhJi1Pa12mxNhYg9HK3s3ykOos+VfjuHV1BIH+6hME8zxjmcCFRGZJKaO3oBh5wNBlt/
 xE8W2r50RfuD893aqCT7GKFFx8zIRW0j8p3N0pMafEmg==
X-Zone-Loop: 84b736c43a5783dd46295ba85b19ddcd0fc2f7437502
x-campaign-type: default
x-transaction-id: 9f60eef6-60ee-4fda-8ca3-9046eff89a79
x-swg-uid: 01-10487f7d-ef00-4c16-b787-c9054180d657
X-Mailer: Sweego
Message-ID:
 <1792654352.8631fc262581453bbf619ec5b2062170.1a16286a100000f79f@vates.tech>
x-swg-bid: 1792654352.8631fc262581453bbf619ec5b2062170.1a16286a100000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 1/3] util: Sync with xenbus
Date: Thu, 22 Oct 2026 09:32:23 +0200
In-Reply-To: <792654035.8631fc262581453bbf619ec5b2062170.1a16281c9f3000f79f@vates.tech>
References: <792654035.8631fc262581453bbf619ec5b2062170.1a16281c9f3000f79f@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.d6.a8ac1b45b9b1d220.1a162869d20.a125698736f82ce7=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792654351649
X-purgate-ID: tlsNG-720697/1792654358-311CF2AC-3D687F61/0/0
X-purgate-type: clean
X-purgate-size: 3833

---=Part.d6.a8ac1b45b9b1d220.1a162869d20.a125698736f82ce7=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Take util=2Eh from xenbus=2E This brings TIME_* macros=2E
Remove TIME_* macros of xenvbd/ring=2Ec now provided by util=2Eh=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/common/util=2Eh | 23 ++++++++++++++++++-----
 src/xenvbd/ring=2Ec |  7 +------
 2 files changed, 19 insertions(+), 11 deletions(-)

diff --git a/src/common/util=2Eh b/src/common/util=2Eh
index b197b14=2E=2Edb40d4f 100644
--- a/src/common/util=2Eh
+++ b/src/common/util=2Eh
@@ -41,6 +41,11 @@
 #define	P2ROUNDUP(_t, _x, _a)   \
         (-(-((_t)(_x)) & -(((_t)(_a)))))
=20
+#define TIME_US(_us)            ((_us) * 10ll)
+#define TIME_MS(_ms)            (TIME_US((_ms) * 1000ll))
+#define TIME_S(_s)              (TIME_MS((_s) * 1000ll))
+#define TIME_RELATIVE(_t)       (-(_t))
+
 static FORCEINLINE LONG
 __ffs(
     _In_ unsigned long long mask
@@ -89,7 +94,7 @@ __CpuId(
     _Out_opt_ PULONG    EDX
     )
 {
-    int                 Value[4] =3D {0};
+    int         Value[4] =3D {0};
=20
     __cpuid(Value, Leaf);
=20
@@ -181,13 +186,15 @@ __FreePoolWithTag(
=20
 static FORCEINLINE PMDL
 __AllocatePages(
-    _In_ ULONG          Count
+    _In_ ULONG          Count,
+    _In_ BOOLEAN        Contiguous
     )
 {
     PHYSICAL_ADDRESS    LowAddress;
     PHYSICAL_ADDRESS    HighAddress;
     LARGE_INTEGER       SkipBytes;
     SIZE_T              TotalBytes;
+    ULONG               Flags;
     PMDL                Mdl;
     PUCHAR              MdlMappedSystemVa;
     NTSTATUS            status;
@@ -197,12 +204,18 @@ __AllocatePages(
     SkipBytes=2EQuadPart =3D 0ull;
     TotalBytes =3D (SIZE_T)PAGE_SIZE * Count;
=20
+    if (Contiguous) {
+        Flags =3D MM_ALLOCATE_REQUIRE_CONTIGUOUS_CHUNKS;
+    } else {
+        Flags =3D MM_ALLOCATE_FULLY_REQUIRED;
+    }
+
     Mdl =3D MmAllocatePagesForMdlEx(LowAddress,
                                   HighAddress,
                                   SkipBytes,
                                   TotalBytes,
                                   MmCached,
-                                  MM_ALLOCATE_FULLY_REQUIRED);
+                                  Flags);
=20
     status =3D STATUS_NO_MEMORY;
     if (Mdl =3D=3D NULL)
@@ -246,14 +259,14 @@ fail1:
     return NULL;
 }
=20
-#define __AllocatePage()    __AllocatePages(1)
+#define __AllocatePage()    __AllocatePages(1, FALSE)
=20
 static FORCEINLINE VOID
 __FreePages(
     _In_ PMDL   Mdl
     )
 {
-    PUCHAR      MdlMappedSystemVa;
+    PUCHAR	MdlMappedSystemVa;
=20
     ASSERT(Mdl->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA);
     MdlMappedSystemVa =3D Mdl->MappedSystemVa;
diff --git a/src/xenvbd/ring=2Ec b/src/xenvbd/ring=2Ec
index 339679b=2E=2Edae2ca0 100644
--- a/src/xenvbd/ring=2Ec
+++ b/src/xenvbd/ring=2Ec
@@ -1679,11 +1679,6 @@ BlkifRingDpc(
     }
 }
=20
-#define TIME_US(_us)        ((_us) * 10)
-#define TIME_MS(_ms)        (TIME_US((_ms) * 1000))
-#define TIME_S(_s)          (TIME_MS((_s) * 1000))
-#define TIME_RELATIVE(_t)   (-(_t))
-
 #define XENVBD_WATCHDOG_PERIOD 30
=20
 static NTSTATUS
@@ -2050,7 +2045,7 @@ BlkifRingConnect(
     if (!NT_SUCCESS(status))
         goto fail1;
=20
-    BlkifRing->Mdl =3D __AllocatePages(1 << Ring->Order);
+    BlkifRing->Mdl =3D __AllocatePages(1 << Ring->Order, FALSE);
=20
     status =3D STATUS_NO_MEMORY;
     if (BlkifRing->Mdl =3D=3D NULL)
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.d6.a8ac1b45b9b1d220.1a162869d20.a125698736f82ce7=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 07:32:40 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 07:32:40 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1457818.1670322 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJnI0-0005nD-Qm; Thu, 22 Oct 2026 07:32:40 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1457818.1670322; Thu, 22 Oct 2026 07:32:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJnI0-0005ms-ID; Thu, 22 Oct 2026 07:32:40 +0000
Received: by outflank-mailman (input) for mailman id 1457818;
 Thu, 22 Oct 2026 07:32:38 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16286a322000f79f@swg.vates.tech>)
 id 1xJnHy-0005mQ-RA
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 07:32:38 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJnHy-005qNZ-6a
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 09:32:38 +0200
Received: from [10.42.69.8] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16286a322000f79f@swg.vates.tech>)
 id 6ad9bc11-e002-0a2a0a5209dd-0a2a4508de34-20
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 09:32:38 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-c1860d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16286a322000f79f@swg.vates.tech>)
 id 6ad9bc15-f659-0a2a45080019-b9ff1c229b19-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 09:32:37 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a16286a322000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 07:32:33 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 9A5BC827A1;
 Thu, 22 Oct 2026 09:32:32 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=VOq4ZIgkYHiutsfN7lwxgJ27IaipUeaDWJlia7SO3YY=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=oMxP/n1mp6+9BYLl3l6LsQu3bw8Mm28LgPATQBpUZp7PY+x+dBhBkjZ4TpzxaK3fSdqyuwX18
 E6zKKbRSy13aBcobD4Qm5kbD5/adaEF0KCGchiSDPtkaAnxbhDDTU6+2g0QL22fOnLkbOkBPxhh
 2yA3OvTWzwWblrjmScJOBwrwgUq8OeaLiWpcZwz2KBPfCf6BiwunrPjG7zJxNulhzgM4cJlGnRZ
 E7qOgE+Z6d2zBCYkZ/sw9mFZd0RffGEQrwL813fU8zYJ7SR6IDUW6ppKAEEn+uYGHy6IRE1PEkD
 bcjMUtrGpolzzMIK/w2+jky35FaZevjDCY1/6YQYbfew==
X-Zone-Loop: 5bb05b64af454520bb0dd1cb0b315b9cb4bc7d76121e
x-campaign-type: default
x-transaction-id: d8226bdc-4647-4373-846c-ea74dc30d6d9
x-swg-uid: 01-b37f6d80-8d47-42a6-84d5-f0d27a5cab01
X-Mailer: Sweego
Message-ID:
 <1792654353.8631fc262581453bbf619ec5b2062170.1a16286a322000f79f@vates.tech>
x-swg-bid: 1792654353.8631fc262581453bbf619ec5b2062170.1a16286a322000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 3/3] xencrsh: Fix inverted BUG_ON
Date: Thu, 22 Oct 2026 09:32:25 +0200
In-Reply-To: <792654035.8631fc262581453bbf619ec5b2062170.1a16281c9f3000f79f@vates.tech>
References: <792654035.8631fc262581453bbf619ec5b2062170.1a16281c9f3000f79f@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.d8.c64e16f23fc04f2d.1a16286a182.7827511f00c4d6cc=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792654352770
X-purgate-ID: tlsNG-c1860d/1792654358-D5B4987B-304E4BA8/0/0
X-purgate-type: clean
X-purgate-size: 1142

---=Part.d8.c64e16f23fc04f2d.1a16286a182.7827511f00c4d6cc=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

BUG_ON(_EXP) called BUG when _EXP was false, the opposite of every
other copy of assert=2Eh=2E There is no caller yet, so nothing is affected=
,
but the first BUG_ON() added would have fired on the valid case=2E
Fixed by syncing with xenbus=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xencrsh/assert=2Eh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/xencrsh/assert=2Eh b/src/xencrsh/assert=2Eh
index 3692e94=2E=2E7fc3014 100644
--- a/src/xencrsh/assert=2Eh
+++ b/src/xencrsh/assert=2Eh
@@ -71,7 +71,7 @@ __Bug(
         } while (FALSE)
=20
 #define BUG_ON(_EXP)                \
-        if (!(_EXP)) BUG(#_EXP)
+        if (_EXP) BUG(#_EXP)
=20
 #undef  ASSERT
=20
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.d8.c64e16f23fc04f2d.1a16286a182.7827511f00c4d6cc=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 07:32:40 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 07:32:40 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1457819.1670323 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJnI0-0005nb-Qv; Thu, 22 Oct 2026 07:32:40 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1457819.1670323; Thu, 22 Oct 2026 07:32:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJnI0-0005n5-JN; Thu, 22 Oct 2026 07:32:40 +0000
Received: by outflank-mailman (input) for mailman id 1457819;
 Thu, 22 Oct 2026 07:32:38 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16286a27c000f79f@swg.vates.tech>)
 id 1xJnHy-0005mO-PY
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 07:32:38 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJnHy-001LSo-2J
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 09:32:38 +0200
Received: from [10.42.69.4] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16286a27c000f79f@swg.vates.tech>)
 id 6ad9bc0e-bab6-0a2a0a5309dd-0a2a45048a18-36
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 09:32:38 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-ebf023.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16286a27c000f79f@swg.vates.tech>)
 id 6ad9bc15-b57f-0a2a45040019-b9ff1c228a77-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 09:32:37 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a16286a27c000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 07:32:33 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 5D0BF82B02;
 Thu, 22 Oct 2026 09:32:32 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=ybh56U2NPJP+PViSjJW36t5ef/fu8ZyxXavjchw4Z7I=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=pqVFLO8LWvObPAFHI2fh44owhvSvnudAobaWbvMfE9s1CZcTKZscKcCFpxMehV61DE6/JSzjc
 2qYEciB5jeFmQNBlEc88ZIL0JHjoOS6804bKqh95X901vFaeDmB570w1IRP5Qjur36NetF8f+P6
 QL5z94b1/Hr/PkrU0y0/mpA8cyYyHpPo/6RjOOvHXeppY4Ak8zzv63431VLLpN5y+mXa965ctsh
 iE6tvoIQbUWJya8XbEkrv84zqS+WnQtuRLhmYpKHHsW9i2/0fga1G8XjyLPk7TS8OCZRkwrtZHJ
 4E4iM2JSJZoeOt37d1WLZW0hQM7wAQ7Ef38gSzM2Gyeg==
X-Zone-Loop: 945057616055c14a26a42b2a7ed7b8addde089bbd4e3
x-campaign-type: default
x-transaction-id: ccbd5e2b-43cb-4121-b4ee-8e95b83ff95b
x-swg-uid: 01-6e497ed0-a3de-4ec2-a50c-933c92fe8e7a
X-Mailer: Sweego
Message-ID:
 <1792654353.8631fc262581453bbf619ec5b2062170.1a16286a27c000f79f@vates.tech>
x-swg-bid: 1792654353.8631fc262581453bbf619ec5b2062170.1a16286a27c000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 2/3] xenvbd: Sync common helper files with xenbus
Date: Thu, 22 Oct 2026 09:32:24 +0200
In-Reply-To: <792654035.8631fc262581453bbf619ec5b2062170.1a16281c9f3000f79f@vates.tech>
References: <792654035.8631fc262581453bbf619ec5b2062170.1a16281c9f3000f79f@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.d7.7621516cfc16c953.1a16286a05b.7bb7d2ff621b1c93=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792654352476
X-purgate-ID: tlsNG-ebf023/1792654358-528C9B50-D964FDF2/0/0
X-purgate-type: clean
X-purgate-size: 5118

---=Part.d7.7621516cfc16c953.1a16286a05b.7bb7d2ff621b1c93=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Take assert=2Eh and registry=2Ec/h from xenbus=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xenvbd/assert=2Eh   | 19 +++++++++----------
 src/xenvbd/registry=2Ec | 24 ++++++++++++------------
 src/xenvbd/registry=2Eh | 16 ++++++++--------
 3 files changed, 29 insertions(+), 30 deletions(-)

diff --git a/src/xenvbd/assert=2Eh b/src/xenvbd/assert=2Eh
index b1e206c=2E=2E8c4315e 100644
--- a/src/xenvbd/assert=2Eh
+++ b/src/xenvbd/assert=2Eh
@@ -56,7 +56,6 @@ __Bug(
=20
 #define ASSERTION_FAILURE   0x0000DEAD
=20
-
 #define BUG(_TEXT)                                              \
         do {                                                    \
             PCSTR       _Text =3D (_TEXT);                       \
@@ -155,13 +154,13 @@ __Bug(
=20
 static __inline BOOLEAN
 _IsZeroMemory(
-    _In_ PCSTR      Caller,
-    _In_ PCSTR      Name,
-    _In_ PVOID      Buffer,
-    _In_ ULONG      Length
+    _In_ PCSTR                      Caller,
+    _In_ PCSTR                      Name,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Length
     )
 {
-    ULONG           Offset;
+    ULONG                           Offset;
=20
     Offset =3D 0;
     while (Offset < Length) {
@@ -179,10 +178,10 @@ _IsZeroMemory(
=20
 static __inline BOOLEAN
 _IsZeroMemory(
-    _In_ PCSTR  Caller,
-    _In_ PCSTR  Name,
-    _In_ PVOID  Buffer,
-    _In_ ULONG  Length
+    _In_ PCSTR                      Caller,
+    _In_ PCSTR                      Name,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Length
     )
 {
     UNREFERENCED_PARAMETER(Caller);
diff --git a/src/xenvbd/registry=2Ec b/src/xenvbd/registry=2Ec
index 4f7c5ef=2E=2Ed576990 100644
--- a/src/xenvbd/registry=2Ec
+++ b/src/xenvbd/registry=2Ec
@@ -1169,17 +1169,17 @@ fail1:
=20
 NTSTATUS
 RegistryQueryBinaryValue(
-    _In_ HANDLE                     Key,
-    _In_ PSTR                       Name,
-    _Outptr_ PVOID                  *Buffer,
-    _Out_ PULONG                    Length
+    _In_ HANDLE                                 Key,
+    _In_ PSTR                                   Name,
+    _Outptr_result_bytebuffer_(*Length) PVOID   *Buffer,
+    _Out_ PULONG                                Length
     )
 {
-    ANSI_STRING                     Ansi;
-    UNICODE_STRING                  Unicode;
-    PKEY_VALUE_PARTIAL_INFORMATION  Partial;
-    ULONG                           Size;
-    NTSTATUS                        status;
+    ANSI_STRING                                 Ansi;
+    UNICODE_STRING                              Unicode;
+    PKEY_VALUE_PARTIAL_INFORMATION              Partial;
+    ULONG                                       Size;
+    NTSTATUS                                    status;
=20
     RtlInitAnsiString(&Ansi, Name);
=20
@@ -1256,7 +1256,7 @@ NTSTATUS
 RegistryUpdateBinaryValue(
     _In_ HANDLE                     Key,
     _In_ PSTR                       Name,
-    _In_ PVOID                      Buffer,
+    _In_reads_bytes_(Length) PVOID  Buffer,
     _In_ ULONG                      Length
     )
 {
@@ -1444,7 +1444,7 @@ fail1:
=20
 static PKEY_VALUE_PARTIAL_INFORMATION
 RegistryAnsiToSz(
-    PANSI_STRING                    Ansi
+    _In_ PANSI_STRING               Ansi
     )
 {
     ULONG                           Length;
@@ -1490,7 +1490,7 @@ fail1:
=20
 static PKEY_VALUE_PARTIAL_INFORMATION
 RegistryAnsiToMultiSz(
-    PANSI_STRING                    Ansi
+    _In_ PANSI_STRING               Ansi
     )
 {
     ULONG                           Length;
diff --git a/src/xenvbd/registry=2Eh b/src/xenvbd/registry=2Eh
index 26bc0c6=2E=2Eba1eace 100644
--- a/src/xenvbd/registry=2Eh
+++ b/src/xenvbd/registry=2Eh
@@ -166,18 +166,18 @@ RegistryQuerySzValue(
=20
 extern NTSTATUS
 RegistryQueryBinaryValue(
-    _In_ HANDLE         Key,
-    _In_ PSTR           Name,
-    _Outptr_ PVOID      *Buffer,
-    _Out_ PULONG        Length
+    _In_ HANDLE                                 Key,
+    _In_ PSTR                                   Name,
+    _Outptr_result_bytebuffer_(*Length) PVOID   *Buffer,
+    _Out_ PULONG                                Length
     );
=20
 extern NTSTATUS
 RegistryUpdateBinaryValue(
-    _In_ HANDLE         Key,
-    _In_ PSTR           Name,
-    _In_ PVOID          Buffer,
-    _In_ ULONG          Length
+    _In_ HANDLE                     Key,
+    _In_ PSTR                       Name,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Length
     );
=20
 extern NTSTATUS
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.d7.7621516cfc16c953.1a16286a05b.7bb7d2ff621b1c93=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 07:33:26 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 07:33:26 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1457820.1670326 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJnIk-0005vW-SD; Thu, 22 Oct 2026 07:33:26 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1457820.1670326; Thu, 22 Oct 2026 07:33:26 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJnIk-0005vP-PU; Thu, 22 Oct 2026 07:33:26 +0000
Received: by outflank-mailman (input) for mailman id 1457820;
 Thu, 22 Oct 2026 07:33:25 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a162875d0d000f79f@swg.vates.tech>)
 id 1xJnIj-0005v1-6s
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 07:33:25 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJnIi-00CUBB-Jl
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 09:33:24 +0200
Received: from [10.42.69.8] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a162875d0d000f79f@swg.vates.tech>)
 id 6ad9bc3e-8faa-0a2a0a5109dd-0a2a45088a58-18
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 09:33:24 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-c1860d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a162875d0d000f79f@swg.vates.tech>)
 id 6ad9bc44-f659-0a2a45080019-b9ff1c23a33f-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 09:33:24 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a162875d0d000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 07:33:20 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 4788682B02;
 Thu, 22 Oct 2026 09:33:20 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=NbTbccD0jLLVhcfMjCcQT+NkQQMi8372FGAgGmZWRhQ=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=oDa2M3WOFa9okUdNWjH27IT6CvWFP8LeqeuK1A624W+L8ZvqiIrrJVfhRuve/XyE7iBeffeZg
 A8dWsZw2USzEQiNDb94zL2djGOWfZnUNWOhsoiYlCBFMdoswZs+bLnUSQpWs9xNcNvOdcth+xru
 lBHAtWsYxZGHg6wJwT/qLiORraZLRTUSI/czKLFMX1P09Vk7xRAPR5cJJt4EhKsvk1A5rSA1qSA
 s17YKl4FMMesPeEdrDl96GJkPOezey4rOBBeV9rmJ1WMspVLbTKAQlmaD5QFBj3iVsUTA4gjQio
 AnEeRmaeBCDi9cg9Sb0B6P8n34/bhayd3vEANcFiwyNQ==
X-Zone-Loop: 0e5333e0c35bee3f283eb98f7041f2ebd07e8b765a00
x-campaign-type: default
x-transaction-id: de6f8717-a354-4160-b102-44911d401d1a
x-swg-uid: 01-f47e391c-52ee-4eaf-9c03-52e1249ac10a
X-Mailer: Sweego
Message-ID:
 <1792654400.8631fc262581453bbf619ec5b2062170.1a162875d0d000f79f@vates.tech>
x-swg-bid: 1792654400.8631fc262581453bbf619ec5b2062170.1a162875d0d000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 2/4] util: sync with xenbus
Date: Thu, 22 Oct 2026 09:33:11 +0200
In-Reply-To: <792654035.8631fc262581453bbf619ec5b2062170.1a16281c9f3000f79f@vates.tech>
References: <792654035.8631fc262581453bbf619ec5b2062170.1a16281c9f3000f79f@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.da.c7f030dd6e71a72a.1a162875b81.f2e87bcdbe878c5c=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792654400385
X-purgate-ID: tlsNG-c1860d/1792654404-CD74B87B-88EAA30F/0/0
X-purgate-type: clean
X-purgate-size: 3371

---=Part.da.c7f030dd6e71a72a.1a162875b81.f2e87bcdbe878c5c=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Sync util=2Eh with xenbus=2E
Added TIME_* macros to util=2Eh, so we drop them in controller=2Ec,
transmitter=2Ec and receiver=2Ec=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xenvif/controller=2Ec  | 5 -----
 src/xenvif/receiver=2Ec    | 5 -----
 src/xenvif/transmitter=2Ec | 5 -----
 src/xenvif/util=2Eh        | 8 ++++++--
 4 files changed, 6 insertions(+), 17 deletions(-)

diff --git a/src/xenvif/controller=2Ec b/src/xenvif/controller=2Ec
index 7a8b884=2E=2Ef5dc178 100644
--- a/src/xenvif/controller=2Ec
+++ b/src/xenvif/controller=2Ec
@@ -248,11 +248,6 @@ fail1:
     return status;
 }
=20
-#define TIME_US(_us)        ((_us) * 10)
-#define TIME_MS(_ms)        (TIME_US((_ms) * 1000))
-#define TIME_S(_s)          (TIME_MS((_s) * 1000))
-#define TIME_RELATIVE(_t)   (-(_t))
-
 #define XENVIF_CONTROLLER_POLL_PERIOD   TIME_MS(100)
 #define XENVIF_CONTROLLER_MAX_WAIT      TIME_S(5)
=20
diff --git a/src/xenvif/receiver=2Ec b/src/xenvif/receiver=2Ec
index 13c376d=2E=2E1c7972c 100644
--- a/src/xenvif/receiver=2Ec
+++ b/src/xenvif/receiver=2Ec
@@ -2364,11 +2364,6 @@ ReceiverRingEvtchnCallback(
     return TRUE;
 }
=20
-#define TIME_US(_us)        ((_us) * 10)
-#define TIME_MS(_ms)        (TIME_US((_ms) * 1000))
-#define TIME_S(_s)          (TIME_MS((_s) * 1000))
-#define TIME_RELATIVE(_t)   (-(_t))
-
 #define XENVIF_RECEIVER_WATCHDOG_PERIOD 30
=20
 static NTSTATUS
diff --git a/src/xenvif/transmitter=2Ec b/src/xenvif/transmitter=2Ec
index d3d77bd=2E=2Ed8fe885 100644
--- a/src/xenvif/transmitter=2Ec
+++ b/src/xenvif/transmitter=2Ec
@@ -3328,11 +3328,6 @@ TransmitterRingEvtchnCallback(
     return TRUE;
 }
=20
-#define TIME_US(_us)        ((_us) * 10)
-#define TIME_MS(_ms)        (TIME_US((_ms) * 1000))
-#define TIME_S(_s)          (TIME_MS((_s) * 1000))
-#define TIME_RELATIVE(_t)   (-(_t))
-
 #define XENVIF_TRANSMITTER_WATCHDOG_PERIOD  30
=20
 _IRQL_requires_(PASSIVE_LEVEL)
diff --git a/src/xenvif/util=2Eh b/src/xenvif/util=2Eh
index 7973be3=2E=2E2a09248 100644
--- a/src/xenvif/util=2Eh
+++ b/src/xenvif/util=2Eh
@@ -41,6 +41,11 @@
 #define	P2ROUNDUP(_t, _x, _a)   \
         (-(-((_t)(_x)) & -(((_t)(_a)))))
=20
+#define TIME_US(_us)            ((_us) * 10ll)
+#define TIME_MS(_ms)            (TIME_US((_ms) * 1000ll))
+#define TIME_S(_s)              (TIME_MS((_s) * 1000ll))
+#define TIME_RELATIVE(_t)       (-(_t))
+
 static FORCEINLINE LONG
 __ffs(
     _In_ unsigned long long mask
@@ -196,13 +201,12 @@ __AllocatePages(
=20
     LowAddress=2EQuadPart =3D 0ull;
     HighAddress=2EQuadPart =3D ~0ull;
+    SkipBytes=2EQuadPart =3D 0ull;
     TotalBytes =3D (SIZE_T)PAGE_SIZE * Count;
=20
     if (Contiguous) {
-        SkipBytes=2EQuadPart =3D TotalBytes;
         Flags =3D MM_ALLOCATE_REQUIRE_CONTIGUOUS_CHUNKS;
     } else {
-        SkipBytes=2EQuadPart =3D 0ull;
         Flags =3D MM_ALLOCATE_FULLY_REQUIRED;
     }
=20
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.da.c7f030dd6e71a72a.1a162875b81.f2e87bcdbe878c5c=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 07:33:27 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 07:33:27 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1457821.1670334 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJnIl-0005vw-4O; Thu, 22 Oct 2026 07:33:27 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1457821.1670334; Thu, 22 Oct 2026 07:33:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJnIk-0005va-Qr; Thu, 22 Oct 2026 07:33:26 +0000
Received: by outflank-mailman (input) for mailman id 1457821;
 Thu, 22 Oct 2026 07:33:25 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a162875c20000f79f@swg.vates.tech>)
 id 1xJnIj-0005v2-8a
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 07:33:25 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJnIi-00CUBB-LJ
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 09:33:24 +0200
Received: from [10.42.69.8] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a162875c20000f79f@swg.vates.tech>)
 id 6ad9bc3e-8faa-0a2a0a5109dd-0a2a45088a58-20
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 09:33:24 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-c1860d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a162875c20000f79f@swg.vates.tech>)
 id 6ad9bc44-f659-0a2a45080019-b9ff1c238f4d-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 09:33:24 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a162875c20000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 07:33:20 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id B48A182095;
 Thu, 22 Oct 2026 09:33:19 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=uHDh8GV7I5cJul3TR5MRXmq2sp9Cbqdec/xTl15ypYM=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=VUBHmM1zLCkM/mtJUJzjA0+6RrQJY28CXSBiP9z1ZTEXIAiJpEN6daQzPZ+GDZszb6/1pFI/+
 4oNCG0ALIdZNp0g9ON/IC5q7uccHK2FVM57U9cMxBYwBQCGmr6FzlaTiGGhmTMR3H9X6Sx6toji
 xRq2l5HLJHawfxKGCJqZZ/Pi3+z+rYW/KXfL/+PEAVapHzrsLfYPIzXCLbbCANTAf0t65RoCJQM
 +KIT6QNrRVgT/qtFoiwmFNpURSKO+COQoCtpOjXdqkRQPRoBSCRB3opCMYGmVTNXyejlgD8IQcL
 wawUyzzcxLEN8xSVEd9YPE+unAIP5bFANSgDhhedAoiw==
X-Zone-Loop: 42216040babe97fdf1c78470f636dae5a6dde014cd9a
x-campaign-type: default
x-transaction-id: b15004bc-7115-4059-b777-27a8d059fce9
x-swg-uid: 01-213c75af-e063-4fc2-8063-384a45a8d836
X-Mailer: Sweego
Message-ID:
 <1792654400.8631fc262581453bbf619ec5b2062170.1a162875c20000f79f@vates.tech>
x-swg-bid: 1792654400.8631fc262581453bbf619ec5b2062170.1a162875c20000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 1/4] include: sync store_interface.h with xenbus
Date: Thu, 22 Oct 2026 09:33:10 +0200
In-Reply-To: <792654035.8631fc262581453bbf619ec5b2062170.1a16281c9f3000f79f@vates.tech>
References: <792654035.8631fc262581453bbf619ec5b2062170.1a16281c9f3000f79f@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.d9.db463b061a74e1f0.1a16287595a.c5ad43f63ef125f0=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792654399835
X-purgate-ID: tlsNG-c1860d/1792654404-DFED287B-25052C4E/0/0
X-purgate-type: clean
X-purgate-size: 7951

---=Part.d9.db463b061a74e1f0.1a16287595a.c5ad43f63ef125f0=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 include/store_interface=2Eh | 80 +++++++++++++++++++--------------------
 1 file changed, 40 insertions(+), 40 deletions(-)

diff --git a/include/store_interface=2Eh b/include/store_interface=2Eh
index 83a76a1=2E=2E208be0e 100644
--- a/include/store_interface=2Eh
+++ b/include/store_interface=2Eh
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -72,7 +72,7 @@ typedef struct _XENBUS_STORE_PERMISSION {
     \brief Acquire a reference to the STORE interface
=20
     \param Interface The interface header
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_ACQUIRE)(
     _In_ PINTERFACE Interface
@@ -82,7 +82,7 @@ typedef NTSTATUS
     \brief Release a reference to the STORE interface
=20
     \param Interface The interface header
-*/ =20
+*/
 typedef VOID
 (*XENBUS_STORE_RELEASE)(
     _In_ PINTERFACE Interface
@@ -93,7 +93,7 @@ typedef VOID
=20
     \param Interface The interface header
     \param Buffer Pointer to the memory buffer
-*/ =20
+*/
 typedef VOID
 (*XENBUS_STORE_FREE)(
     _In_ PINTERFACE Interface,
@@ -113,14 +113,14 @@ typedef VOID
     buffer containing the value read
=20
     The \a Buffer should be freed using \a XENBUS_STORE_FREE
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_READ)(
     _In_ PINTERFACE                     Interface,
     _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
     _In_opt_ PSTR                       Prefix,
     _In_ PSTR                           Node,
-    _Outptr_ PCHAR                      *Buffer
+    _Outptr_result_z_ PSTR              *Buffer
     );
=20
 /*! \typedef XENBUS_STORE_PRINTF
@@ -136,7 +136,7 @@ typedef NTSTATUS
     \param =2E=2E=2E Additional parameters required by \a Format
=20
     If the \a Node does not exist then it is created
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_PRINTF)(
     _In_ PINTERFACE                     Interface,
@@ -156,7 +156,7 @@ typedef NTSTATUS
     \param Prefix An optional prefix for the \a Node
     \param Node The concatenation of the \a Prefix and this value specifi=
es
     the XenStore key to remove
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_REMOVE)(
     _In_ PINTERFACE                     Interface,
@@ -178,14 +178,14 @@ typedef NTSTATUS
     buffer containing a NUL separated list of key names
=20
     The \a Buffer should be freed using \a XENBUS_STORE_FREE
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_DIRECTORY)(
     _In_ PINTERFACE                     Interface,
     _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
     _In_opt_ PSTR                       Prefix,
     _In_ PSTR                           Node,
-    _Outptr_ PCHAR                      *Buffer
+    _Outptr_result_z_ PSTR              *Buffer
     );
=20
 /*! \typedef XENBUS_STORE_TRANSACTION_START
@@ -193,7 +193,7 @@ typedef NTSTATUS
=20
     \param Interface The interface header
     \param Transaction Pointer to a transaction handle to be initialized
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_TRANSACTION_START)(
     _In_ PINTERFACE                     Interface,
@@ -210,7 +210,7 @@ typedef NTSTATUS
=20
     If \a Commit is TRUE and the transaction to found to clash then
     STATUS_RETRY will be returned
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_TRANSACTION_END)(
     _In_ PINTERFACE                 Interface,
@@ -228,7 +228,7 @@ typedef NTSTATUS
     \param Event A pointer to an event object to be signalled when the
     watch fires
     \param Watch A pointer to a watch handle to be initialized
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_WATCH_ADD)(
     _In_ PINTERFACE                 Interface,
@@ -243,11 +243,11 @@ typedef NTSTATUS
=20
     \param Interface The interface header
     \param Watch The watch handle
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_WATCH_REMOVE)(
-    _In_ PINTERFACE                 Interface,
-    _In_opt_ PXENBUS_STORE_WATCH    Watch
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_STORE_WATCH    Watch
     );
=20
 /*! \typedef XENBUS_STORE_POLL
@@ -259,7 +259,7 @@ typedef NTSTATUS
     activity then this will block the normal STORE interface DPC so this
     method must be regularly invoked during the spin loop to check for
     XenStore activity
-*/ =20
+*/
 typedef VOID
 (*XENBUS_STORE_POLL)(
     _In_ PINTERFACE Interface
@@ -288,7 +288,7 @@ typedef NTSTATUS
     );
=20
 // {86824C3B-D34E-4753-B281-2F1E3AD214D7}
-DEFINE_GUID(GUID_XENBUS_STORE_INTERFACE,=20
+DEFINE_GUID(GUID_XENBUS_STORE_INTERFACE,
 0x86824c3b, 0xd34e, 0x4753, 0xb2, 0x81, 0x2f, 0x1e, 0x3a, 0xd2, 0x14, 0xd=
7);
=20
 /*! \struct _XENBUS_STORE_INTERFACE_V2
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.d9.db463b061a74e1f0.1a16287595a.c5ad43f63ef125f0=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 07:33:27 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 07:33:27 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1457822.1670331 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJnIl-0005wM-1D; Thu, 22 Oct 2026 07:33:27 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1457822.1670331; Thu, 22 Oct 2026 07:33:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJnIk-0005vo-SP; Thu, 22 Oct 2026 07:33:26 +0000
Received: by outflank-mailman (input) for mailman id 1457822;
 Thu, 22 Oct 2026 07:33:25 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a162875e1e000f79f@swg.vates.tech>)
 id 1xJnIj-0005v7-FH
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 07:33:25 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJnIi-008JrU-S4
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 09:33:24 +0200
Received: from [10.42.69.2] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a162875e1e000f79f@swg.vates.tech>)
 id 6ad9bc3b-2eae-0a2a0a5409dd-0a2a45029458-18
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 09:33:24 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a162875e1e000f79f@swg.vates.tech>)
 id 6ad9bc44-6ca4-0a2a45020019-b9ff1c238991-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 09:33:24 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a162875e1e000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 07:33:21 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 824C282BCA;
 Thu, 22 Oct 2026 09:33:20 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=gN8njWBqs+q07xkbLNyevyzDcSoXprSNkcDmA0pmCTs=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=FcMP35eDhAhFoeIrhFkSY3HlixVg97ucz/V9j87ZvZjicbEk42dfc5yWKJ8X/Cs3A6sEwuTKo
 oYXYMv2cWiYOpx4mxrw5oF5/DRnES82db5KOgxPaKLmS5WjmbUAs74PvbbECMoS3VWGzt5S0DKt
 xjExkhAiqWQEeYzjtuwIvtuRqK2YaJ/ZIQslcZxtxeTUGKwEIBy2WBiyhmQKDB72RSMnJ0uL3Wq
 ueQ7e+qD3SRVBP4PdRR+ZwBz4+R5Kv/kn65OWtbaCAukty96hkssPTGTM1y2P50cVeGFKHNeL6B
 u2wZbijbtKlWalv+JkXdY+8mhZmL8cCHncqmwrgU9cpw==
X-Zone-Loop: a0ccd9145d295a7dddce1bfc886e658f7fa5d41ff5e7
x-campaign-type: default
x-transaction-id: 6fefdcae-9f3f-40ee-982b-a440c182f932
x-swg-uid: 01-4673fcee-56e6-47a0-a861-ba34efebc818
X-Mailer: Sweego
Message-ID:
 <1792654401.8631fc262581453bbf619ec5b2062170.1a162875e1e000f79f@vates.tech>
x-swg-bid: 1792654401.8631fc262581453bbf619ec5b2062170.1a162875e1e000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 3/4] registry: sync with xenbus
Date: Thu, 22 Oct 2026 09:33:12 +0200
In-Reply-To: <792654035.8631fc262581453bbf619ec5b2062170.1a16281c9f3000f79f@vates.tech>
References: <792654035.8631fc262581453bbf619ec5b2062170.1a16281c9f3000f79f@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.db.9287e3b4924a496f.1a162875c70.834e56d864563b44=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792654400624
X-purgate-ID: tlsNG-720697/1792654404-F1AAD2AC-EF705A48/0/0
X-purgate-type: clean
X-purgate-size: 5883

---=Part.db.9287e3b4924a496f.1a162875c70.834e56d864563b44=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Syncing op changes the signature of RegistryInitialize() which now takes
the DriverObject, so update call sites accordingly=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xenvif/driver=2Ec   |  2 +-
 src/xenvif/registry=2Ec | 42 ++++++++++++++++++++++++------------------
 src/xenvif/registry=2Eh | 36 ++++++++++++++++--------------------
 3 files changed, 41 insertions(+), 39 deletions(-)

diff --git a/src/xenvif/driver=2Ec b/src/xenvif/driver=2Ec
index 69d0622=2E=2Efc97be2 100644
--- a/src/xenvif/driver=2Ec
+++ b/src/xenvif/driver=2Ec
@@ -335,7 +335,7 @@ DriverEntry(
          MONTH,
          YEAR);
=20
-    status =3D RegistryInitialize(RegistryPath);
+    status =3D RegistryInitialize(DriverObject, RegistryPath);
     if (!NT_SUCCESS(status))
         goto fail1;
=20
diff --git a/src/xenvif/registry=2Ec b/src/xenvif/registry=2Ec
index 76bfddb=2E=2E602b96a 100644
--- a/src/xenvif/registry=2Ec
+++ b/src/xenvif/registry=2Ec
@@ -62,11 +62,15 @@ __RegistryFree(
 }
=20
 NTSTATUS
+#pragma prefast(suppress:28101) // unannotated DriverEntry function
 RegistryInitialize(
+    _In_opt_ PDRIVER_OBJECT DriverObject,
     _In_ PUNICODE_STRING    Path
     )
 {
-    NTSTATUS                status;
+    UNICODE_STRING      Unicode;
+    PVOID               Func;
+    NTSTATUS            status;
=20
     ASSERT3P(RegistryPath=2EBuffer, =3D=3D, NULL);
=20
@@ -74,6 +78,16 @@ RegistryInitialize(
     if (!NT_SUCCESS(status))
         goto fail1;
=20
+    ASSERT3P(RegistryDriverObject, =3D=3D, NULL);
+    RegistryDriverObject =3D DriverObject;
+
+    ASSERT3P(__IoOpenDriverRegistryKey, =3D=3D, NULL);
+    RtlInitUnicodeString(&Unicode, L"IoOpenDriverRegistryKey");
+
+    Func =3D MmGetSystemRoutineAddress(&Unicode);
+    if (Func !=3D NULL)
+        __IoOpenDriverRegistryKey =3D (IOOPENDRIVERREGISTRYKEY)Func;
+
     return STATUS_SUCCESS;
=20
 fail1:
@@ -1155,17 +1169,17 @@ fail1:
=20
 NTSTATUS
 RegistryQueryBinaryValue(
-    _In_ HANDLE                             Key,
-    _In_ PSTR                               Name,
-    _Outptr_result_buffer_(*Length) PVOID   *Buffer,
-    _Out_ PULONG                            Length
+    _In_ HANDLE                                 Key,
+    _In_ PSTR                                   Name,
+    _Outptr_result_bytebuffer_(*Length) PVOID   *Buffer,
+    _Out_ PULONG                                Length
     )
 {
-    ANSI_STRING                             Ansi;
-    UNICODE_STRING                          Unicode;
-    PKEY_VALUE_PARTIAL_INFORMATION          Partial;
-    ULONG                                   Size;
-    NTSTATUS                                status;
+    ANSI_STRING                                 Ansi;
+    UNICODE_STRING                              Unicode;
+    PKEY_VALUE_PARTIAL_INFORMATION              Partial;
+    ULONG                                       Size;
+    NTSTATUS                                    status;
=20
     RtlInitAnsiString(&Ansi, Name);
=20
@@ -1628,11 +1642,3 @@ RegistryCloseKey(
 {
     ZwClose(Key);
 }
-
-PUNICODE_STRING
-RegistryGetPath(
-    VOID
-    )
-{
-    return &RegistryPath;
-}
\ No newline at end of file
diff --git a/src/xenvif/registry=2Eh b/src/xenvif/registry=2Eh
index c9a5488=2E=2E98de95e 100644
--- a/src/xenvif/registry=2Eh
+++ b/src/xenvif/registry=2Eh
@@ -37,6 +37,7 @@
=20
 extern NTSTATUS
 RegistryInitialize(
+    _In_opt_ PDRIVER_OBJECT DrvObj,
     _In_ PUNICODE_STRING    Path
     );
=20
@@ -110,8 +111,8 @@ RegistryCreateSubKey(
=20
 extern NTSTATUS
 RegistryDeleteSubKey(
-    _In_ HANDLE Key,
-    _In_ PSTR   Name
+    _In_ HANDLE     Key,
+    _In_ PSTR       Name
     );
=20
 extern NTSTATUS
@@ -130,15 +131,15 @@ RegistryEnumerateValues(
=20
 extern NTSTATUS
 RegistryDeleteValue(
-    _In_ HANDLE Key,
-    _In_ PSTR   Name
+    _In_ HANDLE     Key,
+    _In_ PSTR       Name
     );
=20
 extern NTSTATUS
 RegistryQueryDwordValue(
-    _In_ HANDLE     Key,
-    _In_ PSTR       Name,
-    _Out_ PULONG    Value
+    _In_ HANDLE         Key,
+    _In_ PSTR           Name,
+    _Out_ PULONG        Value
     );
=20
 extern NTSTATUS
@@ -150,9 +151,9 @@ RegistryQueryQwordValue(
=20
 extern NTSTATUS
 RegistryUpdateDwordValue(
-    _In_ HANDLE Key,
-    _In_ PSTR   Name,
-    _In_ ULONG  Value
+    _In_ HANDLE         Key,
+    _In_ PSTR           Name,
+    _In_ ULONG          Value
     );
=20
 extern NTSTATUS
@@ -165,10 +166,10 @@ RegistryQuerySzValue(
=20
 extern NTSTATUS
 RegistryQueryBinaryValue(
-    _In_ HANDLE                             Key,
-    _In_ PSTR                               Name,
-    _Outptr_result_buffer_(*Length) PVOID   *Buffer,
-    _Out_ PULONG                            Length
+    _In_ HANDLE                                 Key,
+    _In_ PSTR                                   Name,
+    _Outptr_result_bytebuffer_(*Length) PVOID   *Buffer,
+    _Out_ PULONG                                Length
     );
=20
 extern NTSTATUS
@@ -198,7 +199,7 @@ RegistryFreeSzValue(
=20
 extern VOID
 RegistryFreeBinaryValue(
-    _In_ PVOID  Buffer
+    _In_ PVOID          Buffer
     );
=20
 extern NTSTATUS
@@ -214,9 +215,4 @@ RegistryCloseKey(
     _In_ HANDLE Key
     );
=20
-extern PUNICODE_STRING
-RegistryGetPath(
-    VOID
-    );
-
 #endif  // _XENVIF_REGISTRY_H
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.db.9287e3b4924a496f.1a162875c70.834e56d864563b44=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 07:33:27 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 07:33:27 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1457823.1670340 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJnIl-0005wu-8M; Thu, 22 Oct 2026 07:33:27 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1457823.1670340; Thu, 22 Oct 2026 07:33:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJnIk-0005wC-UP; Thu, 22 Oct 2026 07:33:26 +0000
Received: by outflank-mailman (input) for mailman id 1457823;
 Thu, 22 Oct 2026 07:33:25 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a162875f18000f79f@swg.vates.tech>)
 id 1xJnIj-0005v8-Fx
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 07:33:25 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJnIi-001Lhz-Sk
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 09:33:24 +0200
Received: from [10.42.69.7] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a162875f18000f79f@swg.vates.tech>)
 id 6ad9bc3b-bab6-0a2a0a5309dd-0a2a4507c638-46
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 09:33:24 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-ef75cf.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a162875f18000f79f@swg.vates.tech>)
 id 6ad9bc44-b4ea-0a2a45070019-b9ff1c228161-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 09:33:24 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a162875f18000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 07:33:21 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id C144382095;
 Thu, 22 Oct 2026 09:33:20 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=JqKv+9hj2pa7VRSqP950+zz6i/6Uw/uXWJhJEJa15Nk=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=GDWuQtFvy4U7trzfZsRI4ky/H6ib4QGa9SyUCA8Tw+To9FMN4txzFnaiUfFmvo4hk8CYnDkhn
 RB7kQ+07QJd9MtaGpQe30KRpQd7m88hzqojY/hMsogfs7KaggQVs9LyvrUKMVc6Kgqa4RG1LH0W
 Es4F96lAc60qePPe6f9tmBiXxmYilgtVPiGlDloBgIBRKsynSN3G3RNrKge2ufZZaX1LkSKW4qJ
 tMI4KMQRtruRv8jSnx04T7QkrsEevifCY45hgqiQyDKkL590OP7qM0KnU0AQ3wsqZD6AhFVxIpE
 mChnCBH5llbafsbCGjtAIJVrzpfSb+sgG27+H/sz0ZKA==
X-Zone-Loop: effd53520de6a4bcbd2128171094d3f14cad19512ce2
x-campaign-type: default
x-transaction-id: 01d76654-6648-4289-ab91-4d23ee4e9270
x-swg-uid: 01-b8179532-24b0-4f0e-a521-65ed32260821
X-Mailer: Sweego
Message-ID:
 <1792654401.8631fc262581453bbf619ec5b2062170.1a162875f18000f79f@vates.tech>
x-swg-bid: 1792654401.8631fc262581453bbf619ec5b2062170.1a162875f18000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 4/4] xenvif: sync common files with xenbus
Date: Thu, 22 Oct 2026 09:33:13 +0200
In-Reply-To: <792654035.8631fc262581453bbf619ec5b2062170.1a16281c9f3000f79f@vates.tech>
References: <792654035.8631fc262581453bbf619ec5b2062170.1a16281c9f3000f79f@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.dc.58ac4716d0fc7d47.1a162875d77.29dd95070ec522c7=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792654400887
X-purgate-ID: tlsNG-ef75cf/1792654404-A4CCFAE4-5EB0C4C2/0/0
X-purgate-type: clean
X-purgate-size: 21708

---=Part.dc.58ac4716d0fc7d47.1a162875d77.29dd95070ec522c7=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Take assert=2Eh, dbg_print=2Eh, mutex=2Eh, and thread=2Ec/h from xenbus=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xenvif/dbg_print=2Eh | 66 ++++++++++++++++++------------
 src/xenvif/mutex=2Eh     | 93 ++++++++++++++++++++++++++++--------------
 src/xenvif/names=2Eh     | 26 ++++++------
 src/xenvif/thread=2Ec    | 72 ++++++++++++++++----------------
 src/xenvif/thread=2Eh    | 52 +++++++++++------------
 5 files changed, 177 insertions(+), 132 deletions(-)

diff --git a/src/xenvif/dbg_print=2Eh b/src/xenvif/dbg_print=2Eh
index 21bea0c=2E=2E17abb40 100644
--- a/src/xenvif/dbg_print=2Eh
+++ b/src/xenvif/dbg_print=2Eh
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -36,12 +36,12 @@
 #include <ntddk=2Eh>
 #include <stdarg=2Eh>
=20
-#pragma warning(disable:4127)   // conditional expression is constant
-
 #define stringify_literal(_text) #_text
 #define stringify(_text) stringify_literal(_text)
 #define __MODULE__ stringify(PROJECT)
=20
+#pragma warning(disable:4127)   // conditional expression is constant
+
 static __inline VOID
 __Error(
     _In_ PCSTR      Prefix,
@@ -138,4 +138,20 @@ __Info(
 #define Info(=2E=2E=2E)  \
         __Info(__MODULE__ "|"  __FUNCTION__ ": ", __VA_ARGS__)
=20
+#define DBG_PRINT_ENABLE_FILTER(_Id, _Level)                       \
+        do {                                                        \
+            DbgSetDebugFilterState((_Id), (_Level), TRUE);          \
+        } while (FALSE)
+
+static __inline VOID
+__DbgPrintEnable(
+    VOID
+    )
+{
+    DBG_PRINT_ENABLE_FILTER(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL);
+    DBG_PRINT_ENABLE_FILTER(DPFLTR_IHVDRIVER_ID, DPFLTR_WARNING_LEVEL);
+    DBG_PRINT_ENABLE_FILTER(DPFLTR_IHVDRIVER_ID, DPFLTR_TRACE_LEVEL);
+    DBG_PRINT_ENABLE_FILTER(DPFLTR_IHVDRIVER_ID, DPFLTR_INFO_LEVEL);
+}
+
 #endif  // _XENVIF_DBG_PRINT_H
diff --git a/src/xenvif/mutex=2Eh b/src/xenvif/mutex=2Eh
index 00a2d9c=2E=2E15a0589 100644
--- a/src/xenvif/mutex=2Eh
+++ b/src/xenvif/mutex=2Eh
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -44,7 +44,7 @@ typedef struct _MUTEX {
=20
 static FORCEINLINE VOID
 InitializeMutex(
-    _In_ PMUTEX Mutex
+    _Out_ PMUTEX    Mutex
     )
 {
     RtlZeroMemory(Mutex, sizeof (MUTEX));
@@ -52,17 +52,48 @@ InitializeMutex(
     KeInitializeEvent(&Mutex->Event, SynchronizationEvent, TRUE);
 }
=20
+static FORCEINLINE BOOLEAN
+_IRQL_requires_max_(PASSIVE_LEVEL)
+TryAcquireMutex(
+    _Inout_ PMUTEX  Mutex
+    )
+{
+    LARGE_INTEGER   Timeout;
+    NTSTATUS        status;
+
+    Timeout=2EQuadPart =3D 0;
+
+    status =3D KeWaitForSingleObject(&Mutex->Event,
+                                   Executive,
+                                   KernelMode,
+                                   FALSE,
+                                   &Timeout);
+    if (status =3D=3D STATUS_TIMEOUT)
+        return FALSE;
+
+    ASSERT(NT_SUCCESS(status));
+
+    ASSERT3P(Mutex->Owner, =3D=3D, NULL);
+    Mutex->Owner =3D KeGetCurrentThread();
+
+    return TRUE;
+}
+
 static FORCEINLINE VOID
 _IRQL_requires_max_(PASSIVE_LEVEL)
 AcquireMutex(
-    _In_ PMUTEX Mutex
+    _Inout_ PMUTEX  Mutex
     )
 {
-    (VOID) KeWaitForSingleObject(&Mutex->Event,
-                                 Executive,
-                                 KernelMode,
-                                 FALSE,
-                                 NULL);
+    NTSTATUS        status;
+
+    status =3D KeWaitForSingleObject(&Mutex->Event,
+                                   Executive,
+                                   KernelMode,
+                                   FALSE,
+                                   NULL);
+
+    ASSERT(NT_SUCCESS(status));
=20
     ASSERT3P(Mutex->Owner, =3D=3D, NULL);
     Mutex->Owner =3D KeGetCurrentThread();
@@ -71,7 +102,7 @@ AcquireMutex(
 static FORCEINLINE VOID
 _IRQL_requires_max_(PASSIVE_LEVEL)
 ReleaseMutex(
-    _In_ PMUTEX Mutex
+    _Inout_ PMUTEX  Mutex
     )
 {
     ASSERT3P(Mutex->Owner, =3D=3D, KeGetCurrentThread());
diff --git a/src/xenvif/names=2Eh b/src/xenvif/names=2Eh
index b0404f3=2E=2Ee1b8d52 100644
--- a/src/xenvif/names=2Eh
+++ b/src/xenvif/names=2Eh
@@ -38,7 +38,7 @@
=20
 #include "types=2Eh"
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PowerTypeName(
     _In_ POWER_STATE_TYPE   Type
     )
@@ -58,7 +58,7 @@ PowerTypeName(
 #undef  _POWER_ACTION_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PowerSystemStateName(
     _In_ SYSTEM_POWER_STATE State
     )
@@ -84,7 +84,7 @@ PowerSystemStateName(
 #undef  _POWER_SYSTEM_STATE_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PowerDeviceStateName(
     _In_ DEVICE_POWER_STATE State
     )
@@ -108,7 +108,7 @@ PowerDeviceStateName(
 #undef  _POWER_DEVICE_STATE_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PowerActionName(
     _In_ POWER_ACTION   Type
     )
@@ -134,7 +134,7 @@ PowerActionName(
 #undef  _POWER_ACTION_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PowerMinorFunctionName(
     _In_ ULONG  MinorFunction
     )
@@ -156,7 +156,7 @@ PowerMinorFunctionName(
 #undef  _POWER_MINOR_FUNCTION_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PnpDeviceStateName(
     _In_ DEVICE_PNP_STATE   State
     )
@@ -183,7 +183,7 @@ PnpDeviceStateName(
 #undef  _STATE_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PnpMinorFunctionName(
     _In_ ULONG  Function
     )
@@ -226,7 +226,7 @@ PnpMinorFunctionName(
 #undef  _PNP_MINOR_FUNCTION_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PartialResourceDescriptorTypeName(
     _In_ UCHAR  Type
     )
@@ -255,7 +255,7 @@ PartialResourceDescriptorTypeName(
 #undef  _PARTIAL_RESOURCE_DESCRIPTOR_TYPE_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 DeviceUsageTypeName(
     _In_ DEVICE_USAGE_NOTIFICATION_TYPE Type
     )
@@ -277,7 +277,7 @@ DeviceUsageTypeName(
 #undef  _DEVICE_USAGE_TYPE_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 InterfaceTypeName(
     _In_ INTERFACE_TYPE Type
     )
@@ -315,7 +315,7 @@ InterfaceTypeName(
 #undef  _INTERFACE_TYPE_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 DmaWidthName(
     _In_ DMA_WIDTH  Width
     )
@@ -339,7 +339,7 @@ DmaWidthName(
 #undef  _DMA_WIDTH_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 DmaSpeedName(
     _In_ DMA_SPEED  Speed
     )
@@ -364,7 +364,7 @@ DmaSpeedName(
 #undef  _DMA_SPEED_NAME
 }
=20
-static FORCEINLINE const PCHAR
+static FORCEINLINE PCSTR
 XenbusStateName(
     _In_ XenbusState    State
     )
diff --git a/src/xenvif/thread=2Ec b/src/xenvif/thread=2Ec
index ed9315e=2E=2Eed7266b 100644
--- a/src/xenvif/thread=2Ec
+++ b/src/xenvif/thread=2Ec
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -37,7 +37,7 @@
 #include "assert=2Eh"
 #include "util=2Eh"
=20
-#define THREAD_POOL 'ERHT'
+#define THREAD_TAG 'ERHT'
=20
 struct _XENVIF_THREAD {
     XENVIF_THREAD_FUNCTION  Function;
@@ -53,7 +53,7 @@ __ThreadAllocate(
     _In_ ULONG  Length
     )
 {
-    return __AllocatePoolWithTag(NonPagedPool, Length, THREAD_POOL);
+    return __AllocatePoolWithTag(NonPagedPool, Length, THREAD_TAG);
 }
=20
 static FORCEINLINE VOID
@@ -61,12 +61,12 @@ __ThreadFree(
     _In_ PVOID  Buffer
     )
 {
-    __FreePoolWithTag(Buffer, THREAD_POOL);
+    __FreePoolWithTag(Buffer, THREAD_TAG);
 }
=20
 static FORCEINLINE VOID
 __ThreadWake(
-    _Out_ PXENVIF_THREAD    Thread
+    _Inout_ PXENVIF_THREAD  Thread
     )
 {
     KeSetEvent(&Thread->Event, IO_NO_INCREMENT, FALSE);
@@ -74,7 +74,7 @@ __ThreadWake(
=20
 VOID
 ThreadWake(
-    _Out_ PXENVIF_THREAD    Thread
+    _Inout_ PXENVIF_THREAD  Thread
     )
 {
     __ThreadWake(Thread);
@@ -82,7 +82,7 @@ ThreadWake(
=20
 static FORCEINLINE VOID
 __ThreadAlert(
-    _Out_ PXENVIF_THREAD    Thread
+    _Inout_ PXENVIF_THREAD  Thread
     )
 {
     Thread->Alerted =3D TRUE;
@@ -91,7 +91,7 @@ __ThreadAlert(
=20
 VOID
 ThreadAlert(
-    _Out_ PXENVIF_THREAD    Thread
+    _Inout_ PXENVIF_THREAD  Thread
     )
 {
     __ThreadAlert(Thread);
@@ -101,11 +101,11 @@ KSTART_ROUTINE  ThreadFunction;
=20
 VOID
 ThreadFunction(
-    _In_ PVOID          Argument
+    _In_ PVOID      Argument
     )
 {
-    PXENVIF_THREAD      Self =3D Argument;
-    NTSTATUS            status;
+    PXENVIF_THREAD  Self =3D Argument;
+    NTSTATUS        status;
=20
     status =3D Self->Function(Self, Self->Context);
=20
@@ -131,8 +131,6 @@ ThreadCreate(
=20
     (*Thread) =3D __ThreadAllocate(sizeof (XENVIF_THREAD));
=20
-    Trace("Create thread %p %p\n", Function, Thread);
-
     status =3D STATUS_NO_MEMORY;
     if (*Thread =3D=3D NULL)
         goto fail1;
@@ -207,10 +205,10 @@ ThreadIsAlerted(
=20
 VOID
 ThreadJoin(
-    _Out_ PXENVIF_THREAD    Thread
+    _Inout_ PXENVIF_THREAD  Thread
     )
 {
-    LONG                    References;
+    LONG                References;
=20
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, PASSIVE_LEVEL);
     ASSERT3P(KeGetCurrentThread(), !=3D, Thread->Thread);
diff --git a/src/xenvif/thread=2Eh b/src/xenvif/thread=2Eh
index 6ee965a=2E=2Ef343ddc 100644
--- a/src/xenvif/thread=2Eh
+++ b/src/xenvif/thread=2Eh
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -59,17 +59,17 @@ ThreadIsAlerted(
=20
 extern VOID
 ThreadWake(
-    _Out_ PXENVIF_THREAD    Thread
+    _Inout_ PXENVIF_THREAD  Thread
     );
=20
 extern VOID
 ThreadAlert(
-    _Out_ PXENVIF_THREAD    Thread
+    _Inout_ PXENVIF_THREAD  Thread
     );
=20
 extern VOID
 ThreadJoin(
-    _Out_ PXENVIF_THREAD    Thread
+    _Inout_ PXENVIF_THREAD  Thread
     );
=20
 #endif  // _XENVIF_THREAD_H
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.dc.58ac4716d0fc7d47.1a162875d77.29dd95070ec522c7=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 07:33:42 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 07:33:42 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1457824.1670343 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJnJ0-00068S-8R; Thu, 22 Oct 2026 07:33:42 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1457824.1670343; Thu, 22 Oct 2026 07:33:42 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJnJ0-00068L-5M; Thu, 22 Oct 2026 07:33:42 +0000
Received: by outflank-mailman (input) for mailman id 1457824;
 Thu, 22 Oct 2026 07:33:41 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16287a0f2000f79f@swg.vates.tech>)
 id 1xJnIy-000683-PI
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 07:33:40 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJnIy-00AAsH-5w
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 09:33:40 +0200
Received: from [10.42.69.7] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16287a0f2000f79f@swg.vates.tech>)
 id 6ad9bc50-2eae-0a2a0a5409dd-0a2a450798a6-14
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 09:33:40 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-ef75cf.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16287a0f2000f79f@swg.vates.tech>)
 id 6ad9bc53-b4ea-0a2a45070019-b9ff1c1283d1-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 09:33:39 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a16287a0f2000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 07:33:38 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 76DD882BAA;
 Thu, 22 Oct 2026 09:33:37 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=sMFTAujNEziR+BbRO0tG79oHvqAgOlDFnizvCXo9lo8=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=d5W7dhmZaNECC09d3JlxEp9xdJqihgoDwhBW8gD6u33SaWYE3nPa4sHJoslxPaFjOvvaO+aP8
 qQdvBiYg2+o24OCP58gn5u7+cN81kcnLpiYV7TelwUklBmp716128TywHHL1zNfSJ+razEfRawq
 GfvCj50WY7DhHwHvJ07niptc324Miwpkt3Kyv+mvsEuoJu6f9yUd6xG80+TzCmLDYz3R3B4U3PT
 HVB+nT5RayzOjfTxsjCvHSoN/Izb+GJDDvGP0wUTkYOxGBeATuGhtLL14D9WdKazhbeDJc1JWJw
 HRuj6fYaXyRU7oY3DwwKKiO27v0Lkikag9YDSd2PUZ6g==
X-Zone-Loop: 19a3661bde98662791efc3eaf62314b65e2f6aebb0d2
x-campaign-type: default
x-transaction-id: dd2d5d71-94ba-419d-bd94-ff074dd82b84
x-swg-uid: 01-503a9210-819e-405a-b94f-d1ccf6e44ba7
X-Mailer: Sweego
Message-ID:
 <1792654418.8631fc262581453bbf619ec5b2062170.1a16287a0f2000f79f@vates.tech>
x-swg-bid: 1792654418.8631fc262581453bbf619ec5b2062170.1a16287a0f2000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 1/1] xenvkbd: Sync common helper files with xenbus
Date: Thu, 22 Oct 2026 09:33:31 +0200
In-Reply-To: <792654035.8631fc262581453bbf619ec5b2062170.1a16281c9f3000f79f@vates.tech>
References: <792654035.8631fc262581453bbf619ec5b2062170.1a16281c9f3000f79f@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.dd.247f275c6f82616a.1a162879ec2.72d0063b3a216f3d=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792654417602
X-purgate-ID: tlsNG-ef75cf/1792654420-374D3AE4-D2EA1A07/0/0
X-purgate-type: clean
X-purgate-size: 25536

---=Part.dd.247f275c6f82616a.1a162879ec2.72d0063b3a216f3d=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Take assert=2Eh, dbg_print=2Eh, mutex=2Eh, util=2Eh, registry=2Ec/h and
thread=2Ec/h from xenbus=2E This brings TryAcquireMutex, the TIME_* macros=
,
the Contiguous parameter of __AllocatePages, RegistryOpenParametersKey,
RegistryQueryQwordValue and the IoOpenDriverRegistryKey support of
RegistryInitialize, which now takes the driver object, along with the
updated annotations=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xenvkbd/assert=2Eh    |  8 ++--
 src/xenvkbd/dbg_print=2Eh | 63 ++++++++++++++++-----------
 src/xenvkbd/driver=2Ec    |  2 +-
 src/xenvkbd/mutex=2Eh     | 93 ++++++++++++++++++++++++++--------------
 src/xenvkbd/names=2Eh     | 24 +++++------
 src/xenvkbd/registry=2Ec  | 52 ++++++++++++++---------
 src/xenvkbd/registry=2Eh  | 94 +++++++++++++++++++++++------------------
 src/xenvkbd/thread=2Ec    |  6 +--
 src/xenvkbd/util=2Eh      | 23 +++++++---
 9 files changed, 226 insertions(+), 139 deletions(-)

diff --git a/src/xenvkbd/assert=2Eh b/src/xenvkbd/assert=2Eh
index c5fab23=2E=2E2106c0d 100644
--- a/src/xenvkbd/assert=2Eh
+++ b/src/xenvkbd/assert=2Eh
@@ -178,10 +178,10 @@ _IsZeroMemory(
=20
 static __inline BOOLEAN
 _IsZeroMemory(
-    _In_ PCSTR  Caller,
-    _In_ PCSTR  Name,
-    _In_ PVOID  Buffer,
-    _In_ ULONG  Length
+    _In_ PCSTR                      Caller,
+    _In_ PCSTR                      Name,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Length
     )
 {
     UNREFERENCED_PARAMETER(Caller);
diff --git a/src/xenvkbd/dbg_print=2Eh b/src/xenvkbd/dbg_print=2Eh
index 6ab4606=2E=2Ee38a6ab 100644
--- a/src/xenvkbd/dbg_print=2Eh
+++ b/src/xenvkbd/dbg_print=2Eh
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -89,7 +89,6 @@ __Warning(
         __Warning(__MODULE__ "|" __FUNCTION__ ": ", __VA_ARGS__)
=20
 #if DBG
-
 static __inline VOID
 __Trace(
     _In_ PCSTR      Prefix,
@@ -139,4 +138,20 @@ __Info(
 #define Info(=2E=2E=2E)  \
         __Info(__MODULE__ "|"  __FUNCTION__ ": ", __VA_ARGS__)
=20
+#define DBG_PRINT_ENABLE_FILTER(_Id, _Level)                       \
+        do {                                                        \
+            DbgSetDebugFilterState((_Id), (_Level), TRUE);          \
+        } while (FALSE)
+
+static __inline VOID
+__DbgPrintEnable(
+    VOID
+    )
+{
+    DBG_PRINT_ENABLE_FILTER(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL);
+    DBG_PRINT_ENABLE_FILTER(DPFLTR_IHVDRIVER_ID, DPFLTR_WARNING_LEVEL);
+    DBG_PRINT_ENABLE_FILTER(DPFLTR_IHVDRIVER_ID, DPFLTR_TRACE_LEVEL);
+    DBG_PRINT_ENABLE_FILTER(DPFLTR_IHVDRIVER_ID, DPFLTR_INFO_LEVEL);
+}
+
 #endif  // _XENVKBD_DBG_PRINT_H
diff --git a/src/xenvkbd/driver=2Ec b/src/xenvkbd/driver=2Ec
index c35f9c6=2E=2E0cab7a8 100644
--- a/src/xenvkbd/driver=2Ec
+++ b/src/xenvkbd/driver=2Ec
@@ -364,7 +364,7 @@ DriverEntry(
          MONTH,
          YEAR);
=20
-    status =3D RegistryInitialize(RegistryPath);
+    status =3D RegistryInitialize(DriverObject, RegistryPath);
     if (!NT_SUCCESS(status))
         goto fail1;
=20
diff --git a/src/xenvkbd/mutex=2Eh b/src/xenvkbd/mutex=2Eh
index 9e66475=2E=2E1bd9c8d 100644
--- a/src/xenvkbd/mutex=2Eh
+++ b/src/xenvkbd/mutex=2Eh
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -44,7 +44,7 @@ typedef struct _MUTEX {
=20
 static FORCEINLINE VOID
 InitializeMutex(
-    _In_ PMUTEX Mutex
+    _Out_ PMUTEX    Mutex
     )
 {
     RtlZeroMemory(Mutex, sizeof (MUTEX));
@@ -52,17 +52,48 @@ InitializeMutex(
     KeInitializeEvent(&Mutex->Event, SynchronizationEvent, TRUE);
 }
=20
+static FORCEINLINE BOOLEAN
+_IRQL_requires_max_(PASSIVE_LEVEL)
+TryAcquireMutex(
+    _Inout_ PMUTEX  Mutex
+    )
+{
+    LARGE_INTEGER   Timeout;
+    NTSTATUS        status;
+
+    Timeout=2EQuadPart =3D 0;
+
+    status =3D KeWaitForSingleObject(&Mutex->Event,
+                                   Executive,
+                                   KernelMode,
+                                   FALSE,
+                                   &Timeout);
+    if (status =3D=3D STATUS_TIMEOUT)
+        return FALSE;
+
+    ASSERT(NT_SUCCESS(status));
+
+    ASSERT3P(Mutex->Owner, =3D=3D, NULL);
+    Mutex->Owner =3D KeGetCurrentThread();
+
+    return TRUE;
+}
+
 static FORCEINLINE VOID
 _IRQL_requires_max_(PASSIVE_LEVEL)
 AcquireMutex(
-    _In_ PMUTEX Mutex
+    _Inout_ PMUTEX  Mutex
     )
 {
-    (VOID) KeWaitForSingleObject(&Mutex->Event,
-                                 Executive,
-                                 KernelMode,
-                                 FALSE,
-                                 NULL);
+    NTSTATUS        status;
+
+    status =3D KeWaitForSingleObject(&Mutex->Event,
+                                   Executive,
+                                   KernelMode,
+                                   FALSE,
+                                   NULL);
+
+    ASSERT(NT_SUCCESS(status));
=20
     ASSERT3P(Mutex->Owner, =3D=3D, NULL);
     Mutex->Owner =3D KeGetCurrentThread();
@@ -71,7 +102,7 @@ AcquireMutex(
 static FORCEINLINE VOID
 _IRQL_requires_max_(PASSIVE_LEVEL)
 ReleaseMutex(
-    _In_ PMUTEX Mutex
+    _Inout_ PMUTEX  Mutex
     )
 {
     ASSERT3P(Mutex->Owner, =3D=3D, KeGetCurrentThread());
diff --git a/src/xenvkbd/names=2Eh b/src/xenvkbd/names=2Eh
index c651210=2E=2E0de488e 100644
--- a/src/xenvkbd/names=2Eh
+++ b/src/xenvkbd/names=2Eh
@@ -36,7 +36,7 @@
 #include <ntddk=2Eh>
 #include <xen=2Eh>
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PowerTypeName(
     _In_ POWER_STATE_TYPE   Type
     )
@@ -56,7 +56,7 @@ PowerTypeName(
 #undef  _POWER_ACTION_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PowerSystemStateName(
     _In_ SYSTEM_POWER_STATE State
     )
@@ -82,7 +82,7 @@ PowerSystemStateName(
 #undef  _POWER_SYSTEM_STATE_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PowerDeviceStateName(
     _In_ DEVICE_POWER_STATE State
     )
@@ -106,7 +106,7 @@ PowerDeviceStateName(
 #undef  _POWER_DEVICE_STATE_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PowerActionName(
     _In_ POWER_ACTION   Type
     )
@@ -132,7 +132,7 @@ PowerActionName(
 #undef  _POWER_ACTION_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PowerMinorFunctionName(
     _In_ ULONG  MinorFunction
     )
@@ -155,7 +155,7 @@ PowerMinorFunctionName(
 #undef  _POWER_MINOR_FUNCTION_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PnpMinorFunctionName(
     _In_ ULONG  Function
     )
@@ -198,7 +198,7 @@ PnpMinorFunctionName(
 #undef  _PNP_MINOR_FUNCTION_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PartialResourceDescriptorTypeName(
     _In_ UCHAR  Type
     )
@@ -227,7 +227,7 @@ PartialResourceDescriptorTypeName(
 #undef  _PARTIAL_RESOURCE_DESCRIPTOR_TYPE_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 DeviceUsageTypeName(
     _In_ DEVICE_USAGE_NOTIFICATION_TYPE Type
     )
@@ -249,7 +249,7 @@ DeviceUsageTypeName(
 #undef  _DEVICE_USAGE_TYPE_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 InterfaceTypeName(
     _In_ INTERFACE_TYPE Type
     )
@@ -287,7 +287,7 @@ InterfaceTypeName(
 #undef  _INTERFACE_TYPE_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 DmaWidthName(
     _In_ DMA_WIDTH  Width
     )
@@ -311,7 +311,7 @@ DmaWidthName(
 #undef  _DMA_WIDTH_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 DmaSpeedName(
     _In_ DMA_SPEED  Speed
     )
@@ -336,7 +336,7 @@ DmaSpeedName(
 #undef  _DMA_SPEED_NAME
 }
=20
-static FORCEINLINE const PCHAR
+static FORCEINLINE PCSTR
 XenbusStateName(
     _In_ XenbusState    State
     )
diff --git a/src/xenvkbd/registry=2Ec b/src/xenvkbd/registry=2Ec
index 5cc6b99=2E=2Ed576990 100644
--- a/src/xenvkbd/registry=2Ec
+++ b/src/xenvkbd/registry=2Ec
@@ -62,11 +62,15 @@ __RegistryFree(
 }
=20
 NTSTATUS
+#pragma prefast(suppress:28101) // unannotated DriverEntry function
 RegistryInitialize(
+    _In_opt_ PDRIVER_OBJECT DriverObject,
     _In_ PUNICODE_STRING    Path
     )
 {
-    NTSTATUS                status;
+    UNICODE_STRING      Unicode;
+    PVOID               Func;
+    NTSTATUS            status;
=20
     ASSERT3P(RegistryPath=2EBuffer, =3D=3D, NULL);
=20
@@ -74,6 +78,16 @@ RegistryInitialize(
     if (!NT_SUCCESS(status))
         goto fail1;
=20
+    ASSERT3P(RegistryDriverObject, =3D=3D, NULL);
+    RegistryDriverObject =3D DriverObject;
+
+    ASSERT3P(__IoOpenDriverRegistryKey, =3D=3D, NULL);
+    RtlInitUnicodeString(&Unicode, L"IoOpenDriverRegistryKey");
+
+    Func =3D MmGetSystemRoutineAddress(&Unicode);
+    if (Func !=3D NULL)
+        __IoOpenDriverRegistryKey =3D (IOOPENDRIVERREGISTRYKEY)Func;
+
     return STATUS_SUCCESS;
=20
 fail1:
@@ -152,8 +166,8 @@ RegistryOpenKey(
     _Out_ PHANDLE           Key
     )
 {
-    OBJECT_ATTRIBUTES       Attributes;
-    NTSTATUS                status;
+    OBJECT_ATTRIBUTES   Attributes;
+    NTSTATUS            status;
=20
     InitializeObjectAttributes(&Attributes,
                                Path,
@@ -214,13 +228,13 @@ RegistryCreateKey(
     _Out_ PHANDLE           Key
     )
 {
-    PWCHAR                  Buffer;
-    HANDLE                  Root;
-    PWCHAR                  ChildPath;
-    PWCHAR                  ChildName;
-    PWCHAR                  Context;
-    HANDLE                  Child;
-    NTSTATUS                status;
+    PWSTR               Buffer;
+    HANDLE              Root;
+    PWSTR               ChildPath;
+    PWSTR               ChildName;
+    PWSTR               Context;
+    HANDLE              Child;
+    NTSTATUS            status;
=20
     //
     // UNICODE_STRINGs are not guaranteed to have NUL terminated
@@ -1155,17 +1169,17 @@ fail1:
=20
 NTSTATUS
 RegistryQueryBinaryValue(
-    _In_ HANDLE                     Key,
-    _In_ PSTR                       Name,
-    _Outptr_ PVOID                  *Buffer,
-    _Out_ PULONG                    Length
+    _In_ HANDLE                                 Key,
+    _In_ PSTR                                   Name,
+    _Outptr_result_bytebuffer_(*Length) PVOID   *Buffer,
+    _Out_ PULONG                                Length
     )
 {
-    ANSI_STRING                     Ansi;
-    UNICODE_STRING                  Unicode;
-    PKEY_VALUE_PARTIAL_INFORMATION  Partial;
-    ULONG                           Size;
-    NTSTATUS                        status;
+    ANSI_STRING                                 Ansi;
+    UNICODE_STRING                              Unicode;
+    PKEY_VALUE_PARTIAL_INFORMATION              Partial;
+    ULONG                                       Size;
+    NTSTATUS                                    status;
=20
     RtlInitAnsiString(&Ansi, Name);
=20
diff --git a/src/xenvkbd/registry=2Eh b/src/xenvkbd/registry=2Eh
index 4535747=2E=2E9591468 100644
--- a/src/xenvkbd/registry=2Eh
+++ b/src/xenvkbd/registry=2Eh
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -37,6 +37,7 @@
=20
 extern NTSTATUS
 RegistryInitialize(
+    _In_opt_ PDRIVER_OBJECT DrvObj,
     _In_ PUNICODE_STRING    Path
     );
=20
@@ -45,6 +46,12 @@ RegistryTeardown(
     VOID
     );
=20
+extern NTSTATUS
+RegistryOpenParametersKey(
+    _In_ ACCESS_MASK    DesiredAccess,
+    _Out_ PHANDLE       Key
+    );
+
 extern NTSTATUS
 RegistryOpenKey(
     _In_opt_ HANDLE         Parent,
@@ -104,8 +111,8 @@ RegistryCreateSubKey(
=20
 extern NTSTATUS
 RegistryDeleteSubKey(
-    _In_ HANDLE Key,
-    _In_ PSTR   Name
+    _In_ HANDLE     Key,
+    _In_ PSTR       Name
     );
=20
 extern NTSTATUS
@@ -124,24 +131,31 @@ RegistryEnumerateValues(
=20
 extern NTSTATUS
 RegistryDeleteValue(
-    _In_ HANDLE Key,
-    _In_ PSTR   Name
+    _In_ HANDLE     Key,
+    _In_ PSTR       Name
     );
=20
 extern NTSTATUS
 RegistryQueryDwordValue(
-    _In_ HANDLE     Key,
-    _In_ PSTR       Name,
-    _Out_ PULONG    Value
+    _In_ HANDLE         Key,
+    _In_ PSTR           Name,
+    _Out_ PULONG        Value
     );
-   =20
+
+extern NTSTATUS
+RegistryQueryQwordValue(
+    _In_ HANDLE         Key,
+    _In_ PSTR           Name,
+    _Out_ PULONGLONG    Value
+    );
+
 extern NTSTATUS
 RegistryUpdateDwordValue(
-    _In_ HANDLE Key,
-    _In_ PSTR   Name,
-    _In_ ULONG  Value
+    _In_ HANDLE         Key,
+    _In_ PSTR           Name,
+    _In_ ULONG          Value
     );
-   =20
+
 extern NTSTATUS
 RegistryQuerySzValue(
     _In_ HANDLE             Key,
@@ -152,10 +166,10 @@ RegistryQuerySzValue(
=20
 extern NTSTATUS
 RegistryQueryBinaryValue(
-    _In_ HANDLE     Key,
-    _In_ PSTR       Name,
-    _Outptr_ PVOID  *Buffer,
-    _Out_ PULONG    Length
+    _In_ HANDLE                                 Key,
+    _In_ PSTR                                   Name,
+    _Outptr_result_bytebuffer_(*Length) PVOID   *Buffer,
+    _Out_ PULONG                                Length
     );
=20
 extern NTSTATUS
@@ -185,7 +199,7 @@ RegistryFreeSzValue(
=20
 extern VOID
 RegistryFreeBinaryValue(
-    _In_ PVOID  Buffer
+    _In_ PVOID          Buffer
     );
=20
 extern NTSTATUS
diff --git a/src/xenvkbd/thread=2Ec b/src/xenvkbd/thread=2Ec
index 68178d4=2E=2E2f1427d 100644
--- a/src/xenvkbd/thread=2Ec
+++ b/src/xenvkbd/thread=2Ec
@@ -37,7 +37,7 @@
 #include "assert=2Eh"
 #include "util=2Eh"
=20
-#define THREAD_POOL 'ERHT'
+#define THREAD_TAG 'ERHT'
=20
 struct _XENVKBD_THREAD {
     XENVKBD_THREAD_FUNCTION Function;
@@ -53,7 +53,7 @@ __ThreadAllocate(
     _In_ ULONG  Length
     )
 {
-    return __AllocatePoolWithTag(NonPagedPool, Length, THREAD_POOL);
+    return __AllocatePoolWithTag(NonPagedPool, Length, THREAD_TAG);
 }
=20
 static FORCEINLINE VOID
@@ -61,7 +61,7 @@ __ThreadFree(
     _In_ PVOID  Buffer
     )
 {
-    __FreePoolWithTag(Buffer, THREAD_POOL);
+    __FreePoolWithTag(Buffer, THREAD_TAG);
 }
=20
 static FORCEINLINE VOID
diff --git a/src/xenvkbd/util=2Eh b/src/xenvkbd/util=2Eh
index 431f433=2E=2E2c94d63 100644
--- a/src/xenvkbd/util=2Eh
+++ b/src/xenvkbd/util=2Eh
@@ -41,6 +41,11 @@
 #define	P2ROUNDUP(_t, _x, _a)   \
         (-(-((_t)(_x)) & -(((_t)(_a)))))
=20
+#define TIME_US(_us)            ((_us) * 10ll)
+#define TIME_MS(_ms)            (TIME_US((_ms) * 1000ll))
+#define TIME_S(_s)              (TIME_MS((_s) * 1000ll))
+#define TIME_RELATIVE(_t)       (-(_t))
+
 static FORCEINLINE LONG
 __ffs(
     _In_ unsigned long long mask
@@ -89,7 +94,7 @@ __CpuId(
     _Out_opt_ PULONG    EDX
     )
 {
-    int                 Value[4] =3D {0};
+    int         Value[4] =3D {0};
=20
     __cpuid(Value, Leaf);
=20
@@ -181,13 +186,15 @@ __FreePoolWithTag(
=20
 static FORCEINLINE PMDL
 __AllocatePages(
-    _In_ ULONG          Count
+    _In_ ULONG          Count,
+    _In_ BOOLEAN        Contiguous
     )
 {
     PHYSICAL_ADDRESS    LowAddress;
     PHYSICAL_ADDRESS    HighAddress;
     LARGE_INTEGER       SkipBytes;
     SIZE_T              TotalBytes;
+    ULONG               Flags;
     PMDL                Mdl;
     PUCHAR              MdlMappedSystemVa;
     NTSTATUS            status;
@@ -197,12 +204,18 @@ __AllocatePages(
     SkipBytes=2EQuadPart =3D 0ull;
     TotalBytes =3D (SIZE_T)PAGE_SIZE * Count;
=20
+    if (Contiguous) {
+        Flags =3D MM_ALLOCATE_REQUIRE_CONTIGUOUS_CHUNKS;
+    } else {
+        Flags =3D MM_ALLOCATE_FULLY_REQUIRED;
+    }
+
     Mdl =3D MmAllocatePagesForMdlEx(LowAddress,
                                   HighAddress,
                                   SkipBytes,
                                   TotalBytes,
                                   MmCached,
-                                  MM_ALLOCATE_FULLY_REQUIRED);
+                                  Flags);
=20
     status =3D STATUS_NO_MEMORY;
     if (Mdl =3D=3D NULL)
@@ -246,14 +259,14 @@ fail1:
     return NULL;
 }
=20
-#define __AllocatePage()    __AllocatePages(1)
+#define __AllocatePage()    __AllocatePages(1, FALSE)
=20
 static FORCEINLINE VOID
 __FreePages(
     _In_ PMDL   Mdl
     )
 {
-    PUCHAR      MdlMappedSystemVa;
+    PUCHAR	MdlMappedSystemVa;
=20
     ASSERT(Mdl->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA);
     MdlMappedSystemVa =3D Mdl->MappedSystemVa;
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.dd.247f275c6f82616a.1a162879ec2.72d0063b3a216f3d=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 07:35:18 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 07:35:18 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1457828.1670346 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJnKY-0006D8-E3; Thu, 22 Oct 2026 07:35:18 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1457828.1670346; Thu, 22 Oct 2026 07:35:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJnKY-0006D1-BF; Thu, 22 Oct 2026 07:35:18 +0000
Received: by outflank-mailman (input) for mailman id 1457828;
 Thu, 22 Oct 2026 07:35:17 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a162891bbd000f79f@swg.vates.tech>)
 id 1xJnKX-0006Ck-DM
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 07:35:17 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJnKW-008K9D-QG
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 09:35:16 +0200
Received: from [10.42.69.3] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a162891bbd000f79f@swg.vates.tech>)
 id 6ad9bcb0-2eae-0a2a0a5409dd-0a2a4503d370-22
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 09:35:16 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-33051d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a162891bbd000f79f@swg.vates.tech>)
 id 6ad9bcb4-fae8-0a2a45030019-b9ff1c229749-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 09:35:16 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a162891bbd000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 07:35:15 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 9838D82AE2;
 Thu, 22 Oct 2026 09:35:14 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=dxXDNe4y+aKdmz8RthZ6e7GECIw4CsxP8qhxepfkdt4=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=q5CknFLmLRtv8c+slf3FI59bG6oSZ8G+TUWV+BhCloeEKCyzzAKZ9oCiG+hQpR35t+cG5T2wB
 nby8PAI2EQ5PcgB9p06rtUgjlto3FCmT6BfhXsoiia2L8wyBrBfUt8htxgRHdeGEJSPhWZmAT8U
 dKIZ4BJxOdPbQElEuBEZ+EW1286dwfnUob8IzYjycs8PmEfbYhN+utV04zFEM48dZYe8PxY71nM
 +g18jwLT0jsS9EVtTK+F+TAl2LqEEmFQcvdnGpZFMD3mIKlN2noWZUeE0V9xh3nwH0zIgEtyFTQ
 9dvt4avsMrvKyF1z0cV+M5GWyxY5uH9JLWnxAimsyfDw==
X-Zone-Loop: 62b90eff9368737a41486abd001eaedbd8e24194f6b4
x-campaign-type: default
x-transaction-id: 58cabdb4-423c-4809-af54-b3f0f8359939
x-swg-uid: 01-3b6fc682-0b85-4441-b870-e569ecb7dc1a
X-Mailer: Sweego
Message-ID:
 <1792654515.8631fc262581453bbf619ec5b2062170.1a162891bbd000f79f@vates.tech>
x-swg-bid: 1792654515.8631fc262581453bbf619ec5b2062170.1a162891bbd000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 3/3] xeniface: Don't remove a NULL watch on resume
Date: Thu, 22 Oct 2026 09:35:07 +0200
In-Reply-To: <792654035.8631fc262581453bbf619ec5b2062170.1a16281c9f3000f79f@vates.tech>
References: <792654035.8631fc262581453bbf619ec5b2062170.1a16281c9f3000f79f@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.e0.2c8c570666350a6a.1a162891a15.f788115adcd2405b=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792654514709
X-purgate-ID: tlsNG-33051d/1792654516-77AC44E9-0E3F02A5/0/0
X-purgate-type: clean
X-purgate-size: 1738

---=Part.e0.2c8c570666350a6a.1a162891a15.f788115adcd2405b=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

If StartWatch() fails, Watch->WatchHandle stays NULL=2E On the next
suspend/resume, SessionWatchThread() then passes NULL to
XENBUS_STORE(WatchRemove), which dereferences it in xenbus=2E

Only remove the watch if it was set up, as the other callers already
do, and still call StartWatch() so the watch is set up again=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xeniface/wmi=2Ec | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/xeniface/wmi=2Ec b/src/xeniface/wmi=2Ec
index f2b4802=2E=2E5ba7645 100644
--- a/src/xeniface/wmi=2Ec
+++ b/src/xeniface/wmi=2Ec
@@ -994,8 +994,10 @@ WatchCallbackThread(
                 Watch->SuspendCount =3D XENBUS_SUSPEND(GetCount, &Watch->=
Fdo->SuspendInterface);
                 Info("SessionSuspendResumeUnwatch %p\n", Watch->WatchHand=
le);
=20
-                XENBUS_STORE(WatchRemove, &Watch->Fdo->StoreInterface, Wa=
tch->WatchHandle);
-                Watch->WatchHandle =3D NULL;
+                if (Watch->WatchHandle !=3D NULL) {
+                    XENBUS_STORE(WatchRemove, &Watch->Fdo->StoreInterface=
, Watch->WatchHandle);
+                    Watch->WatchHandle =3D NULL;
+                }
                 StartWatch(Watch->Fdo, Watch);
             } else {
                 FireWatch(Watch);
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.e0.2c8c570666350a6a.1a162891a15.f788115adcd2405b=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 07:35:18 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 07:35:18 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1457829.1670352 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJnKY-0006DY-In; Thu, 22 Oct 2026 07:35:18 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1457829.1670352; Thu, 22 Oct 2026 07:35:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJnKY-0006DF-D5; Thu, 22 Oct 2026 07:35:18 +0000
Received: by outflank-mailman (input) for mailman id 1457829;
 Thu, 22 Oct 2026 07:35:17 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1628919cf000f79f@swg.vates.tech>)
 id 1xJnKX-0006Cj-CP
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 07:35:17 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJnKW-00ABeC-PP
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 09:35:16 +0200
Received: from [10.42.69.1] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1628919cf000f79f@swg.vates.tech>)
 id 6ad9bcb2-8faa-0a2a0a5109dd-0a2a450186c2-8
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 09:35:16 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1628919cf000f79f@swg.vates.tech>)
 id 6ad9bcb4-5984-0a2a45010019-b9ff1c1283b3-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 09:35:16 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1628919cf000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 07:35:14 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 1596481D36;
 Thu, 22 Oct 2026 09:35:14 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=pndx1oOQIG6DYuvsWtZzGU7+qPaNQ01kIU0Hp5MJGfg=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=T39F0tS6vYSt+DJXTUSw0rNHHNVacVJLPATLgAHuaGgb6dvtAlTMHPuNdbPQOvKcTbV6NSAiU
 hKLrTNz1u7pVF2PXAc+K+Qll9GAJwQN9Ize8eAmjFQlRfodDcf2GtIn5NC7s0qHeO1FHlPtJwST
 h/gOnBOFGTIihekHeNoQqfBwiXkghWBm2QYr5PHtAtoL1RxOM8Bj+i/q1PZ/aFSHJbJgVRhwb0D
 oabZ2n6tMMQ+NkC3oGWGn8NXqk1vXaPW2lcNs+fNrza7OHdrfb1g4L9YHZ0z4q2c8WEo0CqBRYC
 RixPM4zR+dpBc63HUJGck3TKyHNktudNIbxXWFuajZ+w==
X-Zone-Loop: 3a62076a8c48165fce3c8555cca7e4c3fb3506362812
x-campaign-type: default
x-transaction-id: 58953cb8-0270-4f29-90f1-a6451c4c4947
x-swg-uid: 01-33705e23-dd93-4ddb-a29e-4a795fea0236
X-Mailer: Sweego
Message-ID:
 <1792654514.8631fc262581453bbf619ec5b2062170.1a1628919cf000f79f@vates.tech>
x-swg-bid: 1792654514.8631fc262581453bbf619ec5b2062170.1a1628919cf000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 1/3] include: sync store_interface.h with xenbus
Date: Thu, 22 Oct 2026 09:35:05 +0200
In-Reply-To: <792654035.8631fc262581453bbf619ec5b2062170.1a16281c9f3000f79f@vates.tech>
References: <792654035.8631fc262581453bbf619ec5b2062170.1a16281c9f3000f79f@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.de.14d2fe72122e2e2a.1a162891809.a23676a1839307d3=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792654514186
X-purgate-ID: tlsNG-d62444/1792654516-BD341757-E1F884F2/0/0
X-purgate-type: clean
X-purgate-size: 7951

---=Part.de.14d2fe72122e2e2a.1a162891809.a23676a1839307d3=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 include/store_interface=2Eh | 80 +++++++++++++++++++--------------------
 1 file changed, 40 insertions(+), 40 deletions(-)

diff --git a/include/store_interface=2Eh b/include/store_interface=2Eh
index 83a76a1=2E=2E208be0e 100644
--- a/include/store_interface=2Eh
+++ b/include/store_interface=2Eh
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -72,7 +72,7 @@ typedef struct _XENBUS_STORE_PERMISSION {
     \brief Acquire a reference to the STORE interface
=20
     \param Interface The interface header
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_ACQUIRE)(
     _In_ PINTERFACE Interface
@@ -82,7 +82,7 @@ typedef NTSTATUS
     \brief Release a reference to the STORE interface
=20
     \param Interface The interface header
-*/ =20
+*/
 typedef VOID
 (*XENBUS_STORE_RELEASE)(
     _In_ PINTERFACE Interface
@@ -93,7 +93,7 @@ typedef VOID
=20
     \param Interface The interface header
     \param Buffer Pointer to the memory buffer
-*/ =20
+*/
 typedef VOID
 (*XENBUS_STORE_FREE)(
     _In_ PINTERFACE Interface,
@@ -113,14 +113,14 @@ typedef VOID
     buffer containing the value read
=20
     The \a Buffer should be freed using \a XENBUS_STORE_FREE
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_READ)(
     _In_ PINTERFACE                     Interface,
     _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
     _In_opt_ PSTR                       Prefix,
     _In_ PSTR                           Node,
-    _Outptr_ PCHAR                      *Buffer
+    _Outptr_result_z_ PSTR              *Buffer
     );
=20
 /*! \typedef XENBUS_STORE_PRINTF
@@ -136,7 +136,7 @@ typedef NTSTATUS
     \param =2E=2E=2E Additional parameters required by \a Format
=20
     If the \a Node does not exist then it is created
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_PRINTF)(
     _In_ PINTERFACE                     Interface,
@@ -156,7 +156,7 @@ typedef NTSTATUS
     \param Prefix An optional prefix for the \a Node
     \param Node The concatenation of the \a Prefix and this value specifi=
es
     the XenStore key to remove
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_REMOVE)(
     _In_ PINTERFACE                     Interface,
@@ -178,14 +178,14 @@ typedef NTSTATUS
     buffer containing a NUL separated list of key names
=20
     The \a Buffer should be freed using \a XENBUS_STORE_FREE
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_DIRECTORY)(
     _In_ PINTERFACE                     Interface,
     _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
     _In_opt_ PSTR                       Prefix,
     _In_ PSTR                           Node,
-    _Outptr_ PCHAR                      *Buffer
+    _Outptr_result_z_ PSTR              *Buffer
     );
=20
 /*! \typedef XENBUS_STORE_TRANSACTION_START
@@ -193,7 +193,7 @@ typedef NTSTATUS
=20
     \param Interface The interface header
     \param Transaction Pointer to a transaction handle to be initialized
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_TRANSACTION_START)(
     _In_ PINTERFACE                     Interface,
@@ -210,7 +210,7 @@ typedef NTSTATUS
=20
     If \a Commit is TRUE and the transaction to found to clash then
     STATUS_RETRY will be returned
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_TRANSACTION_END)(
     _In_ PINTERFACE                 Interface,
@@ -228,7 +228,7 @@ typedef NTSTATUS
     \param Event A pointer to an event object to be signalled when the
     watch fires
     \param Watch A pointer to a watch handle to be initialized
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_WATCH_ADD)(
     _In_ PINTERFACE                 Interface,
@@ -243,11 +243,11 @@ typedef NTSTATUS
=20
     \param Interface The interface header
     \param Watch The watch handle
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_WATCH_REMOVE)(
-    _In_ PINTERFACE                 Interface,
-    _In_opt_ PXENBUS_STORE_WATCH    Watch
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_STORE_WATCH    Watch
     );
=20
 /*! \typedef XENBUS_STORE_POLL
@@ -259,7 +259,7 @@ typedef NTSTATUS
     activity then this will block the normal STORE interface DPC so this
     method must be regularly invoked during the spin loop to check for
     XenStore activity
-*/ =20
+*/
 typedef VOID
 (*XENBUS_STORE_POLL)(
     _In_ PINTERFACE Interface
@@ -288,7 +288,7 @@ typedef NTSTATUS
     );
=20
 // {86824C3B-D34E-4753-B281-2F1E3AD214D7}
-DEFINE_GUID(GUID_XENBUS_STORE_INTERFACE,=20
+DEFINE_GUID(GUID_XENBUS_STORE_INTERFACE,
 0x86824c3b, 0xd34e, 0x4753, 0xb2, 0x81, 0x2f, 0x1e, 0x3a, 0xd2, 0x14, 0xd=
7);
=20
 /*! \struct _XENBUS_STORE_INTERFACE_V2
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.de.14d2fe72122e2e2a.1a162891809.a23676a1839307d3=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 07:35:18 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 07:35:18 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1457830.1670357 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJnKY-0006Dz-Lr; Thu, 22 Oct 2026 07:35:18 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1457830.1670357; Thu, 22 Oct 2026 07:35:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJnKY-0006DN-Ei; Thu, 22 Oct 2026 07:35:18 +0000
Received: by outflank-mailman (input) for mailman id 1457830;
 Thu, 22 Oct 2026 07:35:17 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a162891ae1000f79f@swg.vates.tech>)
 id 1xJnKX-0006Cl-F0
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 07:35:17 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJnKW-00ABeC-Ry
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 09:35:16 +0200
Received: from [10.42.69.1] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a162891ae1000f79f@swg.vates.tech>)
 id 6ad9bcb2-8faa-0a2a0a5109dd-0a2a450186c2-10
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 09:35:16 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a162891ae1000f79f@swg.vates.tech>)
 id 6ad9bcb4-5984-0a2a45010019-b9ff1c22b133-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 09:35:16 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a162891ae1000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 07:35:14 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 5B0C4823E5;
 Thu, 22 Oct 2026 09:35:14 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=6Z+LnOrNuidagBfcxaH1m39F4k9uzNmE5ePQjTadwjs=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=ZltGW3Aa9YPGIxYfOxbgWABMqeU8LCQbZKIDNzXJ9vnCQNx9qVI8IXDYc/0ikzOHQAyRqiOQx
 j1HMQMwTHC0QpPbcVXPyy6/nMMX0FWsDbaX2taUtbp9tZu4c50XKBAsb1Fb90IlNUBZkWQlFM6e
 y88lVrmBksV8jvc5mkAEEBuzv0Vn8NSJse1JE1Ep+iaKgLBwuXMpmKiQkq0VLwnwsdo6eKK99xC
 aOE8W3rnGy97ffdOY4JzqFEowaxgIEVUF5cP8kx2/eX1KXo4npEfFqLoQSHzPeTy1IB7nmvhOot
 IaVXCqa/+D48npeB+GCE4j4YRdJh4LaRhgJnB8Y4et8g==
X-Zone-Loop: 99da6ddad2223dac50c5756bd7564ef8c7235fdf83f5
x-campaign-type: default
x-transaction-id: a7fe1e8b-19c1-4e7b-b291-2d481e4e8237
x-swg-uid: 01-2c79b503-938a-4492-9f4f-67805632b262
X-Mailer: Sweego
Message-ID:
 <1792654514.8631fc262581453bbf619ec5b2062170.1a162891ae1000f79f@vates.tech>
x-swg-bid: 1792654514.8631fc262581453bbf619ec5b2062170.1a162891ae1000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 2/3] xeniface: Sync common helper files with xenbus
Date: Thu, 22 Oct 2026 09:35:06 +0200
In-Reply-To: <792654035.8631fc262581453bbf619ec5b2062170.1a16281c9f3000f79f@vates.tech>
References: <792654035.8631fc262581453bbf619ec5b2062170.1a16281c9f3000f79f@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.df.b7dad0de91cce830.1a162891922.763c7d5b02d2e25a=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792654514467
X-purgate-ID: tlsNG-d62444/1792654516-BFA6E757-5D401A66/0/0
X-purgate-type: clean
X-purgate-size: 19287

---=Part.df.b7dad0de91cce830.1a162891922.763c7d5b02d2e25a=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Take assert=2Eh, dbg_print=2Eh (as log=2Eh), mutex=2Eh, util=2Eh, registry=
=2Ec/h
and thread=2Ec/h from xenbus, keeping the XENIFACE_MUTEX type name and
RegistryGetPath()=2E This brings TryAcquireMutex, PCSTR log format
strings and the updated direction and buffer-size annotations=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xeniface/assert=2Eh   | 18 ++++-----
 src/xeniface/log=2Eh      | 82 ++++++++++++++++++++++++-----------------
 src/xeniface/mutex=2Eh    | 39 ++++++++++++++++++--
 src/xeniface/names=2Eh    | 18 ++++-----
 src/xeniface/registry=2Ec | 26 ++++++-------
 src/xeniface/registry=2Eh | 16 ++++----
 src/xeniface/thread=2Ec   | 20 +++++-----
 src/xeniface/thread=2Eh   |  6 +--
 src/xeniface/util=2Eh     | 36 +++++++++---------
 9 files changed, 153 insertions(+), 108 deletions(-)

diff --git a/src/xeniface/assert=2Eh b/src/xeniface/assert=2Eh
index dfac6e1=2E=2Ea5f2f2e 100644
--- a/src/xeniface/assert=2Eh
+++ b/src/xeniface/assert=2Eh
@@ -154,13 +154,13 @@ __Bug(
=20
 static __inline BOOLEAN
 _IsZeroMemory(
-    _In_ PCSTR          Caller,
-    _In_ PCSTR          Name,
-    _In_ PVOID          Buffer,
-    _In_ ULONG          Length
+    _In_ PCSTR                      Caller,
+    _In_ PCSTR                      Name,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Length
     )
 {
-    ULONG           Offset;
+    ULONG                           Offset;
=20
     Offset =3D 0;
     while (Offset < Length) {
@@ -178,10 +178,10 @@ _IsZeroMemory(
=20
 static __inline BOOLEAN
 _IsZeroMemory(
-    _In_ PCSTR          Caller,
-    _In_ PCSTR          Name,
-    _In_ PVOID          Buffer,
-    _In_ ULONG          Length
+    _In_ PCSTR                      Caller,
+    _In_ PCSTR                      Name,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Length
     )
 {
     UNREFERENCED_PARAMETER(Caller);
diff --git a/src/xeniface/log=2Eh b/src/xeniface/log=2Eh
index 523a4af=2E=2E21543ff 100644
--- a/src/xeniface/log=2Eh
+++ b/src/xeniface/log=2Eh
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -36,16 +36,16 @@
 #include <ntddk=2Eh>
 #include <stdarg=2Eh>
=20
-#pragma warning(disable:4127)   // conditional expression is constant
-
 #define stringify_literal(_text) #_text
 #define stringify(_text) stringify_literal(_text)
 #define __MODULE__ stringify(PROJECT)
=20
+#pragma warning(disable:4127)   // conditional expression is constant
+
 static __inline VOID
 __Error(
-    _In_ const CHAR *Prefix,
-    _In_ const CHAR *Format,
+    _In_ PCSTR      Prefix,
+    _In_ PCSTR      Format,
     =2E=2E=2E
     )
 {
@@ -67,8 +67,8 @@ __Error(
=20
 static __inline VOID
 __Warning(
-    _In_ const CHAR *Prefix,
-    _In_ const CHAR *Format,
+    _In_ PCSTR      Prefix,
+    _In_ PCSTR      Format,
     =2E=2E=2E
     )
 {
@@ -91,8 +91,8 @@ __Warning(
 #if DBG
 static __inline VOID
 __Trace(
-    _In_ const CHAR *Prefix,
-    _In_ const CHAR *Format,
+    _In_ PCSTR      Prefix,
+    _In_ PCSTR      Format,
     =2E=2E=2E
     )
 {
@@ -117,8 +117,8 @@ __Trace(
=20
 static __inline VOID
 __Info(
-    _In_ const CHAR *Prefix,
-    _In_ const CHAR *Format,
+    _In_ PCSTR      Prefix,
+    _In_ PCSTR      Format,
     =2E=2E=2E
     )
 {
@@ -138,4 +138,20 @@ __Info(
 #define Info(=2E=2E=2E)  \
         __Info(__MODULE__ "|"  __FUNCTION__ ": ", __VA_ARGS__)
=20
+#define DBG_PRINT_ENABLE_FILTER(_Id, _Level)                       \
+        do {                                                        \
+            DbgSetDebugFilterState((_Id), (_Level), TRUE);          \
+        } while (FALSE)
+
+static __inline VOID
+__DbgPrintEnable(
+    VOID
+    )
+{
+    DBG_PRINT_ENABLE_FILTER(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL);
+    DBG_PRINT_ENABLE_FILTER(DPFLTR_IHVDRIVER_ID, DPFLTR_WARNING_LEVEL);
+    DBG_PRINT_ENABLE_FILTER(DPFLTR_IHVDRIVER_ID, DPFLTR_TRACE_LEVEL);
+    DBG_PRINT_ENABLE_FILTER(DPFLTR_IHVDRIVER_ID, DPFLTR_INFO_LEVEL);
+}
+
 #endif  // _XENIFACE_LOG_H
diff --git a/src/xeniface/mutex=2Eh b/src/xeniface/mutex=2Eh
index 966206d=2E=2E5609582 100644
--- a/src/xeniface/mutex=2Eh
+++ b/src/xeniface/mutex=2Eh
@@ -44,7 +44,7 @@ typedef struct _XENIFACE_MUTEX {
=20
 static FORCEINLINE VOID
 InitializeMutex(
-    _In_ PXENIFACE_MUTEX    Mutex
+    _Out_ PXENIFACE_MUTEX   Mutex
     )
 {
     RtlZeroMemory(Mutex, sizeof (XENIFACE_MUTEX));
@@ -52,18 +52,49 @@ InitializeMutex(
     KeInitializeEvent(&Mutex->Event, SynchronizationEvent, TRUE);
 }
=20
+static FORCEINLINE BOOLEAN
+_IRQL_requires_max_(PASSIVE_LEVEL)
+TryAcquireMutex(
+    _Inout_ PXENIFACE_MUTEX Mutex
+    )
+{
+    LARGE_INTEGER           Timeout;
+    NTSTATUS                status;
+
+    Timeout=2EQuadPart =3D 0;
+
+    status =3D KeWaitForSingleObject(&Mutex->Event,
+                                   Executive,
+                                   KernelMode,
+                                   FALSE,
+                                   &Timeout);
+    if (status =3D=3D STATUS_TIMEOUT)
+        return FALSE;
+
+    ASSERT(NT_SUCCESS(status));
+
+    ASSERT3P(Mutex->Owner, =3D=3D, NULL);
+    Mutex->Owner =3D KeGetCurrentThread();
+
+    return TRUE;
+}
+
 static FORCEINLINE VOID
 _IRQL_requires_max_(PASSIVE_LEVEL)
 AcquireMutex(
-    _In_ PXENIFACE_MUTEX    Mutex
+    _Inout_ PXENIFACE_MUTEX Mutex
     )
 {
-    (VOID) KeWaitForSingleObject(&Mutex->Event,
+    NTSTATUS                status;
+
+    status =3D KeWaitForSingleObject(&Mutex->Event,
                                  Executive,
                                  KernelMode,
                                  FALSE,
                                  NULL);
=20
+    ASSERT(NT_SUCCESS(status));
+
     ASSERT3P(Mutex->Owner, =3D=3D, NULL);
     Mutex->Owner =3D KeGetCurrentThread();
 }
@@ -71,7 +102,7 @@ AcquireMutex(
 static FORCEINLINE VOID
 _IRQL_requires_max_(PASSIVE_LEVEL)
 ReleaseMutex(
-    _In_ PXENIFACE_MUTEX    Mutex
+    _Inout_ PXENIFACE_MUTEX Mutex
     )
 {
     ASSERT3P(Mutex->Owner, =3D=3D, KeGetCurrentThread());
diff --git a/src/xeniface/names=2Eh b/src/xeniface/names=2Eh
index 37d196d=2E=2E20e4695 100644
--- a/src/xeniface/names=2Eh
+++ b/src/xeniface/names=2Eh
@@ -37,7 +37,7 @@
=20
 #include "types=2Eh"
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PowerTypeName(
     _In_ POWER_STATE_TYPE   Type
     )
@@ -57,7 +57,7 @@ PowerTypeName(
 #undef  _POWER_ACTION_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PowerSystemStateName(
     _In_ SYSTEM_POWER_STATE State
     )
@@ -83,7 +83,7 @@ PowerSystemStateName(
 #undef  _POWER_SYSTEM_STATE_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PowerDeviceStateName(
     _In_ DEVICE_POWER_STATE State
     )
@@ -107,7 +107,7 @@ PowerDeviceStateName(
 #undef  _POWER_DEVICE_STATE_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PowerActionName(
     _In_ POWER_ACTION   Type
     )
@@ -133,7 +133,7 @@ PowerActionName(
 #undef  _POWER_ACTION_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PowerMinorFunctionName(
     _In_ ULONG  MinorFunction
     )
@@ -155,7 +155,7 @@ PowerMinorFunctionName(
 #undef  _POWER_MINOR_FUNCTION_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PnpDeviceStateName(
     _In_ DEVICE_PNP_STATE   State
     )
@@ -182,7 +182,7 @@ PnpDeviceStateName(
 #undef  _STATE_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PnpMinorFunctionName(
     _In_ ULONG  Function
     )
@@ -225,7 +225,7 @@ PnpMinorFunctionName(
 #undef  _PNP_MINOR_FUNCTION_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PartialResourceDescriptorTypeName(
     _In_ UCHAR  Type
     )
@@ -254,7 +254,7 @@ PartialResourceDescriptorTypeName(
 #undef  _PARTIAL_RESOURCE_DESCRIPTOR_TYPE_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 DeviceUsageTypeName(
     _In_ DEVICE_USAGE_NOTIFICATION_TYPE Type
     )
diff --git a/src/xeniface/registry=2Ec b/src/xeniface/registry=2Ec
index 9789db9=2E=2E8f631ff 100644
--- a/src/xeniface/registry=2Ec
+++ b/src/xeniface/registry=2Ec
@@ -1169,17 +1169,17 @@ fail1:
=20
 NTSTATUS
 RegistryQueryBinaryValue(
-    _In_ HANDLE                     Key,
-    _In_ PSTR                       Name,
-    _Outptr_ PVOID                  *Buffer,
-    _Out_ PULONG                    Length
+    _In_ HANDLE                                 Key,
+    _In_ PSTR                                   Name,
+    _Outptr_result_bytebuffer_(*Length) PVOID   *Buffer,
+    _Out_ PULONG                                Length
     )
 {
-    ANSI_STRING                     Ansi;
-    UNICODE_STRING                  Unicode;
-    PKEY_VALUE_PARTIAL_INFORMATION  Partial;
-    ULONG                           Size;
-    NTSTATUS                        status;
+    ANSI_STRING                                 Ansi;
+    UNICODE_STRING                              Unicode;
+    PKEY_VALUE_PARTIAL_INFORMATION              Partial;
+    ULONG                                       Size;
+    NTSTATUS                                    status;
=20
     RtlInitAnsiString(&Ansi, Name);
=20
@@ -1256,7 +1256,7 @@ NTSTATUS
 RegistryUpdateBinaryValue(
     _In_ HANDLE                     Key,
     _In_ PSTR                       Name,
-    _In_ PVOID                      Buffer,
+    _In_reads_bytes_(Length) PVOID  Buffer,
     _In_ ULONG                      Length
     )
 {
@@ -1444,7 +1444,7 @@ fail1:
=20
 static PKEY_VALUE_PARTIAL_INFORMATION
 RegistryAnsiToSz(
-    PANSI_STRING                    Ansi
+    _In_ PANSI_STRING               Ansi
     )
 {
     ULONG                           Length;
@@ -1490,7 +1490,7 @@ fail1:
=20
 static PKEY_VALUE_PARTIAL_INFORMATION
 RegistryAnsiToMultiSz(
-    PANSI_STRING                    Ansi
+    _In_ PANSI_STRING               Ansi
     )
 {
     ULONG                           Length;
@@ -1649,4 +1649,4 @@ RegistryGetPath(
     )
 {
     return &RegistryPath;
-}
\ No newline at end of file
+}
diff --git a/src/xeniface/registry=2Eh b/src/xeniface/registry=2Eh
index 867aefc=2E=2Ede16ac1 100644
--- a/src/xeniface/registry=2Eh
+++ b/src/xeniface/registry=2Eh
@@ -166,18 +166,18 @@ RegistryQuerySzValue(
=20
 extern NTSTATUS
 RegistryQueryBinaryValue(
-    _In_ HANDLE         Key,
-    _In_ PSTR           Name,
-    _Outptr_ PVOID      *Buffer,
-    _Out_ PULONG        Length
+    _In_ HANDLE                                 Key,
+    _In_ PSTR                                   Name,
+    _Outptr_result_bytebuffer_(*Length) PVOID   *Buffer,
+    _Out_ PULONG                                Length
     );
=20
 extern NTSTATUS
 RegistryUpdateBinaryValue(
-    _In_ HANDLE         Key,
-    _In_ PSTR           Name,
-    _In_ PVOID          Buffer,
-    _In_ ULONG          Length
+    _In_ HANDLE                     Key,
+    _In_ PSTR                       Name,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Length
     );
=20
 extern NTSTATUS
diff --git a/src/xeniface/thread=2Ec b/src/xeniface/thread=2Ec
index 6905d29=2E=2E0f144fe 100644
--- a/src/xeniface/thread=2Ec
+++ b/src/xeniface/thread=2Ec
@@ -33,11 +33,11 @@
 #include <ntddk=2Eh>
=20
 #include "thread=2Eh"
-#include "util=2Eh"
 #include "log=2Eh"
 #include "assert=2Eh"
+#include "util=2Eh"
=20
-#define THREAD_POOL 'ERHT'
+#define THREAD_TAG 'ERHT'
=20
 struct _XENIFACE_THREAD {
     XENIFACE_THREAD_FUNCTION  Function;
@@ -53,7 +53,7 @@ __ThreadAllocate(
     _In_ ULONG  Length
     )
 {
-    return __AllocatePoolWithTag(NonPagedPool, Length, THREAD_POOL);
+    return __AllocatePoolWithTag(NonPagedPool, Length, THREAD_TAG);
 }
=20
 static FORCEINLINE VOID
@@ -61,12 +61,12 @@ __ThreadFree(
     _In_ PVOID  Buffer
     )
 {
-    __FreePoolWithTag(Buffer, THREAD_POOL);
+    __FreePoolWithTag(Buffer, THREAD_TAG);
 }
=20
 static FORCEINLINE VOID
 __ThreadWake(
-    _In_ PXENIFACE_THREAD   Thread
+    _Inout_ PXENIFACE_THREAD Thread
     )
 {
     KeSetEvent(&Thread->Event, IO_NO_INCREMENT, FALSE);
@@ -74,7 +74,7 @@ __ThreadWake(
=20
 VOID
 ThreadWake(
-    _In_ PXENIFACE_THREAD   Thread
+    _Inout_ PXENIFACE_THREAD Thread
     )
 {
     __ThreadWake(Thread);
@@ -82,7 +82,7 @@ ThreadWake(
=20
 static FORCEINLINE VOID
 __ThreadAlert(
-    _In_ PXENIFACE_THREAD   Thread
+    _Inout_ PXENIFACE_THREAD Thread
     )
 {
     Thread->Alerted =3D TRUE;
@@ -91,7 +91,7 @@ __ThreadAlert(
=20
 VOID
 ThreadAlert(
-    _In_ PXENIFACE_THREAD   Thread
+    _Inout_ PXENIFACE_THREAD Thread
     )
 {
     __ThreadAlert(Thread);
@@ -131,8 +131,6 @@ ThreadCreate(
=20
     (*Thread) =3D __ThreadAllocate(sizeof (XENIFACE_THREAD));
=20
-    Trace("Create thread %p %p\n", Function, Thread);
-
     status =3D STATUS_NO_MEMORY;
     if (*Thread =3D=3D NULL)
         goto fail1;
@@ -207,7 +205,7 @@ ThreadIsAlerted(
=20
 VOID
 ThreadJoin(
-    _In_ PXENIFACE_THREAD   Thread
+    _Inout_ PXENIFACE_THREAD Thread
     )
 {
     LONG                    References;
diff --git a/src/xeniface/thread=2Eh b/src/xeniface/thread=2Eh
index 5047d9f=2E=2E02ac35e 100644
--- a/src/xeniface/thread=2Eh
+++ b/src/xeniface/thread=2Eh
@@ -59,17 +59,17 @@ ThreadIsAlerted(
=20
 extern VOID
 ThreadWake(
-    _In_ PXENIFACE_THREAD   Thread
+    _Inout_ PXENIFACE_THREAD Thread
     );
=20
 extern VOID
 ThreadAlert(
-    _In_ PXENIFACE_THREAD   Thread
+    _Inout_ PXENIFACE_THREAD Thread
     );
=20
 extern VOID
 ThreadJoin(
-    _In_ PXENIFACE_THREAD   Thread
+    _Inout_ PXENIFACE_THREAD Thread
     );
=20
 #endif  // _XENIFACE_THREAD_H
diff --git a/src/xeniface/util=2Eh b/src/xeniface/util=2Eh
index 9709a10=2E=2Edb40d4f 100644
--- a/src/xeniface/util=2Eh
+++ b/src/xeniface/util=2Eh
@@ -113,12 +113,12 @@ __CpuId(
=20
 static FORCEINLINE LONG
 __InterlockedAdd(
-    _In_ LONG   *Value,
-    _In_ LONG   Delta
+    _Inout_ LONG    *Value,
+    _In_ LONG       Delta
     )
 {
-    LONG        New;
-    LONG        Old;
+    LONG            New;
+    LONG            Old;
=20
     do {
         Old =3D *Value;
@@ -130,12 +130,12 @@ __InterlockedAdd(
=20
 static FORCEINLINE LONG
 __InterlockedSubtract(
-    _In_ LONG   *Value,
-    _In_ LONG   Delta
+    _Inout_ LONG    *Value,
+    _In_ LONG       Delta
     )
 {
-    LONG        New;
-    LONG        Old;
+    LONG            New;
+    LONG            Old;
=20
     do {
         Old =3D *Value;
@@ -281,15 +281,15 @@ __FreePages(
=20
 static FORCEINLINE PSTR
 __strtok_r(
-    _In_opt_ PSTR   Buffer,
-    _In_ PSTR       Delimiter,
+    _Inout_opt_ PSTR    Buffer,
+    _In_ PSTR           Delimiter,
     _When_(Buffer !=3D NULL, _Outptr_)
     _When_(Buffer =3D=3D NULL, _Inout_)
-    PSTR            *Context
+    PSTR                *Context
     )
 {
-    PSTR            Token;
-    PSTR            End;
+    PSTR                Token;
+    PSTR                End;
=20
     if (Buffer !=3D NULL)
         *Context =3D Buffer;
@@ -321,15 +321,15 @@ __strtok_r(
=20
 static FORCEINLINE PWSTR
 __wcstok_r(
-    _In_opt_ PWSTR  Buffer,
-    _In_ PWSTR      Delimiter,
+    _Inout_opt_ PWSTR   Buffer,
+    _In_ PWSTR          Delimiter,
     _When_(Buffer !=3D NULL, _Outptr_)
     _When_(Buffer =3D=3D NULL, _Inout_)
-    PWSTR           *Context
+    PWSTR               *Context
     )
 {
-    PWSTR           Token;
-    PWSTR           End;
+    PWSTR               Token;
+    PWSTR               End;
=20
     if (Buffer !=3D NULL)
         *Context =3D Buffer;
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.df.b7dad0de91cce830.1a162891922.763c7d5b02d2e25a=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 10:34:04 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 10:34:04 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1457923.1670413 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJq7Y-0001Xz-1w; Thu, 22 Oct 2026 10:34:04 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1457923.1670413; Thu, 22 Oct 2026 10:34:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJq7X-0001Xr-VS; Thu, 22 Oct 2026 10:34:03 +0000
Received: by outflank-mailman (input) for mailman id 1457923;
 Thu, 22 Oct 2026 10:34:02 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1632cc0b7000f79f@swg.vates.tech>)
 id 1xJq7W-0001Xl-Ef
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 10:34:02 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJq7V-008wWl-HG
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 12:34:01 +0200
Received: from [10.42.69.4] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1632cc0b7000f79f@swg.vates.tech>)
 id 6ad9e694-e002-0a2a0a5209dd-0a2a4504e1c4-10
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 12:34:01 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-ebf023.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1632cc0b7000f79f@swg.vates.tech>)
 id 6ad9e698-b57f-0a2a45040019-b9ff1c23b3f9-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 12:34:01 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1632cc0b7000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 10:33:59 +0000
Received: from [192.168.1.61] (142.220.66.37.rev.sfr.net [37.66.220.142])
 (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id CEA87823AA;
 Thu, 22 Oct 2026 12:33:58 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=FTLXmdC8TWsas4xT4PZLPO9IRQH2xb9XRLCSim5JXcg=;
 h=from:subject:date:message-id:to:mime-version:content-type:in-reply-to:references:feedback-id;
 b=tMJj4NP2AGWUVMC6zS+sjfjucrUvoAWnornYhateNq3gGfKmQMOC3Ci/CDYh/9Ez6Wwi7xOUl
 GjTnv1K26GrC/V2ujFd2CW8bnFT/XOhbS071Pe8/Q89xVXYbYYjq8GnEoqn8440ahI73fRqvPuT
 KFxNX9FhSUhpw0tkYFfVZmCo6Tbcx5ANV/y7Wp/8sEwG+aOcyX2B0a8Manyt8TgZVgI5YCveKnJ
 zuJNlW11nyqvevtEdApIEathQ4H2ifTytj/kcf98vVhCDC8mlKPAwMFzPCeXCrhDfvWQCy51xoH
 lc0Opc1AcOfVDMZP8stP8gTnjSZ9ecyIVqK81sSVZruQ==
X-Zone-Loop: 2ea8590c954f333db0383110c0429d800a6ce4010c06
x-campaign-type: default
x-transaction-id: fea02a22-db02-4bc3-95cc-4c562dd686e0
x-swg-uid: 01-cf16628b-de9f-4980-83ca-3fbd1452dc6d
X-Mailer: Sweego
Message-ID:
 <1792665239.8631fc262581453bbf619ec5b2062170.1a1632cc0b7000f79f@vates.tech>
x-swg-bid: 1792665239.8631fc262581453bbf619ec5b2062170.1a1632cc0b7000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
Date: Thu, 22 Oct 2026 12:33:58 +0200
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH SERIES] Sync common helper across all drivers
Content-Language: en-US
To: =?UTF-8?Q?C=C3=A9saire_Mounah?= <cesaire.mounah@vates.tech>,
 win-pv-devel@lists.xenproject.org
References: <1792654035.8631fc262581453bbf619ec5b2062170.1a16281c9f3000f79f@vates.tech>
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
In-Reply-To: <1792654035.8631fc262581453bbf619ec5b2062170.1a16281c9f3000f79f@vates.tech>
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.f7.41408270fc6106e1.1a1632cbd74.5ea4c71e85cbdd73=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792665238900
X-purgate-ID: tlsNG-ebf023/1792665241-520D5B50-13E08F21/0/0
X-purgate-type: clean
X-purgate-size: 864

---=Part.f7.41408270fc6106e1.1a1632cbd74.5ea4c71e85cbdd73=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

On 22/10/2026 09:28, C=C3=A9saire Mounah wrote:
> This patch series synchronizes the common helper files across all driver=
s,
> ensuring consistency and reducing code duplication=2E
>=20
> There are bug fixes in xencrsh and xeniface=2E
>=20
> xeniface patch set is meant to be applied after the fixes from static an=
alysis=2E
>=20
Hello, it's hard to know which patches apply to which drivers=2E Could you=
=20
add a patch prefix (can be done using --subject-prefix) or send them as=20
multiple separate series?


-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.f7.41408270fc6106e1.1a1632cbd74.5ea4c71e85cbdd73=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 11:21:04 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 11:21:04 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1457953.1670416 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJqr2-0008My-2r; Thu, 22 Oct 2026 11:21:04 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1457953.1670416; Thu, 22 Oct 2026 11:21:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJqr2-0008Mr-0L; Thu, 22 Oct 2026 11:21:04 +0000
Received: by outflank-mailman (input) for mailman id 1457953;
 Thu, 22 Oct 2026 11:21:02 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16357cdfd000f79f@swg.vates.tech>)
 id 1xJqr0-0008Ml-RE
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 11:21:02 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJqr0-00Be07-87
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 13:21:02 +0200
Received: from [10.42.69.1] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16357cdfd000f79f@swg.vates.tech>)
 id 6ad9f194-8faa-0a2a0a5109dd-0a2a4501e124-42
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 13:21:02 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16357cdfd000f79f@swg.vates.tech>)
 id 6ad9f19d-5984-0a2a45010019-b9ff1c2399fd-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 13:21:02 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a16357cdfd000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 11:21:01 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 10720829BC;
 Thu, 22 Oct 2026 13:21:00 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=pD00LHyIExCUc6ZkCk7f89ii/eEqZwsITTgMirnVk3g=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:feedback-id;
 b=YrrKzphr+R3SvoEb2sx73HzvkG7yUTR9IX0yZqv6TUaJAfLfmg2Cyq0Psn/QH4WHk9r9TEtP7
 cp+pm9mDzqcYuinCmhXw7hg38NQ8yqVvdllr4BQ2KC8G8awQpXIvtJ6uNrnYZZlNdBQ3dh+WoRa
 6oxtzbdO3XyMtVWwc67b6b1AZHUixFnFGAC3AOIFwgXmySfFT1Z7PKCBLNrJzHwQqyB07K05C9J
 tYMVEgMd07D9ZnT9PzqTw8B+Bn1XUqbsm1enBH9cOMMy6dwK5ltVht8hRwA4+P5rNlXeYHyrWg9
 fvIcpXRbWweIjGRyj6VAShgh6FOWFtSeXGldAJ7D4+8g==
X-Zone-Loop: 9827d787852c2fcd214f3fd2709713f03564d7391ae1
x-campaign-type: default
x-transaction-id: 0171c8fc-abee-4860-b04c-9f12289b31bc
x-swg-uid: 01-81155c3c-6d4b-4edb-87cf-01caf9996da9
X-Mailer: Sweego
Message-ID:
 <1792668061.8631fc262581453bbf619ec5b2062170.1a16357cdfd000f79f@vates.tech>
x-swg-bid: 1792668061.8631fc262581453bbf619ec5b2062170.1a16357cdfd000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [XENBUS-SYNC 0/2] Update annotations of common helpers
Date: Thu, 22 Oct 2026 13:20:55 +0200
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.f8.b1bea7c3cbe7990a.1a16357ca34.67fd9a75b609b14b=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792668060216
X-purgate-ID: tlsNG-d62444/1792668062-1DC79757-B8E522D7/0/0
X-purgate-type: clean
X-purgate-size: 1316

---=Part.f8.b1bea7c3cbe7990a.1a16357ca34.67fd9a75b609b14b=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Update the annotations of common helpers to reflect their actual direction
and size=2E
Ported from the work on updating the annotations of all drivers=2E

C=C3=A9saire Mounah (2):
  include: Annotate Local as _Out_opt_ in XENBUS_SHARED_INFO_GET_TIME
  Annotate common helpers with their actual direction and size

 include/shared_info_interface=2Eh |  2 +-
 src/common/assert=2Eh             | 18 ++++++++---------
 src/common/mutex=2Eh              | 10 ++++-----
 src/common/registry=2Ec           | 24 +++++++++++-----------
 src/common/registry=2Eh           | 16 +++++++--------
 src/common/util=2Eh               | 36 ++++++++++++++++-----------------
 src/xenbus/thread=2Ec             | 10 ++++-----
 src/xenbus/thread=2Eh             |  6 +++---
 src/xenfilt/thread=2Ec            | 10 ++++-----
 src/xenfilt/thread=2Eh            |  6 +++---
 10 files changed, 69 insertions(+), 69 deletions(-)

--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.f8.b1bea7c3cbe7990a.1a16357ca34.67fd9a75b609b14b=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 11:22:24 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 11:22:24 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1457958.1670421 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJqsK-0008Qa-7k; Thu, 22 Oct 2026 11:22:24 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1457958.1670421; Thu, 22 Oct 2026 11:22:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJqsK-0008QS-4p; Thu, 22 Oct 2026 11:22:24 +0000
Received: by outflank-mailman (input) for mailman id 1457958;
 Thu, 22 Oct 2026 11:22:22 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1635906c3000f79f@swg.vates.tech>)
 id 1xJqsI-0008QH-Qt
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 11:22:22 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJqsI-006fKb-7c
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 13:22:22 +0200
Received: from [10.42.69.3] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1635906c3000f79f@swg.vates.tech>)
 id 6ad9f1eb-8faa-0a2a0a5109dd-0a2a4503a134-4
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 13:22:22 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-33051d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1635906c3000f79f@swg.vates.tech>)
 id 6ad9f1ed-fae8-0a2a45030019-b9ff1c238ec9-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 13:22:22 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1635906c3000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 11:22:21 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 52CC6829DC;
 Thu, 22 Oct 2026 13:22:20 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=S0uEb/AkuOwhbri4cXl71XDQM6ZLWCsqlABPg/Kle8U=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=gIXbuCROfEXhHeVkeyLW5uVVWPNOKM2s+jaZfTy8evTFVqDArqu7Ryq4Ka/fUfudXtxyRvJ5o
 8NswKdOf9OCVz4Df1yF5ohx0hDfTW4VZ2JNejGsYZj5TDKgdn6s5+E+WnuUrgQylC1o4ItOoAVf
 KONAoHcGrc1hoHrClrrcVWXNAsyy6ZZH06YnjkV6V2TFeJFG44OkabMOMOQIBcyoT2qatuBKMTl
 /Pf9gzV+2Uy6RMlw/NtuUU73NXCaq4tkuWVchJQJwIZduiqCTHvEAcf/QN8rWwk0szUW3qS4yPG
 L5Imx8+bwNSiKBUwtTjBubbKbyy9jaEbqYjtxzriZ+7A==
X-Zone-Loop: 73a862e52ef5075b1e2de2fb9a569fbe9152ddac5d1f
x-campaign-type: default
x-transaction-id: d9f083ee-9885-4850-8dbc-9327364ca894
x-swg-uid: 01-a4cd0e66-f8d6-4793-b033-fe865436dc52
X-Mailer: Sweego
Message-ID:
 <1792668141.8631fc262581453bbf619ec5b2062170.1a1635906c3000f79f@vates.tech>
x-swg-bid: 1792668141.8631fc262581453bbf619ec5b2062170.1a1635906c3000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [XENBUS-SYNC 1/2] include: Annotate Local as _Out_opt_ in XENBUS_SHARED_INFO_GET_TIME
Date: Thu, 22 Oct 2026 13:22:16 +0200
In-Reply-To: <1792668061.8631fc262581453bbf619ec5b2062170.1a16357cdfd000f79f@vates.tech>
References: <1792668061.8631fc262581453bbf619ec5b2062170.1a16357cdfd000f79f@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.f9.d601e5ba21e1ddd5.1a16359038c.b9cf01ec161f5c8b=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792668140428
X-purgate-ID: tlsNG-33051d/1792668142-772F54E9-30E6EAEE/0/0
X-purgate-type: clean
X-purgate-size: 1334

---=Part.f9.d601e5ba21e1ddd5.1a16359038c.b9cf01ec161f5c8b=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

SharedInfoGetTime() tests Local for NULL before writing it, and callers
pass NULL (SharedInfoGetTimeVersion2() in xenbus, wmi=2Ec in xeniface)=2E
Annotate the parameter as _Out_opt_, as the implementation already does,
and sync the header with the copy in xeniface=2E
No functional change=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 include/shared_info_interface=2Eh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/shared_info_interface=2Eh b/include/shared_info_inter=
face=2Eh
index 5fdedfd=2E=2Eeb9adcb 100644
--- a/include/shared_info_interface=2Eh
+++ b/include/shared_info_interface=2Eh
@@ -139,7 +139,7 @@ typedef VOID
 (*XENBUS_SHARED_INFO_GET_TIME)(
     _In_ PINTERFACE         Interface,
     _Out_ PLARGE_INTEGER    Time,
-    _Out_ PBOOLEAN          Local
+    _Out_opt_ PBOOLEAN      Local
     );
=20
 // {7E73C34F-1640-4649-A8F3-263BC930A004}
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.f9.d601e5ba21e1ddd5.1a16359038c.b9cf01ec161f5c8b=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 11:22:24 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 11:22:24 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1457959.1670425 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJqsK-0008Qv-BN; Thu, 22 Oct 2026 11:22:24 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1457959.1670425; Thu, 22 Oct 2026 11:22:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJqsK-0008Qg-61; Thu, 22 Oct 2026 11:22:24 +0000
Received: by outflank-mailman (input) for mailman id 1457959;
 Thu, 22 Oct 2026 11:22:22 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1635907ae000f79f@swg.vates.tech>)
 id 1xJqsI-0008QG-Ps
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 11:22:22 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJqsI-002VaJ-6n
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 13:22:22 +0200
Received: from [10.42.69.11] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1635907ae000f79f@swg.vates.tech>)
 id 6ad9f1e8-2eae-0a2a0a5409dd-0a2a450ba2d0-20
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 13:22:22 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-42698a.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1635907ae000f79f@swg.vates.tech>)
 id 6ad9f1ed-b7e8-0a2a450b0019-b9ff1c1288eb-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 13:22:22 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1635907ae000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 11:22:21 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id ED31C82A55;
 Thu, 22 Oct 2026 13:22:20 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=3sJWBato9gMRAdCpU54gEUY0oXkT9Xl4gew0y4bclyY=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=jYArhtJuUNbl6mtakoBK87IqyOrfXJ/FnYuNKJ7fKARRHLdLma/UUy7KYmgF32cjR+hOSvSW/
 B61L3cAObazwgh/Tkgat0gGfOhu9DUagNHogKLbaKp+m72gIvCo5ZWgIrfNzrY1oEEaf8BEOrVO
 Yj/4aa2H/t701veiuGjLLGz3b1dZUfVzCdMHQe8BLPi84HkfMohpDHfNXr1pdWWpavtzu3+6pQg
 I21Cv+T2W7i0VkRy+rTD7ieBeSfv3kvB3ATHrzKFDCrRC/6PQkpiRyKRUkCoTHwx4sB1AzQ4cwf
 kkLpkLtgNKoOrkeX2BoWgMkSna6IG6h6U6a9266GFaKg==
X-Zone-Loop: 685a9a23a48d6756e56b9e4e05b84cd37e64e629ad14
x-campaign-type: default
x-transaction-id: 5518d2ae-8675-4e00-825c-7f63564784c2
x-swg-uid: 01-b92ad829-3433-4b03-8088-51022d3d0f7b
X-Mailer: Sweego
Message-ID:
 <1792668141.8631fc262581453bbf619ec5b2062170.1a1635907ae000f79f@vates.tech>
x-swg-bid: 1792668141.8631fc262581453bbf619ec5b2062170.1a1635907ae000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [XENBUS-SYNC 2/2] Annotate common helpers with their actual direction and size
Date: Thu, 22 Oct 2026 13:22:17 +0200
In-Reply-To: <1792668061.8631fc262581453bbf619ec5b2062170.1a16357cdfd000f79f@vates.tech>
References: <1792668061.8631fc262581453bbf619ec5b2062170.1a16357cdfd000f79f@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.fa.5f9fec505a258bfb.1a163590608.3bf78bd4ac337afa=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792668141064
X-purgate-ID: tlsNG-42698a/1792668142-AA6DA9EA-9E1DAA51/0/0
X-purgate-type: clean
X-purgate-size: 12098

---=Part.fa.5f9fec505a258bfb.1a163590608.3bf78bd4ac337afa=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Some parameters of the common helpers were annotated _In_ although the
function writes them (mutex, thread, interlocked and tokenizer helpers),
used const PSTR (a const pointer to mutable characters) for read-only
strings, or had no size on byte buffers=2E

Annotate them with their actual direction, use PCSTR for read-only
strings, and give the buffers of IsZeroMemory and the registry binary
value functions their size in bytes=2E Apply the same change to the
xenfilt copy of thread=2Ec/h=2E
No functional change=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/common/assert=2Eh   | 18 +++++++++---------
 src/common/mutex=2Eh    | 10 +++++-----
 src/common/registry=2Ec | 24 ++++++++++++------------
 src/common/registry=2Eh | 16 ++++++++--------
 src/common/util=2Eh     | 36 ++++++++++++++++++------------------
 src/xenbus/thread=2Ec   | 10 +++++-----
 src/xenbus/thread=2Eh   |  6 +++---
 src/xenfilt/thread=2Ec  | 10 +++++-----
 src/xenfilt/thread=2Eh  |  6 +++---
 9 files changed, 68 insertions(+), 68 deletions(-)

diff --git a/src/common/assert=2Eh b/src/common/assert=2Eh
index 90a839f=2E=2E7e88216 100644
--- a/src/common/assert=2Eh
+++ b/src/common/assert=2Eh
@@ -154,13 +154,13 @@ __Bug(
=20
 static __inline BOOLEAN
 _IsZeroMemory(
-    _In_ const PSTR     Caller,
-    _In_ const PSTR     Name,
-    _In_ PVOID          Buffer,
-    _In_ ULONG          Length
+    _In_ PCSTR                      Caller,
+    _In_ PCSTR                      Name,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Length
     )
 {
-    ULONG           Offset;
+    ULONG                           Offset;
=20
     Offset =3D 0;
     while (Offset < Length) {
@@ -178,10 +178,10 @@ _IsZeroMemory(
=20
 static __inline BOOLEAN
 _IsZeroMemory(
-    _In_ const PSTR     Caller,
-    _In_ const PSTR     Name,
-    _In_ PVOID          Buffer,
-    _In_ ULONG          Length
+    _In_ PCSTR                      Caller,
+    _In_ PCSTR                      Name,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Length
     )
 {
     UNREFERENCED_PARAMETER(Caller);
diff --git a/src/common/mutex=2Eh b/src/common/mutex=2Eh
index bdacddb=2E=2Ed311a91 100644
--- a/src/common/mutex=2Eh
+++ b/src/common/mutex=2Eh
@@ -44,7 +44,7 @@ typedef struct _MUTEX {
=20
 static FORCEINLINE VOID
 InitializeMutex(
-    _In_ PMUTEX Mutex
+    _Out_ PMUTEX    Mutex
     )
 {
     RtlZeroMemory(Mutex, sizeof (MUTEX));
@@ -55,7 +55,7 @@ InitializeMutex(
 static FORCEINLINE BOOLEAN
 _IRQL_requires_max_(PASSIVE_LEVEL)
 TryAcquireMutex(
-    _In_ PMUTEX     Mutex
+    _Inout_ PMUTEX  Mutex
     )
 {
     LARGE_INTEGER   Timeout;
@@ -82,10 +82,10 @@ TryAcquireMutex(
 static FORCEINLINE VOID
 _IRQL_requires_max_(PASSIVE_LEVEL)
 AcquireMutex(
-    _In_ PMUTEX Mutex
+    _Inout_ PMUTEX  Mutex
     )
 {
-    NTSTATUS    status;
+    NTSTATUS        status;
=20
     status =3D KeWaitForSingleObject(&Mutex->Event,
                                    Executive,
@@ -102,7 +102,7 @@ AcquireMutex(
 static FORCEINLINE VOID
 _IRQL_requires_max_(PASSIVE_LEVEL)
 ReleaseMutex(
-    _In_ PMUTEX Mutex
+    _Inout_ PMUTEX  Mutex
     )
 {
     ASSERT3P(Mutex->Owner, =3D=3D, KeGetCurrentThread());
diff --git a/src/common/registry=2Ec b/src/common/registry=2Ec
index 4f7c5ef=2E=2Ed576990 100644
--- a/src/common/registry=2Ec
+++ b/src/common/registry=2Ec
@@ -1169,17 +1169,17 @@ fail1:
=20
 NTSTATUS
 RegistryQueryBinaryValue(
-    _In_ HANDLE                     Key,
-    _In_ PSTR                       Name,
-    _Outptr_ PVOID                  *Buffer,
-    _Out_ PULONG                    Length
+    _In_ HANDLE                                 Key,
+    _In_ PSTR                                   Name,
+    _Outptr_result_bytebuffer_(*Length) PVOID   *Buffer,
+    _Out_ PULONG                                Length
     )
 {
-    ANSI_STRING                     Ansi;
-    UNICODE_STRING                  Unicode;
-    PKEY_VALUE_PARTIAL_INFORMATION  Partial;
-    ULONG                           Size;
-    NTSTATUS                        status;
+    ANSI_STRING                                 Ansi;
+    UNICODE_STRING                              Unicode;
+    PKEY_VALUE_PARTIAL_INFORMATION              Partial;
+    ULONG                                       Size;
+    NTSTATUS                                    status;
=20
     RtlInitAnsiString(&Ansi, Name);
=20
@@ -1256,7 +1256,7 @@ NTSTATUS
 RegistryUpdateBinaryValue(
     _In_ HANDLE                     Key,
     _In_ PSTR                       Name,
-    _In_ PVOID                      Buffer,
+    _In_reads_bytes_(Length) PVOID  Buffer,
     _In_ ULONG                      Length
     )
 {
@@ -1444,7 +1444,7 @@ fail1:
=20
 static PKEY_VALUE_PARTIAL_INFORMATION
 RegistryAnsiToSz(
-    PANSI_STRING                    Ansi
+    _In_ PANSI_STRING               Ansi
     )
 {
     ULONG                           Length;
@@ -1490,7 +1490,7 @@ fail1:
=20
 static PKEY_VALUE_PARTIAL_INFORMATION
 RegistryAnsiToMultiSz(
-    PANSI_STRING                    Ansi
+    _In_ PANSI_STRING               Ansi
     )
 {
     ULONG                           Length;
diff --git a/src/common/registry=2Eh b/src/common/registry=2Eh
index 26bc0c6=2E=2Eba1eace 100644
--- a/src/common/registry=2Eh
+++ b/src/common/registry=2Eh
@@ -166,18 +166,18 @@ RegistryQuerySzValue(
=20
 extern NTSTATUS
 RegistryQueryBinaryValue(
-    _In_ HANDLE         Key,
-    _In_ PSTR           Name,
-    _Outptr_ PVOID      *Buffer,
-    _Out_ PULONG        Length
+    _In_ HANDLE                                 Key,
+    _In_ PSTR                                   Name,
+    _Outptr_result_bytebuffer_(*Length) PVOID   *Buffer,
+    _Out_ PULONG                                Length
     );
=20
 extern NTSTATUS
 RegistryUpdateBinaryValue(
-    _In_ HANDLE         Key,
-    _In_ PSTR           Name,
-    _In_ PVOID          Buffer,
-    _In_ ULONG          Length
+    _In_ HANDLE                     Key,
+    _In_ PSTR                       Name,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Length
     );
=20
 extern NTSTATUS
diff --git a/src/common/util=2Eh b/src/common/util=2Eh
index 9709a10=2E=2Edb40d4f 100644
--- a/src/common/util=2Eh
+++ b/src/common/util=2Eh
@@ -113,12 +113,12 @@ __CpuId(
=20
 static FORCEINLINE LONG
 __InterlockedAdd(
-    _In_ LONG   *Value,
-    _In_ LONG   Delta
+    _Inout_ LONG    *Value,
+    _In_ LONG       Delta
     )
 {
-    LONG        New;
-    LONG        Old;
+    LONG            New;
+    LONG            Old;
=20
     do {
         Old =3D *Value;
@@ -130,12 +130,12 @@ __InterlockedAdd(
=20
 static FORCEINLINE LONG
 __InterlockedSubtract(
-    _In_ LONG   *Value,
-    _In_ LONG   Delta
+    _Inout_ LONG    *Value,
+    _In_ LONG       Delta
     )
 {
-    LONG        New;
-    LONG        Old;
+    LONG            New;
+    LONG            Old;
=20
     do {
         Old =3D *Value;
@@ -281,15 +281,15 @@ __FreePages(
=20
 static FORCEINLINE PSTR
 __strtok_r(
-    _In_opt_ PSTR   Buffer,
-    _In_ PSTR       Delimiter,
+    _Inout_opt_ PSTR    Buffer,
+    _In_ PSTR           Delimiter,
     _When_(Buffer !=3D NULL, _Outptr_)
     _When_(Buffer =3D=3D NULL, _Inout_)
-    PSTR            *Context
+    PSTR                *Context
     )
 {
-    PSTR            Token;
-    PSTR            End;
+    PSTR                Token;
+    PSTR                End;
=20
     if (Buffer !=3D NULL)
         *Context =3D Buffer;
@@ -321,15 +321,15 @@ __strtok_r(
=20
 static FORCEINLINE PWSTR
 __wcstok_r(
-    _In_opt_ PWSTR  Buffer,
-    _In_ PWSTR      Delimiter,
+    _Inout_opt_ PWSTR   Buffer,
+    _In_ PWSTR          Delimiter,
     _When_(Buffer !=3D NULL, _Outptr_)
     _When_(Buffer =3D=3D NULL, _Inout_)
-    PWSTR           *Context
+    PWSTR               *Context
     )
 {
-    PWSTR           Token;
-    PWSTR           End;
+    PWSTR               Token;
+    PWSTR               End;
=20
     if (Buffer !=3D NULL)
         *Context =3D Buffer;
diff --git a/src/xenbus/thread=2Ec b/src/xenbus/thread=2Ec
index 2a3c190=2E=2Ea8cfce2 100644
--- a/src/xenbus/thread=2Ec
+++ b/src/xenbus/thread=2Ec
@@ -66,7 +66,7 @@ __ThreadFree(
=20
 static FORCEINLINE VOID
 __ThreadWake(
-    _In_ PXENBUS_THREAD Thread
+    _Inout_ PXENBUS_THREAD  Thread
     )
 {
     KeSetEvent(&Thread->Event, IO_NO_INCREMENT, FALSE);
@@ -74,7 +74,7 @@ __ThreadWake(
=20
 VOID
 ThreadWake(
-    _In_ PXENBUS_THREAD Thread
+    _Inout_ PXENBUS_THREAD  Thread
     )
 {
     __ThreadWake(Thread);
@@ -82,7 +82,7 @@ ThreadWake(
=20
 static FORCEINLINE VOID
 __ThreadAlert(
-    _In_ PXENBUS_THREAD Thread
+    _Inout_ PXENBUS_THREAD  Thread
     )
 {
     Thread->Alerted =3D TRUE;
@@ -91,7 +91,7 @@ __ThreadAlert(
=20
 VOID
 ThreadAlert(
-    _In_ PXENBUS_THREAD Thread
+    _Inout_ PXENBUS_THREAD  Thread
     )
 {
     __ThreadAlert(Thread);
@@ -205,7 +205,7 @@ ThreadIsAlerted(
=20
 VOID
 ThreadJoin(
-    _In_ PXENBUS_THREAD Thread
+    _Inout_ PXENBUS_THREAD  Thread
     )
 {
     LONG                References;
diff --git a/src/xenbus/thread=2Eh b/src/xenbus/thread=2Eh
index 28d6f9d=2E=2E4597f14 100644
--- a/src/xenbus/thread=2Eh
+++ b/src/xenbus/thread=2Eh
@@ -59,17 +59,17 @@ ThreadIsAlerted(
=20
 extern VOID
 ThreadWake(
-    _In_ PXENBUS_THREAD Thread
+    _Inout_ PXENBUS_THREAD  Thread
     );
=20
 extern VOID
 ThreadAlert(
-    _In_ PXENBUS_THREAD Thread
+    _Inout_ PXENBUS_THREAD  Thread
     );
=20
 extern VOID
 ThreadJoin(
-    _In_ PXENBUS_THREAD Thread
+    _Inout_ PXENBUS_THREAD  Thread
     );
=20
 #endif  // _XENBUS_THREAD_H
diff --git a/src/xenfilt/thread=2Ec b/src/xenfilt/thread=2Ec
index 3f3b008=2E=2Ee26469b 100644
--- a/src/xenfilt/thread=2Ec
+++ b/src/xenfilt/thread=2Ec
@@ -66,7 +66,7 @@ __ThreadFree(
=20
 static FORCEINLINE VOID
 __ThreadWake(
-    _In_ PXENFILT_THREAD    Thread
+    _Inout_ PXENFILT_THREAD Thread
     )
 {
     KeSetEvent(&Thread->Event, IO_NO_INCREMENT, FALSE);
@@ -74,7 +74,7 @@ __ThreadWake(
=20
 VOID
 ThreadWake(
-    _In_ PXENFILT_THREAD    Thread
+    _Inout_ PXENFILT_THREAD Thread
     )
 {
     __ThreadWake(Thread);
@@ -82,7 +82,7 @@ ThreadWake(
=20
 static FORCEINLINE VOID
 __ThreadAlert(
-    _In_ PXENFILT_THREAD    Thread
+    _Inout_ PXENFILT_THREAD Thread
     )
 {
     Thread->Alerted =3D TRUE;
@@ -91,7 +91,7 @@ __ThreadAlert(
=20
 VOID
 ThreadAlert(
-    _In_ PXENFILT_THREAD    Thread
+    _Inout_ PXENFILT_THREAD Thread
     )
 {
     __ThreadAlert(Thread);
@@ -205,7 +205,7 @@ ThreadIsAlerted(
=20
 VOID
 ThreadJoin(
-    _In_ PXENFILT_THREAD    Thread
+    _Inout_ PXENFILT_THREAD Thread
     )
 {
     LONG                References;
diff --git a/src/xenfilt/thread=2Eh b/src/xenfilt/thread=2Eh
index 9cc35a0=2E=2E4d85ead 100644
--- a/src/xenfilt/thread=2Eh
+++ b/src/xenfilt/thread=2Eh
@@ -59,17 +59,17 @@ ThreadIsAlerted(
=20
 extern VOID
 ThreadWake(
-    _In_ PXENFILT_THREAD    Thread
+    _Inout_ PXENFILT_THREAD Thread
     );
=20
 extern VOID
 ThreadAlert(
-    _In_ PXENFILT_THREAD    Thread
+    _Inout_ PXENFILT_THREAD Thread
     );
=20
 extern VOID
 ThreadJoin(
-    _In_ PXENFILT_THREAD    Thread
+    _Inout_ PXENFILT_THREAD Thread
     );
=20
 #endif  // _XENFILT_THREAD_H
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.fa.5f9fec505a258bfb.1a163590608.3bf78bd4ac337afa=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 11:24:35 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 11:24:35 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1457963.1670428 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJquR-0000Ax-Fn; Thu, 22 Oct 2026 11:24:35 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1457963.1670428; Thu, 22 Oct 2026 11:24:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJquR-0000Aq-DD; Thu, 22 Oct 2026 11:24:35 +0000
Received: by outflank-mailman (input) for mailman id 1457963;
 Thu, 22 Oct 2026 11:24:33 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1635b003b000f79f@swg.vates.tech>)
 id 1xJquP-0000Aj-QF
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 11:24:33 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJquO-00DHud-WD
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 13:24:33 +0200
Received: from [10.42.69.6] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1635b003b000f79f@swg.vates.tech>)
 id 6ad9f270-8faa-0a2a0a5109dd-0a2a45069cae-0
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 13:24:32 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-16d1c6.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1635b003b000f79f@swg.vates.tech>)
 id 6ad9f270-195a-0a2a45060019-b9ff1c2286bd-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 13:24:32 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1635b003b000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 11:24:30 +0000
Received: from [192.168.1.61] (142.220.66.37.rev.sfr.net [37.66.220.142])
 (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id C844F815CB;
 Thu, 22 Oct 2026 13:24:29 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=7VpAPCeijfdixY9HbQ0KswjA0DWop9GSH64sPIXnicc=;
 h=from:subject:date:message-id:to:mime-version:content-type:in-reply-to:references:feedback-id;
 b=JuZXu9A9sPc74wLv9KbA48fuZkRSk+YP0TRNqWHAmyMQOKrRdQzLwkNA4hOyWGc7yr2DV3qau
 nk4mbvCmFWdRBtS5c/ePeSZ0yhi4KuAyqT1vWQHSN20hXi1ST45iclWdCdy1dN3NGgJfKugciRi
 YTuCq4ioQ2+egUVjbHMIxKatRM+5yvvf0gLgUVc6hwC2mnXWyD+4MSfUZPZpKWOCFGXvdUv2Cjy
 3rwtE/dpJ1CGIffbJOwVIKK1cEXNnx3K1t6mc7vABtDN+XGB1EOTonIoomrns8B0xtVN/c2wNVN
 nKL/gNq1cThqDUi3q7qle8ffVjaViVv1M91U54nsUlaw==
X-Zone-Loop: 4e25d5af52389ca59a163d3678a6e973c8c7d019fd9c
x-campaign-type: default
x-transaction-id: 2b7fd922-c938-48df-841a-842e0e148ec2
x-swg-uid: 01-ac700a3c-5cc8-4cbf-b2cd-cadbe6686ff4
X-Mailer: Sweego
Message-ID:
 <1792668270.8631fc262581453bbf619ec5b2062170.1a1635b003b000f79f@vates.tech>
x-swg-bid: 1792668270.8631fc262581453bbf619ec5b2062170.1a1635b003b000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
Date: Thu, 22 Oct 2026 13:24:29 +0200
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCHv2 5/5] xeniface: Bound NumberPermissions before checking
 the input length
Content-Language: en-US
To: =?UTF-8?Q?C=C3=A9saire_Mounah?= <cesaire.mounah@vates.tech>,
 win-pv-devel@lists.xenproject.org
References: <1792497190.8631fc262581453bbf619ec5b2062170.1a159288539000f79f@vates.tech>
 <1792595254.8631fc262581453bbf619ec5b2062170.1a15f00de8a000f79f@vates.tech>
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
In-Reply-To: <1792595254.8631fc262581453bbf619ec5b2062170.1a15f00de8a000f79f@vates.tech>
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.fb.5065e80b0725c9b5.1a1635afd31.680d2ce7259285b5=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792668269873
X-purgate-ID: tlsNG-16d1c6/1792668272-F7ECC77B-314BC263/0/0
X-purgate-type: clean
X-purgate-size: 3136

---=Part.fb.5065e80b0725c9b5.1a1635afd31.680d2ce7259285b5=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

On 21/10/2026 17:08, C=C3=A9saire Mounah wrote:
> IoctlStoreSetPermissions() compares InLen with
> FIELD_OFFSET(XENIFACE_STORE_SET_PERMISSIONS_IN, Permissions[N]), whose
> 64-bit result is truncated to ULONG=2E The count was only capped to 255
> later, in __ConvertPermissions(), so the length check alone could be
> satisfied by a huge count=2E
>=20
> Check the cap first, with the same STATUS_INVALID_PARAMETER as before=2E
> The check in __ConvertPermissions() is removed and fails are updated
> accordingly=2E
>=20
> Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
> ---
>   src/xeniface/ioctl_store=2Ec | 22 ++++++++++------------
>   1 file changed, 10 insertions(+), 12 deletions(-)
>=20
> diff --git a/src/xeniface/ioctl_store=2Ec b/src/xeniface/ioctl_store=2Ec
> index 97bef75=2E=2Ebbd46df 100644
> --- a/src/xeniface/ioctl_store=2Ec
> +++ b/src/xeniface/ioctl_store=2Ec
> @@ -417,6 +417,11 @@ IoctlStoreSetPermissions(
>           goto fail1;
>       }
>  =20
> +    status =3D STATUS_INVALID_PARAMETER;
> +    if (In->NumberPermissions > 255)
> +        goto fail2;
> +
> +    status =3D STATUS_INVALID_BUFFER_SIZE;
>       if (InLen !=3D (ULONG)FIELD_OFFSET(XENIFACE_STORE_SET_PERMISSIONS_=
IN, Permissions[In->NumberPermissions]))
>           goto fail2;
>  =20
> @@ -426,18 +431,14 @@ IoctlStoreSetPermissions(
>           goto fail3;
>       }
>  =20
> -    Permissions =3D __ConvertPermissions(In->NumberPermissions, In->Per=
missions);
> -    if (Permissions =3D=3D NULL)
> -        goto fail4;
> -

The call to __ConvertPermissions was removed, which doesn't look right=2E

>       status =3D __CaptureUserBuffer(In->Path, In->PathLength, &Path);
>       if (!NT_SUCCESS(status))
> -        goto fail5;
> +        goto fail4;
>  =20
>       Path[In->PathLength - 1] =3D 0;
>       status =3D STATUS_INVALID_PARAMETER;
>       if (!__IsValidPath(Path, In->PathLength))
> -        goto fail6;
> +        goto fail5;
>  =20
>       Trace("> Path '%s', NumberPermissions %lu\n", Path, In->NumberPerm=
issions);
>  =20
> @@ -457,25 +458,22 @@ IoctlStoreSetPermissions(
>                             In->NumberPermissions);
>  =20
>       if (!NT_SUCCESS(status))
> -        goto fail7;
> +        goto fail6;
>  =20
>       __FreePermissions(Permissions);
>       __FreeCapturedBuffer(Path);
>       return status;
>  =20
> -fail7:
> -    Error("Fail7\n");
> -
>   fail6:
>       Error("Fail6\n");
> -    __FreeCapturedBuffer(Path);
>  =20
>   fail5:
>       Error("Fail5\n");
> -    __FreePermissions(Permissions);
> +    __FreeCapturedBuffer(Path);
>  =20
>   fail4:
>       Error("Fail4\n");
> +    __FreePermissions(Permissions);
>  =20
>   fail3:
>       Error("Fail3\n");



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.fb.5065e80b0725c9b5.1a1635afd31.680d2ce7259285b5=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 11:35:39 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 11:35:39 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1457973.1670433 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJr58-0001Zj-98; Thu, 22 Oct 2026 11:35:38 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1457973.1670433; Thu, 22 Oct 2026 11:35:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJr58-0001Zc-5f; Thu, 22 Oct 2026 11:35:38 +0000
Received: by outflank-mailman (input) for mailman id 1457973;
 Thu, 22 Oct 2026 11:35:36 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1636516eb000f79f@swg.vates.tech>)
 id 1xJr56-0001ZT-Fn
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 11:35:36 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJr55-0098I7-St
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 13:35:35 +0200
Received: from [10.42.69.12] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1636516eb000f79f@swg.vates.tech>)
 id 6ad9f4fd-8faa-0a2a0a5109dd-0a2a450ca49c-46
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 13:35:35 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-d25034.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1636516eb000f79f@swg.vates.tech>)
 id 6ad9f507-f479-0a2a450c0019-b9ff1c238c35-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 13:35:35 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1636516eb000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 11:35:31 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 1346D82B7C;
 Thu, 22 Oct 2026 13:35:31 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=t+ex30ZA0HxAp9UmIn8fDvhqW4LaZyjejEKQWFhmdV0=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=pzRxEUOMaPdZThKZJ2uwZxOmGXJdr1a4W7KJNveG/V792mJ3MLK3fdcLiqhi7sXiTZ83AHBrI
 XqIjJNWrTOmmEdu9dWxoUkfUAq09FwL5+8Vvx39fqk5j9G7gqb/PgbAJ7p1+T/1DffpauKAl8Jp
 TrdK5R7G9+bmDU6vcSDHIM10D/7uL5RLqz8lnCY7kJ+D+mUW+0pyPvB9IscyJ8XPck6bAvYQRA8
 T3isTpm9TX1DvEq/fvA4rmamCCgCEuoMKWCHwZW3p0vRtfdrFRgdpUpa2DRlUhGxKxV7wiiFbLW
 PfCSReSqI+h4zMVQpgDW1o2zkojg/iqdrAsnyBlLo4Wg==
X-Zone-Loop: 7f71d53232e7f3110785b05a6a4d04bc337234d91e5c
x-campaign-type: default
x-transaction-id: 5672ba7a-deae-44df-a645-d346e1edd237
x-swg-uid: 01-3f84da44-983d-4d48-bdcd-b76e92731c12
X-Mailer: Sweego
Message-ID:
 <1792668931.8631fc262581453bbf619ec5b2062170.1a1636516eb000f79f@vates.tech>
x-swg-bid: 1792668931.8631fc262581453bbf619ec5b2062170.1a1636516eb000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCHv3 5/5] xeniface: Bound NumberPermissions before checking the input length
Date: Thu, 22 Oct 2026 13:35:27 +0200
In-Reply-To: <1792497190.8631fc262581453bbf619ec5b2062170.1a159288539000f79f@vates.tech>
References: <1792497190.8631fc262581453bbf619ec5b2062170.1a159288539000f79f@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.fd.7bd2b1866703235b.1a163651470.2ac308e4c00454dd=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792668931184
X-purgate-ID: tlsNG-d25034/1792668935-77ED2A5B-12A4DDF8/0/0
X-purgate-type: clean
X-purgate-size: 2831

---=Part.fd.7bd2b1866703235b.1a163651470.2ac308e4c00454dd=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

IoctlStoreSetPermissions() compares InLen with
FIELD_OFFSET(XENIFACE_STORE_SET_PERMISSIONS_IN, Permissions[N]), whose
64-bit result is truncated to ULONG=2E The count was only capped to 255
later, in __ConvertPermissions(), so the length check alone could be
satisfied by a huge count=2E

Check the cap first, with the same STATUS_INVALID_PARAMETER as before=2E
The check in __ConvertPermissions() is removed and fails are updated
accordingly=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xeniface/ioctl_store=2Ec | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/src/xeniface/ioctl_store=2Ec b/src/xeniface/ioctl_store=2Ec
index 97bef75=2E=2Eb28b44d 100644
--- a/src/xeniface/ioctl_store=2Ec
+++ b/src/xeniface/ioctl_store=2Ec
@@ -417,6 +417,11 @@ IoctlStoreSetPermissions(
         goto fail1;
     }
=20
+    status =3D STATUS_INVALID_PARAMETER;
+    if (In->NumberPermissions > 255)
+        goto fail2;
+
+    status =3D STATUS_INVALID_BUFFER_SIZE;
     if (InLen !=3D (ULONG)FIELD_OFFSET(XENIFACE_STORE_SET_PERMISSIONS_IN,=
 Permissions[In->NumberPermissions]))
         goto fail2;
=20
@@ -427,17 +432,15 @@ IoctlStoreSetPermissions(
     }
=20
     Permissions =3D __ConvertPermissions(In->NumberPermissions, In->Permi=
ssions);
-    if (Permissions =3D=3D NULL)
-        goto fail4;
=20
     status =3D __CaptureUserBuffer(In->Path, In->PathLength, &Path);
     if (!NT_SUCCESS(status))
-        goto fail5;
+        goto fail4;
=20
     Path[In->PathLength - 1] =3D 0;
     status =3D STATUS_INVALID_PARAMETER;
     if (!__IsValidPath(Path, In->PathLength))
-        goto fail6;
+        goto fail5;
=20
     Trace("> Path '%s', NumberPermissions %lu\n", Path, In->NumberPermiss=
ions);
=20
@@ -457,25 +460,22 @@ IoctlStoreSetPermissions(
                           In->NumberPermissions);
=20
     if (!NT_SUCCESS(status))
-        goto fail7;
+        goto fail6;
=20
     __FreePermissions(Permissions);
     __FreeCapturedBuffer(Path);
     return status;
=20
-fail7:
-    Error("Fail7\n");
-
 fail6:
     Error("Fail6\n");
-    __FreeCapturedBuffer(Path);
=20
 fail5:
     Error("Fail5\n");
-    __FreePermissions(Permissions);
+    __FreeCapturedBuffer(Path);
=20
 fail4:
     Error("Fail4\n");
+    __FreePermissions(Permissions);
=20
 fail3:
     Error("Fail3\n");
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.fd.7bd2b1866703235b.1a163651470.2ac308e4c00454dd=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 11:38:58 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 11:38:58 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1457977.1670436 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJr8M-0001rQ-H0; Thu, 22 Oct 2026 11:38:58 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1457977.1670436; Thu, 22 Oct 2026 11:38:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJr8M-0001rJ-ER; Thu, 22 Oct 2026 11:38:58 +0000
Received: by outflank-mailman (input) for mailman id 1457977;
 Thu, 22 Oct 2026 11:38:57 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1636833a4000f79f@swg.vates.tech>)
 id 1xJr8L-0001rC-9s
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 11:38:57 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJr8K-00B0Fs-Mk
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 13:38:56 +0200
Received: from [10.42.69.7] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1636833a4000f79f@swg.vates.tech>)
 id 6ad9f5c1-e002-0a2a0a5209dd-0a2a4507e698-18
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 13:38:56 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-ef75cf.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1636833a4000f79f@swg.vates.tech>)
 id 6ad9f5d0-b4ea-0a2a45070019-b9ff1c22a909-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 13:38:56 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1636833a4000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 11:38:55 +0000
Received: from [192.168.1.61] (142.220.66.37.rev.sfr.net [37.66.220.142])
 (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 1EEED81B76;
 Thu, 22 Oct 2026 13:38:55 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=anSMUxkP/akBfWh/vq2awdDk/7yj03gXeG38oPWAu5o=;
 h=from:subject:date:message-id:to:mime-version:content-type:in-reply-to:references:feedback-id;
 b=cFJ2bpeZ+ERoH7OlaJHjLi+wclWl+W8dZJBK7y+v4SKMjUp9pVxi/Ycdrx9t2MYsFEwYLt8i4
 vqIyHanU2K/XSzvDXVu5ZOha4KsML+I1Bt5q4MUrSamZ0GM9037R0k/ZU8tO1HZzbkbjUBsoweW
 FxinORw9Fl9Bap/Y4sKw/q1JOw0M5GjFPD8KaAooH3ZAK9BZflRaAmpx14hYFVQN+uy5UF3bcDX
 o5b6t5HesybeAeCmGGfl8OrlJ9pGZXJ56dDC9PxqXykP+5scJmZxEdRTsMWXHvJD0X9WKhDuN6w
 1EoCbPFZA1Arh/gC8/pMbRqFeT26CvIViM1mvd/eBpkg==
X-Zone-Loop: 7d7bd4d139fafbb4d56b34c6f27209fe4d5f34f2f4da
x-campaign-type: default
x-transaction-id: 875db075-6497-4eb8-96c6-4fce01379f66
x-swg-uid: 01-1795236f-02da-4874-9ca2-41686d33337d
X-Mailer: Sweego
Message-ID:
 <1792669135.8631fc262581453bbf619ec5b2062170.1a1636833a4000f79f@vates.tech>
x-swg-bid: 1792669135.8631fc262581453bbf619ec5b2062170.1a1636833a4000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
Date: Thu, 22 Oct 2026 13:38:54 +0200
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCHv3 5/5] xeniface: Bound NumberPermissions before checking
 the input length
Content-Language: en-US
To: =?UTF-8?Q?C=C3=A9saire_Mounah?= <cesaire.mounah@vates.tech>,
 win-pv-devel@lists.xenproject.org
References: <1792497190.8631fc262581453bbf619ec5b2062170.1a159288539000f79f@vates.tech>
 <1792668931.8631fc262581453bbf619ec5b2062170.1a1636516eb000f79f@vates.tech>
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
In-Reply-To: <1792668931.8631fc262581453bbf619ec5b2062170.1a1636516eb000f79f@vates.tech>
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.fe.dfb2e69c97100a20.1a163683150.7530f6e335ccd21=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792669135184
X-purgate-ID: tlsNG-ef75cf/1792669136-34AC8AE4-A499C70A/0/0
X-purgate-type: clean
X-purgate-size: 3094

---=Part.fe.dfb2e69c97100a20.1a163683150.7530f6e335ccd21=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

On 22/10/2026 13:36, C=C3=A9saire Mounah wrote:
> IoctlStoreSetPermissions() compares InLen with
> FIELD_OFFSET(XENIFACE_STORE_SET_PERMISSIONS_IN, Permissions[N]), whose
> 64-bit result is truncated to ULONG=2E The count was only capped to 255
> later, in __ConvertPermissions(), so the length check alone could be
> satisfied by a huge count=2E
>=20
> Check the cap first, with the same STATUS_INVALID_PARAMETER as before=2E
> The check in __ConvertPermissions() is removed and fails are updated
> accordingly=2E
>=20
> Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
> ---
>   src/xeniface/ioctl_store=2Ec | 20 ++++++++++----------
>   1 file changed, 10 insertions(+), 10 deletions(-)
>=20
> diff --git a/src/xeniface/ioctl_store=2Ec b/src/xeniface/ioctl_store=2Ec
> index 97bef75=2E=2Eb28b44d 100644
> --- a/src/xeniface/ioctl_store=2Ec
> +++ b/src/xeniface/ioctl_store=2Ec
> @@ -417,6 +417,11 @@ IoctlStoreSetPermissions(
>           goto fail1;
>       }
>  =20
> +    status =3D STATUS_INVALID_PARAMETER;
> +    if (In->NumberPermissions > 255)
> +        goto fail2;
> +

I think we should avoid reusing the fail2 error label=2E

> +    status =3D STATUS_INVALID_BUFFER_SIZE;
>       if (InLen !=3D (ULONG)FIELD_OFFSET(XENIFACE_STORE_SET_PERMISSIONS_=
IN, Permissions[In->NumberPermissions]))
>           goto fail2;
>  =20
> @@ -427,17 +432,15 @@ IoctlStoreSetPermissions(
>       }
>  =20
>       Permissions =3D __ConvertPermissions(In->NumberPermissions, In->Pe=
rmissions);
> -    if (Permissions =3D=3D NULL)
> -        goto fail4;
>  =20
>       status =3D __CaptureUserBuffer(In->Path, In->PathLength, &Path);
>       if (!NT_SUCCESS(status))
> -        goto fail5;
> +        goto fail4;
>  =20
>       Path[In->PathLength - 1] =3D 0;
>       status =3D STATUS_INVALID_PARAMETER;
>       if (!__IsValidPath(Path, In->PathLength))
> -        goto fail6;
> +        goto fail5;
>  =20
>       Trace("> Path '%s', NumberPermissions %lu\n", Path, In->NumberPerm=
issions);
>  =20
> @@ -457,25 +460,22 @@ IoctlStoreSetPermissions(
>                             In->NumberPermissions);
>  =20
>       if (!NT_SUCCESS(status))
> -        goto fail7;
> +        goto fail6;
>  =20
>       __FreePermissions(Permissions);
>       __FreeCapturedBuffer(Path);
>       return status;
>  =20
> -fail7:
> -    Error("Fail7\n");
> -
>   fail6:
>       Error("Fail6\n");
> -    __FreeCapturedBuffer(Path);
>  =20
>   fail5:
>       Error("Fail5\n");
> -    __FreePermissions(Permissions);
> +    __FreeCapturedBuffer(Path);
>  =20
>   fail4:
>       Error("Fail4\n");
> +    __FreePermissions(Permissions);
>  =20
>   fail3:
>       Error("Fail3\n");



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.fe.dfb2e69c97100a20.1a163683150.7530f6e335ccd21=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 11:42:26 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 11:42:26 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1457981.1670440 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJrBh-0002us-Pl; Thu, 22 Oct 2026 11:42:25 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1457981.1670440; Thu, 22 Oct 2026 11:42:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJrBh-0002ul-N4; Thu, 22 Oct 2026 11:42:25 +0000
Received: by outflank-mailman (input) for mailman id 1457981;
 Thu, 22 Oct 2026 11:42:24 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1636b536f000f79f@swg.vates.tech>)
 id 1xJrBg-0002uf-5a
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 11:42:24 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJrBf-00BhhP-Ax
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 13:42:23 +0200
Received: from [10.42.69.2] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1636b536f000f79f@swg.vates.tech>)
 id 6ad9f68c-2eae-0a2a0a5409dd-0a2a450286ba-44
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 13:42:23 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1636b536f000f79f@swg.vates.tech>)
 id 6ad9f69e-6ca4-0a2a45020019-b9ff1c228f9b-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 13:42:23 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1636b536f000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 11:42:20 +0000
Received: from [192.168.1.121] (88-185-151-209.subs.proxad.net
 [88.185.151.209]) (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id B6318804A0
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 13:42:19 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=MwiYO/0LDPATREwyMVjVWmaFOTn2MxVh9nBLlvBhm28=;
 h=from:subject:date:message-id:to:mime-version:content-type:in-reply-to:references:feedback-id;
 b=uGMHMdK66tbtfIOlDO8nMk7rHvDq9hHGAExo9fSN4Xw8/KqxUW1yFvPELZTDZULbfc5EtEv8h
 c0yjJIzjTcvzoo1ymRmjZT3ZSbXz8FRiLs+nLXvJo6gZkUYvl2gSGWB5W6wMEjt6lwfIQuwnGHV
 LAWIC+VQ1ClUQ4tdc8Z8LfoQds/PhbFYoJl2nimNfBZOwhq53/aFxp/OgVTe/WJWQoaqOvjLc3Z
 k2of/ynu+M4cq3qXZ/SGEQScypxM4sAOOoTJzuoTwDkhH2adpBLogfqAHyWmBCGduITX5UtRTEd
 dNxEVfhTc4P8svzX3JAZg53+sdT/N2Fxl94oj9qIWwsQ==
X-Zone-Loop: a1f8e6625f713dbfbd3ba50c31a45e58590d1a2be12e
x-campaign-type: default
x-transaction-id: 05663f4b-94dd-4853-bc7a-0e4a72e8d48f
x-swg-uid: 01-5b4ee98a-be0a-44fd-94d2-cca1f17e7d71
X-Mailer: Sweego
Message-ID:
 <1792669340.8631fc262581453bbf619ec5b2062170.1a1636b536f000f79f@vates.tech>
x-swg-bid: 1792669340.8631fc262581453bbf619ec5b2062170.1a1636b536f000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
Date: Thu, 22 Oct 2026 13:42:19 +0200
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCHv3 5/5] xeniface: Bound NumberPermissions before checking
 the input length
To: win-pv-devel@lists.xenproject.org
References: <1792497190.8631fc262581453bbf619ec5b2062170.1a159288539000f79f@vates.tech>
 <1792668931.8631fc262581453bbf619ec5b2062170.1a1636516eb000f79f@vates.tech>
 <1792669135.8631fc262581453bbf619ec5b2062170.1a1636833a4000f79f@vates.tech>
Content-Language: en-US
From: Mounah Honore Cesaire <cesaire.mounah@vates.tech>
In-Reply-To: <1792669135.8631fc262581453bbf619ec5b2062170.1a1636833a4000f79f@vates.tech>
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.ff.6309a15019444856.1a1636b509b.c1640f60ad18bbc3=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792669339808
X-purgate-ID: tlsNG-720697/1792669343-F10A02AC-3049953B/0/0
X-purgate-type: clean
X-purgate-size: 3312

---=Part.ff.6309a15019444856.1a1636b509b.c1640f60ad18bbc3=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable


On 10/22/26 1:39 PM, Tu Dinh wrote:
> On 22/10/2026 13:36, C=C3=A9saire Mounah wrote:
>> IoctlStoreSetPermissions() compares InLen with
>> FIELD_OFFSET(XENIFACE_STORE_SET_PERMISSIONS_IN, Permissions[N]), whose
>> 64-bit result is truncated to ULONG=2E The count was only capped to 255
>> later, in __ConvertPermissions(), so the length check alone could be
>> satisfied by a huge count=2E
>>
>> Check the cap first, with the same STATUS_INVALID_PARAMETER as before=
=2E
>> The check in __ConvertPermissions() is removed and fails are updated
>> accordingly=2E
>>
>> Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
>> ---
>>    src/xeniface/ioctl_store=2Ec | 20 ++++++++++----------
>>    1 file changed, 10 insertions(+), 10 deletions(-)
>>
>> diff --git a/src/xeniface/ioctl_store=2Ec b/src/xeniface/ioctl_store=2E=
c
>> index 97bef75=2E=2Eb28b44d 100644
>> --- a/src/xeniface/ioctl_store=2Ec
>> +++ b/src/xeniface/ioctl_store=2Ec
>> @@ -417,6 +417,11 @@ IoctlStoreSetPermissions(
>>            goto fail1;
>>        }
>>   =20
>> +    status =3D STATUS_INVALID_PARAMETER;
>> +    if (In->NumberPermissions > 255)
>> +        goto fail2;
>> +
> I think we should avoid reusing the fail2 error label=2E

Indeed=2E Let me fix this=2E

>
>> +    status =3D STATUS_INVALID_BUFFER_SIZE;
>>        if (InLen !=3D (ULONG)FIELD_OFFSET(XENIFACE_STORE_SET_PERMISSION=
S_IN, Permissions[In->NumberPermissions]))
>>            goto fail2;
>>   =20
>> @@ -427,17 +432,15 @@ IoctlStoreSetPermissions(
>>        }
>>   =20
>>        Permissions =3D __ConvertPermissions(In->NumberPermissions, In->=
Permissions);
>> -    if (Permissions =3D=3D NULL)
>> -        goto fail4;
>>   =20
>>        status =3D __CaptureUserBuffer(In->Path, In->PathLength, &Path);
>>        if (!NT_SUCCESS(status))
>> -        goto fail5;
>> +        goto fail4;
>>   =20
>>        Path[In->PathLength - 1] =3D 0;
>>        status =3D STATUS_INVALID_PARAMETER;
>>        if (!__IsValidPath(Path, In->PathLength))
>> -        goto fail6;
>> +        goto fail5;
>>   =20
>>        Trace("> Path '%s', NumberPermissions %lu\n", Path, In->NumberPe=
rmissions);
>>   =20
>> @@ -457,25 +460,22 @@ IoctlStoreSetPermissions(
>>                              In->NumberPermissions);
>>   =20
>>        if (!NT_SUCCESS(status))
>> -        goto fail7;
>> +        goto fail6;
>>   =20
>>        __FreePermissions(Permissions);
>>        __FreeCapturedBuffer(Path);
>>        return status;
>>   =20
>> -fail7:
>> -    Error("Fail7\n");
>> -
>>    fail6:
>>        Error("Fail6\n");
>> -    __FreeCapturedBuffer(Path);
>>   =20
>>    fail5:
>>        Error("Fail5\n");
>> -    __FreePermissions(Permissions);
>> +    __FreeCapturedBuffer(Path);
>>   =20
>>    fail4:
>>        Error("Fail4\n");
>> +    __FreePermissions(Permissions);
>>   =20
>>    fail3:
>>        Error("Fail3\n");
>
>


-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.ff.6309a15019444856.1a1636b509b.c1640f60ad18bbc3=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 11:43:00 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 11:43:00 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1457984.1670454 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJrCG-0003F5-7a; Thu, 22 Oct 2026 11:43:00 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1457984.1670454; Thu, 22 Oct 2026 11:43:00 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJrCG-0003Ey-4l; Thu, 22 Oct 2026 11:43:00 +0000
Received: by outflank-mailman (input) for mailman id 1457984;
 Thu, 22 Oct 2026 11:42:59 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1636bd571000f79f@swg.vates.tech>)
 id 1xJrCF-0003El-Kl
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 11:42:59 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJrCF-0099vZ-1V
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 13:42:59 +0200
Received: from [10.42.69.6] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1636bd571000f79f@swg.vates.tech>)
 id 6ad9f6c2-8faa-0a2a0a5109dd-0a2a4506be20-2
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 13:42:58 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-16d1c6.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1636bd571000f79f@swg.vates.tech>)
 id 6ad9f6c2-195a-0a2a45060019-b9ff1c23a70f-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 13:42:58 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1636bd571000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 11:42:53 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 3709881B76;
 Thu, 22 Oct 2026 13:42:53 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=Q6KTbJz6PLZjC3WQ8f8Jc/xJLikHXrs1tsNhwxQKdoU=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:feedback-id;
 b=j6S7CR0KtRDdUNnbAKkUHq0A3ffcaBXEuh4f1C1aH3qoyhxNRYRrrSIvqIcMvVSdIdG4n9Tp9
 KWnRUYEtECoSRqCPZNPEYOXUz8XyCd2qRgbD9m9/eHNkvIZZbSX+U3AefVuNXM2nGeF+yG5G0pZ
 rXGzTlgc26AhYOcbWQruHphk9fQxPMfAHdmQbWjaCtqxzdafEw2R9HJJPNV0XK3qnlreze8gAeG
 ueNtD++C5vcKa1wqpZo0mce8vwEBqk0Puw1zOXslkwxXavHsODSKxLyABLNE5CKRP3jrjEJSrlW
 WsFHRgpwhqBzKvSsIaD7Sb8bObXaqIqoU2Xf8byTjIjw==
X-Zone-Loop: af70053620acc430288207b411901cd1c1bf8cb2d57a
x-campaign-type: default
x-transaction-id: 116f8155-e30b-41a9-8f9d-68a63579ad34
x-swg-uid: 01-50b70e13-5f07-4462-ad9e-b8d33b50adee
X-Mailer: Sweego
Message-ID:
 <1792669373.8631fc262581453bbf619ec5b2062170.1a1636bd571000f79f@vates.tech>
x-swg-bid: 1792669373.8631fc262581453bbf619ec5b2062170.1a1636bd571000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [XENIFACE-SYNC 0/3] Sync common files with xenbus and bug fixes
Date: Thu, 22 Oct 2026 13:42:48 +0200
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.100.3d8aa9c8acf0c112.1a1636bd38a.7f2e48bc9a6faab7=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792669373323
X-purgate-ID: tlsNG-16d1c6/1792669378-FD20877B-8526A150/0/0
X-purgate-type: clean
X-purgate-size: 1367

---=Part.100.3d8aa9c8acf0c112.1a1636bd38a.7f2e48bc9a6faab7=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Sync common helper files with xenbus to ensure consistency and
correctness across the project, and correct a null-pointer dereference
identified after static analysis=2E


C=C3=A9saire Mounah (3):
  include: sync store_interface=2Eh with xenbus
  xeniface: Sync common helper files with xenbus
  xeniface: Don't remove a NULL watch on resume

 include/store_interface=2Eh | 80 +++++++++++++++++++-------------------
 src/xeniface/assert=2Eh     | 18 ++++-----
 src/xeniface/log=2Eh        | 82 +++++++++++++++++++++++----------------
 src/xeniface/mutex=2Eh      | 39 +++++++++++++++++--
 src/xeniface/names=2Eh      | 18 ++++-----
 src/xeniface/registry=2Ec   | 26 ++++++-------
 src/xeniface/registry=2Eh   | 16 ++++----
 src/xeniface/thread=2Ec     | 20 +++++-----
 src/xeniface/thread=2Eh     |  6 +--
 src/xeniface/util=2Eh       | 36 ++++++++---------
 src/xeniface/wmi=2Ec        |  6 ++-
 11 files changed, 197 insertions(+), 150 deletions(-)

--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.100.3d8aa9c8acf0c112.1a1636bd38a.7f2e48bc9a6faab7=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 11:44:10 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 11:44:10 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1457991.1670457 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJrDO-0003Xg-AG; Thu, 22 Oct 2026 11:44:10 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1457991.1670457; Thu, 22 Oct 2026 11:44:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJrDO-0003XZ-7X; Thu, 22 Oct 2026 11:44:10 +0000
Received: by outflank-mailman (input) for mailman id 1457991;
 Thu, 22 Oct 2026 11:44:09 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1636ce7aa000f79f@swg.vates.tech>)
 id 1xJrDN-0003XG-Ng
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 11:44:09 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJrDN-006lTk-4U
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 13:44:09 +0200
Received: from [10.42.69.4] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1636ce7aa000f79f@swg.vates.tech>)
 id 6ad9f6f5-e002-0a2a0a5209dd-0a2a4504b25e-48
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 13:44:09 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-ebf023.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1636ce7aa000f79f@swg.vates.tech>)
 id 6ad9f708-b57f-0a2a45040019-b9ff1c228999-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 13:44:08 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1636ce7aa000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 11:44:04 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 7B4D782A35;
 Thu, 22 Oct 2026 13:44:03 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=PWfBYuB4nYeNWh3YoyZdGOnsoCz+vfiE2gvJJjcy3+I=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=F7Rlx56jitAwmdCM/kV99dwPy1f08fTpE2hwkmY+Hia6SOqbaCIWsbZfP+pkVGCRl92WN5HAd
 fUlL8MDwmiqqSleuAmiIYm6l8+YJ9TE73pbjGYg+ySc5o5+fTQFaAVxGxfpyAZAu+szRM2ERNkC
 5kiR8ZlIx0TCTxveZpkJN1mxmVAA7Hg63lZDIX4VfS1tQE1ndVukFpfvWSsnh+JQOjiHJV3xH1O
 HdB51Acu8hLeSWDwcjW9fvD2vdzcPNlGxXTRT/+93IpplipstYCOGlidZ3yFRfH4/DMDkcYTfMw
 xHW0jYc/F7Alaggh23BA/ugB2w4dPDq6di24ABE3+zmQ==
X-Zone-Loop: ea2ee93f2c412ded5fcd66837628cfb6099ef76239b2
x-campaign-type: default
x-transaction-id: ca18825d-3334-4c1c-b933-9fddc51fdd5f
x-swg-uid: 01-15362f03-3da1-499e-8f60-96de798ab5cb
X-Mailer: Sweego
Message-ID:
 <1792669444.8631fc262581453bbf619ec5b2062170.1a1636ce7aa000f79f@vates.tech>
x-swg-bid: 1792669444.8631fc262581453bbf619ec5b2062170.1a1636ce7aa000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [XENIFACE-SYNC 3/3] xeniface: Don't remove a NULL watch on resume
Date: Thu, 22 Oct 2026 13:43:59 +0200
In-Reply-To: <1792669373.8631fc262581453bbf619ec5b2062170.1a1636bd571000f79f@vates.tech>
References: <1792669373.8631fc262581453bbf619ec5b2062170.1a1636bd571000f79f@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.103.d048be77c93ba109.1a1636ce60a.71974feeab909beb=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792669443594
X-purgate-ID: tlsNG-ebf023/1792669449-C2CCFB50-F3D9A0D9/0/0
X-purgate-type: clean
X-purgate-size: 1740

---=Part.103.d048be77c93ba109.1a1636ce60a.71974feeab909beb=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

If StartWatch() fails, Watch->WatchHandle stays NULL=2E On the next
suspend/resume, SessionWatchThread() then passes NULL to
XENBUS_STORE(WatchRemove), which dereferences it in xenbus=2E

Only remove the watch if it was set up, as the other callers already
do, and still call StartWatch() so the watch is set up again=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xeniface/wmi=2Ec | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/xeniface/wmi=2Ec b/src/xeniface/wmi=2Ec
index f2b4802=2E=2E5ba7645 100644
--- a/src/xeniface/wmi=2Ec
+++ b/src/xeniface/wmi=2Ec
@@ -994,8 +994,10 @@ WatchCallbackThread(
                 Watch->SuspendCount =3D XENBUS_SUSPEND(GetCount, &Watch->=
Fdo->SuspendInterface);
                 Info("SessionSuspendResumeUnwatch %p\n", Watch->WatchHand=
le);
=20
-                XENBUS_STORE(WatchRemove, &Watch->Fdo->StoreInterface, Wa=
tch->WatchHandle);
-                Watch->WatchHandle =3D NULL;
+                if (Watch->WatchHandle !=3D NULL) {
+                    XENBUS_STORE(WatchRemove, &Watch->Fdo->StoreInterface=
, Watch->WatchHandle);
+                    Watch->WatchHandle =3D NULL;
+                }
                 StartWatch(Watch->Fdo, Watch);
             } else {
                 FireWatch(Watch);
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.103.d048be77c93ba109.1a1636ce60a.71974feeab909beb=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 11:44:10 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 11:44:10 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1457992.1670461 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJrDO-0003Xx-D2; Thu, 22 Oct 2026 11:44:10 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1457992.1670461; Thu, 22 Oct 2026 11:44:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJrDO-0003Xl-8r; Thu, 22 Oct 2026 11:44:10 +0000
Received: by outflank-mailman (input) for mailman id 1457992;
 Thu, 22 Oct 2026 11:44:09 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1636ce5be000f79f@swg.vates.tech>)
 id 1xJrDN-0003XF-Nh
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 11:44:09 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJrDN-002ZpZ-4b
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 13:44:09 +0200
Received: from [10.42.69.7] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1636ce5be000f79f@swg.vates.tech>)
 id 6ad9f6fe-8faa-0a2a0a5109dd-0a2a4507b6a4-44
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 13:44:09 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-ef75cf.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1636ce5be000f79f@swg.vates.tech>)
 id 6ad9f708-b4ea-0a2a45070019-b9ff1c23aca1-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 13:44:08 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1636ce5be000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 11:44:03 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id A24CA81AD1;
 Thu, 22 Oct 2026 13:44:02 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=ZHcm2j4jmlFeXjsSoGFo9wyWzxMBQjDOqWfo53Ggicg=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=fLWe6Gvo78dT0UTpbNAjCyTXOiZDKCYWlE73bcwwsQQxp1M7zGI7qZtIb/99RitF4/520ehG0
 UFwbyAeq7OrBZdsFcKsssPV4w2V/KNR4tBaxOgZFHpdFiYBwGGJKThYTWLp27DkEQalQRrfuCyn
 Io0S7LofzIcQa92hXJtM/3UNkjG4QGKYBHkr5tnRhamBoTL84sjCZ6UFprKZQcHKMxAGnd4YUbQ
 vMTESV6Aqndu4AjyGefHNcp7FWqXA5EL5m25hexJMB4/S2oBS2WqdqZbQEGddc2Z1Ib0esNt6+X
 LCYxtEfj5sUu6VgJCPYxUeAYiMVzy2CbIXSDkitlgTjQ==
X-Zone-Loop: 9b7012359423f2dd46b5d7dfeb495e3ab5f43c0dd721
x-campaign-type: default
x-transaction-id: b12751c1-3e0d-4d83-8a96-6040a6425929
x-swg-uid: 01-8159bd29-1fc6-418a-a4d4-be92ea218100
X-Mailer: Sweego
Message-ID:
 <1792669443.8631fc262581453bbf619ec5b2062170.1a1636ce5be000f79f@vates.tech>
x-swg-bid: 1792669443.8631fc262581453bbf619ec5b2062170.1a1636ce5be000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [XENIFACE-SYNC 1/3] include: sync store_interface.h with xenbus
Date: Thu, 22 Oct 2026 13:43:57 +0200
In-Reply-To: <1792669373.8631fc262581453bbf619ec5b2062170.1a1636bd571000f79f@vates.tech>
References: <1792669373.8631fc262581453bbf619ec5b2062170.1a1636bd571000f79f@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.101.524daa11ba17fd68.1a1636ce2c2.facc62f9712a087a=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792669442754
X-purgate-ID: tlsNG-ef75cf/1792669449-350CDAE4-F46CFCB1/0/0
X-purgate-type: clean
X-purgate-size: 7953

---=Part.101.524daa11ba17fd68.1a1636ce2c2.facc62f9712a087a=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 include/store_interface=2Eh | 80 +++++++++++++++++++--------------------
 1 file changed, 40 insertions(+), 40 deletions(-)

diff --git a/include/store_interface=2Eh b/include/store_interface=2Eh
index 83a76a1=2E=2E208be0e 100644
--- a/include/store_interface=2Eh
+++ b/include/store_interface=2Eh
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -72,7 +72,7 @@ typedef struct _XENBUS_STORE_PERMISSION {
     \brief Acquire a reference to the STORE interface
=20
     \param Interface The interface header
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_ACQUIRE)(
     _In_ PINTERFACE Interface
@@ -82,7 +82,7 @@ typedef NTSTATUS
     \brief Release a reference to the STORE interface
=20
     \param Interface The interface header
-*/ =20
+*/
 typedef VOID
 (*XENBUS_STORE_RELEASE)(
     _In_ PINTERFACE Interface
@@ -93,7 +93,7 @@ typedef VOID
=20
     \param Interface The interface header
     \param Buffer Pointer to the memory buffer
-*/ =20
+*/
 typedef VOID
 (*XENBUS_STORE_FREE)(
     _In_ PINTERFACE Interface,
@@ -113,14 +113,14 @@ typedef VOID
     buffer containing the value read
=20
     The \a Buffer should be freed using \a XENBUS_STORE_FREE
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_READ)(
     _In_ PINTERFACE                     Interface,
     _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
     _In_opt_ PSTR                       Prefix,
     _In_ PSTR                           Node,
-    _Outptr_ PCHAR                      *Buffer
+    _Outptr_result_z_ PSTR              *Buffer
     );
=20
 /*! \typedef XENBUS_STORE_PRINTF
@@ -136,7 +136,7 @@ typedef NTSTATUS
     \param =2E=2E=2E Additional parameters required by \a Format
=20
     If the \a Node does not exist then it is created
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_PRINTF)(
     _In_ PINTERFACE                     Interface,
@@ -156,7 +156,7 @@ typedef NTSTATUS
     \param Prefix An optional prefix for the \a Node
     \param Node The concatenation of the \a Prefix and this value specifi=
es
     the XenStore key to remove
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_REMOVE)(
     _In_ PINTERFACE                     Interface,
@@ -178,14 +178,14 @@ typedef NTSTATUS
     buffer containing a NUL separated list of key names
=20
     The \a Buffer should be freed using \a XENBUS_STORE_FREE
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_DIRECTORY)(
     _In_ PINTERFACE                     Interface,
     _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
     _In_opt_ PSTR                       Prefix,
     _In_ PSTR                           Node,
-    _Outptr_ PCHAR                      *Buffer
+    _Outptr_result_z_ PSTR              *Buffer
     );
=20
 /*! \typedef XENBUS_STORE_TRANSACTION_START
@@ -193,7 +193,7 @@ typedef NTSTATUS
=20
     \param Interface The interface header
     \param Transaction Pointer to a transaction handle to be initialized
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_TRANSACTION_START)(
     _In_ PINTERFACE                     Interface,
@@ -210,7 +210,7 @@ typedef NTSTATUS
=20
     If \a Commit is TRUE and the transaction to found to clash then
     STATUS_RETRY will be returned
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_TRANSACTION_END)(
     _In_ PINTERFACE                 Interface,
@@ -228,7 +228,7 @@ typedef NTSTATUS
     \param Event A pointer to an event object to be signalled when the
     watch fires
     \param Watch A pointer to a watch handle to be initialized
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_WATCH_ADD)(
     _In_ PINTERFACE                 Interface,
@@ -243,11 +243,11 @@ typedef NTSTATUS
=20
     \param Interface The interface header
     \param Watch The watch handle
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_WATCH_REMOVE)(
-    _In_ PINTERFACE                 Interface,
-    _In_opt_ PXENBUS_STORE_WATCH    Watch
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_STORE_WATCH    Watch
     );
=20
 /*! \typedef XENBUS_STORE_POLL
@@ -259,7 +259,7 @@ typedef NTSTATUS
     activity then this will block the normal STORE interface DPC so this
     method must be regularly invoked during the spin loop to check for
     XenStore activity
-*/ =20
+*/
 typedef VOID
 (*XENBUS_STORE_POLL)(
     _In_ PINTERFACE Interface
@@ -288,7 +288,7 @@ typedef NTSTATUS
     );
=20
 // {86824C3B-D34E-4753-B281-2F1E3AD214D7}
-DEFINE_GUID(GUID_XENBUS_STORE_INTERFACE,=20
+DEFINE_GUID(GUID_XENBUS_STORE_INTERFACE,
 0x86824c3b, 0xd34e, 0x4753, 0xb2, 0x81, 0x2f, 0x1e, 0x3a, 0xd2, 0x14, 0xd=
7);
=20
 /*! \struct _XENBUS_STORE_INTERFACE_V2
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.101.524daa11ba17fd68.1a1636ce2c2.facc62f9712a087a=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 11:44:11 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 11:44:11 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1457993.1670465 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJrDP-0003ad-DS; Thu, 22 Oct 2026 11:44:11 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1457993.1670465; Thu, 22 Oct 2026 11:44:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJrDP-0003aV-Ae; Thu, 22 Oct 2026 11:44:11 +0000
Received: by outflank-mailman (input) for mailman id 1457993;
 Thu, 22 Oct 2026 11:44:09 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1636ce6b7000f79f@swg.vates.tech>)
 id 1xJrDN-0003XE-Mm
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 11:44:09 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJrDN-006lTk-3l
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 13:44:09 +0200
Received: from [10.42.69.1] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1636ce6b7000f79f@swg.vates.tech>)
 id 6ad9f6fe-e002-0a2a0a5209dd-0a2a4501d6cc-30
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 13:44:09 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1636ce6b7000f79f@swg.vates.tech>)
 id 6ad9f708-5984-0a2a45010019-b9ff1c22a571-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 13:44:09 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1636ce6b7000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 11:44:03 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 3F1DF829C1;
 Thu, 22 Oct 2026 13:44:03 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=LaClLYXhYDxoLn3ByD5nslBIZYbB6h11wDlXWcm6zU0=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=LlZw3B6zfCKuTbXqAH+gGIIj7EcqKLGLylMAcKfYCjBMJOldC3AumpEeq0faTlP3IBbMCjWeP
 E2wdwFv1bMVUvdX8zuESRiYIpyClJ6EpadqdDayegI9vJUFcX1PR/97CtqfYUdmWFY+BGJLRdCx
 jB0ImZdfZ4fFE50EJD13iaqQOwLXx5aHm/7nYgPczwzF+D+lFzLZTPJVHMKvVys5zN1Hb8WmVT1
 lfeP40kHVE2fZv1GHq1KMngXobxt9KptoX/7vWdSl1NBlubKsYdvkgxARVZ5+bjHHT9oHSM0yaD
 bkA7W4hgx3BT/N8SPhXfP2fYAjFoe62f/+b96sywH74A==
X-Zone-Loop: 5d1d7fa288686fe2bc6153f005c02faeb814b8c771d7
x-campaign-type: default
x-transaction-id: dff145e9-311e-4590-b1a5-b04208c599b9
x-swg-uid: 01-74edad60-f098-4874-a0e0-cce10dd29bca
X-Mailer: Sweego
Message-ID:
 <1792669443.8631fc262581453bbf619ec5b2062170.1a1636ce6b7000f79f@vates.tech>
x-swg-bid: 1792669443.8631fc262581453bbf619ec5b2062170.1a1636ce6b7000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [XENIFACE-SYNC 2/3] xeniface: Sync common helper files with xenbus
Date: Thu, 22 Oct 2026 13:43:58 +0200
In-Reply-To: <1792669373.8631fc262581453bbf619ec5b2062170.1a1636bd571000f79f@vates.tech>
References: <1792669373.8631fc262581453bbf619ec5b2062170.1a1636bd571000f79f@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.102.c72983d9db0fc8d9.1a1636ce517.218b426bae86dbaf=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792669443351
X-purgate-ID: tlsNG-d62444/1792669449-BD67C757-54439CC2/0/0
X-purgate-type: clean
X-purgate-size: 19289

---=Part.102.c72983d9db0fc8d9.1a1636ce517.218b426bae86dbaf=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Take assert=2Eh, dbg_print=2Eh (as log=2Eh), mutex=2Eh, util=2Eh, registry=
=2Ec/h
and thread=2Ec/h from xenbus, keeping the XENIFACE_MUTEX type name and
RegistryGetPath()=2E This brings TryAcquireMutex, PCSTR log format
strings and the updated direction and buffer-size annotations=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xeniface/assert=2Eh   | 18 ++++-----
 src/xeniface/log=2Eh      | 82 ++++++++++++++++++++++++-----------------
 src/xeniface/mutex=2Eh    | 39 ++++++++++++++++++--
 src/xeniface/names=2Eh    | 18 ++++-----
 src/xeniface/registry=2Ec | 26 ++++++-------
 src/xeniface/registry=2Eh | 16 ++++----
 src/xeniface/thread=2Ec   | 20 +++++-----
 src/xeniface/thread=2Eh   |  6 +--
 src/xeniface/util=2Eh     | 36 +++++++++---------
 9 files changed, 153 insertions(+), 108 deletions(-)

diff --git a/src/xeniface/assert=2Eh b/src/xeniface/assert=2Eh
index dfac6e1=2E=2Ea5f2f2e 100644
--- a/src/xeniface/assert=2Eh
+++ b/src/xeniface/assert=2Eh
@@ -154,13 +154,13 @@ __Bug(
=20
 static __inline BOOLEAN
 _IsZeroMemory(
-    _In_ PCSTR          Caller,
-    _In_ PCSTR          Name,
-    _In_ PVOID          Buffer,
-    _In_ ULONG          Length
+    _In_ PCSTR                      Caller,
+    _In_ PCSTR                      Name,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Length
     )
 {
-    ULONG           Offset;
+    ULONG                           Offset;
=20
     Offset =3D 0;
     while (Offset < Length) {
@@ -178,10 +178,10 @@ _IsZeroMemory(
=20
 static __inline BOOLEAN
 _IsZeroMemory(
-    _In_ PCSTR          Caller,
-    _In_ PCSTR          Name,
-    _In_ PVOID          Buffer,
-    _In_ ULONG          Length
+    _In_ PCSTR                      Caller,
+    _In_ PCSTR                      Name,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Length
     )
 {
     UNREFERENCED_PARAMETER(Caller);
diff --git a/src/xeniface/log=2Eh b/src/xeniface/log=2Eh
index 523a4af=2E=2E21543ff 100644
--- a/src/xeniface/log=2Eh
+++ b/src/xeniface/log=2Eh
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -36,16 +36,16 @@
 #include <ntddk=2Eh>
 #include <stdarg=2Eh>
=20
-#pragma warning(disable:4127)   // conditional expression is constant
-
 #define stringify_literal(_text) #_text
 #define stringify(_text) stringify_literal(_text)
 #define __MODULE__ stringify(PROJECT)
=20
+#pragma warning(disable:4127)   // conditional expression is constant
+
 static __inline VOID
 __Error(
-    _In_ const CHAR *Prefix,
-    _In_ const CHAR *Format,
+    _In_ PCSTR      Prefix,
+    _In_ PCSTR      Format,
     =2E=2E=2E
     )
 {
@@ -67,8 +67,8 @@ __Error(
=20
 static __inline VOID
 __Warning(
-    _In_ const CHAR *Prefix,
-    _In_ const CHAR *Format,
+    _In_ PCSTR      Prefix,
+    _In_ PCSTR      Format,
     =2E=2E=2E
     )
 {
@@ -91,8 +91,8 @@ __Warning(
 #if DBG
 static __inline VOID
 __Trace(
-    _In_ const CHAR *Prefix,
-    _In_ const CHAR *Format,
+    _In_ PCSTR      Prefix,
+    _In_ PCSTR      Format,
     =2E=2E=2E
     )
 {
@@ -117,8 +117,8 @@ __Trace(
=20
 static __inline VOID
 __Info(
-    _In_ const CHAR *Prefix,
-    _In_ const CHAR *Format,
+    _In_ PCSTR      Prefix,
+    _In_ PCSTR      Format,
     =2E=2E=2E
     )
 {
@@ -138,4 +138,20 @@ __Info(
 #define Info(=2E=2E=2E)  \
         __Info(__MODULE__ "|"  __FUNCTION__ ": ", __VA_ARGS__)
=20
+#define DBG_PRINT_ENABLE_FILTER(_Id, _Level)                       \
+        do {                                                        \
+            DbgSetDebugFilterState((_Id), (_Level), TRUE);          \
+        } while (FALSE)
+
+static __inline VOID
+__DbgPrintEnable(
+    VOID
+    )
+{
+    DBG_PRINT_ENABLE_FILTER(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL);
+    DBG_PRINT_ENABLE_FILTER(DPFLTR_IHVDRIVER_ID, DPFLTR_WARNING_LEVEL);
+    DBG_PRINT_ENABLE_FILTER(DPFLTR_IHVDRIVER_ID, DPFLTR_TRACE_LEVEL);
+    DBG_PRINT_ENABLE_FILTER(DPFLTR_IHVDRIVER_ID, DPFLTR_INFO_LEVEL);
+}
+
 #endif  // _XENIFACE_LOG_H
diff --git a/src/xeniface/mutex=2Eh b/src/xeniface/mutex=2Eh
index 966206d=2E=2E5609582 100644
--- a/src/xeniface/mutex=2Eh
+++ b/src/xeniface/mutex=2Eh
@@ -44,7 +44,7 @@ typedef struct _XENIFACE_MUTEX {
=20
 static FORCEINLINE VOID
 InitializeMutex(
-    _In_ PXENIFACE_MUTEX    Mutex
+    _Out_ PXENIFACE_MUTEX   Mutex
     )
 {
     RtlZeroMemory(Mutex, sizeof (XENIFACE_MUTEX));
@@ -52,18 +52,49 @@ InitializeMutex(
     KeInitializeEvent(&Mutex->Event, SynchronizationEvent, TRUE);
 }
=20
+static FORCEINLINE BOOLEAN
+_IRQL_requires_max_(PASSIVE_LEVEL)
+TryAcquireMutex(
+    _Inout_ PXENIFACE_MUTEX Mutex
+    )
+{
+    LARGE_INTEGER           Timeout;
+    NTSTATUS                status;
+
+    Timeout=2EQuadPart =3D 0;
+
+    status =3D KeWaitForSingleObject(&Mutex->Event,
+                                   Executive,
+                                   KernelMode,
+                                   FALSE,
+                                   &Timeout);
+    if (status =3D=3D STATUS_TIMEOUT)
+        return FALSE;
+
+    ASSERT(NT_SUCCESS(status));
+
+    ASSERT3P(Mutex->Owner, =3D=3D, NULL);
+    Mutex->Owner =3D KeGetCurrentThread();
+
+    return TRUE;
+}
+
 static FORCEINLINE VOID
 _IRQL_requires_max_(PASSIVE_LEVEL)
 AcquireMutex(
-    _In_ PXENIFACE_MUTEX    Mutex
+    _Inout_ PXENIFACE_MUTEX Mutex
     )
 {
-    (VOID) KeWaitForSingleObject(&Mutex->Event,
+    NTSTATUS                status;
+
+    status =3D KeWaitForSingleObject(&Mutex->Event,
                                  Executive,
                                  KernelMode,
                                  FALSE,
                                  NULL);
=20
+    ASSERT(NT_SUCCESS(status));
+
     ASSERT3P(Mutex->Owner, =3D=3D, NULL);
     Mutex->Owner =3D KeGetCurrentThread();
 }
@@ -71,7 +102,7 @@ AcquireMutex(
 static FORCEINLINE VOID
 _IRQL_requires_max_(PASSIVE_LEVEL)
 ReleaseMutex(
-    _In_ PXENIFACE_MUTEX    Mutex
+    _Inout_ PXENIFACE_MUTEX Mutex
     )
 {
     ASSERT3P(Mutex->Owner, =3D=3D, KeGetCurrentThread());
diff --git a/src/xeniface/names=2Eh b/src/xeniface/names=2Eh
index 37d196d=2E=2E20e4695 100644
--- a/src/xeniface/names=2Eh
+++ b/src/xeniface/names=2Eh
@@ -37,7 +37,7 @@
=20
 #include "types=2Eh"
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PowerTypeName(
     _In_ POWER_STATE_TYPE   Type
     )
@@ -57,7 +57,7 @@ PowerTypeName(
 #undef  _POWER_ACTION_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PowerSystemStateName(
     _In_ SYSTEM_POWER_STATE State
     )
@@ -83,7 +83,7 @@ PowerSystemStateName(
 #undef  _POWER_SYSTEM_STATE_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PowerDeviceStateName(
     _In_ DEVICE_POWER_STATE State
     )
@@ -107,7 +107,7 @@ PowerDeviceStateName(
 #undef  _POWER_DEVICE_STATE_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PowerActionName(
     _In_ POWER_ACTION   Type
     )
@@ -133,7 +133,7 @@ PowerActionName(
 #undef  _POWER_ACTION_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PowerMinorFunctionName(
     _In_ ULONG  MinorFunction
     )
@@ -155,7 +155,7 @@ PowerMinorFunctionName(
 #undef  _POWER_MINOR_FUNCTION_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PnpDeviceStateName(
     _In_ DEVICE_PNP_STATE   State
     )
@@ -182,7 +182,7 @@ PnpDeviceStateName(
 #undef  _STATE_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PnpMinorFunctionName(
     _In_ ULONG  Function
     )
@@ -225,7 +225,7 @@ PnpMinorFunctionName(
 #undef  _PNP_MINOR_FUNCTION_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PartialResourceDescriptorTypeName(
     _In_ UCHAR  Type
     )
@@ -254,7 +254,7 @@ PartialResourceDescriptorTypeName(
 #undef  _PARTIAL_RESOURCE_DESCRIPTOR_TYPE_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 DeviceUsageTypeName(
     _In_ DEVICE_USAGE_NOTIFICATION_TYPE Type
     )
diff --git a/src/xeniface/registry=2Ec b/src/xeniface/registry=2Ec
index 9789db9=2E=2E8f631ff 100644
--- a/src/xeniface/registry=2Ec
+++ b/src/xeniface/registry=2Ec
@@ -1169,17 +1169,17 @@ fail1:
=20
 NTSTATUS
 RegistryQueryBinaryValue(
-    _In_ HANDLE                     Key,
-    _In_ PSTR                       Name,
-    _Outptr_ PVOID                  *Buffer,
-    _Out_ PULONG                    Length
+    _In_ HANDLE                                 Key,
+    _In_ PSTR                                   Name,
+    _Outptr_result_bytebuffer_(*Length) PVOID   *Buffer,
+    _Out_ PULONG                                Length
     )
 {
-    ANSI_STRING                     Ansi;
-    UNICODE_STRING                  Unicode;
-    PKEY_VALUE_PARTIAL_INFORMATION  Partial;
-    ULONG                           Size;
-    NTSTATUS                        status;
+    ANSI_STRING                                 Ansi;
+    UNICODE_STRING                              Unicode;
+    PKEY_VALUE_PARTIAL_INFORMATION              Partial;
+    ULONG                                       Size;
+    NTSTATUS                                    status;
=20
     RtlInitAnsiString(&Ansi, Name);
=20
@@ -1256,7 +1256,7 @@ NTSTATUS
 RegistryUpdateBinaryValue(
     _In_ HANDLE                     Key,
     _In_ PSTR                       Name,
-    _In_ PVOID                      Buffer,
+    _In_reads_bytes_(Length) PVOID  Buffer,
     _In_ ULONG                      Length
     )
 {
@@ -1444,7 +1444,7 @@ fail1:
=20
 static PKEY_VALUE_PARTIAL_INFORMATION
 RegistryAnsiToSz(
-    PANSI_STRING                    Ansi
+    _In_ PANSI_STRING               Ansi
     )
 {
     ULONG                           Length;
@@ -1490,7 +1490,7 @@ fail1:
=20
 static PKEY_VALUE_PARTIAL_INFORMATION
 RegistryAnsiToMultiSz(
-    PANSI_STRING                    Ansi
+    _In_ PANSI_STRING               Ansi
     )
 {
     ULONG                           Length;
@@ -1649,4 +1649,4 @@ RegistryGetPath(
     )
 {
     return &RegistryPath;
-}
\ No newline at end of file
+}
diff --git a/src/xeniface/registry=2Eh b/src/xeniface/registry=2Eh
index 867aefc=2E=2Ede16ac1 100644
--- a/src/xeniface/registry=2Eh
+++ b/src/xeniface/registry=2Eh
@@ -166,18 +166,18 @@ RegistryQuerySzValue(
=20
 extern NTSTATUS
 RegistryQueryBinaryValue(
-    _In_ HANDLE         Key,
-    _In_ PSTR           Name,
-    _Outptr_ PVOID      *Buffer,
-    _Out_ PULONG        Length
+    _In_ HANDLE                                 Key,
+    _In_ PSTR                                   Name,
+    _Outptr_result_bytebuffer_(*Length) PVOID   *Buffer,
+    _Out_ PULONG                                Length
     );
=20
 extern NTSTATUS
 RegistryUpdateBinaryValue(
-    _In_ HANDLE         Key,
-    _In_ PSTR           Name,
-    _In_ PVOID          Buffer,
-    _In_ ULONG          Length
+    _In_ HANDLE                     Key,
+    _In_ PSTR                       Name,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Length
     );
=20
 extern NTSTATUS
diff --git a/src/xeniface/thread=2Ec b/src/xeniface/thread=2Ec
index 6905d29=2E=2E0f144fe 100644
--- a/src/xeniface/thread=2Ec
+++ b/src/xeniface/thread=2Ec
@@ -33,11 +33,11 @@
 #include <ntddk=2Eh>
=20
 #include "thread=2Eh"
-#include "util=2Eh"
 #include "log=2Eh"
 #include "assert=2Eh"
+#include "util=2Eh"
=20
-#define THREAD_POOL 'ERHT'
+#define THREAD_TAG 'ERHT'
=20
 struct _XENIFACE_THREAD {
     XENIFACE_THREAD_FUNCTION  Function;
@@ -53,7 +53,7 @@ __ThreadAllocate(
     _In_ ULONG  Length
     )
 {
-    return __AllocatePoolWithTag(NonPagedPool, Length, THREAD_POOL);
+    return __AllocatePoolWithTag(NonPagedPool, Length, THREAD_TAG);
 }
=20
 static FORCEINLINE VOID
@@ -61,12 +61,12 @@ __ThreadFree(
     _In_ PVOID  Buffer
     )
 {
-    __FreePoolWithTag(Buffer, THREAD_POOL);
+    __FreePoolWithTag(Buffer, THREAD_TAG);
 }
=20
 static FORCEINLINE VOID
 __ThreadWake(
-    _In_ PXENIFACE_THREAD   Thread
+    _Inout_ PXENIFACE_THREAD Thread
     )
 {
     KeSetEvent(&Thread->Event, IO_NO_INCREMENT, FALSE);
@@ -74,7 +74,7 @@ __ThreadWake(
=20
 VOID
 ThreadWake(
-    _In_ PXENIFACE_THREAD   Thread
+    _Inout_ PXENIFACE_THREAD Thread
     )
 {
     __ThreadWake(Thread);
@@ -82,7 +82,7 @@ ThreadWake(
=20
 static FORCEINLINE VOID
 __ThreadAlert(
-    _In_ PXENIFACE_THREAD   Thread
+    _Inout_ PXENIFACE_THREAD Thread
     )
 {
     Thread->Alerted =3D TRUE;
@@ -91,7 +91,7 @@ __ThreadAlert(
=20
 VOID
 ThreadAlert(
-    _In_ PXENIFACE_THREAD   Thread
+    _Inout_ PXENIFACE_THREAD Thread
     )
 {
     __ThreadAlert(Thread);
@@ -131,8 +131,6 @@ ThreadCreate(
=20
     (*Thread) =3D __ThreadAllocate(sizeof (XENIFACE_THREAD));
=20
-    Trace("Create thread %p %p\n", Function, Thread);
-
     status =3D STATUS_NO_MEMORY;
     if (*Thread =3D=3D NULL)
         goto fail1;
@@ -207,7 +205,7 @@ ThreadIsAlerted(
=20
 VOID
 ThreadJoin(
-    _In_ PXENIFACE_THREAD   Thread
+    _Inout_ PXENIFACE_THREAD Thread
     )
 {
     LONG                    References;
diff --git a/src/xeniface/thread=2Eh b/src/xeniface/thread=2Eh
index 5047d9f=2E=2E02ac35e 100644
--- a/src/xeniface/thread=2Eh
+++ b/src/xeniface/thread=2Eh
@@ -59,17 +59,17 @@ ThreadIsAlerted(
=20
 extern VOID
 ThreadWake(
-    _In_ PXENIFACE_THREAD   Thread
+    _Inout_ PXENIFACE_THREAD Thread
     );
=20
 extern VOID
 ThreadAlert(
-    _In_ PXENIFACE_THREAD   Thread
+    _Inout_ PXENIFACE_THREAD Thread
     );
=20
 extern VOID
 ThreadJoin(
-    _In_ PXENIFACE_THREAD   Thread
+    _Inout_ PXENIFACE_THREAD Thread
     );
=20
 #endif  // _XENIFACE_THREAD_H
diff --git a/src/xeniface/util=2Eh b/src/xeniface/util=2Eh
index 9709a10=2E=2Edb40d4f 100644
--- a/src/xeniface/util=2Eh
+++ b/src/xeniface/util=2Eh
@@ -113,12 +113,12 @@ __CpuId(
=20
 static FORCEINLINE LONG
 __InterlockedAdd(
-    _In_ LONG   *Value,
-    _In_ LONG   Delta
+    _Inout_ LONG    *Value,
+    _In_ LONG       Delta
     )
 {
-    LONG        New;
-    LONG        Old;
+    LONG            New;
+    LONG            Old;
=20
     do {
         Old =3D *Value;
@@ -130,12 +130,12 @@ __InterlockedAdd(
=20
 static FORCEINLINE LONG
 __InterlockedSubtract(
-    _In_ LONG   *Value,
-    _In_ LONG   Delta
+    _Inout_ LONG    *Value,
+    _In_ LONG       Delta
     )
 {
-    LONG        New;
-    LONG        Old;
+    LONG            New;
+    LONG            Old;
=20
     do {
         Old =3D *Value;
@@ -281,15 +281,15 @@ __FreePages(
=20
 static FORCEINLINE PSTR
 __strtok_r(
-    _In_opt_ PSTR   Buffer,
-    _In_ PSTR       Delimiter,
+    _Inout_opt_ PSTR    Buffer,
+    _In_ PSTR           Delimiter,
     _When_(Buffer !=3D NULL, _Outptr_)
     _When_(Buffer =3D=3D NULL, _Inout_)
-    PSTR            *Context
+    PSTR                *Context
     )
 {
-    PSTR            Token;
-    PSTR            End;
+    PSTR                Token;
+    PSTR                End;
=20
     if (Buffer !=3D NULL)
         *Context =3D Buffer;
@@ -321,15 +321,15 @@ __strtok_r(
=20
 static FORCEINLINE PWSTR
 __wcstok_r(
-    _In_opt_ PWSTR  Buffer,
-    _In_ PWSTR      Delimiter,
+    _Inout_opt_ PWSTR   Buffer,
+    _In_ PWSTR          Delimiter,
     _When_(Buffer !=3D NULL, _Outptr_)
     _When_(Buffer =3D=3D NULL, _Inout_)
-    PWSTR           *Context
+    PWSTR               *Context
     )
 {
-    PWSTR           Token;
-    PWSTR           End;
+    PWSTR               Token;
+    PWSTR               End;
=20
     if (Buffer !=3D NULL)
         *Context =3D Buffer;
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.102.c72983d9db0fc8d9.1a1636ce517.218b426bae86dbaf=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 11:54:02 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 11:54:02 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1458005.1670470 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJrMw-0004se-49; Thu, 22 Oct 2026 11:54:02 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1458005.1670470; Thu, 22 Oct 2026 11:54:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJrMw-0004sX-1d; Thu, 22 Oct 2026 11:54:02 +0000
Received: by outflank-mailman (input) for mailman id 1458005;
 Thu, 22 Oct 2026 11:54:01 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16375f341000f79f@swg.vates.tech>)
 id 1xJrMv-0004sO-0T
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 11:54:01 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJrMt-00DNM0-H0
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 13:53:59 +0200
Received: from [10.42.69.10] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16375f341000f79f@swg.vates.tech>)
 id 6ad9f952-8faa-0a2a0a5109dd-0a2a450ae08e-12
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 13:53:59 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-4011c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16375f341000f79f@swg.vates.tech>)
 id 6ad9f957-f2d2-0a2a450a0019-b9ff1c238761-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 13:53:59 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a16375f341000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 11:53:56 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 0DCDF815CB;
 Thu, 22 Oct 2026 13:53:56 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=a2U6+NTU4VHbqskGTgjPiDVFkbJouXiX7VfwO3q9DQE=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=stEtm24RfdjnjEciSibv28im1yrL1AX45pTebsYgzoSh69AG8OeVewzGDtPvEAVT4/zKuXTZw
 RWzBJAJhXthWWhVvhqMOJrMAfBhELZx6WWV9osj5NydEo4gSlQrRUu7ldxHT0/pnJvdlv6jiVqc
 ZNLR9Ca49JpLaYtBEyeGl2ncFDSccyfjHSZwhTeNIJ40a1gBvSJ32vqGe758imLWa6NT8oHNgyF
 0WUjpEUEjGAsWvVXDJ9WHp8rv8mfiMZlTxa+F6T5Ar1UPcopa5i2CWMejCJX9KZYxzpDdZcCugn
 I0mbuVwQTyVwbKWdAK3TSdvn7+mShfKJMqR3+ulOMjsQ==
X-Zone-Loop: 096d195604c82c58670b8f4749befaaf7daa119abfd8
x-campaign-type: default
x-transaction-id: 877002a1-ac1f-4b2e-be0c-b474be489164
x-swg-uid: 01-aefb9396-2740-47b7-bdf6-75e648d78157
X-Mailer: Sweego
Message-ID:
 <1792670036.8631fc262581453bbf619ec5b2062170.1a16375f341000f79f@vates.tech>
x-swg-bid: 1792670036.8631fc262581453bbf619ec5b2062170.1a16375f341000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCHv3 5/5] xeniface: Bound NumberPermissions before checking the input length
Date: Thu, 22 Oct 2026 13:53:52 +0200
In-Reply-To: <1792497190.8631fc262581453bbf619ec5b2062170.1a159288539000f79f@vates.tech>
References: <1792497190.8631fc262581453bbf619ec5b2062170.1a159288539000f79f@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.106.643a2eeef429a35a.1a16375f0b9.aa7f1860461fa163=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792670036153
X-purgate-ID: tlsNG-4011c0/1792670039-504CFCFC-7C0B146A/0/0
X-purgate-type: clean
X-purgate-size: 2138

---=Part.106.643a2eeef429a35a.1a16375f0b9.aa7f1860461fa163=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

IoctlStoreSetPermissions() compares InLen with
FIELD_OFFSET(XENIFACE_STORE_SET_PERMISSIONS_IN, Permissions[N]), whose
64-bit result is truncated to ULONG=2E The count was only capped to 255
later, in __ConvertPermissions(), so the length check alone could be
satisfied by a huge count=2E

Check the cap first, with the same STATUS_INVALID_PARAMETER as before=2E
The check in __ConvertPermissions() is removed and fails are updated
accordingly=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xeniface/ioctl_store=2Ec | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/src/xeniface/ioctl_store=2Ec b/src/xeniface/ioctl_store=2Ec
index 97bef75=2E=2Ed0c73ef 100644
--- a/src/xeniface/ioctl_store=2Ec
+++ b/src/xeniface/ioctl_store=2Ec
@@ -417,18 +417,21 @@ IoctlStoreSetPermissions(
         goto fail1;
     }
=20
-    if (InLen !=3D (ULONG)FIELD_OFFSET(XENIFACE_STORE_SET_PERMISSIONS_IN,=
 Permissions[In->NumberPermissions]))
+    status =3D STATUS_INVALID_PARAMETER;
+    if (In->NumberPermissions > 255)
         goto fail2;
=20
+    status =3D STATUS_INVALID_BUFFER_SIZE;
+    if (InLen !=3D (ULONG)FIELD_OFFSET(XENIFACE_STORE_SET_PERMISSIONS_IN,=
 Permissions[In->NumberPermissions]))
+        goto fail3;
+
     status =3D STATUS_INVALID_PARAMETER;
     if (In->PathLength =3D=3D 0 ||
         In->PathLength > XENSTORE_ABS_PATH_MAX) {
-        goto fail3;
+        goto fail4;
     }
=20
     Permissions =3D __ConvertPermissions(In->NumberPermissions, In->Permi=
ssions);
-    if (Permissions =3D=3D NULL)
-        goto fail4;
=20
     status =3D __CaptureUserBuffer(In->Path, In->PathLength, &Path);
     if (!NT_SUCCESS(status))
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.106.643a2eeef429a35a.1a16375f0b9.aa7f1860461fa163=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 11:56:14 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 11:56:14 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1458009.1670474 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJrP4-00057H-AY; Thu, 22 Oct 2026 11:56:14 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1458009.1670474; Thu, 22 Oct 2026 11:56:14 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJrP4-00057A-7t; Thu, 22 Oct 2026 11:56:14 +0000
Received: by outflank-mailman (input) for mailman id 1458009;
 Thu, 22 Oct 2026 11:56:12 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16377f66b000f79f@swg.vates.tech>)
 id 1xJrP2-000573-P7
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 11:56:12 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJrP1-002CVk-US
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 13:56:11 +0200
Received: from [10.42.69.6] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16377f66b000f79f@swg.vates.tech>)
 id 6ad9f9cb-e002-0a2a0a5209dd-0a2a45068c32-34
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 13:56:11 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-16d1c6.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16377f66b000f79f@swg.vates.tech>)
 id 6ad9f9db-195a-0a2a45060019-b9ff1c22aae3-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 13:56:11 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a16377f66b000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 11:56:08 +0000
Received: from [192.168.1.61] (142.220.66.37.rev.sfr.net [37.66.220.142])
 (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 9862981F99;
 Thu, 22 Oct 2026 13:56:07 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=kOJIQRu4t/i9uvjx/NXTlL2xcvjXdvWwIV+fLeBLFxE=;
 h=from:subject:date:message-id:to:mime-version:content-type:in-reply-to:references:feedback-id;
 b=Wvj7I+JhAuH/Suac6QoJ9vgMM/j0qRd1/KuRCiipUDoeZfwp2qH343yhJfFBAaMYCz4kZCeyQ
 MEFX7GhhzjDu+mgDaLjI/mFOXxaf+6BAaoRQ+ja8tTY7GGn9LZv3bGqVxELh44bjV7165bvmact
 Aswz3PoiEGskp2cE1FHBMnQuXnoveejNOBXXv91Qt5lYVctOxHAYoq6VHK3AyJeQMYsoJ4U+OwA
 7b35OPOpVuiPR9/mIqGoBNFpKpFrBM75s5dMAYYzA0SqOtSU5UavA6M57kOGvfTmFQwmti87Lxp
 ZszZdHrs6m266i+b9yeHuZj4oECts5zBphSuKIzVhk2w==
X-Zone-Loop: a6debc0431496ecc95163cc1f138ce68c67cdb728e22
x-campaign-type: default
x-transaction-id: 01a25671-9f56-4f30-b642-5c6b4247e7a1
x-swg-uid: 01-e47e3e0a-0f50-4216-ab3d-159f6528f71d
X-Mailer: Sweego
Message-ID:
 <1792670168.8631fc262581453bbf619ec5b2062170.1a16377f66b000f79f@vates.tech>
x-swg-bid: 1792670168.8631fc262581453bbf619ec5b2062170.1a16377f66b000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
Date: Thu, 22 Oct 2026 13:56:07 +0200
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCHv3 5/5] xeniface: Bound NumberPermissions before checking
 the input length
Content-Language: en-US
To: =?UTF-8?Q?C=C3=A9saire_Mounah?= <cesaire.mounah@vates.tech>,
 win-pv-devel@lists.xenproject.org
References: <1792497190.8631fc262581453bbf619ec5b2062170.1a159288539000f79f@vates.tech>
 <1792670036.8631fc262581453bbf619ec5b2062170.1a16375f341000f79f@vates.tech>
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
In-Reply-To: <1792670036.8631fc262581453bbf619ec5b2062170.1a16375f341000f79f@vates.tech>
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.107.aa78cffde2d30d54.1a16377f27b.96c3ea2f93cfefb9=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792670167675
X-purgate-ID: tlsNG-16d1c6/1792670171-F627077B-005AB9BD/0/0
X-purgate-type: clean
X-purgate-size: 2337

---=Part.107.aa78cffde2d30d54.1a16377f27b.96c3ea2f93cfefb9=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

On 22/10/2026 13:54, C=C3=A9saire Mounah wrote:
> IoctlStoreSetPermissions() compares InLen with
> FIELD_OFFSET(XENIFACE_STORE_SET_PERMISSIONS_IN, Permissions[N]), whose
> 64-bit result is truncated to ULONG=2E The count was only capped to 255
> later, in __ConvertPermissions(), so the length check alone could be
> satisfied by a huge count=2E
>=20
> Check the cap first, with the same STATUS_INVALID_PARAMETER as before=2E
> The check in __ConvertPermissions() is removed and fails are updated
> accordingly=2E
>=20
> Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
> ---
>   src/xeniface/ioctl_store=2Ec | 11 +++++++----
>   1 file changed, 7 insertions(+), 4 deletions(-)
>=20
> diff --git a/src/xeniface/ioctl_store=2Ec b/src/xeniface/ioctl_store=2Ec
> index 97bef75=2E=2Ed0c73ef 100644
> --- a/src/xeniface/ioctl_store=2Ec
> +++ b/src/xeniface/ioctl_store=2Ec
> @@ -417,18 +417,21 @@ IoctlStoreSetPermissions(
>           goto fail1;
>       }
>  =20
> -    if (InLen !=3D (ULONG)FIELD_OFFSET(XENIFACE_STORE_SET_PERMISSIONS_I=
N, Permissions[In->NumberPermissions]))
> +    status =3D STATUS_INVALID_PARAMETER;
> +    if (In->NumberPermissions > 255)
>           goto fail2;
>  =20
> +    status =3D STATUS_INVALID_BUFFER_SIZE;
> +    if (InLen !=3D (ULONG)FIELD_OFFSET(XENIFACE_STORE_SET_PERMISSIONS_I=
N, Permissions[In->NumberPermissions]))
> +        goto fail3;
> +
>       status =3D STATUS_INVALID_PARAMETER;
>       if (In->PathLength =3D=3D 0 ||
>           In->PathLength > XENSTORE_ABS_PATH_MAX) {
> -        goto fail3;
> +        goto fail4;
>       }
>  =20
>       Permissions =3D __ConvertPermissions(In->NumberPermissions, In->Pe=
rmissions);
> -    if (Permissions =3D=3D NULL)
> -        goto fail4;

This check was removed for some reason=2E

Please double check your patch=2E=2E=2E

>  =20
>       status =3D __CaptureUserBuffer(In->Path, In->PathLength, &Path);
>       if (!NT_SUCCESS(status))



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.107.aa78cffde2d30d54.1a16377f27b.96c3ea2f93cfefb9=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 12:00:15 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 12:00:15 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1458014.1670477 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJrSx-0006Qd-M8; Thu, 22 Oct 2026 12:00:15 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1458014.1670477; Thu, 22 Oct 2026 12:00:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJrSx-0006QW-JY; Thu, 22 Oct 2026 12:00:15 +0000
Received: by outflank-mailman (input) for mailman id 1458014;
 Thu, 22 Oct 2026 12:00:14 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1637ba28e000f79f@swg.vates.tech>)
 id 1xJrSw-0006QQ-BJ
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 12:00:14 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJrSv-002cI1-OD
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 14:00:13 +0200
Received: from [10.42.69.12] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1637ba28e000f79f@swg.vates.tech>)
 id 6ad9facd-8faa-0a2a0a5109dd-0a2a450ca8aa-4
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 14:00:13 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-d25034.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1637ba28e000f79f@swg.vates.tech>)
 id 6ad9facd-f479-0a2a450c0019-b9ff1c128b49-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 14:00:13 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1637ba28e000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 12:00:09 +0000
Received: from [192.168.1.121] (88-185-151-209.subs.proxad.net
 [88.185.151.209]) (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id B6DE2815CB
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 14:00:08 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=DJpofJfua/GBxIR7J0ReA0UrTt8I05dYePB5esFUcNw=;
 h=from:subject:date:message-id:to:mime-version:content-type:in-reply-to:references:feedback-id;
 b=n1BEh1X1CFSBrvAe0ZBqQp+/xoc2beT/deXWjvm1aHOpw0Um8dlEP8uX12VTKAl6/RDiIK4Wu
 U6k9hJN1DsAW50rtd1WUwg3cfMbhWjX4KCJ/D4pTLfRbuVO+W17KVsw6552dx9+pwy8R9JnPlID
 ZINcWehTJw4vdJsmyB8BMKk93ufwouCAwqdvXFAqSLhdCBlNPxtY9D4DB7Xb2BjyEXjVARUzvIY
 lf1+pcOPn5CVIpv0E2qtIgYTSxYD8JwTj+j9xdKIBm4b5UqSQ5MsmhkHQKASkvDP9t0ktmm1Fit
 HGPT5x0pYjqgPxELuLuFt/vIRT15oVQiw5+KeIi/gf5A==
X-Zone-Loop: 3db8fad49f55d40c63f048e3e6190775563bacae1c6c
x-campaign-type: default
x-transaction-id: 2a6fda9d-3788-4888-a60c-bcff024230b5
x-swg-uid: 01-cce0f89c-8f5e-4ea2-9a3d-bf6f9be56945
X-Mailer: Sweego
Message-ID:
 <1792670409.8631fc262581453bbf619ec5b2062170.1a1637ba28e000f79f@vates.tech>
x-swg-bid: 1792670409.8631fc262581453bbf619ec5b2062170.1a1637ba28e000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
Date: Thu, 22 Oct 2026 14:00:08 +0200
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH 5/5] xeniface: Bound NumberPermissions before checking the
 input length
To: win-pv-devel@lists.xenproject.org
References: <1792497190.8631fc262581453bbf619ec5b2062170.1a159288539000f79f@vates.tech>
 <1792497324.8631fc262581453bbf619ec5b2062170.1a1592a91a3000f79f@vates.tech>
 <1792498975.8631fc262581453bbf619ec5b2062170.1a15943c3d1000f79f@vates.tech>
Content-Language: en-US
From: Mounah Honore Cesaire <cesaire.mounah@vates.tech>
In-Reply-To: <1792498975.8631fc262581453bbf619ec5b2062170.1a15943c3d1000f79f@vates.tech>
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.108.91424f7d468d8971.1a1637ba065.f7affad92273cbde=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792670408806
X-purgate-ID: tlsNG-d25034/1792670413-02CDBA5B-F7D265A6/0/0
X-purgate-type: clean
X-purgate-size: 1904

---=Part.108.91424f7d468d8971.1a1637ba065.f7affad92273cbde=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable


On 10/20/26 2:23 PM, Tu Dinh wrote:
> On 20/10/2026 13:55, C=C3=A9saire Mounah wrote:
>> IoctlStoreSetPermissions() compares InLen with
>> FIELD_OFFSET(XENIFACE_STORE_SET_PERMISSIONS_IN, Permissions[N]), whose
>> 64-bit result is truncated to ULONG=2E The count was only capped to 255
>> later, in __ConvertPermissions(), so the length check alone could be
>> satisfied by a huge count=2E
>>
>> Check the cap first, with the same STATUS_INVALID_PARAMETER as before=
=2E
>> The check in __ConvertPermissions() is kept=2E
>>
>> Assisted-by: Claude:Opus-5=2E5
>> Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
>> ---
>>    src/xeniface/ioctl_store=2Ec | 5 +++++
>>    1 file changed, 5 insertions(+)
>>
>> diff --git a/src/xeniface/ioctl_store=2Ec b/src/xeniface/ioctl_store=2E=
c
>> index 97bef75=2E=2Ecb9f2ff 100644
>> --- a/src/xeniface/ioctl_store=2Ec
>> +++ b/src/xeniface/ioctl_store=2Ec
>> @@ -417,6 +417,11 @@ IoctlStoreSetPermissions(
>>            goto fail1;
>>        }
>>   =20
>> +    status =3D STATUS_INVALID_PARAMETER;
>> +    if (In->NumberPermissions > 255)
>> +        goto fail2;
>> +
> I think the check in __ConvertPermissions can then be removed=2E
Oh! I didn't get this comment right=2E Thought it was the check after=20
__ConvertPermissions=2E Sorry=2E
>
>> +    status =3D STATUS_INVALID_BUFFER_SIZE;
>>        if (InLen !=3D (ULONG)FIELD_OFFSET(XENIFACE_STORE_SET_PERMISSION=
S_IN, Permissions[In->NumberPermissions]))
>>            goto fail2;
>>   =20
>
>


-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.108.91424f7d468d8971.1a1637ba065.f7affad92273cbde=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 12:11:23 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 12:11:23 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1458027.1670481 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJrdj-0007ru-EZ; Thu, 22 Oct 2026 12:11:23 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1458027.1670481; Thu, 22 Oct 2026 12:11:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJrdj-0007rn-Bv; Thu, 22 Oct 2026 12:11:23 +0000
Received: by outflank-mailman (input) for mailman id 1458027;
 Thu, 22 Oct 2026 12:11:22 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16385dcc7000f79f@swg.vates.tech>)
 id 1xJrdi-0007rh-74
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 12:11:22 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJrdh-00B62F-K2
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 14:11:21 +0200
Received: from [10.42.69.11] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16385dcc7000f79f@swg.vates.tech>)
 id 6ad9fd64-2eae-0a2a0a5409dd-0a2a450b8ff0-14
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 14:11:21 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-42698a.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16385dcc7000f79f@swg.vates.tech>)
 id 6ad9fd69-b7e8-0a2a450b0019-b9ff1c229ae9-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 14:11:21 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a16385dcc7000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 12:11:19 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id DC362815CB;
 Thu, 22 Oct 2026 14:11:18 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=7aXGL9jVzaXFzopRbWDeq8qdi3njhRVO2U0I2JqOzW0=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=JHk2psbWkeXIqGAJXD+iH3OBWRkcK2oQICKy39efmPj+idySkEwyWE8jkOcP3c0QXRzS9ujDr
 o6e/PKRsLb3Tb4A7IQerWuiFy+05OSd9gVwQP5SW9onf1IKwiyWfgY53jhhFqJc/igMWHm4Yvgd
 ENAHVEXvWj13wwp7XeTVQcDV65tTnJT/M7EUFGlD4gH0ZQeMp4XLVi4gQAp/lWJwGi35+MTLSYT
 SGvjX5DPVFiVHU01/SPJEYWO0zsOIXT8slhdr2c+fN1V0CLlmJBDQtvLjQ93QJxN0iGpd8YHEfz
 Lf2veL/GFL7GmD2o1uVcqUVCRl0tZCDHN7/XAuEbcJ+g==
X-Zone-Loop: d0a7fa8bb21e8f2714a71eb1049efea630a82b22f7b2
x-campaign-type: default
x-transaction-id: eea3dc3e-a765-4b5f-bb95-2c33141926b0
x-swg-uid: 01-bdb23a2e-1646-42d0-b06e-f974d5af75f8
X-Mailer: Sweego
Message-ID:
 <1792671079.8631fc262581453bbf619ec5b2062170.1a16385dcc7000f79f@vates.tech>
x-swg-bid: 1792671079.8631fc262581453bbf619ec5b2062170.1a16385dcc7000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH] xeniface: Bound NumberPermissions before checking the input length
Date: Thu, 22 Oct 2026 14:10:31 +0200
In-Reply-To: <1792497190.8631fc262581453bbf619ec5b2062170.1a159288539000f79f@vates.tech>
References: <1792497190.8631fc262581453bbf619ec5b2062170.1a159288539000f79f@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.109.30b0630a3637b9ef.1a16385da56.586864b4b0d59a8a=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792671078998
X-purgate-ID: tlsNG-42698a/1792671081-1ACDF9EA-5B553F50/0/0
X-purgate-type: clean
X-purgate-size: 4322

---=Part.109.30b0630a3637b9ef.1a16385da56.586864b4b0d59a8a=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

IoctlStoreSetPermissions() compares InLen with
FIELD_OFFSET(XENIFACE_STORE_SET_PERMISSIONS_IN, Permissions[N]), whose
64-bit result is truncated to ULONG=2E The count was only capped to 255
later, in __ConvertPermissions(), so the length check alone could be
satisfied by a huge count=2E

Check the cap first, with the same STATUS_INVALID_PARAMETER as before=2E

The check in __ConvertPermissions() is removed and fails are updated
accordingly=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xeniface/ioctl_store=2Ec | 36 +++++++++++++++++++-----------------
 1 file changed, 19 insertions(+), 17 deletions(-)

diff --git a/src/xeniface/ioctl_store=2Ec b/src/xeniface/ioctl_store=2Ec
index 97bef75=2E=2Eb38b07c 100644
--- a/src/xeniface/ioctl_store=2Ec
+++ b/src/xeniface/ioctl_store=2Ec
@@ -343,12 +343,9 @@ __ConvertPermissions(
     PXENBUS_STORE_PERMISSION        XenbusPermissions;
     ULONG                           Index;
=20
-    if (NumberPermissions > 255)
-        goto fail1;
-
     XenbusPermissions =3D __AllocatePoolWithTag(NonPagedPool, NumberPermi=
ssions * sizeof(XENBUS_STORE_PERMISSION), XENIFACE_POOL_TAG);
     if (XenbusPermissions =3D=3D NULL)
-        goto fail2;
+        goto fail1;
=20
 #pragma warning(push)
 #pragma warning(disable:6385)
@@ -360,7 +357,7 @@ __ConvertPermissions(
         XENIFACE_STORE_PERMISSION_MASK  Mask =3D XenifacePermissions[Inde=
x]=2EMask;
=20
         if (Mask & ~XENIFACE_STORE_ALLOWED_PERMISSIONS)
-            goto fail3;
+            goto fail2;
=20
         XenbusPermissions[Index]=2EDomain =3D XenifacePermissions[Index]=
=2EDomain;
         XenbusPermissions[Index]=2EMask =3D 0;
@@ -375,12 +372,9 @@ __ConvertPermissions(
=20
     return XenbusPermissions;
=20
-fail3:
-    Error("Fail3\n");
-    __FreePoolWithTag(XenbusPermissions, XENIFACE_POOL_TAG);
-
 fail2:
     Error("Fail2\n");
+    __FreePoolWithTag(XenbusPermissions, XENIFACE_POOL_TAG);
=20
 fail1:
     Error("Fail1\n");
@@ -417,27 +411,32 @@ IoctlStoreSetPermissions(
         goto fail1;
     }
=20
-    if (InLen !=3D (ULONG)FIELD_OFFSET(XENIFACE_STORE_SET_PERMISSIONS_IN,=
 Permissions[In->NumberPermissions]))
+    status =3D STATUS_INVALID_PARAMETER;
+    if (In->NumberPermissions > 255)
         goto fail2;
=20
+    status =3D STATUS_INVALID_BUFFER_SIZE;
+    if (InLen !=3D (ULONG)FIELD_OFFSET(XENIFACE_STORE_SET_PERMISSIONS_IN,=
 Permissions[In->NumberPermissions]))
+        goto fail3;
+
     status =3D STATUS_INVALID_PARAMETER;
     if (In->PathLength =3D=3D 0 ||
         In->PathLength > XENSTORE_ABS_PATH_MAX) {
-        goto fail3;
+        goto fail4;
     }
=20
     Permissions =3D __ConvertPermissions(In->NumberPermissions, In->Permi=
ssions);
     if (Permissions =3D=3D NULL)
-        goto fail4;
+        goto fail5;
=20
     status =3D __CaptureUserBuffer(In->Path, In->PathLength, &Path);
     if (!NT_SUCCESS(status))
-        goto fail5;
+        goto fail6;
=20
     Path[In->PathLength - 1] =3D 0;
     status =3D STATUS_INVALID_PARAMETER;
     if (!__IsValidPath(Path, In->PathLength))
-        goto fail6;
+        goto fail7;
=20
     Trace("> Path '%s', NumberPermissions %lu\n", Path, In->NumberPermiss=
ions);
=20
@@ -457,22 +456,25 @@ IoctlStoreSetPermissions(
                           In->NumberPermissions);
=20
     if (!NT_SUCCESS(status))
-        goto fail7;
+        goto fail8;
=20
     __FreePermissions(Permissions);
     __FreeCapturedBuffer(Path);
     return status;
=20
+fail8:
+    Error("Fail8\n");
+
 fail7:
     Error("Fail7\n");
+    __FreeCapturedBuffer(Path);
=20
 fail6:
     Error("Fail6\n");
-    __FreeCapturedBuffer(Path);
+    __FreePermissions(Permissions);
=20
 fail5:
     Error("Fail5\n");
-    __FreePermissions(Permissions);
=20
 fail4:
     Error("Fail4\n");
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.109.30b0630a3637b9ef.1a16385da56.586864b4b0d59a8a=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 12:14:00 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 12:14:00 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1458036.1670495 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJrgG-0008NR-Ry; Thu, 22 Oct 2026 12:14:00 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1458036.1670495; Thu, 22 Oct 2026 12:14:00 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJrgG-0008NK-PR; Thu, 22 Oct 2026 12:14:00 +0000
Received: by outflank-mailman (input) for mailman id 1458036;
 Thu, 22 Oct 2026 12:13:59 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a163883749000f79f@swg.vates.tech>)
 id 1xJrgE-0008NC-Vm
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 12:13:59 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJrgE-009Gkj-Cb
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 14:13:58 +0200
Received: from [10.42.69.1] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a163883749000f79f@swg.vates.tech>)
 id 6ad9fdf9-e002-0a2a0a5209dd-0a2a450187ae-28
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 14:13:58 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a163883749000f79f@swg.vates.tech>)
 id 6ad9fe05-5984-0a2a45010019-b9ff1c238fd1-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 14:13:58 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a163883749000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 12:13:53 +0000
Received: from [192.168.1.61] (142.220.66.37.rev.sfr.net [37.66.220.142])
 (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 35CEE81AE0;
 Thu, 22 Oct 2026 14:13:53 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=OgoNaqZTZzm5SqgGZR35A/aXfvAwkmpA3H6gP7ZB+/0=;
 h=from:subject:date:message-id:to:mime-version:content-type:in-reply-to:references:feedback-id;
 b=VGmj+zqyE2s2yKgrlMZ8KlwQk+WccqL2Uv+n9/Gd1H4/QTw0FgT+K2ohMhMuhOipbgTfOKVsq
 7FQkhq1L3Ct9hcXhJsZeUvMXLrf8P3OamwqX85rkP+O7EjV5YtaqI8DfH39S/tvBzHzpmVL0fZ3
 5H3rjJhlsY62/UCsQsxlse0WN4VObTLFMzT3QPF2ppsrgmgOUOCCFMzAqGKbBjqJM1sb2bN1/Uq
 WOJqThre70QeTXRBnYwCVARJndKc3lo/qAKRYys/LVFlAuS8cXbi8b4BCD1FeAY+oeGrPq93eus
 mRthw8Cor09EuPZXvKuHUkPQgxReeeH7ypuOI2vqtKNg==
X-Zone-Loop: cda6881a991b476547f9eee53980e1f564621b7daed9
x-campaign-type: default
x-transaction-id: 616b657b-2f3e-4d13-b5ec-9276791f70cf
x-swg-uid: 01-70ef6a6c-f50c-4eff-8b13-57bb404b3133
X-Mailer: Sweego
Message-ID:
 <1792671233.8631fc262581453bbf619ec5b2062170.1a163883749000f79f@vates.tech>
x-swg-bid: 1792671233.8631fc262581453bbf619ec5b2062170.1a163883749000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
Date: Thu, 22 Oct 2026 14:13:52 +0200
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH] xeniface: Bound NumberPermissions before checking the
 input length
Content-Language: en-US
To: =?UTF-8?Q?C=C3=A9saire_Mounah?= <cesaire.mounah@vates.tech>,
 win-pv-devel@lists.xenproject.org
References: <1792497190.8631fc262581453bbf619ec5b2062170.1a159288539000f79f@vates.tech>
 <1792671079.8631fc262581453bbf619ec5b2062170.1a16385dcc7000f79f@vates.tech>
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
In-Reply-To: <1792671079.8631fc262581453bbf619ec5b2062170.1a16385dcc7000f79f@vates.tech>
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.10b.1b487698a25731fb.1a163883510.753104086d95fdfb=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792671233297
X-purgate-ID: tlsNG-d62444/1792671238-1EE60757-9625899A/0/0
X-purgate-type: clean
X-purgate-size: 4696

---=Part.10b.1b487698a25731fb.1a163883510.753104086d95fdfb=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

On 22/10/2026 14:11, C=C3=A9saire Mounah wrote:
> IoctlStoreSetPermissions() compares InLen with
> FIELD_OFFSET(XENIFACE_STORE_SET_PERMISSIONS_IN, Permissions[N]), whose
> 64-bit result is truncated to ULONG=2E The count was only capped to 255
> later, in __ConvertPermissions(), so the length check alone could be
> satisfied by a huge count=2E
>=20
> Check the cap first, with the same STATUS_INVALID_PARAMETER as before=2E
>=20
> The check in __ConvertPermissions() is removed and fails are updated
> accordingly=2E
>=20
> Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>

Reviewed-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>

> ---
>   src/xeniface/ioctl_store=2Ec | 36 +++++++++++++++++++-----------------
>   1 file changed, 19 insertions(+), 17 deletions(-)
>=20
> diff --git a/src/xeniface/ioctl_store=2Ec b/src/xeniface/ioctl_store=2Ec
> index 97bef75=2E=2Eb38b07c 100644
> --- a/src/xeniface/ioctl_store=2Ec
> +++ b/src/xeniface/ioctl_store=2Ec
> @@ -343,12 +343,9 @@ __ConvertPermissions(
>       PXENBUS_STORE_PERMISSION        XenbusPermissions;
>       ULONG                           Index;
>  =20
> -    if (NumberPermissions > 255)
> -        goto fail1;
> -
>       XenbusPermissions =3D __AllocatePoolWithTag(NonPagedPool, NumberPe=
rmissions * sizeof(XENBUS_STORE_PERMISSION), XENIFACE_POOL_TAG);
>       if (XenbusPermissions =3D=3D NULL)
> -        goto fail2;
> +        goto fail1;
>  =20
>   #pragma warning(push)
>   #pragma warning(disable:6385)
> @@ -360,7 +357,7 @@ __ConvertPermissions(
>           XENIFACE_STORE_PERMISSION_MASK  Mask =3D XenifacePermissions[I=
ndex]=2EMask;
>  =20
>           if (Mask & ~XENIFACE_STORE_ALLOWED_PERMISSIONS)
> -            goto fail3;
> +            goto fail2;
>  =20
>           XenbusPermissions[Index]=2EDomain =3D XenifacePermissions[Inde=
x]=2EDomain;
>           XenbusPermissions[Index]=2EMask =3D 0;
> @@ -375,12 +372,9 @@ __ConvertPermissions(
>  =20
>       return XenbusPermissions;
>  =20
> -fail3:
> -    Error("Fail3\n");
> -    __FreePoolWithTag(XenbusPermissions, XENIFACE_POOL_TAG);
> -
>   fail2:
>       Error("Fail2\n");
> +    __FreePoolWithTag(XenbusPermissions, XENIFACE_POOL_TAG);
>  =20
>   fail1:
>       Error("Fail1\n");
> @@ -417,27 +411,32 @@ IoctlStoreSetPermissions(
>           goto fail1;
>       }
>  =20
> -    if (InLen !=3D (ULONG)FIELD_OFFSET(XENIFACE_STORE_SET_PERMISSIONS_I=
N, Permissions[In->NumberPermissions]))
> +    status =3D STATUS_INVALID_PARAMETER;
> +    if (In->NumberPermissions > 255)
>           goto fail2;
>  =20
> +    status =3D STATUS_INVALID_BUFFER_SIZE;
> +    if (InLen !=3D (ULONG)FIELD_OFFSET(XENIFACE_STORE_SET_PERMISSIONS_I=
N, Permissions[In->NumberPermissions]))
> +        goto fail3;
> +
>       status =3D STATUS_INVALID_PARAMETER;
>       if (In->PathLength =3D=3D 0 ||
>           In->PathLength > XENSTORE_ABS_PATH_MAX) {
> -        goto fail3;
> +        goto fail4;
>       }
>  =20
>       Permissions =3D __ConvertPermissions(In->NumberPermissions, In->Pe=
rmissions);
>       if (Permissions =3D=3D NULL)
> -        goto fail4;
> +        goto fail5;
>  =20
>       status =3D __CaptureUserBuffer(In->Path, In->PathLength, &Path);
>       if (!NT_SUCCESS(status))
> -        goto fail5;
> +        goto fail6;
>  =20
>       Path[In->PathLength - 1] =3D 0;
>       status =3D STATUS_INVALID_PARAMETER;
>       if (!__IsValidPath(Path, In->PathLength))
> -        goto fail6;
> +        goto fail7;
>  =20
>       Trace("> Path '%s', NumberPermissions %lu\n", Path, In->NumberPerm=
issions);
>  =20
> @@ -457,22 +456,25 @@ IoctlStoreSetPermissions(
>                             In->NumberPermissions);
>  =20
>       if (!NT_SUCCESS(status))
> -        goto fail7;
> +        goto fail8;
>  =20
>       __FreePermissions(Permissions);
>       __FreeCapturedBuffer(Path);
>       return status;
>  =20
> +fail8:
> +    Error("Fail8\n");
> +
>   fail7:
>       Error("Fail7\n");
> +    __FreeCapturedBuffer(Path);
>  =20
>   fail6:
>       Error("Fail6\n");
> -    __FreeCapturedBuffer(Path);
> +    __FreePermissions(Permissions);
>  =20
>   fail5:
>       Error("Fail5\n");
> -    __FreePermissions(Permissions);
>  =20
>   fail4:
>       Error("Fail4\n");



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.10b.1b487698a25731fb.1a163883510.753104086d95fdfb=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 12:16:22 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 12:16:22 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1458040.1670498 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJriY-0008WM-21; Thu, 22 Oct 2026 12:16:22 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1458040.1670498; Thu, 22 Oct 2026 12:16:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJriX-0008WF-Vo; Thu, 22 Oct 2026 12:16:21 +0000
Received: by outflank-mailman (input) for mailman id 1458040;
 Thu, 22 Oct 2026 12:16:20 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1638a6a57000f79f@swg.vates.tech>)
 id 1xJriW-0008W9-GD
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 12:16:20 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJriV-002fsF-Rz
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 14:16:19 +0200
Received: from [10.42.69.3] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1638a6a57000f79f@swg.vates.tech>)
 id 6ad9fe85-e002-0a2a0a5209dd-0a2a4503c5f2-22
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 14:16:19 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-33051d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1638a6a57000f79f@swg.vates.tech>)
 id 6ad9fe93-fae8-0a2a45030019-b9ff1c2280e3-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 14:16:19 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1638a6a57000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 12:16:18 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 2311880D94;
 Thu, 22 Oct 2026 14:16:17 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=W47hr/wfHVP51w5gw73aAEf8qU+J0RMVD7avhsBI4FU=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:feedback-id;
 b=GJIokhlYUnM4ovJlZbGUuXaklhD74eACaOthkloilCJTE1usn8Oi3dihU9CClDTCCIiLLqJSd
 EO9EWw3ZIRM9+oVozBpLjnczfGlW7Fj78fEfHx5Pyibrila/tlYY+6XDXwzbhSY30jHXvDgKBWK
 5RjpI4OgIUjIbL6sF5lvYMccWOqJRntI1tJQ7vkrpG+Q/nb9nZHdfCoRwKj80nUFpyG3EwhVPu8
 InCOpzz6K2qhq8RMkO63TtbUI6qweCO0hnPqMyKuzo0rDIMOwbiqnnIRSoCwrGo6sx3MAWqk06U
 RFgMR162XLeAcr9qykVv29kGWRxkCo5DRksuJwxeAyOQ==
X-Zone-Loop: b2dc85114bae7013055a43eb405b7631e3fd58366cd5
x-campaign-type: default
x-transaction-id: b71a147b-1b42-4892-a6e9-39aa19bbbeef
x-swg-uid: 01-ce62402d-af4d-4d6b-bea9-12202f73276c
X-Mailer: Sweego
Message-ID:
 <1792671378.8631fc262581453bbf619ec5b2062170.1a1638a6a57000f79f@vates.tech>
x-swg-bid: 1792671378.8631fc262581453bbf619ec5b2062170.1a1638a6a57000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [XENVBD-SYNC 0/3] Sync common files with xenbus and bug fixes
Date: Thu, 22 Oct 2026 14:16:07 +0200
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.10d.b9ea88e9d79439f2.1a1638a677e.5b7d1c1ee4bc7a97=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792671377278
X-purgate-ID: tlsNG-33051d/1792671379-6C6DE4E9-35CC88A4/0/0
X-purgate-type: clean
X-purgate-size: 928

---=Part.10d.b9ea88e9d79439f2.1a1638a677e.5b7d1c1ee4bc7a97=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Sync common files with xenbus and apply related bug fixes=2E

C=C3=A9saire Mounah (3):
  util: Sync with xenbus
  xenvbd: Sync common helper files with xenbus
  xencrsh: Fix inverted BUG_ON

 src/common/util=2Eh     | 23 ++++++++++++++++++-----
 src/xencrsh/assert=2Eh  |  2 +-
 src/xenvbd/assert=2Eh   | 19 +++++++++----------
 src/xenvbd/registry=2Ec | 24 ++++++++++++------------
 src/xenvbd/registry=2Eh | 16 ++++++++--------
 src/xenvbd/ring=2Ec     |  7 +------
 6 files changed, 49 insertions(+), 42 deletions(-)

--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.10d.b9ea88e9d79439f2.1a1638a677e.5b7d1c1ee4bc7a97=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 12:17:47 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 12:17:47 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1458043.1670502 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJrjv-0000L3-76; Thu, 22 Oct 2026 12:17:47 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1458043.1670502; Thu, 22 Oct 2026 12:17:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJrjv-0000Kw-4E; Thu, 22 Oct 2026 12:17:47 +0000
Received: by outflank-mailman (input) for mailman id 1458043;
 Thu, 22 Oct 2026 12:17:45 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1638bb4b6000f79f@swg.vates.tech>)
 id 1xJrjt-0000Ke-Hu
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 12:17:45 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJrjs-00DRuF-Rg
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 14:17:44 +0200
Received: from [10.42.69.2] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1638bb4b6000f79f@swg.vates.tech>)
 id 6ad9fee2-e002-0a2a0a5209dd-0a2a4502bd68-22
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 14:17:44 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1638bb4b6000f79f@swg.vates.tech>)
 id 6ad9fee8-6ca4-0a2a45020019-b9ff1c23b187-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 14:17:44 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1638bb4b6000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 12:17:42 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id F1278827C6;
 Thu, 22 Oct 2026 14:17:41 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=m+K+xtPRJTBiYS7gBtotJkvpjo4LT+Vm1CyVECE8HIo=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=W3++doNIkNru3g5/Iva4MpCc9gBqcaY3TpL9hhXTswH/Fm6xsN/8rN9m/nqg57jYVFGjpUwt4
 uPlBI5vUwMeDx3t23bQByfASyOEUj3PDh3POA71PU3wVXPEnrxRK3O+FUeeGxKgbyrSSTa/pF49
 qm0tfrHZiMj6NBgYG+zUf0JQoMDOSJCRuNoqYqAt+oJl1gl02LxIcQdrnrha+hCQlWRG/w+Qxvu
 WZ4PGN6rHLoDnwKY5/cGXjL7nR5gsmBrO4VGcg1uhFzQKt7fYzxVeZ2Rg1ROgmXyiwjTFThUJnN
 wVDWyDP9iqnpUI3mJwBk0XUHgvEi2z+XahTWSov9BlYQ==
X-Zone-Loop: 5248c4b82ff740bd9bfd4d6b63df7d9f14edee777de2
x-campaign-type: default
x-transaction-id: c4800887-70fe-441b-891a-79d483b73417
x-swg-uid: 01-cc2398c7-296d-471f-8cf1-de29f60db1ed
X-Mailer: Sweego
Message-ID:
 <1792671462.8631fc262581453bbf619ec5b2062170.1a1638bb4b6000f79f@vates.tech>
x-swg-bid: 1792671462.8631fc262581453bbf619ec5b2062170.1a1638bb4b6000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 3/3] xencrsh: Fix inverted BUG_ON
Date: Thu, 22 Oct 2026 14:17:37 +0200
In-Reply-To: <1792671378.8631fc262581453bbf619ec5b2062170.1a1638a6a57000f79f@vates.tech>
References: <1792671378.8631fc262581453bbf619ec5b2062170.1a1638a6a57000f79f@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.110.e220022a3b9375cf.1a1638bb2ea.994af54edcda4a8=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792671462122
X-purgate-ID: tlsNG-720697/1792671464-F08A42AC-3156BDB7/0/0
X-purgate-type: clean
X-purgate-size: 1142

---=Part.110.e220022a3b9375cf.1a1638bb2ea.994af54edcda4a8=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

BUG_ON(_EXP) called BUG when _EXP was false, the opposite of every
other copy of assert=2Eh=2E There is no caller yet, so nothing is affected=
,
but the first BUG_ON() added would have fired on the valid case=2E
Fixed by syncing with xenbus=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xencrsh/assert=2Eh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/xencrsh/assert=2Eh b/src/xencrsh/assert=2Eh
index 3692e94=2E=2E7fc3014 100644
--- a/src/xencrsh/assert=2Eh
+++ b/src/xencrsh/assert=2Eh
@@ -71,7 +71,7 @@ __Bug(
         } while (FALSE)
=20
 #define BUG_ON(_EXP)                \
-        if (!(_EXP)) BUG(#_EXP)
+        if (_EXP) BUG(#_EXP)
=20
 #undef  ASSERT
=20
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.110.e220022a3b9375cf.1a1638bb2ea.994af54edcda4a8=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 12:17:47 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 12:17:47 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1458044.1670510 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJrjv-0000LP-D8; Thu, 22 Oct 2026 12:17:47 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1458044.1670510; Thu, 22 Oct 2026 12:17:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJrjv-0000LA-5O; Thu, 22 Oct 2026 12:17:47 +0000
Received: by outflank-mailman (input) for mailman id 1458044;
 Thu, 22 Oct 2026 12:17:45 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1638bb266000f79f@swg.vates.tech>)
 id 1xJrjt-0000Kf-Md
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 12:17:45 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJrjs-002Gp2-SK
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 14:17:44 +0200
Received: from [10.42.69.12] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1638bb266000f79f@swg.vates.tech>)
 id 6ad9fee5-bab6-0a2a0a5309dd-0a2a450cca10-10
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 14:17:44 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-d25034.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1638bb266000f79f@swg.vates.tech>)
 id 6ad9fee8-f479-0a2a450c0019-b9ff1c129f91-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 14:17:44 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1638bb266000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 12:17:41 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 2A5DA82100;
 Thu, 22 Oct 2026 14:17:41 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=ujaXrA12vSz8vCJPuUZC67XTkR9PmQlQi+hpvHsxBFI=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=eXldPWXKmnXEIOo38xTJMuY47C6og8v/DIT8ue35biP7XlYsTgYoXK3PJXluWqQbbo6cq4G55
 NrzJ2/RQDmSlB8Ld85QfWuZnh6GE5scJQ1czdoXodp8LYDOy7qwM9ot9Sp/W32Z5lpsxSwGMBKr
 8lb2T+XQUYwkn/g5GphORyQu5akgjAwK89LsyxZJ357Kntwgmw7V1AjnJ23WUh6bSZY2N56X+cF
 YSQa2ckQBcbITehgLxdaVvgH8jS8XGClhFF7Y/57ghzegmE5dQm2gUG4EQoN/4LPpGvM3D8fmpP
 85CCy9DG5ToloagfsSZDzpyTM6awqnzVCC2KVLwitrRA==
X-Zone-Loop: 9d70ec36fa9c09bc64954885eef479ef6e68d564cc7a
x-campaign-type: default
x-transaction-id: da2cd1b4-3015-4a12-935b-b51907513e77
x-swg-uid: 01-490ce84f-4a4b-46c2-97bb-b05351c1e3d4
X-Mailer: Sweego
Message-ID:
 <1792671462.8631fc262581453bbf619ec5b2062170.1a1638bb266000f79f@vates.tech>
x-swg-bid: 1792671462.8631fc262581453bbf619ec5b2062170.1a1638bb266000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 1/3] util: Sync with xenbus
Date: Thu, 22 Oct 2026 14:17:35 +0200
In-Reply-To: <1792671378.8631fc262581453bbf619ec5b2062170.1a1638a6a57000f79f@vates.tech>
References: <1792671378.8631fc262581453bbf619ec5b2062170.1a1638a6a57000f79f@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.10e.8b55a78740317cc8.1a1638bafa1.23dbaaaedd2adb6f=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792671461281
X-purgate-ID: tlsNG-d25034/1792671464-51936A5B-CC9C2CEE/0/0
X-purgate-type: clean
X-purgate-size: 3835

---=Part.10e.8b55a78740317cc8.1a1638bafa1.23dbaaaedd2adb6f=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Take util=2Eh from xenbus=2E This brings TIME_* macros=2E
Remove TIME_* macros of xenvbd/ring=2Ec now provided by util=2Eh=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/common/util=2Eh | 23 ++++++++++++++++++-----
 src/xenvbd/ring=2Ec |  7 +------
 2 files changed, 19 insertions(+), 11 deletions(-)

diff --git a/src/common/util=2Eh b/src/common/util=2Eh
index b197b14=2E=2Edb40d4f 100644
--- a/src/common/util=2Eh
+++ b/src/common/util=2Eh
@@ -41,6 +41,11 @@
 #define	P2ROUNDUP(_t, _x, _a)   \
         (-(-((_t)(_x)) & -(((_t)(_a)))))
=20
+#define TIME_US(_us)            ((_us) * 10ll)
+#define TIME_MS(_ms)            (TIME_US((_ms) * 1000ll))
+#define TIME_S(_s)              (TIME_MS((_s) * 1000ll))
+#define TIME_RELATIVE(_t)       (-(_t))
+
 static FORCEINLINE LONG
 __ffs(
     _In_ unsigned long long mask
@@ -89,7 +94,7 @@ __CpuId(
     _Out_opt_ PULONG    EDX
     )
 {
-    int                 Value[4] =3D {0};
+    int         Value[4] =3D {0};
=20
     __cpuid(Value, Leaf);
=20
@@ -181,13 +186,15 @@ __FreePoolWithTag(
=20
 static FORCEINLINE PMDL
 __AllocatePages(
-    _In_ ULONG          Count
+    _In_ ULONG          Count,
+    _In_ BOOLEAN        Contiguous
     )
 {
     PHYSICAL_ADDRESS    LowAddress;
     PHYSICAL_ADDRESS    HighAddress;
     LARGE_INTEGER       SkipBytes;
     SIZE_T              TotalBytes;
+    ULONG               Flags;
     PMDL                Mdl;
     PUCHAR              MdlMappedSystemVa;
     NTSTATUS            status;
@@ -197,12 +204,18 @@ __AllocatePages(
     SkipBytes=2EQuadPart =3D 0ull;
     TotalBytes =3D (SIZE_T)PAGE_SIZE * Count;
=20
+    if (Contiguous) {
+        Flags =3D MM_ALLOCATE_REQUIRE_CONTIGUOUS_CHUNKS;
+    } else {
+        Flags =3D MM_ALLOCATE_FULLY_REQUIRED;
+    }
+
     Mdl =3D MmAllocatePagesForMdlEx(LowAddress,
                                   HighAddress,
                                   SkipBytes,
                                   TotalBytes,
                                   MmCached,
-                                  MM_ALLOCATE_FULLY_REQUIRED);
+                                  Flags);
=20
     status =3D STATUS_NO_MEMORY;
     if (Mdl =3D=3D NULL)
@@ -246,14 +259,14 @@ fail1:
     return NULL;
 }
=20
-#define __AllocatePage()    __AllocatePages(1)
+#define __AllocatePage()    __AllocatePages(1, FALSE)
=20
 static FORCEINLINE VOID
 __FreePages(
     _In_ PMDL   Mdl
     )
 {
-    PUCHAR      MdlMappedSystemVa;
+    PUCHAR	MdlMappedSystemVa;
=20
     ASSERT(Mdl->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA);
     MdlMappedSystemVa =3D Mdl->MappedSystemVa;
diff --git a/src/xenvbd/ring=2Ec b/src/xenvbd/ring=2Ec
index 339679b=2E=2Edae2ca0 100644
--- a/src/xenvbd/ring=2Ec
+++ b/src/xenvbd/ring=2Ec
@@ -1679,11 +1679,6 @@ BlkifRingDpc(
     }
 }
=20
-#define TIME_US(_us)        ((_us) * 10)
-#define TIME_MS(_ms)        (TIME_US((_ms) * 1000))
-#define TIME_S(_s)          (TIME_MS((_s) * 1000))
-#define TIME_RELATIVE(_t)   (-(_t))
-
 #define XENVBD_WATCHDOG_PERIOD 30
=20
 static NTSTATUS
@@ -2050,7 +2045,7 @@ BlkifRingConnect(
     if (!NT_SUCCESS(status))
         goto fail1;
=20
-    BlkifRing->Mdl =3D __AllocatePages(1 << Ring->Order);
+    BlkifRing->Mdl =3D __AllocatePages(1 << Ring->Order, FALSE);
=20
     status =3D STATUS_NO_MEMORY;
     if (BlkifRing->Mdl =3D=3D NULL)
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.10e.8b55a78740317cc8.1a1638bafa1.23dbaaaedd2adb6f=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 12:17:47 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 12:17:47 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1458045.1670511 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJrjv-0000Lp-Dy; Thu, 22 Oct 2026 12:17:47 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1458045.1670511; Thu, 22 Oct 2026 12:17:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJrjv-0000LM-74; Thu, 22 Oct 2026 12:17:47 +0000
Received: by outflank-mailman (input) for mailman id 1458045;
 Thu, 22 Oct 2026 12:17:46 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1638bb36c000f79f@swg.vates.tech>)
 id 1xJrjt-0000Kp-UF
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 12:17:46 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJrjt-002Gp2-Al
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 14:17:45 +0200
Received: from [10.42.69.12] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1638bb36c000f79f@swg.vates.tech>)
 id 6ad9fee5-bab6-0a2a0a5309dd-0a2a450cca10-14
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 14:17:45 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-d25034.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1638bb36c000f79f@swg.vates.tech>)
 id 6ad9fee8-f479-0a2a450c0019-b9ff1c23a461-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 14:17:44 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1638bb36c000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 12:17:42 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id B450C804A0;
 Thu, 22 Oct 2026 14:17:41 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=joj4+h45osIbaZU0FOGEme+ek4FJM627nHxPwJZP6kw=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=Oi2W4bmakv443pVN9SlhA+P4sU+c7uwsJACofh5kqWr7mxTm0Hr1CTwYFLv2S0TKTOiZNBhC7
 XoI53B4NyDD9pFNb8YOwaZ/X+zG4BtcdB16ukfKm23EZhPjVH4Zgp44q0quiTnnELxZZCAXtNM0
 cOO0BOqJltWgGRNPfjjvV81HRl2cD1BuF/zOW1ZF9i2a0L7zZqsIhQdJ5qKf/0xkmbj5qp9RpBY
 fGbMcw8+TttmJV7OeJM/Wi5PF7/UsIiM6fBhWeA5tk2dwMm22D8KrQrz8zexv2jqmEJGa7/WN+d
 094QCB5FNpwmYy9XWoeogWjp+b9APO0J+D9Nq9JVrmlQ==
X-Zone-Loop: c3285180886c3fdf2662f98a24548b06343d0cb4cb48
x-campaign-type: default
x-transaction-id: 7fd1473d-9c04-41c3-9ce7-48bd4617a8e0
x-swg-uid: 01-7574c896-04c9-45c7-9cee-a5bc5587961d
X-Mailer: Sweego
Message-ID:
 <1792671462.8631fc262581453bbf619ec5b2062170.1a1638bb36c000f79f@vates.tech>
x-swg-bid: 1792671462.8631fc262581453bbf619ec5b2062170.1a1638bb36c000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH 2/3] xenvbd: Sync common helper files with xenbus
Date: Thu, 22 Oct 2026 14:17:36 +0200
In-Reply-To: <1792671378.8631fc262581453bbf619ec5b2062170.1a1638a6a57000f79f@vates.tech>
References: <1792671378.8631fc262581453bbf619ec5b2062170.1a1638a6a57000f79f@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.10f.4923f34279cb6f03.1a1638bb1cb.7b2efd95a3e55abd=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792671461835
X-purgate-ID: tlsNG-d25034/1792671464-00ACCA5B-F0091A50/0/0
X-purgate-type: clean
X-purgate-size: 5120

---=Part.10f.4923f34279cb6f03.1a1638bb1cb.7b2efd95a3e55abd=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Take assert=2Eh and registry=2Ec/h from xenbus=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xenvbd/assert=2Eh   | 19 +++++++++----------
 src/xenvbd/registry=2Ec | 24 ++++++++++++------------
 src/xenvbd/registry=2Eh | 16 ++++++++--------
 3 files changed, 29 insertions(+), 30 deletions(-)

diff --git a/src/xenvbd/assert=2Eh b/src/xenvbd/assert=2Eh
index b1e206c=2E=2E8c4315e 100644
--- a/src/xenvbd/assert=2Eh
+++ b/src/xenvbd/assert=2Eh
@@ -56,7 +56,6 @@ __Bug(
=20
 #define ASSERTION_FAILURE   0x0000DEAD
=20
-
 #define BUG(_TEXT)                                              \
         do {                                                    \
             PCSTR       _Text =3D (_TEXT);                       \
@@ -155,13 +154,13 @@ __Bug(
=20
 static __inline BOOLEAN
 _IsZeroMemory(
-    _In_ PCSTR      Caller,
-    _In_ PCSTR      Name,
-    _In_ PVOID      Buffer,
-    _In_ ULONG      Length
+    _In_ PCSTR                      Caller,
+    _In_ PCSTR                      Name,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Length
     )
 {
-    ULONG           Offset;
+    ULONG                           Offset;
=20
     Offset =3D 0;
     while (Offset < Length) {
@@ -179,10 +178,10 @@ _IsZeroMemory(
=20
 static __inline BOOLEAN
 _IsZeroMemory(
-    _In_ PCSTR  Caller,
-    _In_ PCSTR  Name,
-    _In_ PVOID  Buffer,
-    _In_ ULONG  Length
+    _In_ PCSTR                      Caller,
+    _In_ PCSTR                      Name,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Length
     )
 {
     UNREFERENCED_PARAMETER(Caller);
diff --git a/src/xenvbd/registry=2Ec b/src/xenvbd/registry=2Ec
index 4f7c5ef=2E=2Ed576990 100644
--- a/src/xenvbd/registry=2Ec
+++ b/src/xenvbd/registry=2Ec
@@ -1169,17 +1169,17 @@ fail1:
=20
 NTSTATUS
 RegistryQueryBinaryValue(
-    _In_ HANDLE                     Key,
-    _In_ PSTR                       Name,
-    _Outptr_ PVOID                  *Buffer,
-    _Out_ PULONG                    Length
+    _In_ HANDLE                                 Key,
+    _In_ PSTR                                   Name,
+    _Outptr_result_bytebuffer_(*Length) PVOID   *Buffer,
+    _Out_ PULONG                                Length
     )
 {
-    ANSI_STRING                     Ansi;
-    UNICODE_STRING                  Unicode;
-    PKEY_VALUE_PARTIAL_INFORMATION  Partial;
-    ULONG                           Size;
-    NTSTATUS                        status;
+    ANSI_STRING                                 Ansi;
+    UNICODE_STRING                              Unicode;
+    PKEY_VALUE_PARTIAL_INFORMATION              Partial;
+    ULONG                                       Size;
+    NTSTATUS                                    status;
=20
     RtlInitAnsiString(&Ansi, Name);
=20
@@ -1256,7 +1256,7 @@ NTSTATUS
 RegistryUpdateBinaryValue(
     _In_ HANDLE                     Key,
     _In_ PSTR                       Name,
-    _In_ PVOID                      Buffer,
+    _In_reads_bytes_(Length) PVOID  Buffer,
     _In_ ULONG                      Length
     )
 {
@@ -1444,7 +1444,7 @@ fail1:
=20
 static PKEY_VALUE_PARTIAL_INFORMATION
 RegistryAnsiToSz(
-    PANSI_STRING                    Ansi
+    _In_ PANSI_STRING               Ansi
     )
 {
     ULONG                           Length;
@@ -1490,7 +1490,7 @@ fail1:
=20
 static PKEY_VALUE_PARTIAL_INFORMATION
 RegistryAnsiToMultiSz(
-    PANSI_STRING                    Ansi
+    _In_ PANSI_STRING               Ansi
     )
 {
     ULONG                           Length;
diff --git a/src/xenvbd/registry=2Eh b/src/xenvbd/registry=2Eh
index 26bc0c6=2E=2Eba1eace 100644
--- a/src/xenvbd/registry=2Eh
+++ b/src/xenvbd/registry=2Eh
@@ -166,18 +166,18 @@ RegistryQuerySzValue(
=20
 extern NTSTATUS
 RegistryQueryBinaryValue(
-    _In_ HANDLE         Key,
-    _In_ PSTR           Name,
-    _Outptr_ PVOID      *Buffer,
-    _Out_ PULONG        Length
+    _In_ HANDLE                                 Key,
+    _In_ PSTR                                   Name,
+    _Outptr_result_bytebuffer_(*Length) PVOID   *Buffer,
+    _Out_ PULONG                                Length
     );
=20
 extern NTSTATUS
 RegistryUpdateBinaryValue(
-    _In_ HANDLE         Key,
-    _In_ PSTR           Name,
-    _In_ PVOID          Buffer,
-    _In_ ULONG          Length
+    _In_ HANDLE                     Key,
+    _In_ PSTR                       Name,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Length
     );
=20
 extern NTSTATUS
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.10f.4923f34279cb6f03.1a1638bb1cb.7b2efd95a3e55abd=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 12:21:11 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 12:21:11 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1458049.1670514 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJrnD-0001Vj-Lz; Thu, 22 Oct 2026 12:21:11 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1458049.1670514; Thu, 22 Oct 2026 12:21:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJrnD-0001Vc-JY; Thu, 22 Oct 2026 12:21:11 +0000
Received: by outflank-mailman (input) for mailman id 1458049;
 Thu, 22 Oct 2026 12:21:11 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1638ed0b2000f79f@swg.vates.tech>)
 id 1xJrnC-0001VW-Ve
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 12:21:10 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJrnC-006pac-1k
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 14:21:10 +0200
Received: from [10.42.69.2] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1638ed0b2000f79f@swg.vates.tech>)
 id 6ad9ffad-2eae-0a2a0a5409dd-0a2a4502e39c-24
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 14:21:09 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1638ed0b2000f79f@swg.vates.tech>)
 id 6ad9ffb5-6ca4-0a2a45020019-b9ff1c22a7c5-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 14:21:09 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1638ed0b2000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 12:21:06 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id B81E3829C1;
 Thu, 22 Oct 2026 14:21:05 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=1zN8JvkSPRz8Obn9Wd4B+xegjje1bjg4TnQhgnHtEDA=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:feedback-id;
 b=aTw8wwRbT4c/tmmwxagNa0L+phRZPeNR7KjLsfHmGxXq1Ddpo7uuVFdTLxvT4nE781E5H40U4
 kWtmiR6A6F957oF3k/AT3zfhdQa1OhtXECXqTRYSzwqD7uRSlwIDinZzpvp/QciyJ4XKV+qtItd
 DnE4GqTC/Zw9G4EyprZNEeYork7Sa8AOUEap0nrnPQaUAd/1cE01ny2IOOiFRaABCsvHSvi8klP
 qtKxjM3+3W3bB27y4c7wFoioyqPKoMa8hKWoAiXLgYrQAnyf0GrLsDjSw3MHRGcNalmESGTcZhV
 k05kjGm9Wda1WUmw0EkQpRGhu2waUE7m18vvuMmutMDQ==
X-Zone-Loop: d80fcff644c2b900e56832bfa534658747814110e27e
x-campaign-type: default
x-transaction-id: a863a8ac-b5b5-4303-9e57-104a94c6e3a8
x-swg-uid: 01-9ab889e4-445b-4656-a9d5-7320db389432
X-Mailer: Sweego
Message-ID:
 <1792671666.8631fc262581453bbf619ec5b2062170.1a1638ed0b2000f79f@vates.tech>
x-swg-bid: 1792671666.8631fc262581453bbf619ec5b2062170.1a1638ed0b2000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [XENVIF-SYNC 0/4] Sync common files with xenbus
Date: Thu, 22 Oct 2026 14:21:00 +0200
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.111.377cc66c5b2a2991.1a1638ecebb.30a966292299b922=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792671665852
X-purgate-ID: tlsNG-720697/1792671669-F3EBB2AC-D9953922/0/0
X-purgate-type: clean
X-purgate-size: 1350

---=Part.111.377cc66c5b2a2991.1a1638ecebb.30a966292299b922=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Sync common files and headers with xenbus=2E

C=C3=A9saire Mounah (4):
  include: sync store_interface=2Eh with xenbus
  util: sync with xenbus
  registry: sync with xenbus
  xenvif: sync common files with xenbus

 include/store_interface=2Eh | 80 ++++++++++++++++-----------------
 src/xenvif/controller=2Ec   |  5 ---
 src/xenvif/dbg_print=2Eh    | 66 ++++++++++++++++-----------
 src/xenvif/driver=2Ec       |  2 +-
 src/xenvif/mutex=2Eh        | 93 ++++++++++++++++++++++++++-------------
 src/xenvif/names=2Eh        | 26 +++++------
 src/xenvif/receiver=2Ec     |  5 ---
 src/xenvif/registry=2Ec     | 42 ++++++++++--------
 src/xenvif/registry=2Eh     | 36 +++++++--------
 src/xenvif/thread=2Ec       | 72 +++++++++++++++---------------
 src/xenvif/thread=2Eh       | 52 +++++++++++-----------
 src/xenvif/transmitter=2Ec  |  5 ---
 src/xenvif/util=2Eh         |  8 +++-
 13 files changed, 264 insertions(+), 228 deletions(-)

--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.111.377cc66c5b2a2991.1a1638ecebb.30a966292299b922=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 12:22:03 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 12:22:03 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1458053.1670522 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJro2-0001Za-Ul; Thu, 22 Oct 2026 12:22:02 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1458053.1670522; Thu, 22 Oct 2026 12:22:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJro2-0001ZK-OK; Thu, 22 Oct 2026 12:22:02 +0000
Received: by outflank-mailman (input) for mailman id 1458053;
 Thu, 22 Oct 2026 12:22:02 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1638f9fa6000f79f@swg.vates.tech>)
 id 1xJro1-0001Yl-Tn
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 12:22:02 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJro1-006twq-AR
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 14:22:01 +0200
Received: from [10.42.69.9] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1638f9fa6000f79f@swg.vates.tech>)
 id 6ad9ffdb-8faa-0a2a0a5109dd-0a2a4509b4a6-48
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 14:22:01 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-bad1c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1638f9fa6000f79f@swg.vates.tech>)
 id 6ad9ffe8-be1a-0a2a45090019-b9ff1c22875b-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 14:22:01 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1638f9fa6000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 12:21:59 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id C5BC282C5B;
 Thu, 22 Oct 2026 14:21:58 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=v/IvZDY9ZyberGpolTsUBsQExQhlpYBfxv5lhmzKdKI=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=MKxsgrb7fX72BmV0soycYL/Tyj9dq6Us3qQf7s2CqKi7Ih5jbIPFN/e+TqxJPjtA4e+A8dZe7
 GCIQzCW3tyuhY302iFgAot6Alf8NbQx42Ar5kpc4FffwCVVH29TE4ohhIOlcdFLRi14cE2cqT0I
 TziqEgPlYIlQ0oDgHcNwbz8qZCwhd0FkpXz3lmYTIDxI6JbRzX/FbN/IgdXOd6zEtY/qJaB5Agb
 Mw+pB7SpKlSgM3FPP8y7DFaXlLSzExZxbP8Pre3TEkUDrqzcsjoUuGOkHgCSHkkop11taojaR4+
 17QReLRK7bR+mBNtSznLXjKKjIlZivNZ+y9bQsKdUSMg==
X-Zone-Loop: 3db58fec363bcc4ffeee17187233405718aaad71d33c
x-campaign-type: default
x-transaction-id: 44cd4003-605a-4729-8c48-1794903ea8a5
x-swg-uid: 01-f3dee4c5-1d43-47d0-a7dd-327df4aa4558
X-Mailer: Sweego
Message-ID:
 <1792671719.8631fc262581453bbf619ec5b2062170.1a1638f9fa6000f79f@vates.tech>
x-swg-bid: 1792671719.8631fc262581453bbf619ec5b2062170.1a1638f9fa6000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [XENVIF-SYNC 1/4] include: sync store_interface.h with xenbus
Date: Thu, 22 Oct 2026 14:21:51 +0200
In-Reply-To: <1792671666.8631fc262581453bbf619ec5b2062170.1a1638ed0b2000f79f@vates.tech>
References: <1792671666.8631fc262581453bbf619ec5b2062170.1a1638ed0b2000f79f@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.114.782619dc3a15bb5a.1a1638f9df8.ea897057aca8f65b=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792671718904
X-purgate-ID: tlsNG-bad1c0/1792671721-FDA6E034-A51DE7FA/0/0
X-purgate-type: clean
X-purgate-size: 7953

---=Part.114.782619dc3a15bb5a.1a1638f9df8.ea897057aca8f65b=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 include/store_interface=2Eh | 80 +++++++++++++++++++--------------------
 1 file changed, 40 insertions(+), 40 deletions(-)

diff --git a/include/store_interface=2Eh b/include/store_interface=2Eh
index 83a76a1=2E=2E208be0e 100644
--- a/include/store_interface=2Eh
+++ b/include/store_interface=2Eh
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -72,7 +72,7 @@ typedef struct _XENBUS_STORE_PERMISSION {
     \brief Acquire a reference to the STORE interface
=20
     \param Interface The interface header
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_ACQUIRE)(
     _In_ PINTERFACE Interface
@@ -82,7 +82,7 @@ typedef NTSTATUS
     \brief Release a reference to the STORE interface
=20
     \param Interface The interface header
-*/ =20
+*/
 typedef VOID
 (*XENBUS_STORE_RELEASE)(
     _In_ PINTERFACE Interface
@@ -93,7 +93,7 @@ typedef VOID
=20
     \param Interface The interface header
     \param Buffer Pointer to the memory buffer
-*/ =20
+*/
 typedef VOID
 (*XENBUS_STORE_FREE)(
     _In_ PINTERFACE Interface,
@@ -113,14 +113,14 @@ typedef VOID
     buffer containing the value read
=20
     The \a Buffer should be freed using \a XENBUS_STORE_FREE
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_READ)(
     _In_ PINTERFACE                     Interface,
     _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
     _In_opt_ PSTR                       Prefix,
     _In_ PSTR                           Node,
-    _Outptr_ PCHAR                      *Buffer
+    _Outptr_result_z_ PSTR              *Buffer
     );
=20
 /*! \typedef XENBUS_STORE_PRINTF
@@ -136,7 +136,7 @@ typedef NTSTATUS
     \param =2E=2E=2E Additional parameters required by \a Format
=20
     If the \a Node does not exist then it is created
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_PRINTF)(
     _In_ PINTERFACE                     Interface,
@@ -156,7 +156,7 @@ typedef NTSTATUS
     \param Prefix An optional prefix for the \a Node
     \param Node The concatenation of the \a Prefix and this value specifi=
es
     the XenStore key to remove
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_REMOVE)(
     _In_ PINTERFACE                     Interface,
@@ -178,14 +178,14 @@ typedef NTSTATUS
     buffer containing a NUL separated list of key names
=20
     The \a Buffer should be freed using \a XENBUS_STORE_FREE
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_DIRECTORY)(
     _In_ PINTERFACE                     Interface,
     _In_opt_ PXENBUS_STORE_TRANSACTION  Transaction,
     _In_opt_ PSTR                       Prefix,
     _In_ PSTR                           Node,
-    _Outptr_ PCHAR                      *Buffer
+    _Outptr_result_z_ PSTR              *Buffer
     );
=20
 /*! \typedef XENBUS_STORE_TRANSACTION_START
@@ -193,7 +193,7 @@ typedef NTSTATUS
=20
     \param Interface The interface header
     \param Transaction Pointer to a transaction handle to be initialized
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_TRANSACTION_START)(
     _In_ PINTERFACE                     Interface,
@@ -210,7 +210,7 @@ typedef NTSTATUS
=20
     If \a Commit is TRUE and the transaction to found to clash then
     STATUS_RETRY will be returned
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_TRANSACTION_END)(
     _In_ PINTERFACE                 Interface,
@@ -228,7 +228,7 @@ typedef NTSTATUS
     \param Event A pointer to an event object to be signalled when the
     watch fires
     \param Watch A pointer to a watch handle to be initialized
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_WATCH_ADD)(
     _In_ PINTERFACE                 Interface,
@@ -243,11 +243,11 @@ typedef NTSTATUS
=20
     \param Interface The interface header
     \param Watch The watch handle
-*/ =20
+*/
 typedef NTSTATUS
 (*XENBUS_STORE_WATCH_REMOVE)(
-    _In_ PINTERFACE                 Interface,
-    _In_opt_ PXENBUS_STORE_WATCH    Watch
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_STORE_WATCH    Watch
     );
=20
 /*! \typedef XENBUS_STORE_POLL
@@ -259,7 +259,7 @@ typedef NTSTATUS
     activity then this will block the normal STORE interface DPC so this
     method must be regularly invoked during the spin loop to check for
     XenStore activity
-*/ =20
+*/
 typedef VOID
 (*XENBUS_STORE_POLL)(
     _In_ PINTERFACE Interface
@@ -288,7 +288,7 @@ typedef NTSTATUS
     );
=20
 // {86824C3B-D34E-4753-B281-2F1E3AD214D7}
-DEFINE_GUID(GUID_XENBUS_STORE_INTERFACE,=20
+DEFINE_GUID(GUID_XENBUS_STORE_INTERFACE,
 0x86824c3b, 0xd34e, 0x4753, 0xb2, 0x81, 0x2f, 0x1e, 0x3a, 0xd2, 0x14, 0xd=
7);
=20
 /*! \struct _XENBUS_STORE_INTERFACE_V2
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.114.782619dc3a15bb5a.1a1638f9df8.ea897057aca8f65b=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 12:22:03 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 12:22:03 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1458054.1670523 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJro2-0001a1-W7; Thu, 22 Oct 2026 12:22:03 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1458054.1670523; Thu, 22 Oct 2026 12:22:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJro2-0001ZW-Pt; Thu, 22 Oct 2026 12:22:02 +0000
Received: by outflank-mailman (input) for mailman id 1458054;
 Thu, 22 Oct 2026 12:22:02 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1638fa174000f79f@swg.vates.tech>)
 id 1xJro2-0001Yr-75
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 12:22:02 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJro1-004jJg-Gm
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 14:22:01 +0200
Received: from [10.42.69.3] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1638fa174000f79f@swg.vates.tech>)
 id 6ad9ffdf-bab6-0a2a0a5309dd-0a2a4503d564-24
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 14:22:01 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-33051d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1638fa174000f79f@swg.vates.tech>)
 id 6ad9ffe8-fae8-0a2a45030019-b9ff1c239185-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 14:22:01 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1638fa174000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 12:21:59 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 474B882CA2;
 Thu, 22 Oct 2026 14:21:59 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=LkwrzEbAbbrEGU9ZutX1kcRiBzu7nCEu87PFJ5mnvsI=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=dgy5vY5SHuRfDN22yGo8BjSQWJsYqaN6gvGZa2EX3Ud59J8zwkTcFrM9ianooi1ZNK/+IXnqw
 XKHg04tujWmbzQSYEsiCkqQ7w1twTel50O+a9ydYAdBwU11mqiT1n1+gut3L0kXC97phI5VsPAr
 ONcUerwF3hyaizX5pfoME/RBOl0Rgtn6osG2YrKDQ6Si1xMzJG8ephQLbazK9i/1Y69BsjOi1PA
 HBbsxK8cj4qxe7TlqStYN108YcTBS/kXZpKyt0GYtYa35vW+4+93jzUh6q3joHxyO1RPk3WKb9V
 azWopHHt+j+zaW0weKaO0IRxdm1TUv1Tk+HNRSFg7deg==
X-Zone-Loop: 83d46e438657f2b1f2e1565ef88299fb5b2093f4f4ab
x-campaign-type: default
x-transaction-id: 99bcd4be-fa88-4b31-a4ea-8c6f5b0531cf
x-swg-uid: 01-44056edc-33f9-459f-a95f-a7f534d6221f
X-Mailer: Sweego
Message-ID:
 <1792671719.8631fc262581453bbf619ec5b2062170.1a1638fa174000f79f@vates.tech>
x-swg-bid: 1792671719.8631fc262581453bbf619ec5b2062170.1a1638fa174000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [XENVIF-SYNC 3/4] registry: sync with xenbus
Date: Thu, 22 Oct 2026 14:21:53 +0200
In-Reply-To: <1792671666.8631fc262581453bbf619ec5b2062170.1a1638ed0b2000f79f@vates.tech>
References: <1792671666.8631fc262581453bbf619ec5b2062170.1a1638ed0b2000f79f@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.116.8c5fbcac8c506113.1a1638f9fd9.eab9ffe1b9242a2c=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792671719386
X-purgate-ID: tlsNG-33051d/1792671721-77CC34E9-9DD91AE2/0/0
X-purgate-type: clean
X-purgate-size: 5885

---=Part.116.8c5fbcac8c506113.1a1638f9fd9.eab9ffe1b9242a2c=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Syncing op changes the signature of RegistryInitialize() which now takes
the DriverObject, so update call sites accordingly=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xenvif/driver=2Ec   |  2 +-
 src/xenvif/registry=2Ec | 42 ++++++++++++++++++++++++------------------
 src/xenvif/registry=2Eh | 36 ++++++++++++++++--------------------
 3 files changed, 41 insertions(+), 39 deletions(-)

diff --git a/src/xenvif/driver=2Ec b/src/xenvif/driver=2Ec
index 69d0622=2E=2Efc97be2 100644
--- a/src/xenvif/driver=2Ec
+++ b/src/xenvif/driver=2Ec
@@ -335,7 +335,7 @@ DriverEntry(
          MONTH,
          YEAR);
=20
-    status =3D RegistryInitialize(RegistryPath);
+    status =3D RegistryInitialize(DriverObject, RegistryPath);
     if (!NT_SUCCESS(status))
         goto fail1;
=20
diff --git a/src/xenvif/registry=2Ec b/src/xenvif/registry=2Ec
index 76bfddb=2E=2E602b96a 100644
--- a/src/xenvif/registry=2Ec
+++ b/src/xenvif/registry=2Ec
@@ -62,11 +62,15 @@ __RegistryFree(
 }
=20
 NTSTATUS
+#pragma prefast(suppress:28101) // unannotated DriverEntry function
 RegistryInitialize(
+    _In_opt_ PDRIVER_OBJECT DriverObject,
     _In_ PUNICODE_STRING    Path
     )
 {
-    NTSTATUS                status;
+    UNICODE_STRING      Unicode;
+    PVOID               Func;
+    NTSTATUS            status;
=20
     ASSERT3P(RegistryPath=2EBuffer, =3D=3D, NULL);
=20
@@ -74,6 +78,16 @@ RegistryInitialize(
     if (!NT_SUCCESS(status))
         goto fail1;
=20
+    ASSERT3P(RegistryDriverObject, =3D=3D, NULL);
+    RegistryDriverObject =3D DriverObject;
+
+    ASSERT3P(__IoOpenDriverRegistryKey, =3D=3D, NULL);
+    RtlInitUnicodeString(&Unicode, L"IoOpenDriverRegistryKey");
+
+    Func =3D MmGetSystemRoutineAddress(&Unicode);
+    if (Func !=3D NULL)
+        __IoOpenDriverRegistryKey =3D (IOOPENDRIVERREGISTRYKEY)Func;
+
     return STATUS_SUCCESS;
=20
 fail1:
@@ -1155,17 +1169,17 @@ fail1:
=20
 NTSTATUS
 RegistryQueryBinaryValue(
-    _In_ HANDLE                             Key,
-    _In_ PSTR                               Name,
-    _Outptr_result_buffer_(*Length) PVOID   *Buffer,
-    _Out_ PULONG                            Length
+    _In_ HANDLE                                 Key,
+    _In_ PSTR                                   Name,
+    _Outptr_result_bytebuffer_(*Length) PVOID   *Buffer,
+    _Out_ PULONG                                Length
     )
 {
-    ANSI_STRING                             Ansi;
-    UNICODE_STRING                          Unicode;
-    PKEY_VALUE_PARTIAL_INFORMATION          Partial;
-    ULONG                                   Size;
-    NTSTATUS                                status;
+    ANSI_STRING                                 Ansi;
+    UNICODE_STRING                              Unicode;
+    PKEY_VALUE_PARTIAL_INFORMATION              Partial;
+    ULONG                                       Size;
+    NTSTATUS                                    status;
=20
     RtlInitAnsiString(&Ansi, Name);
=20
@@ -1628,11 +1642,3 @@ RegistryCloseKey(
 {
     ZwClose(Key);
 }
-
-PUNICODE_STRING
-RegistryGetPath(
-    VOID
-    )
-{
-    return &RegistryPath;
-}
\ No newline at end of file
diff --git a/src/xenvif/registry=2Eh b/src/xenvif/registry=2Eh
index c9a5488=2E=2E98de95e 100644
--- a/src/xenvif/registry=2Eh
+++ b/src/xenvif/registry=2Eh
@@ -37,6 +37,7 @@
=20
 extern NTSTATUS
 RegistryInitialize(
+    _In_opt_ PDRIVER_OBJECT DrvObj,
     _In_ PUNICODE_STRING    Path
     );
=20
@@ -110,8 +111,8 @@ RegistryCreateSubKey(
=20
 extern NTSTATUS
 RegistryDeleteSubKey(
-    _In_ HANDLE Key,
-    _In_ PSTR   Name
+    _In_ HANDLE     Key,
+    _In_ PSTR       Name
     );
=20
 extern NTSTATUS
@@ -130,15 +131,15 @@ RegistryEnumerateValues(
=20
 extern NTSTATUS
 RegistryDeleteValue(
-    _In_ HANDLE Key,
-    _In_ PSTR   Name
+    _In_ HANDLE     Key,
+    _In_ PSTR       Name
     );
=20
 extern NTSTATUS
 RegistryQueryDwordValue(
-    _In_ HANDLE     Key,
-    _In_ PSTR       Name,
-    _Out_ PULONG    Value
+    _In_ HANDLE         Key,
+    _In_ PSTR           Name,
+    _Out_ PULONG        Value
     );
=20
 extern NTSTATUS
@@ -150,9 +151,9 @@ RegistryQueryQwordValue(
=20
 extern NTSTATUS
 RegistryUpdateDwordValue(
-    _In_ HANDLE Key,
-    _In_ PSTR   Name,
-    _In_ ULONG  Value
+    _In_ HANDLE         Key,
+    _In_ PSTR           Name,
+    _In_ ULONG          Value
     );
=20
 extern NTSTATUS
@@ -165,10 +166,10 @@ RegistryQuerySzValue(
=20
 extern NTSTATUS
 RegistryQueryBinaryValue(
-    _In_ HANDLE                             Key,
-    _In_ PSTR                               Name,
-    _Outptr_result_buffer_(*Length) PVOID   *Buffer,
-    _Out_ PULONG                            Length
+    _In_ HANDLE                                 Key,
+    _In_ PSTR                                   Name,
+    _Outptr_result_bytebuffer_(*Length) PVOID   *Buffer,
+    _Out_ PULONG                                Length
     );
=20
 extern NTSTATUS
@@ -198,7 +199,7 @@ RegistryFreeSzValue(
=20
 extern VOID
 RegistryFreeBinaryValue(
-    _In_ PVOID  Buffer
+    _In_ PVOID          Buffer
     );
=20
 extern NTSTATUS
@@ -214,9 +215,4 @@ RegistryCloseKey(
     _In_ HANDLE Key
     );
=20
-extern PUNICODE_STRING
-RegistryGetPath(
-    VOID
-    );
-
 #endif  // _XENVIF_REGISTRY_H
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.116.8c5fbcac8c506113.1a1638f9fd9.eab9ffe1b9242a2c=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 12:22:03 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 12:22:03 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1458052.1670518 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJro2-0001ZF-QG; Thu, 22 Oct 2026 12:22:02 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1458052.1670518; Thu, 22 Oct 2026 12:22:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJro2-0001Z8-N8; Thu, 22 Oct 2026 12:22:02 +0000
Received: by outflank-mailman (input) for mailman id 1458052;
 Thu, 22 Oct 2026 12:22:01 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1638fa083000f79f@swg.vates.tech>)
 id 1xJro1-0001Yk-RB
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 12:22:01 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJro1-006png-7u
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 14:22:01 +0200
Received: from [10.42.69.4] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1638fa083000f79f@swg.vates.tech>)
 id 6ad9ffe5-2eae-0a2a0a5409dd-0a2a4504d5ac-10
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 14:22:01 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-ebf023.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1638fa083000f79f@swg.vates.tech>)
 id 6ad9ffe8-b57f-0a2a45040019-b9ff1c238ff1-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 14:22:01 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1638fa083000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 12:21:59 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 0D08E82C9E;
 Thu, 22 Oct 2026 14:21:59 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=Iac7ZonOCq4TMbqT8rUoH6TIcgHyfxtYvz8kQjZJCIY=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=UHJHDT9PWzWEasJe7DtfSyGCYJdRffXtkFXHNPTcWWGHN/0F7Ug8BEKdNQitU5/oitA4fk7VW
 bsR0BDCKjeyaq5Z8rRojrmgzMHfq7r7IiTu7NbE8J9P6oaoaURwXFWj2uZjVYBICY69eeovm9+U
 YOVMSxzcy72eIFnY3z3A6tPAqS3D6LUSzMM9IeO9Ea4zkEzM1QT9yPnV8tawOW+spJD8FO2FZMO
 zBrgQSRzO+vy+Qdwmz6gRlWXlyflA0oMYBtEqS9cCZVcd39OBmXOCVsspEU9QWvKh7wmp253TNh
 xSYL6RIbC9ptg4r4SEM5fRPDHuzLGBdo6C4RlspZFIcQ==
X-Zone-Loop: 1026fc1d649201887fa2477e1fac2a8e6baa013ec58f
x-campaign-type: default
x-transaction-id: 2aa426a5-1c69-4075-8411-bb685c360d7a
x-swg-uid: 01-a9f1e5ee-d3ca-47b4-9617-31df0e0a5f06
X-Mailer: Sweego
Message-ID:
 <1792671719.8631fc262581453bbf619ec5b2062170.1a1638fa083000f79f@vates.tech>
x-swg-bid: 1792671719.8631fc262581453bbf619ec5b2062170.1a1638fa083000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [XENVIF-SYNC 2/4] util: sync with xenbus
Date: Thu, 22 Oct 2026 14:21:52 +0200
In-Reply-To: <1792671666.8631fc262581453bbf619ec5b2062170.1a1638ed0b2000f79f@vates.tech>
References: <1792671666.8631fc262581453bbf619ec5b2062170.1a1638ed0b2000f79f@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.115.e7171aeab85f37b1.1a1638f9ee9.5a76785275d7041a=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792671719146
X-purgate-ID: tlsNG-ebf023/1792671721-51CD7B50-0E0F0AC7/0/0
X-purgate-type: clean
X-purgate-size: 3373

---=Part.115.e7171aeab85f37b1.1a1638f9ee9.5a76785275d7041a=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Sync util=2Eh with xenbus=2E
Added TIME_* macros to util=2Eh, so we drop them in controller=2Ec,
transmitter=2Ec and receiver=2Ec=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xenvif/controller=2Ec  | 5 -----
 src/xenvif/receiver=2Ec    | 5 -----
 src/xenvif/transmitter=2Ec | 5 -----
 src/xenvif/util=2Eh        | 8 ++++++--
 4 files changed, 6 insertions(+), 17 deletions(-)

diff --git a/src/xenvif/controller=2Ec b/src/xenvif/controller=2Ec
index 7a8b884=2E=2Ef5dc178 100644
--- a/src/xenvif/controller=2Ec
+++ b/src/xenvif/controller=2Ec
@@ -248,11 +248,6 @@ fail1:
     return status;
 }
=20
-#define TIME_US(_us)        ((_us) * 10)
-#define TIME_MS(_ms)        (TIME_US((_ms) * 1000))
-#define TIME_S(_s)          (TIME_MS((_s) * 1000))
-#define TIME_RELATIVE(_t)   (-(_t))
-
 #define XENVIF_CONTROLLER_POLL_PERIOD   TIME_MS(100)
 #define XENVIF_CONTROLLER_MAX_WAIT      TIME_S(5)
=20
diff --git a/src/xenvif/receiver=2Ec b/src/xenvif/receiver=2Ec
index 13c376d=2E=2E1c7972c 100644
--- a/src/xenvif/receiver=2Ec
+++ b/src/xenvif/receiver=2Ec
@@ -2364,11 +2364,6 @@ ReceiverRingEvtchnCallback(
     return TRUE;
 }
=20
-#define TIME_US(_us)        ((_us) * 10)
-#define TIME_MS(_ms)        (TIME_US((_ms) * 1000))
-#define TIME_S(_s)          (TIME_MS((_s) * 1000))
-#define TIME_RELATIVE(_t)   (-(_t))
-
 #define XENVIF_RECEIVER_WATCHDOG_PERIOD 30
=20
 static NTSTATUS
diff --git a/src/xenvif/transmitter=2Ec b/src/xenvif/transmitter=2Ec
index d3d77bd=2E=2Ed8fe885 100644
--- a/src/xenvif/transmitter=2Ec
+++ b/src/xenvif/transmitter=2Ec
@@ -3328,11 +3328,6 @@ TransmitterRingEvtchnCallback(
     return TRUE;
 }
=20
-#define TIME_US(_us)        ((_us) * 10)
-#define TIME_MS(_ms)        (TIME_US((_ms) * 1000))
-#define TIME_S(_s)          (TIME_MS((_s) * 1000))
-#define TIME_RELATIVE(_t)   (-(_t))
-
 #define XENVIF_TRANSMITTER_WATCHDOG_PERIOD  30
=20
 _IRQL_requires_(PASSIVE_LEVEL)
diff --git a/src/xenvif/util=2Eh b/src/xenvif/util=2Eh
index 7973be3=2E=2E2a09248 100644
--- a/src/xenvif/util=2Eh
+++ b/src/xenvif/util=2Eh
@@ -41,6 +41,11 @@
 #define	P2ROUNDUP(_t, _x, _a)   \
         (-(-((_t)(_x)) & -(((_t)(_a)))))
=20
+#define TIME_US(_us)            ((_us) * 10ll)
+#define TIME_MS(_ms)            (TIME_US((_ms) * 1000ll))
+#define TIME_S(_s)              (TIME_MS((_s) * 1000ll))
+#define TIME_RELATIVE(_t)       (-(_t))
+
 static FORCEINLINE LONG
 __ffs(
     _In_ unsigned long long mask
@@ -196,13 +201,12 @@ __AllocatePages(
=20
     LowAddress=2EQuadPart =3D 0ull;
     HighAddress=2EQuadPart =3D ~0ull;
+    SkipBytes=2EQuadPart =3D 0ull;
     TotalBytes =3D (SIZE_T)PAGE_SIZE * Count;
=20
     if (Contiguous) {
-        SkipBytes=2EQuadPart =3D TotalBytes;
         Flags =3D MM_ALLOCATE_REQUIRE_CONTIGUOUS_CHUNKS;
     } else {
-        SkipBytes=2EQuadPart =3D 0ull;
         Flags =3D MM_ALLOCATE_FULLY_REQUIRED;
     }
=20
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.115.e7171aeab85f37b1.1a1638f9ee9.5a76785275d7041a=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 12:22:03 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 12:22:03 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1458055.1670531 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJro3-0001aW-4N; Thu, 22 Oct 2026 12:22:03 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1458055.1670531; Thu, 22 Oct 2026 12:22:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJro2-0001Zn-RU; Thu, 22 Oct 2026 12:22:02 +0000
Received: by outflank-mailman (input) for mailman id 1458055;
 Thu, 22 Oct 2026 12:22:02 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1638fa262000f79f@swg.vates.tech>)
 id 1xJro2-0001Ym-76
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 12:22:02 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJro1-004jIo-Ce
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 14:22:01 +0200
Received: from [10.42.69.10] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1638fa262000f79f@swg.vates.tech>)
 id 6ad9ffd3-e002-0a2a0a5209dd-0a2a450a8e06-30
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 14:22:01 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-4011c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1638fa262000f79f@swg.vates.tech>)
 id 6ad9ffe8-f2d2-0a2a450a0019-b9ff1c12882d-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 14:22:01 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1638fa262000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 12:22:00 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 8431982C5B;
 Thu, 22 Oct 2026 14:21:59 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=UF+2y8I54NQOistf/meOHllwmlCj+lKuqFzi1t0/mSw=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=VbPQDtsfHLkmxp6p6sCsbPwESOykIvIEUvY61c5J8zYVGSgReKir3bnk6jAEvu0gC0UQ7/lFb
 MbpZxLIfgrNCxv+62arfFkzhm4oy7bcdp393VS58y9O6IQQjx/Yh3/4d7DCR3rwnT7929nxHPAH
 Yv7F90C4DRewWt3b/y2vr9NZUIbDxmxNEM2kH+sjT4B3ws1ND7O40z30pOoZCwv22CnyIUPXNBk
 iT/orysFBPSiPBgOepzrlR+I98desxLX2xjWlxbcEn99BCVZHacQdbAr0CUmf78GWAhlnAjwh71
 GtI0FNYgdG9x2cH1kbP9Zng6Lm2dUSi95Ask1E4mcwDg==
X-Zone-Loop: 90f14cdefcae63319eee0d1a197b6fabbb93c756e39f
x-campaign-type: default
x-transaction-id: b2d9999e-03f6-47f4-a4e7-6eac5f4e8a14
x-swg-uid: 01-38390821-88b5-4744-bb3b-c0ab40f6ef54
X-Mailer: Sweego
Message-ID:
 <1792671720.8631fc262581453bbf619ec5b2062170.1a1638fa262000f79f@vates.tech>
x-swg-bid: 1792671720.8631fc262581453bbf619ec5b2062170.1a1638fa262000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [XENVIF-SYNC 4/4] xenvif: sync common files with xenbus
Date: Thu, 22 Oct 2026 14:21:54 +0200
In-Reply-To: <1792671666.8631fc262581453bbf619ec5b2062170.1a1638ed0b2000f79f@vates.tech>
References: <1792671666.8631fc262581453bbf619ec5b2062170.1a1638ed0b2000f79f@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.117.8e9af3e611f73a8d.1a1638fa0cc.9ac393980c21b238=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792671719628
X-purgate-ID: tlsNG-4011c0/1792671721-51CC3CFC-224D38B2/0/0
X-purgate-type: clean
X-purgate-size: 21710

---=Part.117.8e9af3e611f73a8d.1a1638fa0cc.9ac393980c21b238=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Take assert=2Eh, dbg_print=2Eh, mutex=2Eh, and thread=2Ec/h from xenbus=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xenvif/dbg_print=2Eh | 66 ++++++++++++++++++------------
 src/xenvif/mutex=2Eh     | 93 ++++++++++++++++++++++++++++--------------
 src/xenvif/names=2Eh     | 26 ++++++------
 src/xenvif/thread=2Ec    | 72 ++++++++++++++++----------------
 src/xenvif/thread=2Eh    | 52 +++++++++++------------
 5 files changed, 177 insertions(+), 132 deletions(-)

diff --git a/src/xenvif/dbg_print=2Eh b/src/xenvif/dbg_print=2Eh
index 21bea0c=2E=2E17abb40 100644
--- a/src/xenvif/dbg_print=2Eh
+++ b/src/xenvif/dbg_print=2Eh
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -36,12 +36,12 @@
 #include <ntddk=2Eh>
 #include <stdarg=2Eh>
=20
-#pragma warning(disable:4127)   // conditional expression is constant
-
 #define stringify_literal(_text) #_text
 #define stringify(_text) stringify_literal(_text)
 #define __MODULE__ stringify(PROJECT)
=20
+#pragma warning(disable:4127)   // conditional expression is constant
+
 static __inline VOID
 __Error(
     _In_ PCSTR      Prefix,
@@ -138,4 +138,20 @@ __Info(
 #define Info(=2E=2E=2E)  \
         __Info(__MODULE__ "|"  __FUNCTION__ ": ", __VA_ARGS__)
=20
+#define DBG_PRINT_ENABLE_FILTER(_Id, _Level)                       \
+        do {                                                        \
+            DbgSetDebugFilterState((_Id), (_Level), TRUE);          \
+        } while (FALSE)
+
+static __inline VOID
+__DbgPrintEnable(
+    VOID
+    )
+{
+    DBG_PRINT_ENABLE_FILTER(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL);
+    DBG_PRINT_ENABLE_FILTER(DPFLTR_IHVDRIVER_ID, DPFLTR_WARNING_LEVEL);
+    DBG_PRINT_ENABLE_FILTER(DPFLTR_IHVDRIVER_ID, DPFLTR_TRACE_LEVEL);
+    DBG_PRINT_ENABLE_FILTER(DPFLTR_IHVDRIVER_ID, DPFLTR_INFO_LEVEL);
+}
+
 #endif  // _XENVIF_DBG_PRINT_H
diff --git a/src/xenvif/mutex=2Eh b/src/xenvif/mutex=2Eh
index 00a2d9c=2E=2E15a0589 100644
--- a/src/xenvif/mutex=2Eh
+++ b/src/xenvif/mutex=2Eh
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -44,7 +44,7 @@ typedef struct _MUTEX {
=20
 static FORCEINLINE VOID
 InitializeMutex(
-    _In_ PMUTEX Mutex
+    _Out_ PMUTEX    Mutex
     )
 {
     RtlZeroMemory(Mutex, sizeof (MUTEX));
@@ -52,17 +52,48 @@ InitializeMutex(
     KeInitializeEvent(&Mutex->Event, SynchronizationEvent, TRUE);
 }
=20
+static FORCEINLINE BOOLEAN
+_IRQL_requires_max_(PASSIVE_LEVEL)
+TryAcquireMutex(
+    _Inout_ PMUTEX  Mutex
+    )
+{
+    LARGE_INTEGER   Timeout;
+    NTSTATUS        status;
+
+    Timeout=2EQuadPart =3D 0;
+
+    status =3D KeWaitForSingleObject(&Mutex->Event,
+                                   Executive,
+                                   KernelMode,
+                                   FALSE,
+                                   &Timeout);
+    if (status =3D=3D STATUS_TIMEOUT)
+        return FALSE;
+
+    ASSERT(NT_SUCCESS(status));
+
+    ASSERT3P(Mutex->Owner, =3D=3D, NULL);
+    Mutex->Owner =3D KeGetCurrentThread();
+
+    return TRUE;
+}
+
 static FORCEINLINE VOID
 _IRQL_requires_max_(PASSIVE_LEVEL)
 AcquireMutex(
-    _In_ PMUTEX Mutex
+    _Inout_ PMUTEX  Mutex
     )
 {
-    (VOID) KeWaitForSingleObject(&Mutex->Event,
-                                 Executive,
-                                 KernelMode,
-                                 FALSE,
-                                 NULL);
+    NTSTATUS        status;
+
+    status =3D KeWaitForSingleObject(&Mutex->Event,
+                                   Executive,
+                                   KernelMode,
+                                   FALSE,
+                                   NULL);
+
+    ASSERT(NT_SUCCESS(status));
=20
     ASSERT3P(Mutex->Owner, =3D=3D, NULL);
     Mutex->Owner =3D KeGetCurrentThread();
@@ -71,7 +102,7 @@ AcquireMutex(
 static FORCEINLINE VOID
 _IRQL_requires_max_(PASSIVE_LEVEL)
 ReleaseMutex(
-    _In_ PMUTEX Mutex
+    _Inout_ PMUTEX  Mutex
     )
 {
     ASSERT3P(Mutex->Owner, =3D=3D, KeGetCurrentThread());
diff --git a/src/xenvif/names=2Eh b/src/xenvif/names=2Eh
index b0404f3=2E=2Ee1b8d52 100644
--- a/src/xenvif/names=2Eh
+++ b/src/xenvif/names=2Eh
@@ -38,7 +38,7 @@
=20
 #include "types=2Eh"
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PowerTypeName(
     _In_ POWER_STATE_TYPE   Type
     )
@@ -58,7 +58,7 @@ PowerTypeName(
 #undef  _POWER_ACTION_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PowerSystemStateName(
     _In_ SYSTEM_POWER_STATE State
     )
@@ -84,7 +84,7 @@ PowerSystemStateName(
 #undef  _POWER_SYSTEM_STATE_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PowerDeviceStateName(
     _In_ DEVICE_POWER_STATE State
     )
@@ -108,7 +108,7 @@ PowerDeviceStateName(
 #undef  _POWER_DEVICE_STATE_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PowerActionName(
     _In_ POWER_ACTION   Type
     )
@@ -134,7 +134,7 @@ PowerActionName(
 #undef  _POWER_ACTION_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PowerMinorFunctionName(
     _In_ ULONG  MinorFunction
     )
@@ -156,7 +156,7 @@ PowerMinorFunctionName(
 #undef  _POWER_MINOR_FUNCTION_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PnpDeviceStateName(
     _In_ DEVICE_PNP_STATE   State
     )
@@ -183,7 +183,7 @@ PnpDeviceStateName(
 #undef  _STATE_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PnpMinorFunctionName(
     _In_ ULONG  Function
     )
@@ -226,7 +226,7 @@ PnpMinorFunctionName(
 #undef  _PNP_MINOR_FUNCTION_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PartialResourceDescriptorTypeName(
     _In_ UCHAR  Type
     )
@@ -255,7 +255,7 @@ PartialResourceDescriptorTypeName(
 #undef  _PARTIAL_RESOURCE_DESCRIPTOR_TYPE_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 DeviceUsageTypeName(
     _In_ DEVICE_USAGE_NOTIFICATION_TYPE Type
     )
@@ -277,7 +277,7 @@ DeviceUsageTypeName(
 #undef  _DEVICE_USAGE_TYPE_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 InterfaceTypeName(
     _In_ INTERFACE_TYPE Type
     )
@@ -315,7 +315,7 @@ InterfaceTypeName(
 #undef  _INTERFACE_TYPE_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 DmaWidthName(
     _In_ DMA_WIDTH  Width
     )
@@ -339,7 +339,7 @@ DmaWidthName(
 #undef  _DMA_WIDTH_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 DmaSpeedName(
     _In_ DMA_SPEED  Speed
     )
@@ -364,7 +364,7 @@ DmaSpeedName(
 #undef  _DMA_SPEED_NAME
 }
=20
-static FORCEINLINE const PCHAR
+static FORCEINLINE PCSTR
 XenbusStateName(
     _In_ XenbusState    State
     )
diff --git a/src/xenvif/thread=2Ec b/src/xenvif/thread=2Ec
index ed9315e=2E=2Eed7266b 100644
--- a/src/xenvif/thread=2Ec
+++ b/src/xenvif/thread=2Ec
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -37,7 +37,7 @@
 #include "assert=2Eh"
 #include "util=2Eh"
=20
-#define THREAD_POOL 'ERHT'
+#define THREAD_TAG 'ERHT'
=20
 struct _XENVIF_THREAD {
     XENVIF_THREAD_FUNCTION  Function;
@@ -53,7 +53,7 @@ __ThreadAllocate(
     _In_ ULONG  Length
     )
 {
-    return __AllocatePoolWithTag(NonPagedPool, Length, THREAD_POOL);
+    return __AllocatePoolWithTag(NonPagedPool, Length, THREAD_TAG);
 }
=20
 static FORCEINLINE VOID
@@ -61,12 +61,12 @@ __ThreadFree(
     _In_ PVOID  Buffer
     )
 {
-    __FreePoolWithTag(Buffer, THREAD_POOL);
+    __FreePoolWithTag(Buffer, THREAD_TAG);
 }
=20
 static FORCEINLINE VOID
 __ThreadWake(
-    _Out_ PXENVIF_THREAD    Thread
+    _Inout_ PXENVIF_THREAD  Thread
     )
 {
     KeSetEvent(&Thread->Event, IO_NO_INCREMENT, FALSE);
@@ -74,7 +74,7 @@ __ThreadWake(
=20
 VOID
 ThreadWake(
-    _Out_ PXENVIF_THREAD    Thread
+    _Inout_ PXENVIF_THREAD  Thread
     )
 {
     __ThreadWake(Thread);
@@ -82,7 +82,7 @@ ThreadWake(
=20
 static FORCEINLINE VOID
 __ThreadAlert(
-    _Out_ PXENVIF_THREAD    Thread
+    _Inout_ PXENVIF_THREAD  Thread
     )
 {
     Thread->Alerted =3D TRUE;
@@ -91,7 +91,7 @@ __ThreadAlert(
=20
 VOID
 ThreadAlert(
-    _Out_ PXENVIF_THREAD    Thread
+    _Inout_ PXENVIF_THREAD  Thread
     )
 {
     __ThreadAlert(Thread);
@@ -101,11 +101,11 @@ KSTART_ROUTINE  ThreadFunction;
=20
 VOID
 ThreadFunction(
-    _In_ PVOID          Argument
+    _In_ PVOID      Argument
     )
 {
-    PXENVIF_THREAD      Self =3D Argument;
-    NTSTATUS            status;
+    PXENVIF_THREAD  Self =3D Argument;
+    NTSTATUS        status;
=20
     status =3D Self->Function(Self, Self->Context);
=20
@@ -131,8 +131,6 @@ ThreadCreate(
=20
     (*Thread) =3D __ThreadAllocate(sizeof (XENVIF_THREAD));
=20
-    Trace("Create thread %p %p\n", Function, Thread);
-
     status =3D STATUS_NO_MEMORY;
     if (*Thread =3D=3D NULL)
         goto fail1;
@@ -207,10 +205,10 @@ ThreadIsAlerted(
=20
 VOID
 ThreadJoin(
-    _Out_ PXENVIF_THREAD    Thread
+    _Inout_ PXENVIF_THREAD  Thread
     )
 {
-    LONG                    References;
+    LONG                References;
=20
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, PASSIVE_LEVEL);
     ASSERT3P(KeGetCurrentThread(), !=3D, Thread->Thread);
diff --git a/src/xenvif/thread=2Eh b/src/xenvif/thread=2Eh
index 6ee965a=2E=2Ef343ddc 100644
--- a/src/xenvif/thread=2Eh
+++ b/src/xenvif/thread=2Eh
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -59,17 +59,17 @@ ThreadIsAlerted(
=20
 extern VOID
 ThreadWake(
-    _Out_ PXENVIF_THREAD    Thread
+    _Inout_ PXENVIF_THREAD  Thread
     );
=20
 extern VOID
 ThreadAlert(
-    _Out_ PXENVIF_THREAD    Thread
+    _Inout_ PXENVIF_THREAD  Thread
     );
=20
 extern VOID
 ThreadJoin(
-    _Out_ PXENVIF_THREAD    Thread
+    _Inout_ PXENVIF_THREAD  Thread
     );
=20
 #endif  // _XENVIF_THREAD_H
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.117.8e9af3e611f73a8d.1a1638fa0cc.9ac393980c21b238=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 12:26:49 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 12:26:49 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1458064.1670535 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJrsf-0001q7-C6; Thu, 22 Oct 2026 12:26:49 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1458064.1670535; Thu, 22 Oct 2026 12:26:49 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJrsf-0001pz-9T; Thu, 22 Oct 2026 12:26:49 +0000
Received: by outflank-mailman (input) for mailman id 1458064;
 Thu, 22 Oct 2026 12:26:48 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16393ff08000f79f@swg.vates.tech>)
 id 1xJrse-0001pt-9p
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 12:26:48 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJrsd-00BqEF-MK
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 14:26:47 +0200
Received: from [10.42.69.10] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16393ff08000f79f@swg.vates.tech>)
 id 6ada00fc-e002-0a2a0a5209dd-0a2a450a9308-32
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 14:26:47 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-4011c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16393ff08000f79f@swg.vates.tech>)
 id 6ada0106-f2d2-0a2a450a0019-b9ff1c12a97d-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 14:26:47 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a16393ff08000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 12:26:45 +0000
Received: from [192.168.1.61] (142.220.66.37.rev.sfr.net [37.66.220.142])
 (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 1B5D4804A0;
 Thu, 22 Oct 2026 14:26:45 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=HiKlcNB97NU6TKq7rHr9uGtHdaxDqy0ZYVtFRZQZshI=;
 h=from:subject:date:message-id:to:mime-version:content-type:in-reply-to:references:feedback-id;
 b=Yqy210FArOtmAkVn3UxAyly7WXq1ggVRaopzEPJeby2msCIrnoNcE8RzVXKlQfguFqwmEvIJf
 eA9CU9HwYmdbxIgE5EOhZe93x18dULXNjYmgh+N2iLRfWN9ILPqGlu4QWcBB1EDQLhf4z6uf4ay
 tBydnMyrjX9HSNVUrMTTcMmW2uvqmELkYWeBpsxymfVY0//DG/uwDbgdFLpvkeIAo5gbV0pkEGC
 5XGG56Gwj7MlyPKXHxSguFgPWxuCHMZ+8jQNtrk+402Q+hHI23lG7sJrCNTWlgSKXEakKkV35Ym
 2kpYkkbM0n/mV7LLnGu22fbYv29wL+jWHYug8dtiwf8g==
X-Zone-Loop: ca3efc5dd6a5bab59c161eb08c7453aeb57dee604e67
x-campaign-type: default
x-transaction-id: d0d203ad-23fa-43ff-989c-da6379852615
x-swg-uid: 01-a2ebbc6a-9283-47d6-8a1c-ea54ee584c0c
X-Mailer: Sweego
Message-ID:
 <1792672005.8631fc262581453bbf619ec5b2062170.1a16393ff08000f79f@vates.tech>
x-swg-bid: 1792672005.8631fc262581453bbf619ec5b2062170.1a16393ff08000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
Date: Thu, 22 Oct 2026 14:26:44 +0200
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [XENBUS-SYNC 0/2] Update annotations of common helpers
To: =?UTF-8?Q?C=C3=A9saire_Mounah?= <cesaire.mounah@vates.tech>,
 win-pv-devel@lists.xenproject.org
References: <1792668061.8631fc262581453bbf619ec5b2062170.1a16357cdfd000f79f@vates.tech>
Content-Language: en-US
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
In-Reply-To: <1792668061.8631fc262581453bbf619ec5b2062170.1a16357cdfd000f79f@vates.tech>
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.118.da746f16ba6afdd4.1a16393fc31.51b848b71902d8fe=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792672005169
X-purgate-ID: tlsNG-4011c0/1792672007-5ABD8CFC-7E2B3C50/0/0
X-purgate-type: clean
X-purgate-size: 1449

---=Part.118.da746f16ba6afdd4.1a16393fc31.51b848b71902d8fe=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

On 22/10/2026 13:21, C=C3=A9saire Mounah wrote:
> Update the annotations of common helpers to reflect their actual directi=
on
> and size=2E
> Ported from the work on updating the annotations of all drivers=2E
>=20
> C=C3=A9saire Mounah (2):
>    include: Annotate Local as _Out_opt_ in XENBUS_SHARED_INFO_GET_TIME
>    Annotate common helpers with their actual direction and size
>=20
>   include/shared_info_interface=2Eh |  2 +-
>   src/common/assert=2Eh             | 18 ++++++++---------
>   src/common/mutex=2Eh              | 10 ++++-----
>   src/common/registry=2Ec           | 24 +++++++++++-----------
>   src/common/registry=2Eh           | 16 +++++++--------
>   src/common/util=2Eh               | 36 ++++++++++++++++---------------=
--
>   src/xenbus/thread=2Ec             | 10 ++++-----
>   src/xenbus/thread=2Eh             |  6 +++---
>   src/xenfilt/thread=2Ec            | 10 ++++-----
>   src/xenfilt/thread=2Eh            |  6 +++---
>   10 files changed, 69 insertions(+), 69 deletions(-)
>=20

Both patches:

Reviewed-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>


-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.118.da746f16ba6afdd4.1a16393fc31.51b848b71902d8fe=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 12:34:06 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 12:34:06 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1458082.1670548 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJrzi-0003kw-3x; Thu, 22 Oct 2026 12:34:06 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1458082.1670548; Thu, 22 Oct 2026 12:34:06 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJrzi-0003kp-18; Thu, 22 Oct 2026 12:34:06 +0000
Received: by outflank-mailman (input) for mailman id 1458082;
 Thu, 22 Oct 2026 12:34:04 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1639a9882000f79f@swg.vates.tech>)
 id 1xJrzg-0003kj-PE
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 12:34:04 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJrzg-002KEc-4Q
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 14:34:04 +0200
Received: from [10.42.69.7] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1639a9882000f79f@swg.vates.tech>)
 id 6ada02ba-2eae-0a2a0a5409dd-0a2a45079604-6
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 14:34:04 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-ef75cf.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1639a9882000f79f@swg.vates.tech>)
 id 6ada02bb-b4ea-0a2a45070019-b9ff1c128ec1-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 14:34:04 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1639a9882000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 12:33:58 +0000
Received: from [192.168.1.61] (142.220.66.37.rev.sfr.net [37.66.220.142])
 (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 8D7A582421;
 Thu, 22 Oct 2026 14:33:57 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=FhRFB8X/eeH3fYqPfR11dDYl6paa/SI/7JAAUGIYVmA=;
 h=from:subject:date:message-id:to:mime-version:content-type:in-reply-to:references:feedback-id;
 b=KmC3zDw4N0ehdg0GBzSdpmlWwHVxUQ+dr/W4UNnK/z/xevsMlW9R9dv7pAZow5si4qudFJRxf
 7XPKhe9HMXfwFQXQrNakzkorUJJGkgF516rV0NzJ+iBDo9kVXhFJz7Z3PrPE1Z0mbUhjESCqm8t
 aHZ1LALwuV0mEdslFB8kCpddHw9vFFaiakWpluf85WCR+anzfwbJJ4ivNqrWRpHSOOwDHk7uDr1
 bSw8ce8vbGqK0LdrFEwRjgZrUvcKqmZVvXZpCSF1TkIUhKXYdVVgoE9QGU1f0ECJMgJ7jJn9it5
 ZOv1zGjidY9n67CQrRXsr4p7mQ+v1s5ZWFG4MH1k1+xg==
X-Zone-Loop: 9b83660bbce95450dafe81e9a97f485debcab54a2c63
x-campaign-type: default
x-transaction-id: b8b66b9b-95b1-4110-a6db-ba75b3752b76
x-swg-uid: 01-207c227d-0d3e-49ee-9bf9-40c9130ac61f
X-Mailer: Sweego
Message-ID:
 <1792672438.8631fc262581453bbf619ec5b2062170.1a1639a9882000f79f@vates.tech>
x-swg-bid: 1792672438.8631fc262581453bbf619ec5b2062170.1a1639a9882000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
Date: Thu, 22 Oct 2026 14:33:57 +0200
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [XENIFACE-SYNC 0/3] Sync common files with xenbus and bug fixes
Content-Language: en-US
To: =?UTF-8?Q?C=C3=A9saire_Mounah?= <cesaire.mounah@vates.tech>,
 win-pv-devel@lists.xenproject.org
References: <1792669373.8631fc262581453bbf619ec5b2062170.1a1636bd571000f79f@vates.tech>
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
In-Reply-To: <1792669373.8631fc262581453bbf619ec5b2062170.1a1636bd571000f79f@vates.tech>
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.119.e6bc0dfeab269678.1a1639a957d.ae99ea5c47095eab=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792672437629
X-purgate-ID: tlsNG-ef75cf/1792672444-A5AC0AE4-D605B07E/0/0
X-purgate-type: clean
X-purgate-size: 1509

---=Part.119.e6bc0dfeab269678.1a1639a957d.ae99ea5c47095eab=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

On 22/10/2026 13:43, C=C3=A9saire Mounah wrote:
> Sync common helper files with xenbus to ensure consistency and
> correctness across the project, and correct a null-pointer dereference
> identified after static analysis=2E
>=20
>=20
> C=C3=A9saire Mounah (3):
>    include: sync store_interface=2Eh with xenbus
>    xeniface: Sync common helper files with xenbus
>    xeniface: Don't remove a NULL watch on resume
>=20
>   include/store_interface=2Eh | 80 +++++++++++++++++++------------------=
-
>   src/xeniface/assert=2Eh     | 18 ++++-----
>   src/xeniface/log=2Eh        | 82 +++++++++++++++++++++++--------------=
--
>   src/xeniface/mutex=2Eh      | 39 +++++++++++++++++--
>   src/xeniface/names=2Eh      | 18 ++++-----
>   src/xeniface/registry=2Ec   | 26 ++++++-------
>   src/xeniface/registry=2Eh   | 16 ++++----
>   src/xeniface/thread=2Ec     | 20 +++++-----
>   src/xeniface/thread=2Eh     |  6 +--
>   src/xeniface/util=2Eh       | 36 ++++++++---------
>   src/xeniface/wmi=2Ec        |  6 ++-
>   11 files changed, 197 insertions(+), 150 deletions(-)
>=20

All 3 patches:

Reviewed-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>


-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.119.e6bc0dfeab269678.1a1639a957d.ae99ea5c47095eab=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 12:35:56 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 12:35:56 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1458085.1670551 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJs1U-0003rx-97; Thu, 22 Oct 2026 12:35:56 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1458085.1670551; Thu, 22 Oct 2026 12:35:56 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJs1U-0003rq-6U; Thu, 22 Oct 2026 12:35:56 +0000
Received: by outflank-mailman (input) for mailman id 1458085;
 Thu, 22 Oct 2026 12:35:54 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1639c51ab000f79f@swg.vates.tech>)
 id 1xJs1S-0003rh-O4
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 12:35:54 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJs1S-002Krk-4r
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 14:35:54 +0200
Received: from [10.42.69.4] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1639c51ab000f79f@swg.vates.tech>)
 id 6ada0325-8faa-0a2a0a5109dd-0a2a4504eb30-14
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 14:35:54 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-ebf023.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1639c51ab000f79f@swg.vates.tech>)
 id 6ada0329-b57f-0a2a45040019-b9ff1c238439-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 14:35:54 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1639c51ab000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 12:35:51 +0000
Received: from [192.168.1.61] (142.220.66.37.rev.sfr.net [37.66.220.142])
 (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id BDF6182A6D;
 Thu, 22 Oct 2026 14:35:50 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=Q9EEunLrg3Cgb3u5jKC8LqmuW12bH2pH5rDw5kFn6KM=;
 h=from:subject:date:message-id:to:mime-version:content-type:in-reply-to:references:feedback-id;
 b=r+lag5mfTEJal8yV8DXsPpKhlbg1zpeoTpZMgmoYg36lAggL60J0tkyiSdw8Icp/yniMM2lV1
 uQdCD1LT4LrFDs8c8iV0xS2UuDWENqFEKd7bjlsKh864VhNrqsvLZA9LCKJsoOrUPCenfcmPbTE
 Dwx5tKBj400DcasfopLj1rIBZtqh/dXuKyUmrxr2xbvTtGjyuMu/VpIX3MCi+Ntd9dEEcF2npKz
 3ikS2ZqrIm/mwrbLA/ak63X0Hs9lYVva7Eab72uIGnHVXOZtnzUHxj+5f9LUunP5sCh+z802q70
 RUvA7i/XD4aAJuau0jQzmFnd9YZQI04BYUTuh3JYa4Ng==
X-Zone-Loop: 221cbe3ec45aea252e4e1586d632b71cb22722c63aba
x-campaign-type: default
x-transaction-id: ce292486-c7a9-424f-928e-5303d0e2e560
x-swg-uid: 01-99c3841a-92fe-4f04-a27d-8aa6c8bbf769
X-Mailer: Sweego
Message-ID:
 <1792672551.8631fc262581453bbf619ec5b2062170.1a1639c51ab000f79f@vates.tech>
x-swg-bid: 1792672551.8631fc262581453bbf619ec5b2062170.1a1639c51ab000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
Date: Thu, 22 Oct 2026 14:35:50 +0200
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [XENVBD-SYNC 0/3] Sync common files with xenbus and bug fixes
Content-Language: en-US
To: =?UTF-8?Q?C=C3=A9saire_Mounah?= <cesaire.mounah@vates.tech>,
 win-pv-devel@lists.xenproject.org
References: <1792671378.8631fc262581453bbf619ec5b2062170.1a1638a6a57000f79f@vates.tech>
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
In-Reply-To: <1792671378.8631fc262581453bbf619ec5b2062170.1a1638a6a57000f79f@vates.tech>
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.11a.d9bacd643fb31c58.1a1639c4fad.e2d154e40dba486e=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792672550830
X-purgate-ID: tlsNG-ebf023/1792672554-C16D2B50-FEE27509/0/0
X-purgate-type: clean
X-purgate-size: 1041

---=Part.11a.d9bacd643fb31c58.1a1639c4fad.e2d154e40dba486e=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

On 22/10/2026 14:16, C=C3=A9saire Mounah wrote:
> Sync common files with xenbus and apply related bug fixes=2E
>=20
> C=C3=A9saire Mounah (3):
>    util: Sync with xenbus
>    xenvbd: Sync common helper files with xenbus
>    xencrsh: Fix inverted BUG_ON
>=20
>   src/common/util=2Eh     | 23 ++++++++++++++++++-----
>   src/xencrsh/assert=2Eh  |  2 +-
>   src/xenvbd/assert=2Eh   | 19 +++++++++----------
>   src/xenvbd/registry=2Ec | 24 ++++++++++++------------
>   src/xenvbd/registry=2Eh | 16 ++++++++--------
>   src/xenvbd/ring=2Ec     |  7 +------
>   6 files changed, 49 insertions(+), 42 deletions(-)
>=20

All 3 patches:

Reviewed-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>


-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.11a.d9bacd643fb31c58.1a1639c4fad.e2d154e40dba486e=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 12:37:46 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 12:37:46 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1458090.1670564 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJs3G-0004Ax-JP; Thu, 22 Oct 2026 12:37:46 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1458090.1670564; Thu, 22 Oct 2026 12:37:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJs3G-0004Aq-Gv; Thu, 22 Oct 2026 12:37:46 +0000
Received: by outflank-mailman (input) for mailman id 1458090;
 Thu, 22 Oct 2026 12:37:45 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1639df323000f79f@swg.vates.tech>)
 id 1xJs3F-0004AT-Fi
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 12:37:45 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJs3E-002LPM-Sc
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 14:37:44 +0200
Received: from [10.42.69.10] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1639df323000f79f@swg.vates.tech>)
 id 6ada037f-e002-0a2a0a5209dd-0a2a450ac240-42
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 14:37:44 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-4011c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1639df323000f79f@swg.vates.tech>)
 id 6ada0398-f2d2-0a2a450a0019-b9ff1c22ae7f-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 14:37:44 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1639df323000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 12:37:38 +0000
Received: from [192.168.1.61] (142.220.66.37.rev.sfr.net [37.66.220.142])
 (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 7B69D82109;
 Thu, 22 Oct 2026 14:37:37 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=C5BdE7eKWMgRyG+VINFQgzpQlK9CXO7n5+i00L45uVw=;
 h=from:subject:date:message-id:to:mime-version:content-type:in-reply-to:references:feedback-id;
 b=UM05PlfK6wRvRUlTDq9++GPfrzw9Q8HfEJZjmQPALE73TP8BXG1i2bO8uSrZMJ68jKC5x9Mlb
 EyH2PhCspo75jCcAZyuvp1b4Nm8fSoL0XBmVSzqZLGhpdH5tlHf3GIK1vADb5++/by5M/cnQbvy
 KFrfOhwQk3vB4mpEqpEUjtcA/M+2J62cBb89KGVueA41+3Ib1AlFGHmXmbWEwBXcYmv6jLjpxOZ
 hpPhuQIj7+aEFGnbSxLCAdF2dV2EF6EBk77pkJhI8b8UX8kvM3DpX/rPxN4rIw2y8HFGpyl9HEo
 JW5JicS3DQVrPxMj7w3moBphehFvEqi11BZhzPOThxSg==
X-Zone-Loop: 770934d0fc9a5cff7cc47ac06836fb24b7113e476b74
x-campaign-type: default
x-transaction-id: b3fa3e52-ecdd-46b1-bc92-9f9605cd14f9
x-swg-uid: 01-58911e0c-2b89-40b4-9182-dd2c0ab8a68c
X-Mailer: Sweego
Message-ID:
 <1792672658.8631fc262581453bbf619ec5b2062170.1a1639df323000f79f@vates.tech>
x-swg-bid: 1792672658.8631fc262581453bbf619ec5b2062170.1a1639df323000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
Date: Thu, 22 Oct 2026 14:37:37 +0200
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [XENVIF-SYNC 0/4] Sync common files with xenbus
Content-Language: en-US
To: =?UTF-8?Q?C=C3=A9saire_Mounah?= <cesaire.mounah@vates.tech>,
 win-pv-devel@lists.xenproject.org
References: <1792671666.8631fc262581453bbf619ec5b2062170.1a1638ed0b2000f79f@vates.tech>
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
In-Reply-To: <1792671666.8631fc262581453bbf619ec5b2062170.1a1638ed0b2000f79f@vates.tech>
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.11b.29042b11e15b0158.1a1639df103.be78a38f20a4a74a=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792672657667
X-purgate-ID: tlsNG-4011c0/1792672664-599C1CFC-A26BFD78/0/0
X-purgate-type: clean
X-purgate-size: 1490

---=Part.11b.29042b11e15b0158.1a1639df103.be78a38f20a4a74a=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

On 22/10/2026 14:21, C=C3=A9saire Mounah wrote:
> Sync common files and headers with xenbus=2E
>=20
> C=C3=A9saire Mounah (4):
>    include: sync store_interface=2Eh with xenbus
>    util: sync with xenbus
>    registry: sync with xenbus
>    xenvif: sync common files with xenbus
>=20
>   include/store_interface=2Eh | 80 ++++++++++++++++-----------------
>   src/xenvif/controller=2Ec   |  5 ---
>   src/xenvif/dbg_print=2Eh    | 66 ++++++++++++++++-----------
>   src/xenvif/driver=2Ec       |  2 +-
>   src/xenvif/mutex=2Eh        | 93 ++++++++++++++++++++++++++-----------=
--
>   src/xenvif/names=2Eh        | 26 +++++------
>   src/xenvif/receiver=2Ec     |  5 ---
>   src/xenvif/registry=2Ec     | 42 ++++++++++--------
>   src/xenvif/registry=2Eh     | 36 +++++++--------
>   src/xenvif/thread=2Ec       | 72 +++++++++++++++---------------
>   src/xenvif/thread=2Eh       | 52 +++++++++++-----------
>   src/xenvif/transmitter=2Ec  |  5 ---
>   src/xenvif/util=2Eh         |  8 +++-
>   13 files changed, 264 insertions(+), 228 deletions(-)
>=20

All 4 patches:

Reviewed-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>


-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.11b.29042b11e15b0158.1a1639df103.be78a38f20a4a74a=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 12:49:56 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 12:49:56 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1458124.1670577 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJsF1-0006b2-Jl; Thu, 22 Oct 2026 12:49:55 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1458124.1670577; Thu, 22 Oct 2026 12:49:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJsF1-0006av-HC; Thu, 22 Oct 2026 12:49:55 +0000
Received: by outflank-mailman (input) for mailman id 1458124;
 Thu, 22 Oct 2026 12:49:54 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a163a923a2000f79f@swg.vates.tech>)
 id 1xJsF0-0006ap-HO
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 12:49:54 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJsEz-00Buyt-R2
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 14:49:53 +0200
Received: from [10.42.69.10] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a163a923a2000f79f@swg.vates.tech>)
 id 6ada0667-e002-0a2a0a5209dd-0a2a450aeb0e-30
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 14:49:53 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-4011c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a163a923a2000f79f@swg.vates.tech>)
 id 6ada0671-f2d2-0a2a450a0019-b9ff1c239da5-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 14:49:53 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a163a923a2000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 12:49:51 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 82FBA82AC2;
 Thu, 22 Oct 2026 14:49:50 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=6suJG+N8BJE59qaB2NcQp3mhrEkTgtYnNNYGQCy+ktE=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:feedback-id;
 b=Fs6C/WwekfsA8M0upw4NzbOPFPUJDzCRyVSyGLy2tjywGg59u6bhIO4dh0Ny46rHt8ZiREToQ
 29UUZ6870qEfduSaCpBgQtCHUTzK1PAhW7Qmpgs7H3qGlGCCEpr9cmRbRQ4cFTQ9X0EbxccHqO/
 fhXczqRioax54FAvsMrIUYnrVHNkoIPMflonUyhXbJ4RPLt9PqLQFtpQIuHFsUmR0WtddivLan1
 P66svx57i0dlrmmjq216QGYZQvY8iL92px0mrHo41HlM3He+VgcruptfSHoh0osmiNJ4PaxXRt1
 08wNRAXuvdApwRrThzm6oCZvT4uUrLhjASQLMJ2dSbMw==
X-Zone-Loop: bc8684e87ef84eb42169248a16a32ce045cbb1195055
x-campaign-type: default
x-transaction-id: 4a0b30be-94d9-415c-a566-8c37e9f1aa4a
x-swg-uid: 01-1c99839d-2b73-4efe-b9e9-e530e948f857
X-Mailer: Sweego
Message-ID:
 <1792673391.8631fc262581453bbf619ec5b2062170.1a163a923a2000f79f@vates.tech>
x-swg-bid: 1792673391.8631fc262581453bbf619ec5b2062170.1a163a923a2000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [PATCH SET] Sync common files with xenbus
Date: Thu, 22 Oct 2026 14:49:47 +0200
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.11d.ab733f816b684b49.1a163a92059.fed2c6479e70f142=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792673390682
X-purgate-ID: tlsNG-4011c0/1792673393-5A9D9CFC-E2538B72/0/0
X-purgate-type: clean
X-purgate-size: 514

---=Part.11d.ab733f816b684b49.1a163a92059.fed2c6479e70f142=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Sync common files and headers with xenbus=2E

This patch series only concerns xencons, xenhid, xennet and xenvkbd=2E

--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.11d.ab733f816b684b49.1a163a92059.fed2c6479e70f142=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 12:53:53 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 12:53:53 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1458131.1670582 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJsIr-0007gh-UZ; Thu, 22 Oct 2026 12:53:53 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1458131.1670582; Thu, 22 Oct 2026 12:53:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJsIr-0007gY-RN; Thu, 22 Oct 2026 12:53:53 +0000
Received: by outflank-mailman (input) for mailman id 1458131;
 Thu, 22 Oct 2026 12:53:52 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a163acbc1f000f79f@swg.vates.tech>)
 id 1xJsIp-0007gP-Rw
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 12:53:52 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJsIp-00Bvms-4x
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 14:53:51 +0200
Received: from [10.42.69.2] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a163acbc1f000f79f@swg.vates.tech>)
 id 6ada075f-8faa-0a2a0a5109dd-0a2a4502c80e-0
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 14:53:51 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a163acbc1f000f79f@swg.vates.tech>)
 id 6ada075e-6ca4-0a2a45020019-b9ff1c23a2df-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 14:53:51 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a163acbc1f000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 12:53:47 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 83C2B815CB;
 Thu, 22 Oct 2026 14:53:46 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=Ye41QPIa1YLquYPuDN6x11YnQr2HR+20NpcMlqdC0Qo=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=oOOqLvJQdqzD0qrnjA1wB/JQih0/Td34P/ajMkpmd9lVb8rSXeVVf9oN5EJ36Nn2Zk3h99uCn
 vG2thCTRVWRyfJyW7NK4Qk1CeVrkvPV1jPrG+R73d4JAEcxXaUv9Tx4lyEyc3k0RAZlYgkmD2TU
 cg01TNS4aohRhgiD5T3Kdau0YLDJd+0bs6MFZUxr3m3eYtd8d5/9Jt1FGCjvPon98KaxyEcqiak
 ydtQ8jrugk0DuKV8/Q3AJeq/0VhtIrQp0/4dkqBhxf/FxP7d7m/2CJNIxTi0F1FDc281uzsGKx6
 iCdK6I73qyIXh5kSJroUBZa3Rpz5XsxFTweTZRCEdOTA==
X-Zone-Loop: 5fd265fc43e2ef9e86df740bc4ddb4549827e7663cf5
x-campaign-type: default
x-transaction-id: 489ea8bc-7090-482f-aee7-ea0245661350
x-swg-uid: 01-79be60cf-d67f-41b8-a4f7-c2815d59a552
X-Mailer: Sweego
Message-ID:
 <1792673627.8631fc262581453bbf619ec5b2062170.1a163acbc1f000f79f@vates.tech>
x-swg-bid: 1792673627.8631fc262581453bbf619ec5b2062170.1a163acbc1f000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [XENCONS-SYNC] xencons: Sync common helper files with xenbus
Date: Thu, 22 Oct 2026 14:53:36 +0200
In-Reply-To: <1792673391.8631fc262581453bbf619ec5b2062170.1a163a923a2000f79f@vates.tech>
References: <1792673391.8631fc262581453bbf619ec5b2062170.1a163a923a2000f79f@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.11e.6b069ea8db718ee3.1a163acba0b.a6eb582dbfad083=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792673626635
X-purgate-ID: tlsNG-720697/1792673631-F3CBA2AC-5CC9CA21/0/0
X-purgate-type: clean
X-purgate-size: 15269

---=Part.11e.6b069ea8db718ee3.1a163acba0b.a6eb582dbfad083=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Take assert=2Eh, dbg_print=2Eh, mutex=2Eh, util=2Eh, registry=2Ec/h and
thread=2Ec/h from xenbus=2E This replaces the remaining IN annotations of
mutex=2Eh, brings TryAcquireMutex and annotates the helpers with their
actual direction and buffer sizes=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xencons/assert=2Eh    |  18 +++----
 src/xencons/dbg_print=2Eh |  16 ++++++
 src/xencons/mutex=2Eh     | 117 +++++++++++++++++++++++++---------------
 src/xencons/registry=2Ec  |  24 ++++-----
 src/xencons/registry=2Eh  |  16 +++---
 src/xencons/thread=2Ec    |  10 ++--
 src/xencons/thread=2Eh    |   6 +--
 src/xencons/util=2Eh      |  36 ++++++-------
 8 files changed, 145 insertions(+), 98 deletions(-)

diff --git a/src/xencons/assert=2Eh b/src/xencons/assert=2Eh
index 9db2d0c=2E=2Ed99333a 100644
--- a/src/xencons/assert=2Eh
+++ b/src/xencons/assert=2Eh
@@ -154,13 +154,13 @@ __Bug(
=20
 static __inline BOOLEAN
 _IsZeroMemory(
-    _In_ PCSTR          Caller,
-    _In_ PCSTR          Name,
-    _In_ PVOID          Buffer,
-    _In_ ULONG          Length
+    _In_ PCSTR                      Caller,
+    _In_ PCSTR                      Name,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Length
     )
 {
-    ULONG           Offset;
+    ULONG                           Offset;
=20
     Offset =3D 0;
     while (Offset < Length) {
@@ -178,10 +178,10 @@ _IsZeroMemory(
=20
 static __inline BOOLEAN
 _IsZeroMemory(
-    _In_ PCSTR          Caller,
-    _In_ PCSTR          Name,
-    _In_ PVOID          Buffer,
-    _In_ ULONG          Length
+    _In_ PCSTR                      Caller,
+    _In_ PCSTR                      Name,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Length
     )
 {
     UNREFERENCED_PARAMETER(Caller);
diff --git a/src/xencons/dbg_print=2Eh b/src/xencons/dbg_print=2Eh
index 132c051=2E=2E80b8a24 100644
--- a/src/xencons/dbg_print=2Eh
+++ b/src/xencons/dbg_print=2Eh
@@ -138,4 +138,20 @@ __Info(
 #define Info(=2E=2E=2E)  \
         __Info(__MODULE__ "|"  __FUNCTION__ ": ", __VA_ARGS__)
=20
+#define DBG_PRINT_ENABLE_FILTER(_Id, _Level)                       \
+        do {                                                        \
+            DbgSetDebugFilterState((_Id), (_Level), TRUE);          \
+        } while (FALSE)
+
+static __inline VOID
+__DbgPrintEnable(
+    VOID
+    )
+{
+    DBG_PRINT_ENABLE_FILTER(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL);
+    DBG_PRINT_ENABLE_FILTER(DPFLTR_IHVDRIVER_ID, DPFLTR_WARNING_LEVEL);
+    DBG_PRINT_ENABLE_FILTER(DPFLTR_IHVDRIVER_ID, DPFLTR_TRACE_LEVEL);
+    DBG_PRINT_ENABLE_FILTER(DPFLTR_IHVDRIVER_ID, DPFLTR_INFO_LEVEL);
+}
+
 #endif  // _XENCONS_DBG_PRINT_H
diff --git a/src/xencons/mutex=2Eh b/src/xencons/mutex=2Eh
index c6cd2f9=2E=2E578165f 100644
--- a/src/xencons/mutex=2Eh
+++ b/src/xencons/mutex=2Eh
@@ -1,34 +1,34 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
-* All rights reserved=2E
-*
-* Redistribution and use in source and binary forms,
-* with or without modification, are permitted provided
-* that the following conditions are met:
-*
-* *   Redistributions of source code must retain the above
-*     copyright notice, this list of conditions and the
-*     following disclaimer=2E
-* *   Redistributions in binary form must reproduce the above
-*     copyright notice, this list of conditions and the
-*     following disclaimer in the documentation and/or other
-*     materials provided with the distribution=2E
-*
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
-* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
-* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-* DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
-* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-* SUCH DAMAGE=2E
-*/
+ * All rights reserved=2E
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
+ * that the following conditions are met:
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer=2E
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
+ *     materials provided with the distribution=2E
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE=2E
+ */
=20
 #ifndef _XENCONS_MUTEX_H
 #define _XENCONS_MUTEX_H
@@ -44,37 +44,68 @@ typedef struct _MUTEX {
=20
 static FORCEINLINE VOID
 InitializeMutex(
-    IN  PMUTEX  Mutex
-)
+    _Out_ PMUTEX    Mutex
+    )
 {
-    RtlZeroMemory(Mutex, sizeof(MUTEX));
+    RtlZeroMemory(Mutex, sizeof (MUTEX));
=20
     KeInitializeEvent(&Mutex->Event, SynchronizationEvent, TRUE);
 }
=20
+static FORCEINLINE BOOLEAN
+_IRQL_requires_max_(PASSIVE_LEVEL)
+TryAcquireMutex(
+    _Inout_ PMUTEX  Mutex
+    )
+{
+    LARGE_INTEGER   Timeout;
+    NTSTATUS        status;
+
+    Timeout=2EQuadPart =3D 0;
+
+    status =3D KeWaitForSingleObject(&Mutex->Event,
+                                   Executive,
+                                   KernelMode,
+                                   FALSE,
+                                   &Timeout);
+    if (status =3D=3D STATUS_TIMEOUT)
+        return FALSE;
+
+    ASSERT(NT_SUCCESS(status));
+
+    ASSERT3P(Mutex->Owner, =3D=3D, NULL);
+    Mutex->Owner =3D KeGetCurrentThread();
+
+    return TRUE;
+}
+
 static FORCEINLINE VOID
 _IRQL_requires_max_(PASSIVE_LEVEL)
 AcquireMutex(
-    IN  PMUTEX  Mutex
-)
+    _Inout_ PMUTEX  Mutex
+    )
 {
-    (VOID)KeWaitForSingleObject(&Mutex->Event,
-                                Executive,
-                                KernelMode,
-                                FALSE,
-                                NULL);
+    NTSTATUS        status;
+
+    status =3D KeWaitForSingleObject(&Mutex->Event,
+                                   Executive,
+                                   KernelMode,
+                                   FALSE,
+                                   NULL);
+
+    ASSERT(NT_SUCCESS(status));
=20
-    ASSERT3P(Mutex->Owner, =3D=3D , NULL);
+    ASSERT3P(Mutex->Owner, =3D=3D, NULL);
     Mutex->Owner =3D KeGetCurrentThread();
 }
=20
 static FORCEINLINE VOID
 _IRQL_requires_max_(PASSIVE_LEVEL)
 ReleaseMutex(
-    IN  PMUTEX  Mutex
-)
+    _Inout_ PMUTEX  Mutex
+    )
 {
-    ASSERT3P(Mutex->Owner, =3D=3D , KeGetCurrentThread());
+    ASSERT3P(Mutex->Owner, =3D=3D, KeGetCurrentThread());
     Mutex->Owner =3D NULL;
=20
     KeSetEvent(&Mutex->Event, IO_NO_INCREMENT, FALSE);
diff --git a/src/xencons/registry=2Ec b/src/xencons/registry=2Ec
index 4f7c5ef=2E=2Ed576990 100644
--- a/src/xencons/registry=2Ec
+++ b/src/xencons/registry=2Ec
@@ -1169,17 +1169,17 @@ fail1:
=20
 NTSTATUS
 RegistryQueryBinaryValue(
-    _In_ HANDLE                     Key,
-    _In_ PSTR                       Name,
-    _Outptr_ PVOID                  *Buffer,
-    _Out_ PULONG                    Length
+    _In_ HANDLE                                 Key,
+    _In_ PSTR                                   Name,
+    _Outptr_result_bytebuffer_(*Length) PVOID   *Buffer,
+    _Out_ PULONG                                Length
     )
 {
-    ANSI_STRING                     Ansi;
-    UNICODE_STRING                  Unicode;
-    PKEY_VALUE_PARTIAL_INFORMATION  Partial;
-    ULONG                           Size;
-    NTSTATUS                        status;
+    ANSI_STRING                                 Ansi;
+    UNICODE_STRING                              Unicode;
+    PKEY_VALUE_PARTIAL_INFORMATION              Partial;
+    ULONG                                       Size;
+    NTSTATUS                                    status;
=20
     RtlInitAnsiString(&Ansi, Name);
=20
@@ -1256,7 +1256,7 @@ NTSTATUS
 RegistryUpdateBinaryValue(
     _In_ HANDLE                     Key,
     _In_ PSTR                       Name,
-    _In_ PVOID                      Buffer,
+    _In_reads_bytes_(Length) PVOID  Buffer,
     _In_ ULONG                      Length
     )
 {
@@ -1444,7 +1444,7 @@ fail1:
=20
 static PKEY_VALUE_PARTIAL_INFORMATION
 RegistryAnsiToSz(
-    PANSI_STRING                    Ansi
+    _In_ PANSI_STRING               Ansi
     )
 {
     ULONG                           Length;
@@ -1490,7 +1490,7 @@ fail1:
=20
 static PKEY_VALUE_PARTIAL_INFORMATION
 RegistryAnsiToMultiSz(
-    PANSI_STRING                    Ansi
+    _In_ PANSI_STRING               Ansi
     )
 {
     ULONG                           Length;
diff --git a/src/xencons/registry=2Eh b/src/xencons/registry=2Eh
index 170445b=2E=2E98801d5 100644
--- a/src/xencons/registry=2Eh
+++ b/src/xencons/registry=2Eh
@@ -166,18 +166,18 @@ RegistryQuerySzValue(
=20
 extern NTSTATUS
 RegistryQueryBinaryValue(
-    _In_ HANDLE         Key,
-    _In_ PSTR           Name,
-    _Outptr_ PVOID      *Buffer,
-    _Out_ PULONG        Length
+    _In_ HANDLE                                 Key,
+    _In_ PSTR                                   Name,
+    _Outptr_result_bytebuffer_(*Length) PVOID   *Buffer,
+    _Out_ PULONG                                Length
     );
=20
 extern NTSTATUS
 RegistryUpdateBinaryValue(
-    _In_ HANDLE         Key,
-    _In_ PSTR           Name,
-    _In_ PVOID          Buffer,
-    _In_ ULONG          Length
+    _In_ HANDLE                     Key,
+    _In_ PSTR                       Name,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Length
     );
=20
 extern NTSTATUS
diff --git a/src/xencons/thread=2Ec b/src/xencons/thread=2Ec
index e8e4a6c=2E=2Ead30f8f 100644
--- a/src/xencons/thread=2Ec
+++ b/src/xencons/thread=2Ec
@@ -66,7 +66,7 @@ __ThreadFree(
=20
 static FORCEINLINE VOID
 __ThreadWake(
-    _In_ PXENCONS_THREAD    Thread
+    _Inout_ PXENCONS_THREAD Thread
     )
 {
     KeSetEvent(&Thread->Event, IO_NO_INCREMENT, FALSE);
@@ -74,7 +74,7 @@ __ThreadWake(
=20
 VOID
 ThreadWake(
-    _In_ PXENCONS_THREAD    Thread
+    _Inout_ PXENCONS_THREAD Thread
     )
 {
     __ThreadWake(Thread);
@@ -82,7 +82,7 @@ ThreadWake(
=20
 static FORCEINLINE VOID
 __ThreadAlert(
-    _In_ PXENCONS_THREAD    Thread
+    _Inout_ PXENCONS_THREAD Thread
     )
 {
     Thread->Alerted =3D TRUE;
@@ -91,7 +91,7 @@ __ThreadAlert(
=20
 VOID
 ThreadAlert(
-    _In_ PXENCONS_THREAD    Thread
+    _Inout_ PXENCONS_THREAD Thread
     )
 {
     __ThreadAlert(Thread);
@@ -205,7 +205,7 @@ ThreadIsAlerted(
=20
 VOID
 ThreadJoin(
-    _In_ PXENCONS_THREAD    Thread
+    _Inout_ PXENCONS_THREAD Thread
     )
 {
     LONG                    References;
diff --git a/src/xencons/thread=2Eh b/src/xencons/thread=2Eh
index d344cb8=2E=2Eb934e8d 100644
--- a/src/xencons/thread=2Eh
+++ b/src/xencons/thread=2Eh
@@ -59,17 +59,17 @@ ThreadIsAlerted(
=20
 extern VOID
 ThreadWake(
-    _In_ PXENCONS_THREAD Thread
+    _Inout_ PXENCONS_THREAD Thread
     );
=20
 extern VOID
 ThreadAlert(
-    _In_ PXENCONS_THREAD Thread
+    _Inout_ PXENCONS_THREAD Thread
     );
=20
 extern VOID
 ThreadJoin(
-    _In_ PXENCONS_THREAD Thread
+    _Inout_ PXENCONS_THREAD Thread
     );
=20
 #endif  // _XENCONS_THREAD_H
diff --git a/src/xencons/util=2Eh b/src/xencons/util=2Eh
index 9709a10=2E=2Edb40d4f 100644
--- a/src/xencons/util=2Eh
+++ b/src/xencons/util=2Eh
@@ -113,12 +113,12 @@ __CpuId(
=20
 static FORCEINLINE LONG
 __InterlockedAdd(
-    _In_ LONG   *Value,
-    _In_ LONG   Delta
+    _Inout_ LONG    *Value,
+    _In_ LONG       Delta
     )
 {
-    LONG        New;
-    LONG        Old;
+    LONG            New;
+    LONG            Old;
=20
     do {
         Old =3D *Value;
@@ -130,12 +130,12 @@ __InterlockedAdd(
=20
 static FORCEINLINE LONG
 __InterlockedSubtract(
-    _In_ LONG   *Value,
-    _In_ LONG   Delta
+    _Inout_ LONG    *Value,
+    _In_ LONG       Delta
     )
 {
-    LONG        New;
-    LONG        Old;
+    LONG            New;
+    LONG            Old;
=20
     do {
         Old =3D *Value;
@@ -281,15 +281,15 @@ __FreePages(
=20
 static FORCEINLINE PSTR
 __strtok_r(
-    _In_opt_ PSTR   Buffer,
-    _In_ PSTR       Delimiter,
+    _Inout_opt_ PSTR    Buffer,
+    _In_ PSTR           Delimiter,
     _When_(Buffer !=3D NULL, _Outptr_)
     _When_(Buffer =3D=3D NULL, _Inout_)
-    PSTR            *Context
+    PSTR                *Context
     )
 {
-    PSTR            Token;
-    PSTR            End;
+    PSTR                Token;
+    PSTR                End;
=20
     if (Buffer !=3D NULL)
         *Context =3D Buffer;
@@ -321,15 +321,15 @@ __strtok_r(
=20
 static FORCEINLINE PWSTR
 __wcstok_r(
-    _In_opt_ PWSTR  Buffer,
-    _In_ PWSTR      Delimiter,
+    _Inout_opt_ PWSTR   Buffer,
+    _In_ PWSTR          Delimiter,
     _When_(Buffer !=3D NULL, _Outptr_)
     _When_(Buffer =3D=3D NULL, _Inout_)
-    PWSTR           *Context
+    PWSTR               *Context
     )
 {
-    PWSTR           Token;
-    PWSTR           End;
+    PWSTR               Token;
+    PWSTR               End;
=20
     if (Buffer !=3D NULL)
         *Context =3D Buffer;
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.11e.6b069ea8db718ee3.1a163acba0b.a6eb582dbfad083=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 12:53:59 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 12:53:59 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1458132.1670585 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJsIx-0007iv-2d; Thu, 22 Oct 2026 12:53:59 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1458132.1670585; Thu, 22 Oct 2026 12:53:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJsIw-0007io-Ts; Thu, 22 Oct 2026 12:53:58 +0000
Received: by outflank-mailman (input) for mailman id 1458132;
 Thu, 22 Oct 2026 12:53:56 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a163acbe43000f79f@swg.vates.tech>)
 id 1xJsIu-0007iQ-Ox
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 12:53:56 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJsIu-006wJi-5a
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 14:53:56 +0200
Received: from [10.42.69.1] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a163acbe43000f79f@swg.vates.tech>)
 id 6ada0753-2eae-0a2a0a5409dd-0a2a45018dbc-16
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 14:53:51 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a163acbe43000f79f@swg.vates.tech>)
 id 6ada075e-5984-0a2a45010019-b9ff1c239dfb-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 14:53:51 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a163acbe43000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 12:53:47 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 336E582A69;
 Thu, 22 Oct 2026 14:53:47 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=mVqv6ewXNQZ9O9IzW4pqL8EzDs9iRDdF4X9FDKk4Rn4=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=DrhUo+THS4e4Zev8/1FebYtpb0gYKlzG/v//k+xCTskNxb+uVLM2Tvw+5h6VVDEIsORhvp17J
 xqOCSBctZiLend33wwl8BDMhFBrGT85dbvDybhSb+DyRCyOWuZ2Vja467U1ZpdJaAZNkstrss2L
 lmAILkkS+lp1KUefr6+wyunRLO14mCvdJl1cNVcIMDRXjsmPnrW2SZ2ySUrETbHLZok5dqrSAev
 CGt9r+J7LAUQOG+AFE8DwgUIdUphyzDRo5AfywKd+qanuv0PsvksTahTwpHpornsZztpLFNkPVd
 gh0W5SQ0UpI/9mgS9o0xAydzmogudoRHzjGNRloBsBJA==
X-Zone-Loop: 2369f74924c0eb9798040211bafd70610d97419ae467
x-campaign-type: default
x-transaction-id: ef3430e9-eac5-4188-a99b-713ad9102746
x-swg-uid: 01-68abadf6-3429-49f7-a766-c866b182cd87
X-Mailer: Sweego
Message-ID:
 <1792673627.8631fc262581453bbf619ec5b2062170.1a163acbe43000f79f@vates.tech>
x-swg-bid: 1792673627.8631fc262581453bbf619ec5b2062170.1a163acbe43000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [XENNET-SYNC] xennet: Sync common helper files with xenbus
Date: Thu, 22 Oct 2026 14:53:38 +0200
In-Reply-To: <1792673391.8631fc262581453bbf619ec5b2062170.1a163a923a2000f79f@vates.tech>
References: <1792673391.8631fc262581453bbf619ec5b2062170.1a163a923a2000f79f@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.120.d618878ba5998d27.1a163acbca7.10828d87420120c7=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792673627303
X-purgate-ID: tlsNG-d62444/1792673631-C4558757-5B459065/0/0
X-purgate-type: clean
X-purgate-size: 8094

---=Part.120.d618878ba5998d27.1a163acbca7.10828d87420120c7=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Take assert=2Eh, dbg_print=2Eh and util=2Eh from xenbus, bringing the
updated direction and buffer-size annotations=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xennet/assert=2Eh    | 18 ++++++------
 src/xennet/dbg_print=2Eh | 66 ++++++++++++++++++++++++++----------------
 src/xennet/util=2Eh      | 36 +++++++++++------------
 3 files changed, 68 insertions(+), 52 deletions(-)

diff --git a/src/xennet/assert=2Eh b/src/xennet/assert=2Eh
index ac25718=2E=2Ea858f67 100644
--- a/src/xennet/assert=2Eh
+++ b/src/xennet/assert=2Eh
@@ -154,13 +154,13 @@ __Bug(
=20
 static __inline BOOLEAN
 _IsZeroMemory(
-    _In_ PCSTR      Caller,
-    _In_ PCSTR      Name,
-    _In_ PVOID      Buffer,
-    _In_ ULONG      Length
+    _In_ PCSTR                      Caller,
+    _In_ PCSTR                      Name,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Length
     )
 {
-    ULONG           Offset;
+    ULONG                           Offset;
=20
     Offset =3D 0;
     while (Offset < Length) {
@@ -178,10 +178,10 @@ _IsZeroMemory(
=20
 static __inline BOOLEAN
 _IsZeroMemory(
-    _In_ PCSTR  Caller,
-    _In_ PCSTR  Name,
-    _In_ PVOID  Buffer,
-    _In_ ULONG  Length
+    _In_ PCSTR                      Caller,
+    _In_ PCSTR                      Name,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Length
     )
 {
     UNREFERENCED_PARAMETER(Caller);
diff --git a/src/xennet/dbg_print=2Eh b/src/xennet/dbg_print=2Eh
index 9c2acdf=2E=2E86a0296 100644
--- a/src/xennet/dbg_print=2Eh
+++ b/src/xennet/dbg_print=2Eh
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -36,12 +36,12 @@
 #include <ntddk=2Eh>
 #include <stdarg=2Eh>
=20
-#pragma warning(disable:4127)   // conditional expression is constant
-
 #define stringify_literal(_text) #_text
 #define stringify(_text) stringify_literal(_text)
 #define __MODULE__ stringify(PROJECT)
=20
+#pragma warning(disable:4127)   // conditional expression is constant
+
 static __inline VOID
 __Error(
     _In_ PCSTR      Prefix,
@@ -138,4 +138,20 @@ __Info(
 #define Info(=2E=2E=2E)  \
         __Info(__MODULE__ "|"  __FUNCTION__ ": ", __VA_ARGS__)
=20
+#define DBG_PRINT_ENABLE_FILTER(_Id, _Level)                       \
+        do {                                                        \
+            DbgSetDebugFilterState((_Id), (_Level), TRUE);          \
+        } while (FALSE)
+
+static __inline VOID
+__DbgPrintEnable(
+    VOID
+    )
+{
+    DBG_PRINT_ENABLE_FILTER(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL);
+    DBG_PRINT_ENABLE_FILTER(DPFLTR_IHVDRIVER_ID, DPFLTR_WARNING_LEVEL);
+    DBG_PRINT_ENABLE_FILTER(DPFLTR_IHVDRIVER_ID, DPFLTR_TRACE_LEVEL);
+    DBG_PRINT_ENABLE_FILTER(DPFLTR_IHVDRIVER_ID, DPFLTR_INFO_LEVEL);
+}
+
 #endif  // _XENNET_DBG_PRINT_H
diff --git a/src/xennet/util=2Eh b/src/xennet/util=2Eh
index 9709a10=2E=2Edb40d4f 100644
--- a/src/xennet/util=2Eh
+++ b/src/xennet/util=2Eh
@@ -113,12 +113,12 @@ __CpuId(
=20
 static FORCEINLINE LONG
 __InterlockedAdd(
-    _In_ LONG   *Value,
-    _In_ LONG   Delta
+    _Inout_ LONG    *Value,
+    _In_ LONG       Delta
     )
 {
-    LONG        New;
-    LONG        Old;
+    LONG            New;
+    LONG            Old;
=20
     do {
         Old =3D *Value;
@@ -130,12 +130,12 @@ __InterlockedAdd(
=20
 static FORCEINLINE LONG
 __InterlockedSubtract(
-    _In_ LONG   *Value,
-    _In_ LONG   Delta
+    _Inout_ LONG    *Value,
+    _In_ LONG       Delta
     )
 {
-    LONG        New;
-    LONG        Old;
+    LONG            New;
+    LONG            Old;
=20
     do {
         Old =3D *Value;
@@ -281,15 +281,15 @@ __FreePages(
=20
 static FORCEINLINE PSTR
 __strtok_r(
-    _In_opt_ PSTR   Buffer,
-    _In_ PSTR       Delimiter,
+    _Inout_opt_ PSTR    Buffer,
+    _In_ PSTR           Delimiter,
     _When_(Buffer !=3D NULL, _Outptr_)
     _When_(Buffer =3D=3D NULL, _Inout_)
-    PSTR            *Context
+    PSTR                *Context
     )
 {
-    PSTR            Token;
-    PSTR            End;
+    PSTR                Token;
+    PSTR                End;
=20
     if (Buffer !=3D NULL)
         *Context =3D Buffer;
@@ -321,15 +321,15 @@ __strtok_r(
=20
 static FORCEINLINE PWSTR
 __wcstok_r(
-    _In_opt_ PWSTR  Buffer,
-    _In_ PWSTR      Delimiter,
+    _Inout_opt_ PWSTR   Buffer,
+    _In_ PWSTR          Delimiter,
     _When_(Buffer !=3D NULL, _Outptr_)
     _When_(Buffer =3D=3D NULL, _Inout_)
-    PWSTR           *Context
+    PWSTR               *Context
     )
 {
-    PWSTR           Token;
-    PWSTR           End;
+    PWSTR               Token;
+    PWSTR               End;
=20
     if (Buffer !=3D NULL)
         *Context =3D Buffer;
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.120.d618878ba5998d27.1a163acbca7.10828d87420120c7=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 12:53:59 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 12:53:59 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1458133.1670593 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJsIx-0007jO-AX; Thu, 22 Oct 2026 12:53:59 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1458133.1670593; Thu, 22 Oct 2026 12:53:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJsIw-0007j1-V8; Thu, 22 Oct 2026 12:53:58 +0000
Received: by outflank-mailman (input) for mailman id 1458133;
 Thu, 22 Oct 2026 12:53:57 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a163acbd4f000f79f@swg.vates.tech>)
 id 1xJsIu-0007iP-Oj
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 12:53:56 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJsIu-00DZ0W-5Q
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 14:53:56 +0200
Received: from [10.42.69.7] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a163acbd4f000f79f@swg.vates.tech>)
 id 6ada075c-bab6-0a2a0a5309dd-0a2a45079186-10
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 14:53:51 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-ef75cf.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a163acbd4f000f79f@swg.vates.tech>)
 id 6ada075e-b4ea-0a2a45070019-b9ff1c239e4d-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 14:53:51 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a163acbd4f000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 12:53:47 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id EB1F182A53;
 Thu, 22 Oct 2026 14:53:46 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=Vig6FK/21MaRqbtfNMvCZ1O2xWITaOZkl6V7QjvEzBw=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=seTUKga/GXbSHwGEr/OBkchD7QIGOy32WT2B5xM1camRTTn21GA9Xt30JYY2qYx/8HXVne8nr
 XNIDDdsIITtt2wBncvio3Bss4YQwU2DUDFMI/hJBfbl9NrV+zWriNYzmzeWRTZ4/C+pm4i6cZgr
 oU1rv6ra/qj59KZSb7HZcvdY/nGaNiF/rLRiKO81hn/k4547YV//VoHqYnUJUCEHoxqgTtEwE3U
 e7e/AallJv9ektONdlyVDt6vzNlOjoVK8G3p/yFTnoCyT/OK676NvmJz7GayUagJ0RyMi8v8NmD
 8a5w9rSeYm1UjNs9vM/prvM4pH4vwWnMeQ9Z3O5sqg3w==
X-Zone-Loop: 19c5d011cf61b66ce1edf1e2ae8dea7ee3d959461099
x-campaign-type: default
x-transaction-id: 4e7fc3ee-3fd0-418a-afd6-7e4143c09269
x-swg-uid: 01-3dab18b2-e04f-48e0-af4e-63c8d2462c6a
X-Mailer: Sweego
Message-ID:
 <1792673627.8631fc262581453bbf619ec5b2062170.1a163acbd4f000f79f@vates.tech>
x-swg-bid: 1792673627.8631fc262581453bbf619ec5b2062170.1a163acbd4f000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [XENHID-SYNC] xenhid: Sync common helper files with xenbus
Date: Thu, 22 Oct 2026 14:53:37 +0200
In-Reply-To: <1792673391.8631fc262581453bbf619ec5b2062170.1a163a923a2000f79f@vates.tech>
References: <1792673391.8631fc262581453bbf619ec5b2062170.1a163a923a2000f79f@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.11f.21b9beb10615f118.1a163acbbb1.67f59a400f1c7f91=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792673627057
X-purgate-ID: tlsNG-ef75cf/1792673631-A5EC6AE4-7DC9D09C/0/0
X-purgate-type: clean
X-purgate-size: 17846

---=Part.11f.21b9beb10615f118.1a163acbbb1.67f59a400f1c7f91=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Take assert=2Eh, dbg_print=2Eh, util=2Eh and thread=2Ec/h from xenbus=2E Th=
is
replaces __analysis_assume with _Analysis_assume_, uses PCSTR for
read-only strings, drops the Warning-level log of every thread creation
and brings the updated direction and buffer-size annotations=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xenhid/assert=2Eh    | 72 ++++++++++++++++++-------------------
 src/xenhid/dbg_print=2Eh | 81 ++++++++++++++++++++++--------------------
 src/xenhid/names=2Eh     | 18 +++++-----
 src/xenhid/string=2Ec    |  2 +-
 src/xenhid/thread=2Ec    | 20 +++++------
 src/xenhid/thread=2Eh    |  6 ++--
 src/xenhid/util=2Eh      | 36 +++++++++----------
 7 files changed, 118 insertions(+), 117 deletions(-)

diff --git a/src/xenhid/assert=2Eh b/src/xenhid/assert=2Eh
index 3c7398e=2E=2Ed24dbd8 100644
--- a/src/xenhid/assert=2Eh
+++ b/src/xenhid/assert=2Eh
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -58,8 +58,8 @@ __Bug(
=20
 #define BUG(_TEXT)                                              \
         do {                                                    \
-            const CHAR  *_Text =3D (_TEXT);                       \
-            const CHAR  *_File =3D __FILE__;                      \
+            PCSTR       _Text =3D (_TEXT);                       \
+            PCSTR       _File =3D __FILE__;                      \
             ULONG       _Line =3D __LINE__;                       \
                                                                 \
             Error("BUG: " _TEXT "\n");                          \
@@ -89,7 +89,7 @@ __Bug(
 #define ASSERT(_EXP)                    \
         do {                            \
             __ASSERT(_EXP);             \
-            __analysis_assume(_EXP);    \
+            _Analysis_assume_(_EXP);    \
         } while (FALSE)
=20
 #define ASSERT3U(_X, _OP, _Y)                       \
@@ -132,7 +132,7 @@ __Bug(
=20
 #define ASSERT(_EXP)                    \
         do {                            \
-            __analysis_assume(_EXP);    \
+            _Analysis_assume_(_EXP);    \
         } while (FALSE)
=20
 #define ASSERT3U(_X, _OP, _Y)           \
@@ -154,13 +154,13 @@ __Bug(
=20
 static __inline BOOLEAN
 _IsZeroMemory(
-    _In_ PCSTR          Caller,
-    _In_ PCSTR          Name,
-    _In_ PVOID          Buffer,
-    _In_ ULONG          Length
+    _In_ PCSTR                      Caller,
+    _In_ PCSTR                      Name,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Length
     )
 {
-    ULONG               Offset;
+    ULONG                           Offset;
=20
     Offset =3D 0;
     while (Offset < Length) {
@@ -178,10 +178,10 @@ _IsZeroMemory(
=20
 static __inline BOOLEAN
 _IsZeroMemory(
-    _In_ PCSTR  Caller,
-    _In_ PCSTR  Name,
-    _In_ PVOID  Buffer,
-    _In_ ULONG  Length
+    _In_ PCSTR                      Caller,
+    _In_ PCSTR                      Name,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Length
     )
 {
     UNREFERENCED_PARAMETER(Caller);
diff --git a/src/xenhid/dbg_print=2Eh b/src/xenhid/dbg_print=2Eh
index e13cd8e=2E=2Ed6d3a27 100644
--- a/src/xenhid/dbg_print=2Eh
+++ b/src/xenhid/dbg_print=2Eh
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -89,7 +89,6 @@ __Warning(
         __Warning(__MODULE__ "|" __FUNCTION__ ": ", __VA_ARGS__)
=20
 #if DBG
-
 static __inline VOID
 __Trace(
     _In_ PCSTR      Prefix,
@@ -110,23 +109,11 @@ __Trace(
     va_end(Arguments);
 }
=20
-#else   // DBG
-
-static __inline VOID
-__Trace(
-    _In_ PCSTR  Prefix,
-    _In_ PCSTR  Format,
-    =2E=2E=2E
-    )
-{
-    UNREFERENCED_PARAMETER(Prefix);
-    UNREFERENCED_PARAMETER(Format);
-}
-
-#endif  // DBG
-
 #define Trace(=2E=2E=2E)  \
         __Trace(__MODULE__ "|" __FUNCTION__ ": ", __VA_ARGS__)
+#else   // DBG
+#define Trace(=2E=2E=2E)  (VOID)(__VA_ARGS__)
+#endif  // DBG
=20
 static __inline VOID
 __Info(
@@ -151,4 +138,20 @@ __Info(
 #define Info(=2E=2E=2E)  \
         __Info(__MODULE__ "|"  __FUNCTION__ ": ", __VA_ARGS__)
=20
+#define DBG_PRINT_ENABLE_FILTER(_Id, _Level)                       \
+        do {                                                        \
+            DbgSetDebugFilterState((_Id), (_Level), TRUE);          \
+        } while (FALSE)
+
+static __inline VOID
+__DbgPrintEnable(
+    VOID
+    )
+{
+    DBG_PRINT_ENABLE_FILTER(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL);
+    DBG_PRINT_ENABLE_FILTER(DPFLTR_IHVDRIVER_ID, DPFLTR_WARNING_LEVEL);
+    DBG_PRINT_ENABLE_FILTER(DPFLTR_IHVDRIVER_ID, DPFLTR_TRACE_LEVEL);
+    DBG_PRINT_ENABLE_FILTER(DPFLTR_IHVDRIVER_ID, DPFLTR_INFO_LEVEL);
+}
+
 #endif  // _XENHID_DBG_PRINT_H
diff --git a/src/xenhid/names=2Eh b/src/xenhid/names=2Eh
index 1dacb4b=2E=2Eadc7608 100644
--- a/src/xenhid/names=2Eh
+++ b/src/xenhid/names=2Eh
@@ -37,7 +37,7 @@
=20
 #include "types=2Eh"
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PowerTypeName(
     _In_ POWER_STATE_TYPE   Type
     )
@@ -57,7 +57,7 @@ PowerTypeName(
 #undef  _POWER_ACTION_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PowerSystemStateName(
     _In_ SYSTEM_POWER_STATE State
     )
@@ -83,7 +83,7 @@ PowerSystemStateName(
 #undef  _POWER_SYSTEM_STATE_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PowerDeviceStateName(
     _In_ DEVICE_POWER_STATE State
     )
@@ -107,7 +107,7 @@ PowerDeviceStateName(
 #undef  _POWER_DEVICE_STATE_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PowerActionName(
     _In_ POWER_ACTION   Type
     )
@@ -133,7 +133,7 @@ PowerActionName(
 #undef  _POWER_ACTION_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PowerMinorFunctionName(
     _In_ ULONG  MinorFunction
     )
@@ -155,7 +155,7 @@ PowerMinorFunctionName(
 #undef  _POWER_MINOR_FUNCTION_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PnpDeviceStateName(
     _In_ DEVICE_PNP_STATE   State
     )
@@ -182,7 +182,7 @@ PnpDeviceStateName(
 #undef  _STATE_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PnpMinorFunctionName(
     _In_ ULONG  Function
     )
@@ -225,7 +225,7 @@ PnpMinorFunctionName(
 #undef  _PNP_MINOR_FUNCTION_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PartialResourceDescriptorTypeName(
     _In_ UCHAR  Type
     )
@@ -254,7 +254,7 @@ PartialResourceDescriptorTypeName(
 #undef  _PARTIAL_RESOURCE_DESCRIPTOR_TYPE_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 DeviceUsageTypeName(
     _In_ DEVICE_USAGE_NOTIFICATION_TYPE Type
     )
diff --git a/src/xenhid/string=2Ec b/src/xenhid/string=2Ec
index ad82053=2E=2E5b84568 100644
--- a/src/xenhid/string=2Ec
+++ b/src/xenhid/string=2Ec
@@ -53,7 +53,7 @@ __StringPut(
=20
 static PCHAR
 FormatNumber(
-    _Inout_ PSTR    Buffer,
+    _Out_ PSTR      Buffer,
     _In_ ULONGLONG  Value,
     _In_ UCHAR      Base,
     _In_ BOOLEAN    UpperCase
diff --git a/src/xenhid/thread=2Ec b/src/xenhid/thread=2Ec
index 36d82d0=2E=2E954e060 100644
--- a/src/xenhid/thread=2Ec
+++ b/src/xenhid/thread=2Ec
@@ -33,11 +33,11 @@
 #include <ntddk=2Eh>
=20
 #include "thread=2Eh"
-#include "util=2Eh"
 #include "dbg_print=2Eh"
 #include "assert=2Eh"
+#include "util=2Eh"
=20
-#define THREAD_POOL 'ERHT'
+#define THREAD_TAG 'ERHT'
=20
 struct _XENHID_THREAD {
     XENHID_THREAD_FUNCTION  Function;
@@ -53,7 +53,7 @@ __ThreadAllocate(
     _In_ ULONG  Length
     )
 {
-    return __AllocatePoolWithTag(NonPagedPool, Length, THREAD_POOL);
+    return __AllocatePoolWithTag(NonPagedPool, Length, THREAD_TAG);
 }
=20
 static FORCEINLINE VOID
@@ -61,12 +61,12 @@ __ThreadFree(
     _In_ PVOID  Buffer
     )
 {
-    __FreePoolWithTag(Buffer, THREAD_POOL);
+    __FreePoolWithTag(Buffer, THREAD_TAG);
 }
=20
 static FORCEINLINE VOID
 __ThreadWake(
-    _In_ PXENHID_THREAD Thread
+    _Inout_ PXENHID_THREAD  Thread
     )
 {
     KeSetEvent(&Thread->Event, IO_NO_INCREMENT, FALSE);
@@ -74,7 +74,7 @@ __ThreadWake(
=20
 VOID
 ThreadWake(
-    _In_ PXENHID_THREAD Thread
+    _Inout_ PXENHID_THREAD  Thread
     )
 {
     __ThreadWake(Thread);
@@ -82,7 +82,7 @@ ThreadWake(
=20
 static FORCEINLINE VOID
 __ThreadAlert(
-    _In_ PXENHID_THREAD Thread
+    _Inout_ PXENHID_THREAD  Thread
     )
 {
     Thread->Alerted =3D TRUE;
@@ -91,7 +91,7 @@ __ThreadAlert(
=20
 VOID
 ThreadAlert(
-    _In_ PXENHID_THREAD Thread
+    _Inout_ PXENHID_THREAD  Thread
     )
 {
     __ThreadAlert(Thread);
@@ -131,8 +131,6 @@ ThreadCreate(
=20
     (*Thread) =3D __ThreadAllocate(sizeof (XENHID_THREAD));
=20
-    Warning("Create thread %p %p\n", Function, Thread);
-
     status =3D STATUS_NO_MEMORY;
     if (*Thread =3D=3D NULL)
         goto fail1;
@@ -207,7 +205,7 @@ ThreadIsAlerted(
=20
 VOID
 ThreadJoin(
-    _In_ PXENHID_THREAD Thread
+    _Inout_ PXENHID_THREAD  Thread
     )
 {
     LONG                References;
diff --git a/src/xenhid/thread=2Eh b/src/xenhid/thread=2Eh
index adb9a62=2E=2E3358171 100644
--- a/src/xenhid/thread=2Eh
+++ b/src/xenhid/thread=2Eh
@@ -59,17 +59,17 @@ ThreadIsAlerted(
=20
 extern VOID
 ThreadWake(
-    _In_ PXENHID_THREAD Thread
+    _Inout_ PXENHID_THREAD  Thread
     );
=20
 extern VOID
 ThreadAlert(
-    _In_ PXENHID_THREAD Thread
+    _Inout_ PXENHID_THREAD  Thread
     );
=20
 extern VOID
 ThreadJoin(
-    _In_ PXENHID_THREAD Thread
+    _Inout_ PXENHID_THREAD  Thread
     );
=20
 #endif  // _XENHID_THREAD_H
diff --git a/src/xenhid/util=2Eh b/src/xenhid/util=2Eh
index 9709a10=2E=2Edb40d4f 100644
--- a/src/xenhid/util=2Eh
+++ b/src/xenhid/util=2Eh
@@ -113,12 +113,12 @@ __CpuId(
=20
 static FORCEINLINE LONG
 __InterlockedAdd(
-    _In_ LONG   *Value,
-    _In_ LONG   Delta
+    _Inout_ LONG    *Value,
+    _In_ LONG       Delta
     )
 {
-    LONG        New;
-    LONG        Old;
+    LONG            New;
+    LONG            Old;
=20
     do {
         Old =3D *Value;
@@ -130,12 +130,12 @@ __InterlockedAdd(
=20
 static FORCEINLINE LONG
 __InterlockedSubtract(
-    _In_ LONG   *Value,
-    _In_ LONG   Delta
+    _Inout_ LONG    *Value,
+    _In_ LONG       Delta
     )
 {
-    LONG        New;
-    LONG        Old;
+    LONG            New;
+    LONG            Old;
=20
     do {
         Old =3D *Value;
@@ -281,15 +281,15 @@ __FreePages(
=20
 static FORCEINLINE PSTR
 __strtok_r(
-    _In_opt_ PSTR   Buffer,
-    _In_ PSTR       Delimiter,
+    _Inout_opt_ PSTR    Buffer,
+    _In_ PSTR           Delimiter,
     _When_(Buffer !=3D NULL, _Outptr_)
     _When_(Buffer =3D=3D NULL, _Inout_)
-    PSTR            *Context
+    PSTR                *Context
     )
 {
-    PSTR            Token;
-    PSTR            End;
+    PSTR                Token;
+    PSTR                End;
=20
     if (Buffer !=3D NULL)
         *Context =3D Buffer;
@@ -321,15 +321,15 @@ __strtok_r(
=20
 static FORCEINLINE PWSTR
 __wcstok_r(
-    _In_opt_ PWSTR  Buffer,
-    _In_ PWSTR      Delimiter,
+    _Inout_opt_ PWSTR   Buffer,
+    _In_ PWSTR          Delimiter,
     _When_(Buffer !=3D NULL, _Outptr_)
     _When_(Buffer =3D=3D NULL, _Inout_)
-    PWSTR           *Context
+    PWSTR               *Context
     )
 {
-    PWSTR           Token;
-    PWSTR           End;
+    PWSTR               Token;
+    PWSTR               End;
=20
     if (Buffer !=3D NULL)
         *Context =3D Buffer;
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.11f.21b9beb10615f118.1a163acbbb1.67f59a400f1c7f91=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 12:53:59 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 12:53:59 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1458134.1670594 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJsIx-0007jT-B3; Thu, 22 Oct 2026 12:53:59 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1458134.1670594; Thu, 22 Oct 2026 12:53:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJsIx-0007jB-0l; Thu, 22 Oct 2026 12:53:59 +0000
Received: by outflank-mailman (input) for mailman id 1458134;
 Thu, 22 Oct 2026 12:53:57 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a163acbf48000f79f@swg.vates.tech>)
 id 1xJsIu-0007iR-PV
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 12:53:57 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJsIu-00DZ0W-6O
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 14:53:56 +0200
Received: from [10.42.69.12] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a163acbf48000f79f@swg.vates.tech>)
 id 6ada073c-bab6-0a2a0a5309dd-0a2a450c94f0-36
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 14:53:51 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-d25034.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a163acbf48000f79f@swg.vates.tech>)
 id 6ada075e-f479-0a2a450c0019-b9ff1c22914f-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 14:53:51 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a163acbf48000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Thu, 22 Oct 2026 12:53:47 +0000
Received: from cesairepc (88-185-151-209.subs.proxad.net [88.185.151.209])
 (Authenticated sender: cesaire.mounah@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 6FB4882A6D;
 Thu, 22 Oct 2026 14:53:47 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=EEKxilYPZSwsTMX42ubR7VRosbJ0Fvat9Fkev46KL/I=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=FBTII0+t1bgFCA2YeZLu5ZFUrAXBphNVH13ieLXVZ7w6S7ZrmINfFLSIEOodmnEEioro4khEr
 35gq23+46xN7xD5pYgEgJJ4+SqpaJ3YbhOJp7E+SoGaMiCwp6NgdYw6AZF8gnz2TXZ3d1BxofFO
 N243CdS6jDhgU7tsWLV18kOoYXlPj+MYp/YdJjdG15z5wNU/6xRdW0z1OIwm4b7ftxbV6W8pmIe
 XUONmGQPdQg4Xz9Q+MYR4Z64qjt6Kq0kz5c1zXBfpG6fAhIlcURd2soXAzEXzkfBHeBdcfCs/7I
 HIUVCKmHZuWD71ry5AysTmlGSo+y611pT8JmbJTw8rFA==
X-Zone-Loop: 8d61f5e79d5f29e9f5e06009a117374b40777e393858
x-campaign-type: default
x-transaction-id: e3326e23-37d4-4032-986f-217d32c099e3
x-swg-uid: 01-d166ad86-ab90-4bc7-93c9-68e05767e591
X-Mailer: Sweego
Message-ID:
 <1792673628.8631fc262581453bbf619ec5b2062170.1a163acbf48000f79f@vates.tech>
x-swg-bid: 1792673628.8631fc262581453bbf619ec5b2062170.1a163acbf48000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: =?UTF-8?q?C=C3=A9saire=20Mounah?= <cesaire.mounah@vates.tech>
Subject: [XENVKBD-SYNC] xenvkbd: Sync common helper files with xenbus
Date: Thu, 22 Oct 2026 14:53:39 +0200
In-Reply-To: <1792673391.8631fc262581453bbf619ec5b2062170.1a163a923a2000f79f@vates.tech>
References: <1792673391.8631fc262581453bbf619ec5b2062170.1a163a923a2000f79f@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.121.c9bff78b4cdc7eca.1a163acbdaa.f32a9857460cd98c=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792673627562
X-purgate-ID: tlsNG-d25034/1792673631-036D6A5B-4307F0B1/0/0
X-purgate-type: clean
X-purgate-size: 25538

---=Part.121.c9bff78b4cdc7eca.1a163acbdaa.f32a9857460cd98c=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Take assert=2Eh, dbg_print=2Eh, mutex=2Eh, util=2Eh, registry=2Ec/h and
thread=2Ec/h from xenbus=2E This brings TryAcquireMutex, the TIME_* macros=
,
the Contiguous parameter of __AllocatePages, RegistryOpenParametersKey,
RegistryQueryQwordValue and the IoOpenDriverRegistryKey support of
RegistryInitialize, which now takes the driver object, along with the
updated annotations=2E

Signed-off-by: C=C3=A9saire Mounah <cesaire=2Emounah@vates=2Etech>
---
 src/xenvkbd/assert=2Eh    |  8 ++--
 src/xenvkbd/dbg_print=2Eh | 63 ++++++++++++++++-----------
 src/xenvkbd/driver=2Ec    |  2 +-
 src/xenvkbd/mutex=2Eh     | 93 ++++++++++++++++++++++++++--------------
 src/xenvkbd/names=2Eh     | 24 +++++------
 src/xenvkbd/registry=2Ec  | 52 ++++++++++++++---------
 src/xenvkbd/registry=2Eh  | 94 +++++++++++++++++++++++------------------
 src/xenvkbd/thread=2Ec    |  6 +--
 src/xenvkbd/util=2Eh      | 23 +++++++---
 9 files changed, 226 insertions(+), 139 deletions(-)

diff --git a/src/xenvkbd/assert=2Eh b/src/xenvkbd/assert=2Eh
index c5fab23=2E=2E2106c0d 100644
--- a/src/xenvkbd/assert=2Eh
+++ b/src/xenvkbd/assert=2Eh
@@ -178,10 +178,10 @@ _IsZeroMemory(
=20
 static __inline BOOLEAN
 _IsZeroMemory(
-    _In_ PCSTR  Caller,
-    _In_ PCSTR  Name,
-    _In_ PVOID  Buffer,
-    _In_ ULONG  Length
+    _In_ PCSTR                      Caller,
+    _In_ PCSTR                      Name,
+    _In_reads_bytes_(Length) PVOID  Buffer,
+    _In_ ULONG                      Length
     )
 {
     UNREFERENCED_PARAMETER(Caller);
diff --git a/src/xenvkbd/dbg_print=2Eh b/src/xenvkbd/dbg_print=2Eh
index 6ab4606=2E=2Ee38a6ab 100644
--- a/src/xenvkbd/dbg_print=2Eh
+++ b/src/xenvkbd/dbg_print=2Eh
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -89,7 +89,6 @@ __Warning(
         __Warning(__MODULE__ "|" __FUNCTION__ ": ", __VA_ARGS__)
=20
 #if DBG
-
 static __inline VOID
 __Trace(
     _In_ PCSTR      Prefix,
@@ -139,4 +138,20 @@ __Info(
 #define Info(=2E=2E=2E)  \
         __Info(__MODULE__ "|"  __FUNCTION__ ": ", __VA_ARGS__)
=20
+#define DBG_PRINT_ENABLE_FILTER(_Id, _Level)                       \
+        do {                                                        \
+            DbgSetDebugFilterState((_Id), (_Level), TRUE);          \
+        } while (FALSE)
+
+static __inline VOID
+__DbgPrintEnable(
+    VOID
+    )
+{
+    DBG_PRINT_ENABLE_FILTER(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL);
+    DBG_PRINT_ENABLE_FILTER(DPFLTR_IHVDRIVER_ID, DPFLTR_WARNING_LEVEL);
+    DBG_PRINT_ENABLE_FILTER(DPFLTR_IHVDRIVER_ID, DPFLTR_TRACE_LEVEL);
+    DBG_PRINT_ENABLE_FILTER(DPFLTR_IHVDRIVER_ID, DPFLTR_INFO_LEVEL);
+}
+
 #endif  // _XENVKBD_DBG_PRINT_H
diff --git a/src/xenvkbd/driver=2Ec b/src/xenvkbd/driver=2Ec
index c35f9c6=2E=2E0cab7a8 100644
--- a/src/xenvkbd/driver=2Ec
+++ b/src/xenvkbd/driver=2Ec
@@ -364,7 +364,7 @@ DriverEntry(
          MONTH,
          YEAR);
=20
-    status =3D RegistryInitialize(RegistryPath);
+    status =3D RegistryInitialize(DriverObject, RegistryPath);
     if (!NT_SUCCESS(status))
         goto fail1;
=20
diff --git a/src/xenvkbd/mutex=2Eh b/src/xenvkbd/mutex=2Eh
index 9e66475=2E=2E1bd9c8d 100644
--- a/src/xenvkbd/mutex=2Eh
+++ b/src/xenvkbd/mutex=2Eh
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -44,7 +44,7 @@ typedef struct _MUTEX {
=20
 static FORCEINLINE VOID
 InitializeMutex(
-    _In_ PMUTEX Mutex
+    _Out_ PMUTEX    Mutex
     )
 {
     RtlZeroMemory(Mutex, sizeof (MUTEX));
@@ -52,17 +52,48 @@ InitializeMutex(
     KeInitializeEvent(&Mutex->Event, SynchronizationEvent, TRUE);
 }
=20
+static FORCEINLINE BOOLEAN
+_IRQL_requires_max_(PASSIVE_LEVEL)
+TryAcquireMutex(
+    _Inout_ PMUTEX  Mutex
+    )
+{
+    LARGE_INTEGER   Timeout;
+    NTSTATUS        status;
+
+    Timeout=2EQuadPart =3D 0;
+
+    status =3D KeWaitForSingleObject(&Mutex->Event,
+                                   Executive,
+                                   KernelMode,
+                                   FALSE,
+                                   &Timeout);
+    if (status =3D=3D STATUS_TIMEOUT)
+        return FALSE;
+
+    ASSERT(NT_SUCCESS(status));
+
+    ASSERT3P(Mutex->Owner, =3D=3D, NULL);
+    Mutex->Owner =3D KeGetCurrentThread();
+
+    return TRUE;
+}
+
 static FORCEINLINE VOID
 _IRQL_requires_max_(PASSIVE_LEVEL)
 AcquireMutex(
-    _In_ PMUTEX Mutex
+    _Inout_ PMUTEX  Mutex
     )
 {
-    (VOID) KeWaitForSingleObject(&Mutex->Event,
-                                 Executive,
-                                 KernelMode,
-                                 FALSE,
-                                 NULL);
+    NTSTATUS        status;
+
+    status =3D KeWaitForSingleObject(&Mutex->Event,
+                                   Executive,
+                                   KernelMode,
+                                   FALSE,
+                                   NULL);
+
+    ASSERT(NT_SUCCESS(status));
=20
     ASSERT3P(Mutex->Owner, =3D=3D, NULL);
     Mutex->Owner =3D KeGetCurrentThread();
@@ -71,7 +102,7 @@ AcquireMutex(
 static FORCEINLINE VOID
 _IRQL_requires_max_(PASSIVE_LEVEL)
 ReleaseMutex(
-    _In_ PMUTEX Mutex
+    _Inout_ PMUTEX  Mutex
     )
 {
     ASSERT3P(Mutex->Owner, =3D=3D, KeGetCurrentThread());
diff --git a/src/xenvkbd/names=2Eh b/src/xenvkbd/names=2Eh
index c651210=2E=2E0de488e 100644
--- a/src/xenvkbd/names=2Eh
+++ b/src/xenvkbd/names=2Eh
@@ -36,7 +36,7 @@
 #include <ntddk=2Eh>
 #include <xen=2Eh>
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PowerTypeName(
     _In_ POWER_STATE_TYPE   Type
     )
@@ -56,7 +56,7 @@ PowerTypeName(
 #undef  _POWER_ACTION_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PowerSystemStateName(
     _In_ SYSTEM_POWER_STATE State
     )
@@ -82,7 +82,7 @@ PowerSystemStateName(
 #undef  _POWER_SYSTEM_STATE_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PowerDeviceStateName(
     _In_ DEVICE_POWER_STATE State
     )
@@ -106,7 +106,7 @@ PowerDeviceStateName(
 #undef  _POWER_DEVICE_STATE_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PowerActionName(
     _In_ POWER_ACTION   Type
     )
@@ -132,7 +132,7 @@ PowerActionName(
 #undef  _POWER_ACTION_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PowerMinorFunctionName(
     _In_ ULONG  MinorFunction
     )
@@ -155,7 +155,7 @@ PowerMinorFunctionName(
 #undef  _POWER_MINOR_FUNCTION_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PnpMinorFunctionName(
     _In_ ULONG  Function
     )
@@ -198,7 +198,7 @@ PnpMinorFunctionName(
 #undef  _PNP_MINOR_FUNCTION_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 PartialResourceDescriptorTypeName(
     _In_ UCHAR  Type
     )
@@ -227,7 +227,7 @@ PartialResourceDescriptorTypeName(
 #undef  _PARTIAL_RESOURCE_DESCRIPTOR_TYPE_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 DeviceUsageTypeName(
     _In_ DEVICE_USAGE_NOTIFICATION_TYPE Type
     )
@@ -249,7 +249,7 @@ DeviceUsageTypeName(
 #undef  _DEVICE_USAGE_TYPE_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 InterfaceTypeName(
     _In_ INTERFACE_TYPE Type
     )
@@ -287,7 +287,7 @@ InterfaceTypeName(
 #undef  _INTERFACE_TYPE_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 DmaWidthName(
     _In_ DMA_WIDTH  Width
     )
@@ -311,7 +311,7 @@ DmaWidthName(
 #undef  _DMA_WIDTH_NAME
 }
=20
-static FORCEINLINE const CHAR *
+static FORCEINLINE PCSTR
 DmaSpeedName(
     _In_ DMA_SPEED  Speed
     )
@@ -336,7 +336,7 @@ DmaSpeedName(
 #undef  _DMA_SPEED_NAME
 }
=20
-static FORCEINLINE const PCHAR
+static FORCEINLINE PCSTR
 XenbusStateName(
     _In_ XenbusState    State
     )
diff --git a/src/xenvkbd/registry=2Ec b/src/xenvkbd/registry=2Ec
index 5cc6b99=2E=2Ed576990 100644
--- a/src/xenvkbd/registry=2Ec
+++ b/src/xenvkbd/registry=2Ec
@@ -62,11 +62,15 @@ __RegistryFree(
 }
=20
 NTSTATUS
+#pragma prefast(suppress:28101) // unannotated DriverEntry function
 RegistryInitialize(
+    _In_opt_ PDRIVER_OBJECT DriverObject,
     _In_ PUNICODE_STRING    Path
     )
 {
-    NTSTATUS                status;
+    UNICODE_STRING      Unicode;
+    PVOID               Func;
+    NTSTATUS            status;
=20
     ASSERT3P(RegistryPath=2EBuffer, =3D=3D, NULL);
=20
@@ -74,6 +78,16 @@ RegistryInitialize(
     if (!NT_SUCCESS(status))
         goto fail1;
=20
+    ASSERT3P(RegistryDriverObject, =3D=3D, NULL);
+    RegistryDriverObject =3D DriverObject;
+
+    ASSERT3P(__IoOpenDriverRegistryKey, =3D=3D, NULL);
+    RtlInitUnicodeString(&Unicode, L"IoOpenDriverRegistryKey");
+
+    Func =3D MmGetSystemRoutineAddress(&Unicode);
+    if (Func !=3D NULL)
+        __IoOpenDriverRegistryKey =3D (IOOPENDRIVERREGISTRYKEY)Func;
+
     return STATUS_SUCCESS;
=20
 fail1:
@@ -152,8 +166,8 @@ RegistryOpenKey(
     _Out_ PHANDLE           Key
     )
 {
-    OBJECT_ATTRIBUTES       Attributes;
-    NTSTATUS                status;
+    OBJECT_ATTRIBUTES   Attributes;
+    NTSTATUS            status;
=20
     InitializeObjectAttributes(&Attributes,
                                Path,
@@ -214,13 +228,13 @@ RegistryCreateKey(
     _Out_ PHANDLE           Key
     )
 {
-    PWCHAR                  Buffer;
-    HANDLE                  Root;
-    PWCHAR                  ChildPath;
-    PWCHAR                  ChildName;
-    PWCHAR                  Context;
-    HANDLE                  Child;
-    NTSTATUS                status;
+    PWSTR               Buffer;
+    HANDLE              Root;
+    PWSTR               ChildPath;
+    PWSTR               ChildName;
+    PWSTR               Context;
+    HANDLE              Child;
+    NTSTATUS            status;
=20
     //
     // UNICODE_STRINGs are not guaranteed to have NUL terminated
@@ -1155,17 +1169,17 @@ fail1:
=20
 NTSTATUS
 RegistryQueryBinaryValue(
-    _In_ HANDLE                     Key,
-    _In_ PSTR                       Name,
-    _Outptr_ PVOID                  *Buffer,
-    _Out_ PULONG                    Length
+    _In_ HANDLE                                 Key,
+    _In_ PSTR                                   Name,
+    _Outptr_result_bytebuffer_(*Length) PVOID   *Buffer,
+    _Out_ PULONG                                Length
     )
 {
-    ANSI_STRING                     Ansi;
-    UNICODE_STRING                  Unicode;
-    PKEY_VALUE_PARTIAL_INFORMATION  Partial;
-    ULONG                           Size;
-    NTSTATUS                        status;
+    ANSI_STRING                                 Ansi;
+    UNICODE_STRING                              Unicode;
+    PKEY_VALUE_PARTIAL_INFORMATION              Partial;
+    ULONG                                       Size;
+    NTSTATUS                                    status;
=20
     RtlInitAnsiString(&Ansi, Name);
=20
diff --git a/src/xenvkbd/registry=2Eh b/src/xenvkbd/registry=2Eh
index 4535747=2E=2E9591468 100644
--- a/src/xenvkbd/registry=2Eh
+++ b/src/xenvkbd/registry=2Eh
@@ -1,32 +1,32 @@
 /* Copyright (c) Xen Project=2E
  * Copyright (c) Cloud Software Group, Inc=2E
  * All rights reserved=2E
- *=20
- * Redistribution and use in source and binary forms,=20
- * with or without modification, are permitted provided=20
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
  * that the following conditions are met:
- *=20
- * *   Redistributions of source code must retain the above=20
- *     copyright notice, this list of conditions and the=20
+ *
+ * *   Redistributions of source code must retain the above
+ *     copyright notice, this list of conditions and the
  *     following disclaimer=2E
- * *   Redistributions in binary form must reproduce the above=20
- *     copyright notice, this list of conditions and the=20
- *     following disclaimer in the documentation and/or other=20
+ * *   Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the
+ *     following disclaimer in the documentation and/or other
  *     materials provided with the distribution=2E
- *=20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND=20
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,=20
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF=20
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=20
- * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR=20
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,=20
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR=20
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS=20
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,=20
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING=20
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE=20
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF=20
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED=2E IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE=2E
  */
=20
@@ -37,6 +37,7 @@
=20
 extern NTSTATUS
 RegistryInitialize(
+    _In_opt_ PDRIVER_OBJECT DrvObj,
     _In_ PUNICODE_STRING    Path
     );
=20
@@ -45,6 +46,12 @@ RegistryTeardown(
     VOID
     );
=20
+extern NTSTATUS
+RegistryOpenParametersKey(
+    _In_ ACCESS_MASK    DesiredAccess,
+    _Out_ PHANDLE       Key
+    );
+
 extern NTSTATUS
 RegistryOpenKey(
     _In_opt_ HANDLE         Parent,
@@ -104,8 +111,8 @@ RegistryCreateSubKey(
=20
 extern NTSTATUS
 RegistryDeleteSubKey(
-    _In_ HANDLE Key,
-    _In_ PSTR   Name
+    _In_ HANDLE     Key,
+    _In_ PSTR       Name
     );
=20
 extern NTSTATUS
@@ -124,24 +131,31 @@ RegistryEnumerateValues(
=20
 extern NTSTATUS
 RegistryDeleteValue(
-    _In_ HANDLE Key,
-    _In_ PSTR   Name
+    _In_ HANDLE     Key,
+    _In_ PSTR       Name
     );
=20
 extern NTSTATUS
 RegistryQueryDwordValue(
-    _In_ HANDLE     Key,
-    _In_ PSTR       Name,
-    _Out_ PULONG    Value
+    _In_ HANDLE         Key,
+    _In_ PSTR           Name,
+    _Out_ PULONG        Value
     );
-   =20
+
+extern NTSTATUS
+RegistryQueryQwordValue(
+    _In_ HANDLE         Key,
+    _In_ PSTR           Name,
+    _Out_ PULONGLONG    Value
+    );
+
 extern NTSTATUS
 RegistryUpdateDwordValue(
-    _In_ HANDLE Key,
-    _In_ PSTR   Name,
-    _In_ ULONG  Value
+    _In_ HANDLE         Key,
+    _In_ PSTR           Name,
+    _In_ ULONG          Value
     );
-   =20
+
 extern NTSTATUS
 RegistryQuerySzValue(
     _In_ HANDLE             Key,
@@ -152,10 +166,10 @@ RegistryQuerySzValue(
=20
 extern NTSTATUS
 RegistryQueryBinaryValue(
-    _In_ HANDLE     Key,
-    _In_ PSTR       Name,
-    _Outptr_ PVOID  *Buffer,
-    _Out_ PULONG    Length
+    _In_ HANDLE                                 Key,
+    _In_ PSTR                                   Name,
+    _Outptr_result_bytebuffer_(*Length) PVOID   *Buffer,
+    _Out_ PULONG                                Length
     );
=20
 extern NTSTATUS
@@ -185,7 +199,7 @@ RegistryFreeSzValue(
=20
 extern VOID
 RegistryFreeBinaryValue(
-    _In_ PVOID  Buffer
+    _In_ PVOID          Buffer
     );
=20
 extern NTSTATUS
diff --git a/src/xenvkbd/thread=2Ec b/src/xenvkbd/thread=2Ec
index 68178d4=2E=2E2f1427d 100644
--- a/src/xenvkbd/thread=2Ec
+++ b/src/xenvkbd/thread=2Ec
@@ -37,7 +37,7 @@
 #include "assert=2Eh"
 #include "util=2Eh"
=20
-#define THREAD_POOL 'ERHT'
+#define THREAD_TAG 'ERHT'
=20
 struct _XENVKBD_THREAD {
     XENVKBD_THREAD_FUNCTION Function;
@@ -53,7 +53,7 @@ __ThreadAllocate(
     _In_ ULONG  Length
     )
 {
-    return __AllocatePoolWithTag(NonPagedPool, Length, THREAD_POOL);
+    return __AllocatePoolWithTag(NonPagedPool, Length, THREAD_TAG);
 }
=20
 static FORCEINLINE VOID
@@ -61,7 +61,7 @@ __ThreadFree(
     _In_ PVOID  Buffer
     )
 {
-    __FreePoolWithTag(Buffer, THREAD_POOL);
+    __FreePoolWithTag(Buffer, THREAD_TAG);
 }
=20
 static FORCEINLINE VOID
diff --git a/src/xenvkbd/util=2Eh b/src/xenvkbd/util=2Eh
index 431f433=2E=2E2c94d63 100644
--- a/src/xenvkbd/util=2Eh
+++ b/src/xenvkbd/util=2Eh
@@ -41,6 +41,11 @@
 #define	P2ROUNDUP(_t, _x, _a)   \
         (-(-((_t)(_x)) & -(((_t)(_a)))))
=20
+#define TIME_US(_us)            ((_us) * 10ll)
+#define TIME_MS(_ms)            (TIME_US((_ms) * 1000ll))
+#define TIME_S(_s)              (TIME_MS((_s) * 1000ll))
+#define TIME_RELATIVE(_t)       (-(_t))
+
 static FORCEINLINE LONG
 __ffs(
     _In_ unsigned long long mask
@@ -89,7 +94,7 @@ __CpuId(
     _Out_opt_ PULONG    EDX
     )
 {
-    int                 Value[4] =3D {0};
+    int         Value[4] =3D {0};
=20
     __cpuid(Value, Leaf);
=20
@@ -181,13 +186,15 @@ __FreePoolWithTag(
=20
 static FORCEINLINE PMDL
 __AllocatePages(
-    _In_ ULONG          Count
+    _In_ ULONG          Count,
+    _In_ BOOLEAN        Contiguous
     )
 {
     PHYSICAL_ADDRESS    LowAddress;
     PHYSICAL_ADDRESS    HighAddress;
     LARGE_INTEGER       SkipBytes;
     SIZE_T              TotalBytes;
+    ULONG               Flags;
     PMDL                Mdl;
     PUCHAR              MdlMappedSystemVa;
     NTSTATUS            status;
@@ -197,12 +204,18 @@ __AllocatePages(
     SkipBytes=2EQuadPart =3D 0ull;
     TotalBytes =3D (SIZE_T)PAGE_SIZE * Count;
=20
+    if (Contiguous) {
+        Flags =3D MM_ALLOCATE_REQUIRE_CONTIGUOUS_CHUNKS;
+    } else {
+        Flags =3D MM_ALLOCATE_FULLY_REQUIRED;
+    }
+
     Mdl =3D MmAllocatePagesForMdlEx(LowAddress,
                                   HighAddress,
                                   SkipBytes,
                                   TotalBytes,
                                   MmCached,
-                                  MM_ALLOCATE_FULLY_REQUIRED);
+                                  Flags);
=20
     status =3D STATUS_NO_MEMORY;
     if (Mdl =3D=3D NULL)
@@ -246,14 +259,14 @@ fail1:
     return NULL;
 }
=20
-#define __AllocatePage()    __AllocatePages(1)
+#define __AllocatePage()    __AllocatePages(1, FALSE)
=20
 static FORCEINLINE VOID
 __FreePages(
     _In_ PMDL   Mdl
     )
 {
-    PUCHAR      MdlMappedSystemVa;
+    PUCHAR	MdlMappedSystemVa;
=20
     ASSERT(Mdl->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA);
     MdlMappedSystemVa =3D Mdl->MappedSystemVa;
--=20
2=2E55=2E0=2Ewindows=2E5



-- 
C=C3=A9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen=
 Orchestra - Vates solutions

web: https://vates=2Etech
---=Part.121.c9bff78b4cdc7eca.1a163acbdaa.f32a9857460cd98c=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 22 13:34:13 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 22 Oct 2026 13:34:13 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1458189.1670607 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJsvt-0005Mp-6S; Thu, 22 Oct 2026 13:34:13 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1458189.1670607; Thu, 22 Oct 2026 13:34:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xJsvt-0005Mi-3J; Thu, 22 Oct 2026 13:34:13 +0000
Received: by outflank-mailman (input) for mailman id 1458189;
 Thu, 22 Oct 2026 13:34:12 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <owen.smith@citrix.com>) id 1xJsvs-0005Mc-0P
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 13:34:12 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xJsvr-0073jg-2Q
 for win-pv-devel@lists.xenproject.org; Thu, 22 Oct 2026 15:34:11 +0200
Received: from [10.42.69.12] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ada10c2-8faa-0a2a0a5109dd-0a2a450cb5b8-46
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 15:34:10 +0200
Received: from [40.107.208.21]
 (helo=PH0PR06CU001.outbound.protection.outlook.com)
 by tlsNG-d25034.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ada10d1-f479-0a2a450c0019-286bd01567ca-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 22 Oct 2026 15:34:10 +0200
Received: from SA6PR03MB7760.namprd03.prod.outlook.com (2603:10b6:806:43c::5)
 by LV4PPF87E05612F.namprd03.prod.outlook.com
 (2603:10b6:40f:fc02::211) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.522.19; Thu, 22 Oct
 2026 13:34:07 +0000
Received: from SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38]) by SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38%5]) with mapi id 15.21.0546.016; Thu, 22 Oct 2026
 13:34:06 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:x-ms-exchange-senderadcheck"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
 b=a+EZoi4gbDjdmvFcUPwjBRDZ4Nr49EJ8sB/R3cdZmH2OtZ8sO2a2Cl4n1IWcsty8AgESkHj5n51w2p0ouTejpDbyjIy+qsoHJex4vJFvd+oDyy0ppjn5NYCjM0oP7wl4PWUfUg0SYU+vJDzPcedck86uI1kzoQoEScFRYvav6LjCIWz7yFCEzkaW+KQaABR2pZpnFD61cX6ZWNASrf2GMR2B0E4JGyYrKhryUbEFWCFkPfM6NSqX6gAQUAPJAXttZ83r4BQRTd8OkDIHXgnuPDrn34TWaRLuQv8LyNuuE5eP3JYSXze7xXf10N+ChsXL2QBifvEx+DDkPena64WNwQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector10001;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=OM8UWQxMiRyBLIdNhqNGx2VEqbJ8jzcjo0YlFO0KQ/U=;
 b=oUPv0rB+tS8MQmoz9A6CHQAPDwTq0+GQD65Hnj/Ejz0TeTye1QAGLn8sQXwYt7vAnCAeu43+uxDgvHXHcc21SYOLrthUMdi3bVcxW6Msnkgnj/CKDt95I/bYXmehXaYng+CrBrkpnVXpMwQffhUCKX6CZotG855DPMAywug5aon8nRhtYqPK6ZPQ/7w419YjONVJoEVAHeTKurhfeSVK/NMwpKEAUWKEpOefJIJ+Wk6an3/d9mML1Xu8pEu+qvps0Bi0GNR/zNrUNMjegmCVSDIQlmb7tYp3uKCmoAAbCOCxPSoU9ch8t0aMTya/Rwe1PDv91NJ7ZYIuAtKZmmAV6w==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=OM8UWQxMiRyBLIdNhqNGx2VEqbJ8jzcjo0YlFO0KQ/U=;
 b=eSnbfKwCQZHm1A6wS2t2+BDNg1sV43ZNf94OnU5C2hedRFZJQszsI2sC3FFMfXer3DRfJksG57ERtPkf9HUqRKNhtj+gOn4XIDnZ2GfE+EH25InCka+QvqEiQx0pkgxu4ryaeQmVTGuM9/v54xlLycCLGosCJ2ToSQUEb4A+eQE=
From: Owen Smith <owen.smith@citrix.com>
To: =?iso-8859-1?Q?C=E9saire_Mounah?= <cesaire.mounah@vates.tech>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Subject: Re: [PATCH SET] Sync common files with xenbus
Thread-Topic: [PATCH SET] Sync common files with xenbus
Thread-Index: AQHdYiPgdHr1e3TP902pW55LWh03q7cJj5gJ
Date: Thu, 22 Oct 2026 13:34:06 +0000
Message-ID:
 <SA6PR03MB776095A8117064338ABCEDDDFE652@SA6PR03MB7760.namprd03.prod.outlook.com>
References:
 <1792673391.8631fc262581453bbf619ec5b2062170.1a163a923a2000f79f@vates.tech>
In-Reply-To:
 <1792673391.8631fc262581453bbf619ec5b2062170.1a163a923a2000f79f@vates.tech>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
msip_labels:
authentication-results: mx.microsoft.com 1; dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=citrix.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: SA6PR03MB7760:EE_|LV4PPF87E05612F:EE_
x-ms-office365-filtering-correlation-id: f4df13a8-856b-4cca-9e5c-08df30412536
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam:
 BCL:0;ARA:13230040|376014|366016|23010399003|1800799024|261021121427099003|261009223027099003|10067099003|56012099006|6133799003|22082099003|18002099003|38070700021|11063799006;
x-microsoft-antispam-message-info:
 cxkFEnssRsdNPYqX8A+z2XHmaqxvYlSk0V+SAcwGaSyzPMiXKMpAc/fwRZfC4hY/XGoTic+YS6wy7z5PVtJB8YYZUhQGOGWuwpvRbTJC9W5Ex92R6W1TGwWVmtVb1uAaOBlORU9dMKrNWDVU3d5r2Y3UiqJzrKjlaaLusOntn328RmMGj+39GRm02CiQSLnZPKY39lg2JhIxHfxzLx29iSYzL5BGt7sKqPGFyZ99YbbQU6Ur9swxT9Rxis2RHMc9TJRdvrNBDheCuFCPSdKTRwmcEjzxjUUJ+zoBa5vFMitxhprF1K3xYtsmEobVz+jxdLvZEotllWIvzSY+htP4OfLJl2flq78bhXeTkN+iRycZv6TYZvUIj4f6Hp+BuKcqsl6MxiiRvMRiFMIE16LX0fu8KAI8ihXWRA4tRvpIf+bDHj2i1o1hzPJcAjYnKrsErP99FC0ziEtSKgbA3FYzBNN97cq2V1BAkSwqb3cJfwCc8aY7Voy+fqXSPfvUXsvZu6hfkS6WXORIFzSUEuNMEnsLgtQ0DJJYbGg5aByYrn1LuRaGDxndeEpe7DqZqYmkJpuaG+6iJLWrO5f0Nei8arFMpAx0wNtcj1utl2XSywbXc7xtpIHf8cGwYNLKdR8WDPbwtqgP3d1ViwNKtrZCTwSKx6X7aNcpJkiLIIQY9yQ=
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SA6PR03MB7760.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(366016)(23010399003)(1800799024)(261021121427099003)(261009223027099003)(10067099003)(56012099006)(6133799003)(22082099003)(18002099003)(38070700021)(11063799006);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?iso-8859-1?Q?yFct1XVw+awjqKJC6P3afHAxdFVyFoUma140jlmrlcxxT+OdDDK2u9mmDA?=
 =?iso-8859-1?Q?dZcpLyukGykMv68PEFjLGUlWU7JZKHCF2rlNl+8gGkDRQWhXTbnq0ZkfNx?=
 =?iso-8859-1?Q?Xv3ffYepaixW/FYITioRaOzApoMpw248T7FaQBmGEQ1+JtNANusEVYJQ/N?=
 =?iso-8859-1?Q?CfsCJL9tvfw9mwtwHqrl0GGEZXRnrQUX6zeVinuwzjt3yzI1gACesHBn9f?=
 =?iso-8859-1?Q?T/0VebTlvesSqRvStjDeusPw3J7WRAjI+sWD43SztHTbWIqGd/wPxSuwdv?=
 =?iso-8859-1?Q?BRwEn5mWkINRRD20oHUEgTZ4dyKs1GVqz7556daQj7IwIoD4ODV+YZ2vlL?=
 =?iso-8859-1?Q?WshuOUJorR+nEvD5EMAb2xNAmjSp+82yyY3gUYq2h90opG2BfIzVvVa69Q?=
 =?iso-8859-1?Q?8F6dSqZUE/9QJcbHjnph8TxTyRo1rrg5KJAr3C3fBoch747JPlOYC/agNy?=
 =?iso-8859-1?Q?XDNvTZOlDG/prQSIZ0MR+gMvtiRd13WZGeiwZVjMaNcO4kCYC7SO1Np5u3?=
 =?iso-8859-1?Q?icqMcG6ksufGpnL67RPPrunMrwY2qrrMxzDy7Cxyi9gsbzVwenWN0Xrvr7?=
 =?iso-8859-1?Q?wBXA4SdOxzZKCj65GE4C85zlnlVnYfSSFoFXIdTFOJFYQmZtJTI4BfssVo?=
 =?iso-8859-1?Q?1gp+T7yPKwDu0woMKjUpnmLKkgpt6OwxxgrldF/hT0XPgLPgwTTMKuaJgi?=
 =?iso-8859-1?Q?dhgvYs/qi5ZZ+jDd98pnCc9BtXl6ey5GRQm4mPMWD8XhnzvEZU6k13rXuM?=
 =?iso-8859-1?Q?fPnLTC2ZjTnLXVCvKVGISz/zb7kaPyXGzzPesKgDe2jG9RrCQv8GOyeDLK?=
 =?iso-8859-1?Q?9WCYTWQ68WANXbY9NFw9dcC1VJBjwqjlXkkfqq/mGocyNNpVbc+hoyifwb?=
 =?iso-8859-1?Q?W2O5B55MVHJYMO4/MwaC7kPbxy3rQ2DGBNf5RGNZHyQfZA+TDv52dieoqK?=
 =?iso-8859-1?Q?derz2SltUH/KpC2yG2fDQ3SpKxNlN3wvcPcm4LM1+/Js6OSG5HO0qzn3yU?=
 =?iso-8859-1?Q?4pJFMQM/Jk1pK7vtVzGes6elc8FkZq8nuIUN4CR9ST3forh2dVXKLnA3H6?=
 =?iso-8859-1?Q?l1tvymhm2Z/xJbRDvhJ1rwSEgoHG4P/Nq39V6xmfb09SmWypNFzU7VUeUe?=
 =?iso-8859-1?Q?oYaoNS9fsjCyy5hWqhRt4ZoRwl27RyUllNL6vPy2t5tkeF0S0ge15js3xi?=
 =?iso-8859-1?Q?1TKSjlRivJcRwMXSgh+d1q9aCuMtt3//VGu+s9/H2y5QnrjDRAVcUGHG0f?=
 =?iso-8859-1?Q?KnaWERVPuWDgaKy5y5BZekzJFoacyp2MYlC3qo8BkW0Vu7lS6z3/5DjEW9?=
 =?iso-8859-1?Q?WQKWdauVngvGVZCUr1T3actwjtkvph7yL/0CajgqSBGYgSSNDCQVyDhdmT?=
 =?iso-8859-1?Q?6Ka1d/Llkb+oxNkAStoOjzpS0J3WIwthF2qIhov9McKW9bbjbxNlCcyMdD?=
 =?iso-8859-1?Q?eKE0b0M3Ki/YL22WfZVdHPIUQeN4qRp1Q/XsPKo+KctnNBjKV99eCcGcVO?=
 =?iso-8859-1?Q?iNMEUveIVSZ7jHq6BrC8DfRlFSuBuGElJCHw6Zd9Vf4zhaA3wk9C0+PZ1m?=
 =?iso-8859-1?Q?INm/f62jWuZdTaErPhQRbr91/ytPG8p+25yEAf8NF2maXw10+s12lL2dmE?=
 =?iso-8859-1?Q?x7U2fTodRdTeJoErCynv79K0Y1SPBYHkLAiit84fVv4VRu6s1j3QpdaLji?=
 =?iso-8859-1?Q?RQLyblNqY2dEaPS+Y03PiZ4kFmHDVPz5kTKu8X+cwKNRH2TQazG60l8Vlh?=
 =?iso-8859-1?Q?9CWmAth39OyqBEJfNORTEGEm9/Fj23PU+rpD7l+raPqtaX?=
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-OriginatorOrg: citrix.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: SA6PR03MB7760.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: f4df13a8-856b-4cca-9e5c-08df30412536
X-MS-Exchange-CrossTenant-originalarrivaltime: 22 Oct 2026 13:34:06.4817
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: dP+gfChtrp/kgO+ckQLne+5yOT2zf4dyGsTmLhyX/5++MqNyPLUr0ISWsGXrSAiNg5sY/a8fSjqjMWmHqbnebA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV4PPF87E05612F
X-purgate-ID: tlsNG-d25034/1792676050-50B3DA5B-4B421DFF/0/0
X-purgate-type: clean
X-purgate-size: 689

These 4 patches, synching headers from xenbus

Reviewed-by: Owen Smith <owen.smith@citrix.com>

________________________________________
From: win-pv-devel <win-pv-devel-bounces@lists.xenproject.org> on behalf of=
 C=E9saire Mounah <cesaire.mounah@vates.tech>
Sent: 22 October 2026 1:49 PM
To: win-pv-devel@lists.xenproject.org
Cc: C=E9saire Mounah
Subject: [PATCH SET] Sync common files with xenbus

Sync common files and headers with xenbus.

This patch series only concerns xencons, xenhid, xennet and xenvkbd.

--
2.55.0.windows.5



--
C=E9saire Mounah | Vates Windows Guest Tools Engineer

XCP-ng & Xen Orchestra - Vates solutions

web: https://vates.tech


From win-pv-devel-bounces@lists.xenproject.org Fri Oct 23 15:12:40 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 23 Oct 2026 15:12:40 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1459414.1671329 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xKGwh-0001wv-9f; Fri, 23 Oct 2026 15:12:39 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1459414.1671329; Fri, 23 Oct 2026 15:12:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xKGwh-0001wn-6h; Fri, 23 Oct 2026 15:12:39 +0000
Received: by outflank-mailman (input) for mailman id 1459414;
 Fri, 23 Oct 2026 15:12:38 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a169522dd1000f79f@swg.vates.tech>)
 id 1xKGwf-0001wh-WC
 for win-pv-devel@lists.xenproject.org; Fri, 23 Oct 2026 15:12:38 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xKGwf-0063UB-Ck
 for win-pv-devel@lists.xenproject.org; Fri, 23 Oct 2026 17:12:37 +0200
Received: from [10.42.69.12] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a169522dd1000f79f@swg.vates.tech>)
 id 6adb795a-2eae-0a2a0a5409dd-0a2a450ca5d8-10
 for <win-pv-devel@lists.xenproject.org>; Fri, 23 Oct 2026 17:12:37 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-d25034.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a169522dd1000f79f@swg.vates.tech>)
 id 6adb7964-f479-0a2a450c0019-b9ff1c23b71f-3
 for <win-pv-devel@lists.xenproject.org>; Fri, 23 Oct 2026 17:12:37 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a169522dd1000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Fri, 23 Oct 2026 15:12:35 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 02BB281AB9;
 Fri, 23 Oct 2026 17:12:34 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=6tp0TLHUGe0gOOdE1aSieoLUFv1msbDQblXzV0ZR6Gc=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:feedback-id;
 b=bsoCbQO/b24ihxMOW/X6P/fIzpItSYyoQtQxC5YbViWKj65vMUg30Z6Pfs2G8dLljKQcJEt62
 Sxyehyr0lzUyvw8RxUpl4dTu9HS3NF0K8QrFCS8X1ZnrGIJ3HBtxgWHv9SPxegYCmmxQIfRB73a
 jAvkGDfrpPhp1UJ1IPnImXH5XWrzMbXTaU4S8BVKRwdPt1b53SGZbU3H+wTHxy0ANtIX1W6U3EL
 WTHNrwhDF/mwa2VN2WyYl5k9f8RLsSrbKaWqaFXBBg6mmHH2WNgttsYZ4wHamFTrGeJxl41hEfp
 IVBYfArXDMoN/tLB8ycp3RDCUtDuDOwu0JVQuDmkLg2g==
X-Zone-Loop: de221df1fa67269362f0e1467b87c49e9fb573e1ce0d
x-campaign-type: default
x-transaction-id: 6962449a-eb86-4e15-8179-b5bfb534dfdc
x-swg-uid: 01-0d72cf95-29f8-4b2c-a53b-020b665d654e
X-Mailer: Sweego
Message-ID:
 <1792768355.8631fc262581453bbf619ec5b2062170.1a169522dd1000f79f@vates.tech>
x-swg-bid: 1792768355.8631fc262581453bbf619ec5b2062170.1a169522dd1000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [RFC PATCH 0/9] Defer completion and ring destruction until backend grant release
Date: Fri, 23 Oct 2026 17:12:32 +0200
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.196.9f58f006a5deb295.1a169522b00.d4a44e05a94e67b2=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792768355073
X-purgate-ID: tlsNG-d25034/1792768357-5113AA5B-6F78ECF5/0/0
X-purgate-type: clean
X-purgate-size: 2379

---=Part.196.9f58f006a5deb295.1a169522b00.d4a44e05a94e67b2=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Hello,

When a backend is accessing a grant entry, it'll set the GTF_reading|
GTF_writing bits on that entry=2E RevokeForeignAccess will fail as long as
these bits are still set=2E

WinPV drivers assume that you can ignore RevokeForeignAccess failures
after a certain number of retries=2E This is unfortunately not the case,
as backends can still access the grants and corrupt things=2E We've
observed data corruption that we suspect as being caused by this issue=2E

This series attempts to clarify the fallible nature of
RevokeForeignAccess, and fixes the problem by deferring request
completion and ring destruction until after the corresponding grants
have been released by the backend=2E

It's freshly written and will undergo testing on our side, but I'd
appreciate if you could test this series on your testing infrastructure
as well to reveal any early errors=2E

This is the first series of fix for a class of similar issues=2E Further
fixes will be needed in other drivers using the grant interface (esp=2E
XenVif, XenIface); there are also other issues that have not been
discussed in this series=2E

Tu Dinh (9):
  granter: Correct the accounting of Current
  Use GNTTAB_INTERFACE_V5
  frontend: Initialize the granter before the ring
  granter: Split GranterTryPut to its own function
  granter: Decouple cache lifetime from Connected
  granter: Introduce GranterD0ToD3/D3ToD0
  ring: Introduce RingD3ToD0/RingD0ToD3
  ring: Defer destruction until backend grant release
  ring: Defer request completion until backend grant release

 include/gnttab_interface=2Eh |  90 +++--
 src/xenvbd=2Einf             |   6 +-
 src/xenvbd/frontend=2Ec      |  63 ++--
 src/xenvbd/frontend=2Eh      |   4 +-
 src/xenvbd/granter=2Ec       | 173 +++++++---
 src/xenvbd/granter=2Eh       |  17 +-
 src/xenvbd/ring=2Ec          | 662 +++++++++++++++++++++++++++++--------
 src/xenvbd/ring=2Eh          |  13 +
 8 files changed, 807 insertions(+), 221 deletions(-)

--=20
2=2E56=2E0=2Ewindows=2E3



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.196.9f58f006a5deb295.1a169522b00.d4a44e05a94e67b2=---


From win-pv-devel-bounces@lists.xenproject.org Fri Oct 23 15:14:28 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 23 Oct 2026 15:14:28 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1459418.1671333 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xKGyS-00023j-GS; Fri, 23 Oct 2026 15:14:28 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1459418.1671333; Fri, 23 Oct 2026 15:14:28 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xKGyS-00023V-CI; Fri, 23 Oct 2026 15:14:28 +0000
Received: by outflank-mailman (input) for mailman id 1459418;
 Fri, 23 Oct 2026 15:14:28 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16953d393000f79f@swg.vates.tech>)
 id 1xKGyS-00023A-02
 for win-pv-devel@lists.xenproject.org; Fri, 23 Oct 2026 15:14:28 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xKGyR-00AY2g-Bq
 for win-pv-devel@lists.xenproject.org; Fri, 23 Oct 2026 17:14:27 +0200
Received: from [10.42.69.2] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16953d393000f79f@swg.vates.tech>)
 id 6adb79af-e002-0a2a0a5209dd-0a2a45029abe-48
 for <win-pv-devel@lists.xenproject.org>; Fri, 23 Oct 2026 17:14:27 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16953d393000f79f@swg.vates.tech>)
 id 6adb79d2-6ca4-0a2a45020019-b9ff1c239655-3
 for <win-pv-devel@lists.xenproject.org>; Fri, 23 Oct 2026 17:14:27 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a16953d393000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Fri, 23 Oct 2026 15:14:23 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 487F281AB9;
 Fri, 23 Oct 2026 17:14:23 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=kKECgWnlF7uy1Vb8KgzNXisaMDnOjLAsh9S4AcxQlcM=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=PNiWWc9THPyu95qhz7r7KkdlKVhsyt3EqOpEt8AiUvVQm5g04q/w5SrUFTHyUConl8fxLQmbK
 7ETHvq4RXJ1QhritwYq3lI4Je0ENYddKgukpiZ/aqU4P0jtlN/dSuwDf83NqP7hKZh5cWit7iZL
 0c+MEn15ikCa8F9CWq61u958n98JN1bDbROtbOrVyDrFmMRuPChlLHM5ezzqcLpVjTxvIAlmZoi
 KBrstsULBLSBAgKuoarjxCSki5zjUCJKeYYcoO1ZGab8vFJt1phIMk5m9AmeZIg9DkAZx76vOuT
 D6I2V9+5uFsiBYh0fF4Jg9qM9CjiLzYZeMQ9IDS/65xQ==
X-Zone-Loop: 2452f33f01216f15f05fa3c468fc7caefdebab0a3cd2
x-campaign-type: default
x-transaction-id: bbe0f191-50c4-41ce-baae-57f005f31c04
x-swg-uid: 01-f3b97c39-d849-43e2-915a-e36427f33774
X-Mailer: Sweego
Message-ID:
 <1792768463.8631fc262581453bbf619ec5b2062170.1a16953d393000f79f@vates.tech>
x-swg-bid: 1792768463.8631fc262581453bbf619ec5b2062170.1a16953d393000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [RFC PATCH 1/9] granter: Correct the accounting of Current
Date: Fri, 23 Oct 2026 17:14:09 +0200
In-Reply-To: <20261023151419.1317-1-ngoc-tu.dinh@vates.tech>
References: <1792768355.8631fc262581453bbf619ec5b2062170.1a169522dd1000f79f@vates.tech>
 <20261023151419.1317-1-ngoc-tu.dinh@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.198.1d34156c76d1e63c.1a16953d1f7.101d9ad179a003dd=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792768463351
X-purgate-ID: tlsNG-720697/1792768467-66AB52AC-8B97EB74/0/0
X-purgate-type: clean
X-purgate-size: 1766

---=Part.198.1d34156c76d1e63c.1a16953d1f7.101d9ad179a003dd=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Current serves as an upper bound on the number of taken grants and must
be 0 on GranterDisconnect=2E We must increment Current before calling
PermitForeignAccess, and decrement it again on failure=2E

Assisted-by: LLM
Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 src/xenvbd/granter=2Ec | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/xenvbd/granter=2Ec b/src/xenvbd/granter=2Ec
index fd90965=2E=2Eeddcdcf 100644
--- a/src/xenvbd/granter=2Ec
+++ b/src/xenvbd/granter=2Ec
@@ -319,7 +319,9 @@ GranterGet(
     if (Granter->Connected =3D=3D FALSE)
         goto fail1;
=20
-    status =3D XENBUS_GNTTAB(PermitForeignAccess,=20
+    Value =3D InterlockedIncrement(&Granter->Current);
+
+    status =3D XENBUS_GNTTAB(PermitForeignAccess,
                            &Granter->GnttabInterface,
                            Granter->Cache,
                            FALSE,
@@ -329,8 +331,7 @@ GranterGet(
                            &Entry);
     if (!NT_SUCCESS(status))
         goto fail2;
-   =20
-    Value =3D InterlockedIncrement(&Granter->Current);
+
     if (Value > Granter->Maximum)
         Granter->Maximum =3D Value;
=20
@@ -339,6 +340,7 @@ GranterGet(
=20
 fail2:
     Error("fail2\n");
+    InterlockedDecrement(&Granter->Current);
 fail1:
     Error("fail1 %08x\n", status);
     return status;
--=20
2=2E56=2E0=2Ewindows=2E3



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.198.1d34156c76d1e63c.1a16953d1f7.101d9ad179a003dd=---


From win-pv-devel-bounces@lists.xenproject.org Fri Oct 23 15:14:29 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 23 Oct 2026 15:14:29 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1459419.1671337 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xKGyT-00025Z-Hr; Fri, 23 Oct 2026 15:14:29 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1459419.1671337; Fri, 23 Oct 2026 15:14:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xKGyT-00025R-DX; Fri, 23 Oct 2026 15:14:29 +0000
Received: by outflank-mailman (input) for mailman id 1459419;
 Fri, 23 Oct 2026 15:14:28 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16953d51f000f79f@swg.vates.tech>)
 id 1xKGyS-000239-6b
 for win-pv-devel@lists.xenproject.org; Fri, 23 Oct 2026 15:14:28 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xKGyR-00AjEz-Cv
 for win-pv-devel@lists.xenproject.org; Fri, 23 Oct 2026 17:14:27 +0200
Received: from [10.42.69.9] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16953d51f000f79f@swg.vates.tech>)
 id 6adb79a9-8faa-0a2a0a5109dd-0a2a4509df80-30
 for <win-pv-devel@lists.xenproject.org>; Fri, 23 Oct 2026 17:14:27 +0200
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-bad1c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16953d51f000f79f@swg.vates.tech>)
 id 6adb79d3-be1a-0a2a45090019-b9ff1c229c43-3
 for <win-pv-devel@lists.xenproject.org>; Fri, 23 Oct 2026 17:14:27 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a16953d51f000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Fri, 23 Oct 2026 15:14:24 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id AA71482C36;
 Fri, 23 Oct 2026 17:14:23 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=d9gaBqW9pyvbU968LPiq4GW0lZCGUgPSK/ax0Ey5wuI=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=LxtDGZZ6BcSZz6Z1scEPlcaD13kagHUJMw0/57YLMm3fHew287E3mVvO5ekYcv9ehtoJIq3hp
 TBYgZ57RXJVuoHX+dHGtvy9lGXJbI2ZiyQDS9UpzO9//iHJwS25hq1pNhfFVZ3dnuc8QR1QL/KE
 DFLBFpBEmd4MlaH1ZbKqs2I+/uuVnFO7spwZ8F7RuSPLrM82PjL0Y0wG77ybwTel4KXnNHmngVc
 t/SbR4Oio8GvW7VSTk7K2bEYuvMnXd8pzHqaadZUGwGDxMLeNLlyEr6akYLGow7+jE790e2THAh
 AEeupf7XMBQdputJXTWvO80z5PFOGnztgxzXBjlO5TLw==
X-Zone-Loop: 344f7cb20c964f190b992135bb8eb01a084de42ce8de
x-campaign-type: default
x-transaction-id: 23ede9e9-99bd-4fc9-b133-3a00acc918e3
x-swg-uid: 01-e10a920c-7845-402c-8559-a32f8ddae3f9
X-Mailer: Sweego
Message-ID:
 <1792768464.8631fc262581453bbf619ec5b2062170.1a16953d51f000f79f@vates.tech>
x-swg-bid: 1792768464.8631fc262581453bbf619ec5b2062170.1a16953d51f000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [RFC PATCH 3/9] frontend: Initialize the granter before the ring
Date: Fri, 23 Oct 2026 17:14:11 +0200
In-Reply-To: <20261023151419.1317-1-ngoc-tu.dinh@vates.tech>
References: <1792768355.8631fc262581453bbf619ec5b2062170.1a169522dd1000f79f@vates.tech>
 <20261023151419.1317-1-ngoc-tu.dinh@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.19a.d0af31fdefeb5950.1a16953d387.f0df5b7d0b38ba8e=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792768463751
X-purgate-ID: tlsNG-bad1c0/1792768467-FDC6D034-6B242C6E/0/0
X-purgate-type: clean
X-purgate-size: 2236

---=Part.19a.d0af31fdefeb5950.1a16953d387.f0df5b7d0b38ba8e=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

This is preparation for deferred grant revocation, as this requires the
granter to outlive the ring=2E

Assisted-by: LLM
Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 src/xenvbd/frontend=2Ec | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/src/xenvbd/frontend=2Ec b/src/xenvbd/frontend=2Ec
index 06c7295=2E=2E8bf4f96 100644
--- a/src/xenvbd/frontend=2Ec
+++ b/src/xenvbd/frontend=2Ec
@@ -1907,11 +1907,11 @@ FrontendCreate(
     if (!NT_SUCCESS(status))
         goto fail3;
=20
-    status =3D RingCreate(Frontend, &Frontend->Ring);
+    status =3D GranterCreate(Frontend, &Frontend->Granter);
     if (!NT_SUCCESS(status))
         goto fail4;
=20
-    status =3D GranterCreate(Frontend, &Frontend->Granter);
+    status =3D RingCreate(Frontend, &Frontend->Ring);
     if (!NT_SUCCESS(status))
         goto fail5;
=20
@@ -1928,12 +1928,12 @@ FrontendCreate(
=20
 fail6:
     Error("fail6\n");
-    GranterDestroy(Frontend->Granter);
-    Frontend->Granter =3D NULL;
-fail5:
-    Error("fail5\n");
     RingDestroy(Frontend->Ring);
     Frontend->Ring =3D NULL;
+fail5:
+    Error("fail5\n");
+    GranterDestroy(Frontend->Granter);
+    Frontend->Granter =3D NULL;
 fail4:
     Error("fail4\n");
     RtlZeroMemory(Frontend->TargetPath, sizeof(Frontend->TargetPath));
@@ -1970,12 +1970,12 @@ FrontendDestroy(
     ThreadJoin(Frontend->BackendThread);
     Frontend->BackendThread =3D NULL;
=20
-    GranterDestroy(Frontend->Granter);
-    Frontend->Granter =3D NULL;
-
     RingDestroy(Frontend->Ring);
     Frontend->Ring =3D NULL;
=20
+    GranterDestroy(Frontend->Granter);
+    Frontend->Granter =3D NULL;
+
     RtlZeroMemory(&Frontend->StateLock, sizeof(KSPIN_LOCK));
=20
     RtlZeroMemory(Frontend->TargetPath, sizeof(Frontend->TargetPath));
--=20
2=2E56=2E0=2Ewindows=2E3



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.19a.d0af31fdefeb5950.1a16953d387.f0df5b7d0b38ba8e=---


From win-pv-devel-bounces@lists.xenproject.org Fri Oct 23 15:14:29 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 23 Oct 2026 15:14:29 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1459420.1671340 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xKGyT-00025n-KB; Fri, 23 Oct 2026 15:14:29 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1459420.1671340; Fri, 23 Oct 2026 15:14:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xKGyT-00025d-Ei; Fri, 23 Oct 2026 15:14:29 +0000
Received: by outflank-mailman (input) for mailman id 1459420;
 Fri, 23 Oct 2026 15:14:28 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16953d2d0000f79f@swg.vates.tech>)
 id 1xKGyS-00023B-82
 for win-pv-devel@lists.xenproject.org; Fri, 23 Oct 2026 15:14:28 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xKGyR-006XAY-EX
 for win-pv-devel@lists.xenproject.org; Fri, 23 Oct 2026 17:14:27 +0200
Received: from [10.42.69.2] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16953d2d0000f79f@swg.vates.tech>)
 id 6adb79d3-2eae-0a2a0a5409dd-0a2a4502e7c0-0
 for <win-pv-devel@lists.xenproject.org>; Fri, 23 Oct 2026 17:14:27 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16953d2d0000f79f@swg.vates.tech>)
 id 6adb79d2-6ca4-0a2a45020019-b9ff1c129189-3
 for <win-pv-devel@lists.xenproject.org>; Fri, 23 Oct 2026 17:14:27 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a16953d2d0000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Fri, 23 Oct 2026 15:14:23 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id E395782C36;
 Fri, 23 Oct 2026 17:14:22 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=DDLrP0AyCmR5FEuMvCdPIo8ZXtuLGpQyTivw/r1EE40=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=ibZGReBmwoTCSKA5RuxkbeyfwKevpujIPjdpNjuxxqGqDmKYk2QmdxsS55cvedVdnmid/osWk
 vbSSn7sKbO2IGfHSp5ISU8QXcw1qT6YDB7CnfF9iIcjhgW6Avgs393eKysboQwyCZYwFgbPV2O2
 LjbE4cksvDUm/Hg5DyByVj4tFssdTkdTtdPIbtV0TfrzEqdSD4GLuYSYQD2nIqGztqZcfFq8Tpk
 /HFAzbgMNKiAxNIH9CYFxV10p+kMAuVw/+VGifNMlwMbUXotpSITazowNTddfvairzUL5n2wYDV
 I9kiB5be1QJLsmd5pjbzB3Qc5cQBXN/qN+gjgtyqQOQA==
X-Zone-Loop: 64d36c2cfc84b2f0c752fc8bf1b108130f57f8959ed6
x-campaign-type: default
x-transaction-id: 011071a6-51f7-4b20-a304-c42807a6bcea
x-swg-uid: 01-21af4812-046e-4403-a38b-0fa6dee21ebe
X-Mailer: Sweego
Message-ID:
 <1792768463.8631fc262581453bbf619ec5b2062170.1a16953d2d0000f79f@vates.tech>
x-swg-bid: 1792768463.8631fc262581453bbf619ec5b2062170.1a16953d2d0000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [RFC XENBUS PATCH 1/1] Add GNTTAB_INTERFACE_V5
Date: Fri, 23 Oct 2026 17:14:08 +0200
In-Reply-To: <1792768355.8631fc262581453bbf619ec5b2062170.1a169522dd1000f79f@vates.tech>
References: <1792768355.8631fc262581453bbf619ec5b2062170.1a169522dd1000f79f@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.197.589326257c136e5d.1a16953d08d.39a560f5b750d43d=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792768462990
X-purgate-ID: tlsNG-720697/1792768467-660A82AC-91C9DA7B/0/0
X-purgate-type: clean
X-purgate-size: 13395

---=Part.197.589326257c136e5d.1a16953d08d.39a560f5b750d43d=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Avoid retrying and calling SCHEDOP_yield in RevokeForeignAccess=2E Leave
the retry logic to the individual drivers instead, because individual
drivers need to revoke grants in the background to avoid having backends
trample over pages that have an active grant entry yet have already been
released to the OS=2E

RevokeForeignAccessV2 continues providing the retry logic to legacy
clients=2E

Note that RevokeForeignAccess in GNTTAB_INTERFACE_V5 cannot
transparently replace RevokeForeignAccessV2 because of semantic changes=2E
Migrating to GNTTAB_INTERFACE_V5 requires reimplementing the drivers'
grant revocation path=2E

Assisted-by: LLM
Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
This silently changes the semantics of RevokeForeignAccess=2E I can rename
it to e=2Eg=2E TryRevokeForeignAccess if that is preferable=2E
---
 include/gnttab_interface=2Eh | 90 ++++++++++++++++++++++++++++----------
 include/revision=2Eh         |  3 +-
 src/xenbus/gnttab=2Ec        | 77 +++++++++++++++++++++++++++-----
 3 files changed, 135 insertions(+), 35 deletions(-)

diff --git a/include/gnttab_interface=2Eh b/include/gnttab_interface=2Eh
index 92a95a7=2E=2E3ca4407 100644
--- a/include/gnttab_interface=2Eh
+++ b/include/gnttab_interface=2Eh
@@ -132,6 +132,26 @@ typedef NTSTATUS
     _Outptr_ PXENBUS_GNTTAB_ENTRY   *Entry
     );
=20
+/*! \typedef XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS_V2
+    \brief Revoke foreign access and return the \a Entry to the \a Cache
+
+    \param Interface The interface header
+    \param Cache The grant table cache handle
+    \param Locked If mutually exclusive access to the cache is already
+    guaranteed then set this to TRUE
+    \param Entry The grant table entry handle
+
+    If the foreign domain is still accessing the granted page, this retri=
es
+    for a while before giving up=2E
+*/
+typedef NTSTATUS
+(*XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS_V2)(
+    _In_ PINTERFACE                 Interface,
+    _In_ PXENBUS_GNTTAB_CACHE       Cache,
+    _In_ BOOLEAN                    Locked,
+    _In_ PXENBUS_GNTTAB_ENTRY       Entry
+    );
+
 /*! \typedef XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS
     \brief Revoke foreign access and return the \a Entry to the \a Cache
=20
@@ -140,6 +160,12 @@ typedef NTSTATUS
     \param Locked If mutually exclusive access to the cache is already
     guaranteed then set this to TRUE
     \param Entry The grant table entry handle
+    \return STATUS_DEVICE_BUSY if the foreign domain is still accessing t=
he
+    granted page
+
+    This does not wait for the foreign domain=2E On failure, foreign acce=
ss
+    remains in effect and \a Entry remains valid: the caller must keep th=
e
+    granted page alive, and should retry the revocation later=2E
 */
 typedef NTSTATUS
 (*XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS)(
@@ -239,16 +265,16 @@ DEFINE_GUID(GUID_XENBUS_GNTTAB_INTERFACE,
     \ingroup interfaces
 */
 struct _XENBUS_GNTTAB_INTERFACE_V2 {
-    INTERFACE                           Interface;
-    XENBUS_GNTTAB_ACQUIRE               GnttabAcquire;
-    XENBUS_GNTTAB_RELEASE               GnttabRelease;
-    XENBUS_GNTTAB_CREATE_CACHE_V1       GnttabCreateCacheVersion1;
-    XENBUS_GNTTAB_PERMIT_FOREIGN_ACCESS GnttabPermitForeignAccess;
-    XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS GnttabRevokeForeignAccess;
-    XENBUS_GNTTAB_GET_REFERENCE         GnttabGetReference;
-    XENBUS_GNTTAB_DESTROY_CACHE         GnttabDestroyCache;
-    XENBUS_GNTTAB_MAP_FOREIGN_PAGES     GnttabMapForeignPages;
-    XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES   GnttabUnmapForeignPages;
+    INTERFACE                               Interface;
+    XENBUS_GNTTAB_ACQUIRE                   GnttabAcquire;
+    XENBUS_GNTTAB_RELEASE                   GnttabRelease;
+    XENBUS_GNTTAB_CREATE_CACHE_V1           GnttabCreateCacheVersion1;
+    XENBUS_GNTTAB_PERMIT_FOREIGN_ACCESS     GnttabPermitForeignAccess;
+    XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS_V2  GnttabRevokeForeignAccessVers=
ion2;
+    XENBUS_GNTTAB_GET_REFERENCE             GnttabGetReference;
+    XENBUS_GNTTAB_DESTROY_CACHE             GnttabDestroyCache;
+    XENBUS_GNTTAB_MAP_FOREIGN_PAGES         GnttabMapForeignPages;
+    XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES       GnttabUnmapForeignPages;
 };
=20
 /*! \struct _XENBUS_GNTTAB_INTERFACE_V3
@@ -256,17 +282,17 @@ struct _XENBUS_GNTTAB_INTERFACE_V2 {
     \ingroup interfaces
 */
 struct _XENBUS_GNTTAB_INTERFACE_V3 {
-    INTERFACE                           Interface;
-    XENBUS_GNTTAB_ACQUIRE               GnttabAcquire;
-    XENBUS_GNTTAB_RELEASE               GnttabRelease;
-    XENBUS_GNTTAB_CREATE_CACHE_V1       GnttabCreateCacheVersion1;
-    XENBUS_GNTTAB_PERMIT_FOREIGN_ACCESS GnttabPermitForeignAccess;
-    XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS GnttabRevokeForeignAccess;
-    XENBUS_GNTTAB_GET_REFERENCE         GnttabGetReference;
-    XENBUS_GNTTAB_QUERY_REFERENCE       GnttabQueryReference;
-    XENBUS_GNTTAB_DESTROY_CACHE         GnttabDestroyCache;
-    XENBUS_GNTTAB_MAP_FOREIGN_PAGES     GnttabMapForeignPages;
-    XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES   GnttabUnmapForeignPages;
+    INTERFACE                               Interface;
+    XENBUS_GNTTAB_ACQUIRE                   GnttabAcquire;
+    XENBUS_GNTTAB_RELEASE                   GnttabRelease;
+    XENBUS_GNTTAB_CREATE_CACHE_V1           GnttabCreateCacheVersion1;
+    XENBUS_GNTTAB_PERMIT_FOREIGN_ACCESS     GnttabPermitForeignAccess;
+    XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS_V2  GnttabRevokeForeignAccessVers=
ion2;
+    XENBUS_GNTTAB_GET_REFERENCE             GnttabGetReference;
+    XENBUS_GNTTAB_QUERY_REFERENCE           GnttabQueryReference;
+    XENBUS_GNTTAB_DESTROY_CACHE             GnttabDestroyCache;
+    XENBUS_GNTTAB_MAP_FOREIGN_PAGES         GnttabMapForeignPages;
+    XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES       GnttabUnmapForeignPages;
 };
=20
 /*! \struct _XENBUS_GNTTAB_INTERFACE_V4
@@ -274,6 +300,24 @@ struct _XENBUS_GNTTAB_INTERFACE_V3 {
     \ingroup interfaces
 */
 struct _XENBUS_GNTTAB_INTERFACE_V4 {
+    INTERFACE                               Interface;
+    XENBUS_GNTTAB_ACQUIRE                   GnttabAcquire;
+    XENBUS_GNTTAB_RELEASE                   GnttabRelease;
+    XENBUS_GNTTAB_CREATE_CACHE              GnttabCreateCache;
+    XENBUS_GNTTAB_PERMIT_FOREIGN_ACCESS     GnttabPermitForeignAccess;
+    XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS_V2  GnttabRevokeForeignAccessVers=
ion2;
+    XENBUS_GNTTAB_GET_REFERENCE             GnttabGetReference;
+    XENBUS_GNTTAB_QUERY_REFERENCE           GnttabQueryReference;
+    XENBUS_GNTTAB_DESTROY_CACHE             GnttabDestroyCache;
+    XENBUS_GNTTAB_MAP_FOREIGN_PAGES         GnttabMapForeignPages;
+    XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES       GnttabUnmapForeignPages;
+};
+
+/*! \struct _XENBUS_GNTTAB_INTERFACE_V5
+    \brief GNTTAB interface version 5
+    \ingroup interfaces
+*/
+struct _XENBUS_GNTTAB_INTERFACE_V5 {
     INTERFACE                           Interface;
     XENBUS_GNTTAB_ACQUIRE               GnttabAcquire;
     XENBUS_GNTTAB_RELEASE               GnttabRelease;
@@ -287,7 +331,7 @@ struct _XENBUS_GNTTAB_INTERFACE_V4 {
     XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES   GnttabUnmapForeignPages;
 };
=20
-typedef struct _XENBUS_GNTTAB_INTERFACE_V4 XENBUS_GNTTAB_INTERFACE, *PXEN=
BUS_GNTTAB_INTERFACE;
+typedef struct _XENBUS_GNTTAB_INTERFACE_V5 XENBUS_GNTTAB_INTERFACE, *PXEN=
BUS_GNTTAB_INTERFACE;
=20
 /*! \def XENBUS_GNTTAB
     \brief Macro at assist in method invocation
@@ -298,6 +342,6 @@ typedef struct _XENBUS_GNTTAB_INTERFACE_V4 XENBUS_GNTT=
AB_INTERFACE, *PXENBUS_GNT
 #endif  // _WINDLL
=20
 #define XENBUS_GNTTAB_INTERFACE_VERSION_MIN 2
-#define XENBUS_GNTTAB_INTERFACE_VERSION_MAX 4
+#define XENBUS_GNTTAB_INTERFACE_VERSION_MAX 5
=20
 #endif  // _XENBUS_GNTTAB_INTERFACE_H
diff --git a/include/revision=2Eh b/include/revision=2Eh
index a63e550=2E=2Ec1ab047 100644
--- a/include/revision=2Eh
+++ b/include/revision=2Eh
@@ -52,6 +52,7 @@
     DEFINE_REVISION(0x09000009,  1,  4,  9,  1,  2,  1,  2,  4,  1,  1,  =
2), \
     DEFINE_REVISION(0x0900000A,  1,  4,  9,  1,  2,  1,  2,  4,  2,  1,  =
2), \
     DEFINE_REVISION(0x0900000B,  1,  4,  9,  1,  2,  1,  2,  4,  3,  1,  =
2), \
-    DEFINE_REVISION(0x0900000C,  1,  4,  9,  1,  2,  1,  2,  4,  3,  1,  =
3)
+    DEFINE_REVISION(0x0900000C,  1,  4,  9,  1,  2,  1,  2,  4,  3,  1,  =
3), \
+    DEFINE_REVISION(0x0900000D,  1,  4,  9,  1,  2,  1,  2,  5,  3,  1,  =
3)
=20
 #endif  // _REVISION_H
diff --git a/src/xenbus/gnttab=2Ec b/src/xenbus/gnttab=2Ec
index bdf8b2b=2E=2E47be658 100644
--- a/src/xenbus/gnttab=2Ec
+++ b/src/xenbus/gnttab=2Ec
@@ -559,7 +559,6 @@ GnttabRevokeForeignAccess(
     PXENBUS_GNTTAB_FRAME        Frame;
     ULONG                       Index;
     volatile SHORT              *flags;
-    ULONG                       Attempt;
     NTSTATUS                    status;
=20
     ASSERT3U(Entry->Magic, =3D=3D, XENBUS_GNTTAB_ENTRY_MAGIC);
@@ -571,25 +570,21 @@ GnttabRevokeForeignAccess(
=20
     flags =3D (volatile SHORT *)&Frame->Entry[Index]=2Eflags;
=20
-    for (Attempt =3D 0; Attempt < 100; Attempt++) {
+    for (;;) {
         uint16_t    Old;
         uint16_t    New;
=20
         Old =3D *flags;
-        Old &=3D ~(GTF_reading | GTF_writing);
+
+        if (Old & (GTF_reading | GTF_writing))
+            return STATUS_DEVICE_BUSY;
=20
         New =3D Old & ~GTF_permit_access;
=20
         if (InterlockedCompareExchange16(flags, New, Old) =3D=3D Old)
             break;
-
-        SchedYield();
     }
=20
-    status =3D STATUS_UNSUCCESSFUL;
-    if (Attempt =3D=3D 100)
-        goto fail1;
-
     RtlZeroMemory(&Frame->Entry[Index], sizeof (grant_entry_v1_t));
     RtlZeroMemory(&Entry->Entry, sizeof (grant_entry_v1_t));
=20
@@ -600,6 +595,35 @@ GnttabRevokeForeignAccess(
                  Locked);
=20
     return STATUS_SUCCESS;
+}
+
+static NTSTATUS
+GnttabRevokeForeignAccessVersion2(
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_GNTTAB_CACHE   Cache,
+    _In_ BOOLEAN                Locked,
+    _In_ PXENBUS_GNTTAB_ENTRY   Entry
+    )
+{
+    ULONG                       Attempt;
+    NTSTATUS                    status;
+
+    for (Attempt =3D 0; Attempt < 100; Attempt++) {
+        status =3D GnttabRevokeForeignAccess(Interface,
+                                           Cache,
+                                           Locked,
+                                           Entry);
+        if (NT_SUCCESS(status))
+            break;
+
+        SchedYield();
+    }
+
+    status =3D STATUS_UNSUCCESSFUL;
+    if (Attempt =3D=3D 100)
+        goto fail1;
+
+    return STATUS_SUCCESS;
=20
 fail1:
     Error("fail1 (%08x)\n", status);
@@ -1044,7 +1068,7 @@ static struct _XENBUS_GNTTAB_INTERFACE_V2   GnttabIn=
terfaceVersion2 =3D {
     GnttabRelease,
     GnttabCreateCacheVersion1,
     GnttabPermitForeignAccess,
-    GnttabRevokeForeignAccess,
+    GnttabRevokeForeignAccessVersion2,
     GnttabGetReference,
     GnttabDestroyCache,
     GnttabMapForeignPages,
@@ -1057,7 +1081,7 @@ static struct _XENBUS_GNTTAB_INTERFACE_V3   GnttabIn=
terfaceVersion3 =3D {
     GnttabRelease,
     GnttabCreateCacheVersion1,
     GnttabPermitForeignAccess,
-    GnttabRevokeForeignAccess,
+    GnttabRevokeForeignAccessVersion2,
     GnttabGetReference,
     GnttabQueryReference,
     GnttabDestroyCache,
@@ -1071,6 +1095,20 @@ static struct _XENBUS_GNTTAB_INTERFACE_V4   GnttabI=
nterfaceVersion4 =3D {
     GnttabRelease,
     GnttabCreateCache,
     GnttabPermitForeignAccess,
+    GnttabRevokeForeignAccessVersion2,
+    GnttabGetReference,
+    GnttabQueryReference,
+    GnttabDestroyCache,
+    GnttabMapForeignPages,
+    GnttabUnmapForeignPages
+};
+
+static struct _XENBUS_GNTTAB_INTERFACE_V5   GnttabInterfaceVersion5 =3D {
+    { sizeof (struct _XENBUS_GNTTAB_INTERFACE_V5), 5, NULL, NULL, NULL },
+    GnttabAcquire,
+    GnttabRelease,
+    GnttabCreateCache,
+    GnttabPermitForeignAccess,
     GnttabRevokeForeignAccess,
     GnttabGetReference,
     GnttabQueryReference,
@@ -1212,6 +1250,23 @@ GnttabGetInterface(
         status =3D STATUS_SUCCESS;
         break;
     }
+    case 5: {
+        struct _XENBUS_GNTTAB_INTERFACE_V5  *GnttabInterface;
+
+        GnttabInterface =3D (struct _XENBUS_GNTTAB_INTERFACE_V5 *)Interfa=
ce;
+
+        status =3D STATUS_BUFFER_OVERFLOW;
+        if (Size < sizeof (struct _XENBUS_GNTTAB_INTERFACE_V5))
+            break;
+
+        *GnttabInterface =3D GnttabInterfaceVersion5;
+
+        ASSERT3U(Interface->Version, =3D=3D, Version);
+        Interface->Context =3D Context;
+
+        status =3D STATUS_SUCCESS;
+        break;
+    }
     default:
         status =3D STATUS_NOT_SUPPORTED;
         break;
--=20
2=2E56=2E0=2Ewindows=2E3



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.197.589326257c136e5d.1a16953d08d.39a560f5b750d43d=---


From win-pv-devel-bounces@lists.xenproject.org Fri Oct 23 15:14:29 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 23 Oct 2026 15:14:29 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1459422.1671343 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xKGyT-00026E-O1; Fri, 23 Oct 2026 15:14:29 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1459422.1671343; Fri, 23 Oct 2026 15:14:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xKGyT-00025v-Gm; Fri, 23 Oct 2026 15:14:29 +0000
Received: by outflank-mailman (input) for mailman id 1459422;
 Fri, 23 Oct 2026 15:14:28 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16953d84b000f79f@swg.vates.tech>)
 id 1xKGyS-00023H-9J
 for win-pv-devel@lists.xenproject.org; Fri, 23 Oct 2026 15:14:28 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xKGyR-006XAY-Md
 for win-pv-devel@lists.xenproject.org; Fri, 23 Oct 2026 17:14:27 +0200
Received: from [10.42.69.2] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16953d84b000f79f@swg.vates.tech>)
 id 6adb79d3-2eae-0a2a0a5409dd-0a2a4502e7c0-6
 for <win-pv-devel@lists.xenproject.org>; Fri, 23 Oct 2026 17:14:27 +0200
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16953d84b000f79f@swg.vates.tech>)
 id 6adb79d2-6ca4-0a2a45020019-b9ff1c129189-4
 for <win-pv-devel@lists.xenproject.org>; Fri, 23 Oct 2026 17:14:27 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a16953d84b000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Fri, 23 Oct 2026 15:14:24 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 7BEA381AB9;
 Fri, 23 Oct 2026 17:14:24 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=ZMu6zuayNAa9YYQQOEKJO2ryUK9LifdOlLxPbuoliCQ=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=sycM7BfjAtf5dNMeGjaQX8d1aw7EutpXbOzyNSY7tZi4JP8t+kR5mo1Rzl3qsj9NpYS7OxhRg
 nvN5QtWJmXIq2JzoRJWG9Hp4K46w239T4Dts9dLJItFINCp3pGrcYmK9kH5dA1ogMS2C9odhqXD
 dFrtjk3ySFpJ3SGpxbf+t6nVU/XA4UFDOqa+bifk3TaVdXlbetKJp/uPPofbQxLcKlAJXF5hdfE
 DhGYDEPQxCZoHWPRK8k6bQVMv+wgsxbFO4ReDzjuRW1RE4UCq69UN+rp29ZuAAmYpcwPBazeBF0
 G35nxTgwHhaLts/FyhaBstWzIF2m8zIdyQF/b9zzoSPw==
X-Zone-Loop: 94bf964f5716f8d47b19f506806a5288613f26d82885
x-campaign-type: default
x-transaction-id: 548acb38-9f1c-4496-af83-7b0df1290686
x-swg-uid: 01-f0b20520-f409-4f16-81d1-f24213d2d7a7
X-Mailer: Sweego
Message-ID:
 <1792768465.8631fc262581453bbf619ec5b2062170.1a16953d84b000f79f@vates.tech>
x-swg-bid: 1792768465.8631fc262581453bbf619ec5b2062170.1a16953d84b000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [RFC PATCH 7/9] ring: Introduce RingD3ToD0/RingD0ToD3
Date: Fri, 23 Oct 2026 17:14:15 +0200
In-Reply-To: <20261023151419.1317-1-ngoc-tu.dinh@vates.tech>
References: <1792768355.8631fc262581453bbf619ec5b2062170.1a169522dd1000f79f@vates.tech>
 <20261023151419.1317-1-ngoc-tu.dinh@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.19e.bc5f05a4425781f2.1a16953d6b1.d1c97aaeaa45d2dd=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792768464561
X-purgate-ID: tlsNG-720697/1792768467-F32B12AC-19AD70D7/0/0
X-purgate-type: clean
X-purgate-size: 5104

---=Part.19e.bc5f05a4425781f2.1a16953d6b1.d1c97aaeaa45d2dd=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Add D0 power transition hooks to the ring, called by the frontend at
PASSIVE_LEVEL outside of its state lock, so that the ring can manage
resources that must only exist while in D0=2E

They do nothing yet=2E

Assisted-by: LLM
Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 src/xenvbd/frontend=2Ec | 34 ++++++++++++++++++++++------------
 src/xenvbd/ring=2Ec     | 22 ++++++++++++++++++++++
 src/xenvbd/ring=2Eh     | 13 +++++++++++++
 3 files changed, 57 insertions(+), 12 deletions(-)

diff --git a/src/xenvbd/frontend=2Ec b/src/xenvbd/frontend=2Ec
index 442e188=2E=2E20207ba 100644
--- a/src/xenvbd/frontend=2Ec
+++ b/src/xenvbd/frontend=2Ec
@@ -1681,6 +1681,10 @@ FrontendD3ToD0(
=20
     GranterD3ToD0(Frontend->Granter);
=20
+    status =3D RingD3ToD0(Frontend->Ring);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
     KeAcquireSpinLock(&Frontend->StateLock, &Irql);
=20
     AdapterGetStoreInterface(Adapter, &Frontend->StoreInterface);
@@ -1689,15 +1693,15 @@ FrontendD3ToD0(
=20
     status =3D XENBUS_STORE(Acquire, &Frontend->StoreInterface);
     if (!NT_SUCCESS(status))
-        goto fail1;
+        goto fail2;
=20
     status =3D XENBUS_DEBUG(Acquire, &Frontend->DebugInterface);
     if (!NT_SUCCESS(status))
-        goto fail2;
+        goto fail3;
=20
     status =3D XENBUS_SUSPEND(Acquire, &Frontend->SuspendInterface);
     if (!NT_SUCCESS(status))
-        goto fail3;
+        goto fail4;
=20
     status =3D XENBUS_SUSPEND(Register,
                             &Frontend->SuspendInterface,
@@ -1706,7 +1710,7 @@ FrontendD3ToD0(
                             Frontend,
                             &Frontend->SuspendCallback);
     if (!NT_SUCCESS(status))
-        goto fail4;
+        goto fail5;
=20
     status =3D XENBUS_DEBUG(Register,
                           &Frontend->DebugInterface,
@@ -1715,30 +1719,30 @@ FrontendD3ToD0(
                           Frontend,
                           &Frontend->DebugCallback);
     if (!NT_SUCCESS(status))
-        goto fail5;
+        goto fail6;
=20
     Frontend->Active =3D TRUE;
=20
     KeReleaseSpinLock(&Frontend->StateLock, Irql);
     return STATUS_SUCCESS;
=20
-fail5:
-    Error("fail5\n");
+fail6:
+    Error("fail6\n");
     XENBUS_SUSPEND(Deregister,
                    &Frontend->SuspendInterface,
                    Frontend->SuspendCallback);
     Frontend->SuspendCallback =3D NULL;
+fail5:
+    Error("fail5\n");
+    XENBUS_SUSPEND(Release, &Frontend->SuspendInterface);
 fail4:
     Error("fail4\n");
-    XENBUS_SUSPEND(Release, &Frontend->SuspendInterface);
+    XENBUS_DEBUG(Release, &Frontend->DebugInterface);
 fail3:
     Error("fail3\n");
-    XENBUS_DEBUG(Release, &Frontend->DebugInterface);
+    XENBUS_STORE(Release, &Frontend->StoreInterface);
 fail2:
     Error("fail2\n");
-    XENBUS_STORE(Release, &Frontend->StoreInterface);
-fail1:
-    Error("fail1 (%08x)\n", status);
=20
     RtlZeroMemory(&Frontend->SuspendInterface,
                   sizeof(XENBUS_SUSPEND_INTERFACE));
@@ -1749,6 +1753,11 @@ fail1:
=20
     KeReleaseSpinLock(&Frontend->StateLock, Irql);
=20
+    RingD0ToD3(Frontend->Ring);
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
     GranterD0ToD3(Frontend->Granter);
=20
     return status;
@@ -1793,6 +1802,7 @@ FrontendD0ToD3(
=20
     KeReleaseSpinLock(&Frontend->StateLock, Irql);
=20
+    RingD0ToD3(Frontend->Ring);
     GranterD0ToD3(Frontend->Granter);
 }
=20
diff --git a/src/xenvbd/ring=2Ec b/src/xenvbd/ring=2Ec
index dae2ca0=2E=2E3ce3ba5 100644
--- a/src/xenvbd/ring=2Ec
+++ b/src/xenvbd/ring=2Ec
@@ -2594,6 +2594,28 @@ RingDestroy(
     __RingFree(Ring);
 }
=20
+NTSTATUS
+RingD3ToD0(
+    _Inout_ PXENVBD_RING    Ring
+    )
+{
+    UNREFERENCED_PARAMETER(Ring);
+
+    ASSERT3U(KeGetCurrentIrql(), =3D=3D, PASSIVE_LEVEL);
+
+    return STATUS_SUCCESS;
+}
+
+VOID
+RingD0ToD3(
+    _Inout_ PXENVBD_RING    Ring
+    )
+{
+    UNREFERENCED_PARAMETER(Ring);
+
+    ASSERT3U(KeGetCurrentIrql(), =3D=3D, PASSIVE_LEVEL);
+}
+
 NTSTATUS
 RingConnect(
     _Inout_ PXENVBD_RING    Ring
diff --git a/src/xenvbd/ring=2Eh b/src/xenvbd/ring=2Eh
index 6dfdb74=2E=2Ebd5f322 100644
--- a/src/xenvbd/ring=2Eh
+++ b/src/xenvbd/ring=2Eh
@@ -49,6 +49,19 @@ RingDestroy(
     _Inout_ PXENVBD_RING    Ring
     );
=20
+_Check_return_
+_IRQL_requires_(PASSIVE_LEVEL)
+extern NTSTATUS
+RingD3ToD0(
+    _Inout_ PXENVBD_RING    Ring
+    );
+
+_IRQL_requires_(PASSIVE_LEVEL)
+extern VOID
+RingD0ToD3(
+    _Inout_ PXENVBD_RING    Ring
+    );
+
 extern NTSTATUS
 RingConnect(
     _Inout_ PXENVBD_RING    Ring
--=20
2=2E56=2E0=2Ewindows=2E3



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.19e.bc5f05a4425781f2.1a16953d6b1.d1c97aaeaa45d2dd=---


From win-pv-devel-bounces@lists.xenproject.org Fri Oct 23 15:14:30 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 23 Oct 2026 15:14:30 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1459423.1671352 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xKGyU-00027g-1t; Fri, 23 Oct 2026 15:14:30 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1459423.1671352; Fri, 23 Oct 2026 15:14:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xKGyT-00026W-Ke; Fri, 23 Oct 2026 15:14:29 +0000
Received: by outflank-mailman (input) for mailman id 1459423;
 Fri, 23 Oct 2026 15:14:28 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16953d6b4000f79f@swg.vates.tech>)
 id 1xKGyS-00023I-B8
 for win-pv-devel@lists.xenproject.org; Fri, 23 Oct 2026 15:14:28 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xKGyR-006XAY-KS
 for win-pv-devel@lists.xenproject.org; Fri, 23 Oct 2026 17:14:27 +0200
Received: from [10.42.69.2] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16953d6b4000f79f@swg.vates.tech>)
 id 6adb79d3-2eae-0a2a0a5409dd-0a2a4502e7c0-4
 for <win-pv-devel@lists.xenproject.org>; Fri, 23 Oct 2026 17:14:27 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16953d6b4000f79f@swg.vates.tech>)
 id 6adb79d2-6ca4-0a2a45020019-b9ff1c239655-4
 for <win-pv-devel@lists.xenproject.org>; Fri, 23 Oct 2026 17:14:27 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a16953d6b4000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Fri, 23 Oct 2026 15:14:24 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 1983382C8D;
 Fri, 23 Oct 2026 17:14:24 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=fjoBqX7PPqO950rNcJ+/LizGsZSWm35dJKk6priNwyI=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=XCX26CSehvhIKubxu+nT0bHhbjkmIC+pYtFV81Ku3Oq13cKBUSbHsci0KFz+o0KLSwWknGLNK
 FnS5ge3Oi8U1Ndkcy2m58w1rGcgjBW8c6PmbGA7yv77Ch12S+5D+ml2yrlYMC3nZquDYeqQT2Fj
 djjQtPQ8XizDd27UpL8s8VZaVz9xtwrytAwes/04scqMo4CUZTu8lNnX4gHK3S+iHmAId7sYgYn
 9JdsSP1TeQjsBJaQXBuyymJjhJfgeBawjqt1jSIV2zdnrsEBJUvH5FM+psum0auArPREF3EXa5l
 8l7fTPihH15ixMjJiNW9nwLRMkIVBgOK3b8ioTFwDJxw==
X-Zone-Loop: f553eed4727a7c0aedda4f8b262d6c29453b34978b40
x-campaign-type: default
x-transaction-id: 25dd6755-377d-4801-87c2-a0bd52e4d669
x-swg-uid: 01-95f4e3de-8c0d-43dd-a727-38fe2b4e7ff4
X-Mailer: Sweego
Message-ID:
 <1792768464.8631fc262581453bbf619ec5b2062170.1a16953d6b4000f79f@vates.tech>
x-swg-bid: 1792768464.8631fc262581453bbf619ec5b2062170.1a16953d6b4000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [RFC PATCH 5/9] granter: Decouple cache lifetime from Connected
Date: Fri, 23 Oct 2026 17:14:13 +0200
In-Reply-To: <20261023151419.1317-1-ngoc-tu.dinh@vates.tech>
References: <1792768355.8631fc262581453bbf619ec5b2062170.1a169522dd1000f79f@vates.tech>
 <20261023151419.1317-1-ngoc-tu.dinh@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.19c.ceb5d549b2234280.1a16953d51b.b74f08fec8c5e077=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792768464155
X-purgate-ID: tlsNG-720697/1792768467-317CA2AC-CD6C5133/0/0
X-purgate-type: clean
X-purgate-size: 6682

---=Part.19c.ceb5d549b2234280.1a16953d51b.b74f08fec8c5e077=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

We must keep the cache alive until the very last grant has been released
by the backend=2E

Assisted-by: LLM
Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 src/xenvbd/granter=2Ec | 129 +++++++++++++++++++++++++++++++------------
 1 file changed, 95 insertions(+), 34 deletions(-)

diff --git a/src/xenvbd/granter=2Ec b/src/xenvbd/granter=2Ec
index 74a786d=2E=2E2a10f57 100644
--- a/src/xenvbd/granter=2Ec
+++ b/src/xenvbd/granter=2Ec
@@ -100,11 +100,26 @@ fail1:
     return status;
 }
=20
+static VOID
+__GranterDestroyCache(
+    _Inout_ PXENVBD_GRANTER Granter
+    );
+
 VOID
 GranterDestroy(
     _Inout_ PXENVBD_GRANTER Granter
     )
 {
+    BUG_ON(Granter->Current !=3D 0);
+
+    if (Granter->Cache !=3D NULL) {
+        KIRQL   Irql;
+
+        KeRaiseIrql(DISPATCH_LEVEL, &Irql);
+        __GranterDestroyCache(Granter);
+        KeLowerIrql(Irql);
+    }
+
     Granter->Frontend =3D NULL;
     RtlZeroMemory(&Granter->Lock, sizeof(KSPIN_LOCK));
=20
@@ -166,8 +181,8 @@ GranterDebugCallback(
=20
 #define MAXNAMELEN  32
=20
-NTSTATUS
-GranterConnect(
+static NTSTATUS
+__GranterCreateCache(
     _Inout_ PXENVBD_GRANTER Granter
     )
 {
@@ -175,25 +190,20 @@ GranterConnect(
     CHAR                    Name[MAXNAMELEN];
     NTSTATUS                status;
=20
-    ASSERT(Granter->Connected =3D=3D FALSE);
+    ASSERT3P(Granter->Cache, =3D=3D, NULL);
=20
     AdapterGetGnttabInterface(Adapter, &Granter->GnttabInterface);
-    AdapterGetDebugInterface(Adapter, &Granter->DebugInterface);
=20
     status =3D XENBUS_GNTTAB(Acquire, &Granter->GnttabInterface);
     if (!NT_SUCCESS(status))
         goto fail1;
=20
-    status =3D XENBUS_DEBUG(Acquire, &Granter->DebugInterface);
-    if (!NT_SUCCESS(status))
-        goto fail2;
-
     status =3D RtlStringCbPrintfA(Name,
                                 sizeof (Name),
                                 "disk_%u",
                                 FrontendGetTargetId(Granter->Frontend));
     if (!NT_SUCCESS(status))
-        goto fail3;
+        goto fail2;
=20
     status =3D XENBUS_GNTTAB(CreateCache,
                            &Granter->GnttabInterface,
@@ -205,7 +215,64 @@ GranterConnect(
                            Granter,
                            &Granter->Cache);
     if (!NT_SUCCESS(status))
-        goto fail4;
+        goto fail3;
+
+    return STATUS_SUCCESS;
+
+fail3:
+    Error("fail3\n");
+
+fail2:
+    Error("fail2\n");
+
+    XENBUS_GNTTAB(Release, &Granter->GnttabInterface);
+
+fail1:
+    Error("fail1 %08x\n", status);
+
+    RtlZeroMemory(&Granter->GnttabInterface, sizeof(XENBUS_GNTTAB_INTERFA=
CE));
+
+    return status;
+}
+
+static VOID
+__GranterDestroyCache(
+    _Inout_ PXENVBD_GRANTER Granter
+    )
+{
+    ASSERT3S(Granter->Current, =3D=3D, 0);
+
+    XENBUS_GNTTAB(DestroyCache,
+                  &Granter->GnttabInterface,
+                  Granter->Cache);
+    Granter->Cache =3D NULL;
+
+    XENBUS_GNTTAB(Release, &Granter->GnttabInterface);
+
+    RtlZeroMemory(&Granter->GnttabInterface, sizeof(XENBUS_GNTTAB_INTERFA=
CE));
+}
+
+NTSTATUS
+GranterConnect(
+    _Inout_ PXENVBD_GRANTER Granter
+    )
+{
+    PXENVBD_ADAPTER         Adapter =3D TargetGetAdapter(FrontendGetTarge=
t(Granter->Frontend));
+    NTSTATUS                status;
+
+    ASSERT(Granter->Connected =3D=3D FALSE);
+
+    if (Granter->Cache =3D=3D NULL) {
+        status =3D __GranterCreateCache(Granter);
+        if (!NT_SUCCESS(status))
+            goto fail1;
+    }
+
+    AdapterGetDebugInterface(Adapter, &Granter->DebugInterface);
+
+    status =3D XENBUS_DEBUG(Acquire, &Granter->DebugInterface);
+    if (!NT_SUCCESS(status))
+        goto fail2;
=20
     status =3D XENBUS_DEBUG(Register,
                           &Granter->DebugInterface,
@@ -214,30 +281,26 @@ GranterConnect(
                           Granter,
                           &Granter->DebugCallback);
     if (!NT_SUCCESS(status))
-        goto fail5;
+        goto fail3;
=20
     Granter->Connected =3D TRUE;
     return STATUS_SUCCESS;
=20
-fail5:
-    Error("fail5\n");
-    XENBUS_GNTTAB(DestroyCache,
-                  &Granter->GnttabInterface,
-                  Granter->Cache);
-    Granter->Cache =3D NULL;
-fail4:
-    Error("fail4\n");
 fail3:
     Error("fail3\n");
+
     XENBUS_DEBUG(Release, &Granter->DebugInterface);
+
 fail2:
     Error("fail2\n");
-    XENBUS_GNTTAB(Release, &Granter->GnttabInterface);
-fail1:
-    Error("fail1 %08x\n", status);
=20
     RtlZeroMemory(&Granter->DebugInterface, sizeof(XENBUS_DEBUG_INTERFACE=
));
-    RtlZeroMemory(&Granter->GnttabInterface, sizeof(XENBUS_GNTTAB_INTERFA=
CE));
+
+    if (Granter->Current =3D=3D 0)
+        __GranterDestroyCache(Granter);
+
+fail1:
+    Error("fail1 %08x\n", status);
=20
     return status;
 }
@@ -281,7 +344,6 @@ GranterDisconnect(
 {
     ASSERT(Granter->Connected =3D=3D TRUE);
=20
-    ASSERT3S(Granter->Current, =3D=3D, 0);
     Granter->Maximum =3D 0;
=20
     XENBUS_DEBUG(Deregister,
@@ -289,18 +351,20 @@ GranterDisconnect(
                  Granter->DebugCallback);
     Granter->DebugCallback =3D NULL;
=20
-    XENBUS_GNTTAB(DestroyCache,
-                  &Granter->GnttabInterface,
-                  Granter->Cache);
-    Granter->Cache =3D NULL;
-
     XENBUS_DEBUG(Release, &Granter->DebugInterface);
-    XENBUS_GNTTAB(Release, &Granter->GnttabInterface);
=20
     RtlZeroMemory(&Granter->DebugInterface, sizeof(XENBUS_DEBUG_INTERFACE=
));
-    RtlZeroMemory(&Granter->GnttabInterface, sizeof(XENBUS_GNTTAB_INTERFA=
CE));
=20
     Granter->Connected =3D FALSE;
+
+    if (Granter->Current !=3D 0) {
+        Warning("Target[%u] : %ld grants outstanding\n",
+                FrontendGetTargetId(Granter->Frontend),
+                Granter->Current);
+        return;
+    }
+
+    __GranterDestroyCache(Granter);
 }
=20
 NTSTATUS
@@ -382,9 +446,6 @@ GranterPut(
 {
     NTSTATUS                status;
=20
-    if (Granter->Connected =3D=3D FALSE)
-        return;
-
     for (;;) {
         status =3D GranterTryPut(Granter, Handle);
         if (NT_SUCCESS(status))
--=20
2=2E56=2E0=2Ewindows=2E3



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.19c.ceb5d549b2234280.1a16953d51b.b74f08fec8c5e077=---


From win-pv-devel-bounces@lists.xenproject.org Fri Oct 23 15:14:30 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 23 Oct 2026 15:14:30 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1459421.1671350 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xKGyU-00026p-1L; Fri, 23 Oct 2026 15:14:30 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1459421.1671350; Fri, 23 Oct 2026 15:14:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xKGyT-000267-Io; Fri, 23 Oct 2026 15:14:29 +0000
Received: by outflank-mailman (input) for mailman id 1459421;
 Fri, 23 Oct 2026 15:14:28 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16953d4b6000f79f@swg.vates.tech>)
 id 1xKGyS-00023G-8a
 for win-pv-devel@lists.xenproject.org; Fri, 23 Oct 2026 15:14:28 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xKGyR-006XAY-Lm
 for win-pv-devel@lists.xenproject.org; Fri, 23 Oct 2026 17:14:27 +0200
Received: from [10.42.69.8] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16953d4b6000f79f@swg.vates.tech>)
 id 6adb79b4-2eae-0a2a0a5409dd-0a2a45089804-32
 for <win-pv-devel@lists.xenproject.org>; Fri, 23 Oct 2026 17:14:27 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-c1860d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16953d4b6000f79f@swg.vates.tech>)
 id 6adb79d3-f659-0a2a45080019-b9ff1c23a51b-3
 for <win-pv-devel@lists.xenproject.org>; Fri, 23 Oct 2026 17:14:27 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a16953d4b6000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Fri, 23 Oct 2026 15:14:24 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 7942982C5C;
 Fri, 23 Oct 2026 17:14:23 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=MVNq+i3P2mS+HrA7LFFgp/VzgPd+RHztuN4MH5p8eSU=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=r1H/gGWlVu0Vzo/BdpaFZiTeNONJN99tAkciAaShKQGGlvbtS+WTw/WCSiv4ArRnbp9mB3hY+
 8VZa+4OptHiQpKt9RwaO9aBFs22K5kYnqid09+jKt9c5a6GarUOTwPIp363dkEty0rTlOWXfxHU
 tQG+B0vVKLqJHWv7eDYMLiPhOvhvlowuy8KB4Gi9ltvFh4Na+SwKMzp+yBb5gsjhB5RgiX9FGXo
 Oojiz5UMRB7jE+8smJCJusgPceEMr2gC5TDCzA+473JlHVSN9OIbPVt+vvaCzgkrmHwQEzAuLwl
 tQnq4euy6SKHyf9owERLGnSoMs0AdSC6QGg1ly6qgqgw==
X-Zone-Loop: 35ed7148503eec9ecd1d54b776abc7ec5973a1fa4aa8
x-campaign-type: default
x-transaction-id: bd2c2789-0677-4241-898e-17e0ca90de40
x-swg-uid: 01-fbf40c72-baf8-46a8-9fc4-af58605b24d9
X-Mailer: Sweego
Message-ID:
 <1792768464.8631fc262581453bbf619ec5b2062170.1a16953d4b6000f79f@vates.tech>
x-swg-bid: 1792768464.8631fc262581453bbf619ec5b2062170.1a16953d4b6000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [RFC PATCH 2/9] Use GNTTAB_INTERFACE_V5
Date: Fri, 23 Oct 2026 17:14:10 +0200
In-Reply-To: <20261023151419.1317-1-ngoc-tu.dinh@vates.tech>
References: <1792768355.8631fc262581453bbf619ec5b2062170.1a169522dd1000f79f@vates.tech>
 <20261023151419.1317-1-ngoc-tu.dinh@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.199.46a87ebe7423a063.1a16953d2c1.f6325cd41805625d=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792768463553
X-purgate-ID: tlsNG-c1860d/1792768467-CD74B87B-A4B6A97C/0/0
X-purgate-type: clean
X-purgate-size: 9266

---=Part.199.46a87ebe7423a063.1a16953d2c1.f6325cd41805625d=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

GNTTAB v5 fails straight away if the backend is still using the grant=2E
Spin in GranterPut until the backend lets go; otherwise, the caller
could reuse the page while the backend is still accessing it=2E

Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 include/gnttab_interface=2Eh | 90 ++++++++++++++++++++++++++++----------
 src/xenvbd=2Einf             |  6 +--
 src/xenvbd/granter=2Ec       | 17 ++++---
 3 files changed, 81 insertions(+), 32 deletions(-)

diff --git a/include/gnttab_interface=2Eh b/include/gnttab_interface=2Eh
index 92a95a7=2E=2E3ca4407 100644
--- a/include/gnttab_interface=2Eh
+++ b/include/gnttab_interface=2Eh
@@ -132,6 +132,26 @@ typedef NTSTATUS
     _Outptr_ PXENBUS_GNTTAB_ENTRY   *Entry
     );
=20
+/*! \typedef XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS_V2
+    \brief Revoke foreign access and return the \a Entry to the \a Cache
+
+    \param Interface The interface header
+    \param Cache The grant table cache handle
+    \param Locked If mutually exclusive access to the cache is already
+    guaranteed then set this to TRUE
+    \param Entry The grant table entry handle
+
+    If the foreign domain is still accessing the granted page, this retri=
es
+    for a while before giving up=2E
+*/
+typedef NTSTATUS
+(*XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS_V2)(
+    _In_ PINTERFACE                 Interface,
+    _In_ PXENBUS_GNTTAB_CACHE       Cache,
+    _In_ BOOLEAN                    Locked,
+    _In_ PXENBUS_GNTTAB_ENTRY       Entry
+    );
+
 /*! \typedef XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS
     \brief Revoke foreign access and return the \a Entry to the \a Cache
=20
@@ -140,6 +160,12 @@ typedef NTSTATUS
     \param Locked If mutually exclusive access to the cache is already
     guaranteed then set this to TRUE
     \param Entry The grant table entry handle
+    \return STATUS_DEVICE_BUSY if the foreign domain is still accessing t=
he
+    granted page
+
+    This does not wait for the foreign domain=2E On failure, foreign acce=
ss
+    remains in effect and \a Entry remains valid: the caller must keep th=
e
+    granted page alive, and should retry the revocation later=2E
 */
 typedef NTSTATUS
 (*XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS)(
@@ -239,16 +265,16 @@ DEFINE_GUID(GUID_XENBUS_GNTTAB_INTERFACE,
     \ingroup interfaces
 */
 struct _XENBUS_GNTTAB_INTERFACE_V2 {
-    INTERFACE                           Interface;
-    XENBUS_GNTTAB_ACQUIRE               GnttabAcquire;
-    XENBUS_GNTTAB_RELEASE               GnttabRelease;
-    XENBUS_GNTTAB_CREATE_CACHE_V1       GnttabCreateCacheVersion1;
-    XENBUS_GNTTAB_PERMIT_FOREIGN_ACCESS GnttabPermitForeignAccess;
-    XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS GnttabRevokeForeignAccess;
-    XENBUS_GNTTAB_GET_REFERENCE         GnttabGetReference;
-    XENBUS_GNTTAB_DESTROY_CACHE         GnttabDestroyCache;
-    XENBUS_GNTTAB_MAP_FOREIGN_PAGES     GnttabMapForeignPages;
-    XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES   GnttabUnmapForeignPages;
+    INTERFACE                               Interface;
+    XENBUS_GNTTAB_ACQUIRE                   GnttabAcquire;
+    XENBUS_GNTTAB_RELEASE                   GnttabRelease;
+    XENBUS_GNTTAB_CREATE_CACHE_V1           GnttabCreateCacheVersion1;
+    XENBUS_GNTTAB_PERMIT_FOREIGN_ACCESS     GnttabPermitForeignAccess;
+    XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS_V2  GnttabRevokeForeignAccessVers=
ion2;
+    XENBUS_GNTTAB_GET_REFERENCE             GnttabGetReference;
+    XENBUS_GNTTAB_DESTROY_CACHE             GnttabDestroyCache;
+    XENBUS_GNTTAB_MAP_FOREIGN_PAGES         GnttabMapForeignPages;
+    XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES       GnttabUnmapForeignPages;
 };
=20
 /*! \struct _XENBUS_GNTTAB_INTERFACE_V3
@@ -256,17 +282,17 @@ struct _XENBUS_GNTTAB_INTERFACE_V2 {
     \ingroup interfaces
 */
 struct _XENBUS_GNTTAB_INTERFACE_V3 {
-    INTERFACE                           Interface;
-    XENBUS_GNTTAB_ACQUIRE               GnttabAcquire;
-    XENBUS_GNTTAB_RELEASE               GnttabRelease;
-    XENBUS_GNTTAB_CREATE_CACHE_V1       GnttabCreateCacheVersion1;
-    XENBUS_GNTTAB_PERMIT_FOREIGN_ACCESS GnttabPermitForeignAccess;
-    XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS GnttabRevokeForeignAccess;
-    XENBUS_GNTTAB_GET_REFERENCE         GnttabGetReference;
-    XENBUS_GNTTAB_QUERY_REFERENCE       GnttabQueryReference;
-    XENBUS_GNTTAB_DESTROY_CACHE         GnttabDestroyCache;
-    XENBUS_GNTTAB_MAP_FOREIGN_PAGES     GnttabMapForeignPages;
-    XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES   GnttabUnmapForeignPages;
+    INTERFACE                               Interface;
+    XENBUS_GNTTAB_ACQUIRE                   GnttabAcquire;
+    XENBUS_GNTTAB_RELEASE                   GnttabRelease;
+    XENBUS_GNTTAB_CREATE_CACHE_V1           GnttabCreateCacheVersion1;
+    XENBUS_GNTTAB_PERMIT_FOREIGN_ACCESS     GnttabPermitForeignAccess;
+    XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS_V2  GnttabRevokeForeignAccessVers=
ion2;
+    XENBUS_GNTTAB_GET_REFERENCE             GnttabGetReference;
+    XENBUS_GNTTAB_QUERY_REFERENCE           GnttabQueryReference;
+    XENBUS_GNTTAB_DESTROY_CACHE             GnttabDestroyCache;
+    XENBUS_GNTTAB_MAP_FOREIGN_PAGES         GnttabMapForeignPages;
+    XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES       GnttabUnmapForeignPages;
 };
=20
 /*! \struct _XENBUS_GNTTAB_INTERFACE_V4
@@ -274,6 +300,24 @@ struct _XENBUS_GNTTAB_INTERFACE_V3 {
     \ingroup interfaces
 */
 struct _XENBUS_GNTTAB_INTERFACE_V4 {
+    INTERFACE                               Interface;
+    XENBUS_GNTTAB_ACQUIRE                   GnttabAcquire;
+    XENBUS_GNTTAB_RELEASE                   GnttabRelease;
+    XENBUS_GNTTAB_CREATE_CACHE              GnttabCreateCache;
+    XENBUS_GNTTAB_PERMIT_FOREIGN_ACCESS     GnttabPermitForeignAccess;
+    XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS_V2  GnttabRevokeForeignAccessVers=
ion2;
+    XENBUS_GNTTAB_GET_REFERENCE             GnttabGetReference;
+    XENBUS_GNTTAB_QUERY_REFERENCE           GnttabQueryReference;
+    XENBUS_GNTTAB_DESTROY_CACHE             GnttabDestroyCache;
+    XENBUS_GNTTAB_MAP_FOREIGN_PAGES         GnttabMapForeignPages;
+    XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES       GnttabUnmapForeignPages;
+};
+
+/*! \struct _XENBUS_GNTTAB_INTERFACE_V5
+    \brief GNTTAB interface version 5
+    \ingroup interfaces
+*/
+struct _XENBUS_GNTTAB_INTERFACE_V5 {
     INTERFACE                           Interface;
     XENBUS_GNTTAB_ACQUIRE               GnttabAcquire;
     XENBUS_GNTTAB_RELEASE               GnttabRelease;
@@ -287,7 +331,7 @@ struct _XENBUS_GNTTAB_INTERFACE_V4 {
     XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES   GnttabUnmapForeignPages;
 };
=20
-typedef struct _XENBUS_GNTTAB_INTERFACE_V4 XENBUS_GNTTAB_INTERFACE, *PXEN=
BUS_GNTTAB_INTERFACE;
+typedef struct _XENBUS_GNTTAB_INTERFACE_V5 XENBUS_GNTTAB_INTERFACE, *PXEN=
BUS_GNTTAB_INTERFACE;
=20
 /*! \def XENBUS_GNTTAB
     \brief Macro at assist in method invocation
@@ -298,6 +342,6 @@ typedef struct _XENBUS_GNTTAB_INTERFACE_V4 XENBUS_GNTT=
AB_INTERFACE, *PXENBUS_GNT
 #endif  // _WINDLL
=20
 #define XENBUS_GNTTAB_INTERFACE_VERSION_MIN 2
-#define XENBUS_GNTTAB_INTERFACE_VERSION_MAX 4
+#define XENBUS_GNTTAB_INTERFACE_VERSION_MAX 5
=20
 #endif  // _XENBUS_GNTTAB_INTERFACE_H
diff --git a/src/xenvbd=2Einf b/src/xenvbd=2Einf
index 28405f6=2E=2E055ffdc 100644
--- a/src/xenvbd=2Einf
+++ b/src/xenvbd=2Einf
@@ -54,9 +54,9 @@ xencrsh=2Esys=3D0,,
=20
 [Inst=2ENT@INF_ARCH@]
 %XenVbdName%=3DXenVbd_Inst,\
-XENBUS\VEN_@VENDOR_PREFIX@@VENDOR_DEVICE_ID@&DEV_VBD&REV_0900000C,\
-XENBUS\VEN_@VENDOR_PREFIX@0001&DEV_VBD&REV_0900000C,\
-XENBUS\VEN_@VENDOR_PREFIX@0002&DEV_VBD&REV_0900000C
+XENBUS\VEN_@VENDOR_PREFIX@@VENDOR_DEVICE_ID@&DEV_VBD&REV_0900000D,\
+XENBUS\VEN_@VENDOR_PREFIX@0001&DEV_VBD&REV_0900000D,\
+XENBUS\VEN_@VENDOR_PREFIX@0002&DEV_VBD&REV_0900000D
=20
 [XenVbd_Inst]=20
 CopyFiles=3DXenVbd_Copyfiles
diff --git a/src/xenvbd/granter=2Ec b/src/xenvbd/granter=2Ec
index eddcdcf=2E=2E0673891 100644
--- a/src/xenvbd/granter=2Ec
+++ b/src/xenvbd/granter=2Ec
@@ -358,12 +358,17 @@ GranterPut(
     if (Granter->Connected =3D=3D FALSE)
         return;
=20
-    status =3D XENBUS_GNTTAB(RevokeForeignAccess,
-                           &Granter->GnttabInterface,
-                           Granter->Cache,
-                           FALSE,
-                           Entry);
-    ASSERT(NT_SUCCESS(status));
+    for (;;) {
+        status =3D XENBUS_GNTTAB(RevokeForeignAccess,
+                               &Granter->GnttabInterface,
+                               Granter->Cache,
+                               FALSE,
+                               Entry);
+        if (NT_SUCCESS(status))
+            break;
+
+        YieldProcessor();
+    }
=20
     InterlockedDecrement(&Granter->Current);
 }
--=20
2=2E56=2E0=2Ewindows=2E3



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.199.46a87ebe7423a063.1a16953d2c1.f6325cd41805625d=---


From win-pv-devel-bounces@lists.xenproject.org Fri Oct 23 15:14:30 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 23 Oct 2026 15:14:30 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1459425.1671359 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xKGyU-00029Q-Db; Fri, 23 Oct 2026 15:14:30 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1459425.1671359; Fri, 23 Oct 2026 15:14:30 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xKGyT-00028g-Sk; Fri, 23 Oct 2026 15:14:29 +0000
Received: by outflank-mailman (input) for mailman id 1459425;
 Fri, 23 Oct 2026 15:14:28 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16953d9f2000f79f@swg.vates.tech>)
 id 1xKGyS-00023P-GX
 for win-pv-devel@lists.xenproject.org; Fri, 23 Oct 2026 15:14:28 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xKGyR-006XAY-TP
 for win-pv-devel@lists.xenproject.org; Fri, 23 Oct 2026 17:14:27 +0200
Received: from [10.42.69.8] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16953d9f2000f79f@swg.vates.tech>)
 id 6adb79b4-2eae-0a2a0a5409dd-0a2a45089804-36
 for <win-pv-devel@lists.xenproject.org>; Fri, 23 Oct 2026 17:14:27 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-c1860d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16953d9f2000f79f@swg.vates.tech>)
 id 6adb79d3-f659-0a2a45080019-b9ff1c23a51b-4
 for <win-pv-devel@lists.xenproject.org>; Fri, 23 Oct 2026 17:14:27 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a16953d9f2000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Fri, 23 Oct 2026 15:14:25 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id DE41B82CA0;
 Fri, 23 Oct 2026 17:14:24 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=Yu6DEl29dIDejvmLdnmvb4WY1dNw85F/03d4cS8Cs9s=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=L+mg8loabqmpagCk+QVkf4eet4oWB6ltqCcna258abTINbIFOQ+mCeiratZbxOzlQpktgl5HI
 Q1YjEp3/p1doJVdPXOpoQEhySWS2JldEgETvUHZR9uee0uu9k1ZF0kvbFkwcj5DrGXfL3X1+Gtb
 YzU/q2IRonAPF2CXdJNA10Js6+zM6dcrMH5Wp/fIaZPDRR1NmyxfXJNWCaELcGLAcw/LtFHGnM4
 5W90rwB6PpY6Oh2Y+wDPHEuEHWnpBXrFITo/FJtmRUt5ZRbFYhRK53NVxcOX3DxdRwL1URStQgb
 GIQB/QcHNH5N3c/f6b6gmIjoZToxyyJwTTX4xLeQtM/Q==
X-Zone-Loop: b62d099d97113c7d74a357f210692639bffb8666c347
x-campaign-type: default
x-transaction-id: 9eb748cb-a13f-40f0-8fa2-b7109c254b25
x-swg-uid: 01-3c3bd9e4-777a-441b-a7b5-8532ee02e922
X-Mailer: Sweego
Message-ID:
 <1792768465.8631fc262581453bbf619ec5b2062170.1a16953d9f2000f79f@vates.tech>
x-swg-bid: 1792768465.8631fc262581453bbf619ec5b2062170.1a16953d9f2000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [RFC PATCH 9/9] ring: Defer request completion until backend grant release
Date: Fri, 23 Oct 2026 17:14:17 +0200
In-Reply-To: <20261023151419.1317-1-ngoc-tu.dinh@vates.tech>
References: <1792768355.8631fc262581453bbf619ec5b2062170.1a169522dd1000f79f@vates.tech>
 <20261023151419.1317-1-ngoc-tu.dinh@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.1a0.b973d4a1b403dbbd.1a16953d858.ffa2ceca5ce0f61b=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792768464984
X-purgate-ID: tlsNG-c1860d/1792768467-CF15E87B-982F6066/0/0
X-purgate-type: clean
X-purgate-size: 25237

---=Part.1a0.b973d4a1b403dbbd.1a16953d858.ffa2ceca5ce0f61b=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

If the backend is still accessing the request grants, we must defer
completion until the backend has fully released them=2E

Check for request grant revocation results=2E If it fails, queue the
request onto the reclaim thread=2E

Request lifecycle changes are documented in BlkifRingGetRequest=2E
GranterPut is removed since there are no more users=2E

Assisted-by: LLM
Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 src/xenvbd/granter=2Ec |  17 ---
 src/xenvbd/granter=2Eh |   6 -
 src/xenvbd/ring=2Ec    | 348 ++++++++++++++++++++++++++++++-------------
 3 files changed, 248 insertions(+), 123 deletions(-)

diff --git a/src/xenvbd/granter=2Ec b/src/xenvbd/granter=2Ec
index 4041fe3=2E=2E074c91a 100644
--- a/src/xenvbd/granter=2Ec
+++ b/src/xenvbd/granter=2Ec
@@ -461,23 +461,6 @@ fail1:
     return status;
 }
=20
-VOID
-GranterPut(
-    _Inout_ PXENVBD_GRANTER Granter,
-    _In_ PVOID              Handle
-    )
-{
-    NTSTATUS                status;
-
-    for (;;) {
-        status =3D GranterTryPut(Granter, Handle);
-        if (NT_SUCCESS(status))
-            break;
-
-        YieldProcessor();
-    }
-}
-
 ULONG
 GranterReference(
     _In_ PXENVBD_GRANTER    Granter,
diff --git a/src/xenvbd/granter=2Eh b/src/xenvbd/granter=2Eh
index 93b962c=2E=2E873f028 100644
--- a/src/xenvbd/granter=2Eh
+++ b/src/xenvbd/granter=2Eh
@@ -103,12 +103,6 @@ GranterTryPut(
     _In_ PVOID              Handle
     );
=20
-extern VOID
-GranterPut(
-    _Inout_ PXENVBD_GRANTER Granter,
-    _In_ PVOID              Handle
-    );
-
 extern ULONG
 GranterReference(
     _In_ PXENVBD_GRANTER    Granter,
diff --git a/src/xenvbd/ring=2Ec b/src/xenvbd/ring=2Ec
index b0dd283=2E=2Eb4351b0 100644
--- a/src/xenvbd/ring=2Ec
+++ b/src/xenvbd/ring=2Ec
@@ -91,8 +91,12 @@ typedef struct _XENVBD_BLKIF_RING {
     LIST_ENTRY                      PreparedQueue;
     LIST_ENTRY                      SubmittedList;
     LIST_ENTRY                      ShutdownQueue;
+    // List of XENVBD_REQUEST still being held by the backend
+    LIST_ENTRY                      DeferredList;
     // List of XENVBD_BLKIF_PAGES still being held by the backend
     LIST_ENTRY                      DeferredPages;
+    ULONG                           RequestsDeferred;
+    ULONG                           RequestsReclaimed;
     ULONG                           SrbsQueued;
     ULONG                           SrbsCompleted;
     ULONG                           SrbsFailed;
@@ -287,12 +291,8 @@ BlkifRingPutIndirect(
     )
 {
     PXENVBD_RING                Ring =3D BlkifRing->Ring;
-    PXENVBD_FRONTEND            Frontend =3D Ring->Frontend;
-    PXENVBD_GRANTER             Granter =3D FrontendGetGranter(Frontend);
=20
-    if (Indirect->Grant)
-        GranterPut(Granter, Indirect->Grant);
-    Indirect->Grant =3D NULL;
+    ASSERT3P(Indirect->Grant, =3D=3D, NULL);
=20
     RtlZeroMemory(&Indirect->ListEntry, sizeof(LIST_ENTRY));
=20
@@ -324,12 +324,9 @@ BlkifRingPutSegment(
 {
     PXENVBD_RING            Ring =3D BlkifRing->Ring;
     PXENVBD_FRONTEND        Frontend =3D Ring->Frontend;
-    PXENVBD_GRANTER         Granter =3D FrontendGetGranter(Frontend);
     PXENVBD_BOUNCE          Bounce =3D Segment->Bounce;
=20
-    if (Segment->Grant)
-        GranterPut(Granter, Segment->Grant);
-    Segment->Grant =3D NULL;
+    ASSERT3P(Segment->Grant, =3D=3D, NULL);
=20
     if (Bounce) {
         if (Bounce->SourcePtr) {
@@ -357,6 +354,20 @@ BlkifRingPutSegment(
                  TRUE);
 }
=20
+/*
+ * Request lifecycle:
+ * - Prepare: BlkifRingPrepare*() attach segments, bounce buffers, indire=
ct
+ *   pages and grants, and take a SrbExt->RequestCount reference for each
+ *   request=2E The SRB completes when the last reference is dropped=2E
+ * - Done (response received or faked by BlkifRingDisable(), or preparati=
on
+ *   failed): BlkifRingTryPutRequest(), then BlkifRingDeferRequest() if t=
hat
+ *   fails=2E
+ * - If deferred: ReclaimThread retries BlkifRingTryPutRequest() until it
+ *   succeeds=2E
+ * - BlkifRingTryPutRequest() revokes all grants first, then puts everyth=
ing
+ *   back into the caches and drops the SRB reference (__BlkifRingPutSrb(=
))=2E
+ *   Revocation can fail and be retried=2E
+ */
 static PXENVBD_REQUEST
 BlkifRingGetRequest(
     _In_ PXENVBD_BLKIF_RING BlkifRing
@@ -371,47 +382,17 @@ BlkifRingGetRequest(
 }
=20
 static VOID
-BlkifRingPutRequest(
-    _In_ PXENVBD_BLKIF_RING BlkifRing,
-    _Inout_ PXENVBD_REQUEST Request
+BlkifRingDeferRequest(
+    _Inout_ PXENVBD_BLKIF_RING  BlkifRing,
+    _Inout_ PXENVBD_REQUEST     Request
     )
 {
-    PXENVBD_RING            Ring =3D BlkifRing->Ring;
-    PLIST_ENTRY             ListEntry;
-
-    for (;;) {
-        PXENVBD_SEGMENT Segment;
-
-        ListEntry =3D RemoveHeadList(&Request->Segments);
-        if (ListEntry =3D=3D &Request->Segments)
-            break;
-        Segment =3D CONTAINING_RECORD(ListEntry, XENVBD_SEGMENT, ListEntr=
y);
-        BlkifRingPutSegment(BlkifRing, Segment);
-    }
-
-    for (;;) {
-        PXENVBD_INDIRECT    Indirect;
-
-        ListEntry =3D RemoveHeadList(&Request->Indirects);
-        if (ListEntry =3D=3D &Request->Indirects)
-            break;
-        Indirect =3D CONTAINING_RECORD(ListEntry, XENVBD_INDIRECT, ListEn=
try);
-        BlkifRingPutIndirect(BlkifRing, Indirect);
-    }
+    PXENVBD_RING                Ring =3D BlkifRing->Ring;
=20
-    Request->SrbExt =3D NULL;
-    Request->Operation =3D 0;
-    Request->Flags =3D 0;
-    Request->NrSegments =3D 0;
-    Request->FirstSector =3D 0;
-    Request->NrSectors =3D 0;
-    RtlZeroMemory(&Request->ListEntry, sizeof(LIST_ENTRY));
+    InsertTailList(&BlkifRing->DeferredList, &Request->ListEntry);
+    BlkifRing->RequestsDeferred++;
=20
-    XENBUS_CACHE(Put,
-                 &Ring->CacheInterface,
-                 BlkifRing->RequestCache,
-                 Request,
-                 TRUE);
+    ThreadWake(Ring->ReclaimThread);
 }
=20
 static DECLSPEC_NOINLINE NTSTATUS
@@ -551,6 +532,13 @@ BlkifRingDebugCallback(
                  BlkifRing->SrbsCompleted,
                  BlkifRing->SrbsFailed);
=20
+    XENBUS_DEBUG(Printf,
+                 &Ring->DebugInterface,
+                 "RequestsDeferred =3D %u RequestsReclaimed =3D %u%s\n",
+                 BlkifRing->RequestsDeferred,
+                 BlkifRing->RequestsReclaimed,
+                 IsListEmpty(&BlkifRing->DeferredPages) ? "" : " (ring pa=
ges deferred)");
+
     XENBUS_DEBUG(Printf,
                  &Ring->DebugInterface,
                  "Dpcs =3D %u, Events =3D %u\n",
@@ -585,6 +573,97 @@ __BlkifRingCompleteSrb(
     AdapterCompleteSrb(Adapter, SrbExt);
 }
=20
+static FORCEINLINE VOID
+__BlkifRingPutSrb(
+    _Inout_ PXENVBD_BLKIF_RING  BlkifRing,
+    _In_ PXENVBD_SRBEXT         SrbExt
+    )
+{
+    ASSERT3S(SrbExt->RequestCount, >, 0);
+
+    if (--SrbExt->RequestCount =3D=3D 0)
+        __BlkifRingCompleteSrb(BlkifRing, SrbExt);
+}
+
+_Check_return_
+static BOOLEAN
+BlkifRingTryPutRequest(
+    _Inout_ PXENVBD_BLKIF_RING  BlkifRing,
+    _Inout_ PXENVBD_REQUEST     Request
+    )
+{
+    PXENVBD_RING                Ring =3D BlkifRing->Ring;
+    PXENVBD_GRANTER             Granter =3D FrontendGetGranter(Ring->Fron=
tend);
+    PXENVBD_SRBEXT              SrbExt =3D Request->SrbExt;
+    PLIST_ENTRY                 ListEntry;
+
+    for (ListEntry =3D Request->Segments=2EFlink;
+         ListEntry !=3D &Request->Segments;
+         ListEntry =3D ListEntry->Flink) {
+        PXENVBD_SEGMENT Segment =3D CONTAINING_RECORD(ListEntry, XENVBD_S=
EGMENT, ListEntry);
+
+        if (Segment->Grant =3D=3D NULL)
+            continue;
+
+        if (!NT_SUCCESS(GranterTryPut(Granter, Segment->Grant)))
+            return FALSE;
+
+        Segment->Grant =3D NULL;
+    }
+
+    for (ListEntry =3D Request->Indirects=2EFlink;
+         ListEntry !=3D &Request->Indirects;
+         ListEntry =3D ListEntry->Flink) {
+        PXENVBD_INDIRECT    Indirect =3D CONTAINING_RECORD(ListEntry, XEN=
VBD_INDIRECT, ListEntry);
+
+        if (Indirect->Grant =3D=3D NULL)
+            continue;
+
+        if (!NT_SUCCESS(GranterTryPut(Granter, Indirect->Grant)))
+            return FALSE;
+
+        Indirect->Grant =3D NULL;
+    }
+
+    for (;;) {
+        PXENVBD_SEGMENT Segment;
+
+        ListEntry =3D RemoveHeadList(&Request->Segments);
+        if (ListEntry =3D=3D &Request->Segments)
+            break;
+        Segment =3D CONTAINING_RECORD(ListEntry, XENVBD_SEGMENT, ListEntr=
y);
+        BlkifRingPutSegment(BlkifRing, Segment);
+    }
+
+    for (;;) {
+        PXENVBD_INDIRECT    Indirect;
+
+        ListEntry =3D RemoveHeadList(&Request->Indirects);
+        if (ListEntry =3D=3D &Request->Indirects)
+            break;
+        Indirect =3D CONTAINING_RECORD(ListEntry, XENVBD_INDIRECT, ListEn=
try);
+        BlkifRingPutIndirect(BlkifRing, Indirect);
+    }
+
+    Request->SrbExt =3D NULL;
+    Request->Operation =3D 0;
+    Request->Flags =3D 0;
+    Request->NrSegments =3D 0;
+    Request->FirstSector =3D 0;
+    Request->NrSectors =3D 0;
+    RtlZeroMemory(&Request->ListEntry, sizeof(LIST_ENTRY));
+
+    XENBUS_CACHE(Put,
+                 &Ring->CacheInterface,
+                 BlkifRing->RequestCache,
+                 Request,
+                 TRUE);
+
+    __BlkifRingPutSrb(BlkifRing, SrbExt);
+
+    return TRUE;
+}
+
 static FORCEINLINE VOID
 BlkifRingUnprepareRequest(
     _In_ PXENVBD_BLKIF_RING BlkifRing,
@@ -603,7 +682,8 @@ BlkifRingUnprepareRequest(
                                     XENVBD_REQUEST,
                                     ListEntry);
=20
-        BlkifRingPutRequest(BlkifRing, Request);
+        if (!BlkifRingTryPutRequest(BlkifRing, Request))
+            BlkifRingDeferRequest(BlkifRing, Request);
     }
 }
=20
@@ -770,8 +850,6 @@ BlkifRingPrepareReadWrite(
=20
     Srb->SrbStatus =3D SRB_STATUS_PENDING;
=20
-    SrbExt->RequestCount =3D 0;
-
     while (SectorsLeft > 0) {
         ULONG           Index;
         ULONG           MaxSegments;
@@ -845,7 +923,6 @@ fail3:
 fail2:
 fail1:
     BlkifRingUnprepareRequest(BlkifRing, &List);
-    SrbExt->RequestCount =3D 0;
     Srb->SrbStatus =3D SRB_STATUS_ERROR;
     return STATUS_UNSUCCESSFUL;
 }
@@ -870,8 +947,6 @@ BlkifRingPrepareUnmap(
     Count =3D _byteswap_ushort(*(PUSHORT)Unmap->BlockDescrDataLength) / s=
izeof(UNMAP_BLOCK_DESCRIPTOR);
     Srb->SrbStatus =3D SRB_STATUS_PENDING;
=20
-    SrbExt->RequestCount =3D 0;
-
     for (Index =3D 0; Index < Count; ++Index) {
         PUNMAP_BLOCK_DESCRIPTOR Descr =3D &Unmap->Descriptors[Index];
         PXENVBD_REQUEST         Request;
@@ -884,13 +959,14 @@ BlkifRingPrepareUnmap(
         InsertTailList(&List, &Request->ListEntry);
         SrbExt->RequestCount++;
=20
+        Request->SrbExt =3D SrbExt;
+
         StartLBA =3D _byteswap_uint64(*(PULONG64)Descr->StartingLba);
         CountLBA =3D _byteswap_ulong(*(PULONG)Descr->LbaCount);
=20
         if (!DiskInfoIsValidExtent(DiskInfo, StartLBA, CountLBA))
             goto fail2;
=20
-        Request->SrbExt =3D SrbExt;
         Request->Operation =3D BLKIF_OP_DISCARD;
         Request->FirstSector =3D StartLBA << DiskInfo->SectorShift;
         Request->NrSectors =3D CountLBA << DiskInfo->SectorShift;
@@ -903,7 +979,6 @@ BlkifRingPrepareUnmap(
 fail2:
 fail1:
     BlkifRingUnprepareRequest(BlkifRing, &List);
-    SrbExt->RequestCount =3D 0;
     Srb->SrbStatus =3D SRB_STATUS_ERROR;
     return STATUS_UNSUCCESSFUL;
 }
@@ -930,8 +1005,6 @@ BlkifRingPrepareSyncCache(
     else
         Operation =3D BLKIF_OP_WRITE_BARRIER;
=20
-    SrbExt->RequestCount =3D 0;
-
     Request =3D BlkifRingGetRequest(BlkifRing);
     if (Request =3D=3D NULL)
         goto fail1;
@@ -947,35 +1020,50 @@ BlkifRingPrepareSyncCache(
=20
 fail1:
     BlkifRingUnprepareRequest(BlkifRing, &List);
-    SrbExt->RequestCount =3D 0;
     Srb->SrbStatus =3D SRB_STATUS_ERROR;
     return STATUS_UNSUCCESSFUL;
 }
=20
-static DECLSPEC_NOINLINE NTSTATUS
+static DECLSPEC_NOINLINE VOID
 __BlkifRingPrepareSrb(
     _Inout_ PXENVBD_BLKIF_RING  BlkifRing,
     _Inout_ PXENVBD_SRBEXT      SrbExt
     )
 {
-    switch (Cdb_OperationEx(SrbExt->Srb)) {
+    PSCSI_REQUEST_BLOCK         Srb =3D SrbExt->Srb;
+    NTSTATUS                    status;
+
+    // Held while the requests are built, so that releasing them on failu=
re
+    // cannot complete the SRB before its status is set
+    SrbExt->RequestCount =3D 1;
+
+    switch (Cdb_OperationEx(Srb)) {
     case SCSIOP_READ:
     case SCSIOP_WRITE:
-        return BlkifRingPrepareReadWrite(BlkifRing,
-                                         SrbExt);
+        status =3D BlkifRingPrepareReadWrite(BlkifRing,
+                                           SrbExt);
+        break;
=20
     case SCSIOP_SYNCHRONIZE_CACHE:
-        return BlkifRingPrepareSyncCache(BlkifRing,
-                                         SrbExt);
+        status =3D BlkifRingPrepareSyncCache(BlkifRing,
+                                           SrbExt);
+        break;
=20
     case SCSIOP_UNMAP:
-        return BlkifRingPrepareUnmap(BlkifRing,
-                                     SrbExt);
+        status =3D BlkifRingPrepareUnmap(BlkifRing,
+                                       SrbExt);
+        break;
=20
     default:
         ASSERT(FALSE);
-        return STATUS_NOT_SUPPORTED;
+        status =3D STATUS_NOT_SUPPORTED;
+        break;
     }
+
+    if (!NT_SUCCESS(status))
+        Srb->SrbStatus =3D SRB_STATUS_BUSY;
+
+    __BlkifRingPutSrb(BlkifRing, SrbExt);
 }
=20
 static FORCEINLINE VOID
@@ -1212,12 +1300,8 @@ __BlkifRingCompleteResponse(
         }
     }
=20
-    BlkifRingPutRequest(BlkifRing, Request);
-
-    // complete srb
-    if (--SrbExt->RequestCount =3D=3D 0) {
-        __BlkifRingCompleteSrb(BlkifRing, SrbExt);
-    }
+    if (!BlkifRingTryPutRequest(BlkifRing, Request))
+        BlkifRingDeferRequest(BlkifRing, Request);
 }
=20
 static FORCEINLINE BOOLEAN
@@ -1467,12 +1551,7 @@ BlkifRingSchedule(
                                    XENVBD_SRBEXT,
                                    ListEntry);
=20
-        status =3D __BlkifRingPrepareSrb(BlkifRing, SrbExt);
-        if (!NT_SUCCESS(status)) {
-            PSCSI_REQUEST_BLOCK Srb =3D SrbExt->Srb;
-            Srb->SrbStatus =3D SRB_STATUS_BUSY;
-            __BlkifRingCompleteSrb(BlkifRing, SrbExt);
-        }
+        __BlkifRingPrepareSrb(BlkifRing, SrbExt);
     }
=20
     __BlkifRingPushRequests(BlkifRing);
@@ -1869,7 +1948,8 @@ __BlkifRingIsDeferring(
     _In_ PXENVBD_BLKIF_RING BlkifRing
     )
 {
-    return !IsListEmpty(&BlkifRing->DeferredPages);
+    return !IsListEmpty(&BlkifRing->DeferredList) ||
+           !IsListEmpty(&BlkifRing->DeferredPages);
 }
=20
 _IRQL_requires_(DISPATCH_LEVEL)
@@ -1882,6 +1962,23 @@ BlkifRingReclaim(
     ASSERT3P(BlkifRing->LockThread, =3D=3D, KeGetCurrentThread());
 #endif
=20
+    while (!IsListEmpty(&BlkifRing->DeferredList)) {
+        PLIST_ENTRY         ListEntry;
+        PXENVBD_REQUEST     Request;
+
+        ListEntry =3D RemoveHeadList(&BlkifRing->DeferredList);
+        Request =3D CONTAINING_RECORD(ListEntry, XENVBD_REQUEST, ListEntr=
y);
+
+        if (!BlkifRingTryPutRequest(BlkifRing, Request)) {
+            // Move this reclaim failure to the back so that entries behi=
nd it
+            // are tried first on the next pass=2E
+            InsertTailList(&BlkifRing->DeferredList, ListEntry);
+            break;
+        }
+
+        BlkifRing->RequestsReclaimed++;
+    }
+
     while (!IsListEmpty(&BlkifRing->DeferredPages)) {
         PLIST_ENTRY         ListEntry;
         PXENVBD_BLKIF_PAGES Pages;
@@ -1890,8 +1987,6 @@ BlkifRingReclaim(
         Pages =3D CONTAINING_RECORD(ListEntry, XENVBD_BLKIF_PAGES, ListEn=
try);
=20
         if (!__BlkifRingRevokePages(BlkifRing, Pages)) {
-            // Move this reclaim failure to the back so that entries behi=
nd it
-            // are tried first on the next pass=2E
             InsertTailList(&BlkifRing->DeferredPages, ListEntry);
             break;
         }
@@ -1986,13 +2081,19 @@ BlkifRingCacheCreate(
     Ring =3D BlkifRing->Ring;
     Frontend =3D Ring->Frontend;
=20
+    // The caches hold their own reference on the interface, as they outl=
ive
+    // a disconnect while any of their objects are deferred=2E
+    status =3D XENBUS_CACHE(Acquire, &Ring->CacheInterface);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
     status =3D RtlStringCbPrintfA(Name,
                                 sizeof(Name),
                                 "vbd_%u_queue_%u_request",
                                 FrontendGetTargetId(Frontend),
                                 BlkifRing->Index);
     if (!NT_SUCCESS(status))
-        goto fail1;
+        goto fail2;
=20
     status =3D XENBUS_CACHE(Create,
                           &Ring->CacheInterface,
@@ -2007,7 +2108,7 @@ BlkifRingCacheCreate(
                           BlkifRing,
                           &BlkifRing->RequestCache);
     if (!NT_SUCCESS(status))
-        goto fail2;
+        goto fail3;
=20
     status =3D RtlStringCbPrintfA(Name,
                                 sizeof(Name),
@@ -2015,7 +2116,7 @@ BlkifRingCacheCreate(
                                 FrontendGetTargetId(Frontend),
                                 BlkifRing->Index);
     if (!NT_SUCCESS(status))
-        goto fail3;
+        goto fail4;
=20
     status =3D XENBUS_CACHE(Create,
                           &Ring->CacheInterface,
@@ -2030,7 +2131,7 @@ BlkifRingCacheCreate(
                           BlkifRing,
                           &BlkifRing->SegmentCache);
     if (!NT_SUCCESS(status))
-        goto fail4;
+        goto fail5;
=20
     status =3D RtlStringCbPrintfA(Name,
                                 sizeof(Name),
@@ -2038,7 +2139,7 @@ BlkifRingCacheCreate(
                                 FrontendGetTargetId(Frontend),
                                 BlkifRing->Index);
     if (!NT_SUCCESS(status))
-        goto fail5;
+        goto fail6;
=20
     status =3D XENBUS_CACHE(Create,
                           &Ring->CacheInterface,
@@ -2053,35 +2154,40 @@ BlkifRingCacheCreate(
                           BlkifRing,
                           &BlkifRing->IndirectCache);
     if (!NT_SUCCESS(status))
-        goto fail6;
+        goto fail7;
=20
     return STATUS_SUCCESS;
=20
+fail7:
+    Error("fail7\n");
+
 fail6:
     Error("fail6\n");
=20
-fail5:
-    Error("fail5\n");
-
     XENBUS_CACHE(Destroy,
                  &Ring->CacheInterface,
                  BlkifRing->SegmentCache);
     BlkifRing->SegmentCache =3D NULL;
=20
+fail5:
+    Error("fail5\n");
+
 fail4:
     Error("fail4\n");
=20
-fail3:
-    Error("fail3\n");
-
     XENBUS_CACHE(Destroy,
                  &Ring->CacheInterface,
                  BlkifRing->RequestCache);
     BlkifRing->RequestCache =3D NULL;
=20
+fail3:
+    Error("fail3\n");
+
 fail2:
     Error("fail2\n");
=20
+    XENBUS_CACHE(Release, &Ring->CacheInterface);
+
 fail1:
     Error("fail1 %08x\n", status);
=20
@@ -2111,6 +2217,8 @@ BlkifRingCacheDestroy(
                  &Ring->CacheInterface,
                  BlkifRing->RequestCache);
     BlkifRing->RequestCache =3D NULL;
+
+    XENBUS_CACHE(Release, &Ring->CacheInterface);
 }
=20
 static NTSTATUS
@@ -2159,6 +2267,7 @@ BlkifRingCreate(
     InitializeListHead(&(*BlkifRing)->ShutdownQueue);
     InitializeListHead(&(*BlkifRing)->SubmittedList);
     InitializeListHead(&(*BlkifRing)->PreparedQueue);
+    InitializeListHead(&(*BlkifRing)->DeferredList);
     InitializeListHead(&(*BlkifRing)->DeferredPages);
=20
     KeInitializeThreadedDpc(&(*BlkifRing)->Dpc, BlkifRingDpc, *BlkifRing)=
;
@@ -2177,6 +2286,7 @@ fail4:
     RtlZeroMemory(&(*BlkifRing)->Dpc, sizeof(KDPC));
=20
     RtlZeroMemory(&(*BlkifRing)->DeferredPages, sizeof(LIST_ENTRY));
+    RtlZeroMemory(&(*BlkifRing)->DeferredList, sizeof(LIST_ENTRY));
     RtlZeroMemory(&(*BlkifRing)->PreparedQueue, sizeof(LIST_ENTRY));
     RtlZeroMemory(&(*BlkifRing)->SubmittedList, sizeof(LIST_ENTRY));
     RtlZeroMemory(&(*BlkifRing)->ShutdownQueue, sizeof(LIST_ENTRY));
@@ -2210,10 +2320,15 @@ BlkifRingDestroy(
     BlkifRing->WatchdogThread =3D NULL;
=20
     BUG_ON(__BlkifRingIsDeferring(BlkifRing));
+    ASSERT3P(BlkifRing->RequestCache, =3D=3D, NULL);
+
+    BlkifRing->RequestsDeferred =3D 0;
+    BlkifRing->RequestsReclaimed =3D 0;
=20
     RtlZeroMemory(&BlkifRing->Dpc, sizeof(KDPC));
=20
     RtlZeroMemory(&BlkifRing->DeferredPages, sizeof(LIST_ENTRY));
+    RtlZeroMemory(&BlkifRing->DeferredList, sizeof(LIST_ENTRY));
=20
     ASSERT(IsListEmpty(&BlkifRing->PreparedQueue));
     RtlZeroMemory(&BlkifRing->PreparedQueue, sizeof(LIST_ENTRY));
@@ -2249,6 +2364,7 @@ BlkifRingConnect(
     PXENVBD_FRONTEND            Frontend =3D Ring->Frontend;
     PXENVBD_GRANTER             Granter =3D FrontendGetGranter(Frontend);
     CHAR                        Name[MAX_NAME_LEN];
+    BOOLEAN                     CacheCreated;
     ULONG                       Index;
     NTSTATUS                    status;
=20
@@ -2266,9 +2382,15 @@ BlkifRingConnect(
     }
     KeSetImportanceDpc(&BlkifRing->Dpc, MediumHighImportance);
=20
-    status =3D BlkifRingCacheCreate(BlkifRing);
-    if (!NT_SUCCESS(status))
-        goto fail1;
+    // The caches are kept by a disconnect that left requests deferred
+    CacheCreated =3D FALSE;
+    if (BlkifRing->RequestCache =3D=3D NULL) {
+        status =3D BlkifRingCacheCreate(BlkifRing);
+        if (!NT_SUCCESS(status))
+            goto fail1;
+
+        CacheCreated =3D TRUE;
+    }
=20
     BlkifRing->Pages =3D BlkifRingAllocatePages(1ul << Ring->Order);
=20
@@ -2351,7 +2473,8 @@ fail3:
     BlkifRingReleasePages(BlkifRing);
 fail2:
     Error("fail2\n");
-    BlkifRingCacheDestroy(BlkifRing);
+    if (CacheCreated)
+        BlkifRingCacheDestroy(BlkifRing);
 fail1:
     Error("fail1 %08x\n", status);
     return status;
@@ -2546,6 +2669,7 @@ BlkifRingDisconnect(
     )
 {
     PXENVBD_RING                Ring =3D BlkifRing->Ring;
+    BOOLEAN                     Deferring;
=20
     Trace("=3D=3D=3D=3D> %u\n", BlkifRing->Index);
     ASSERT(BlkifRing->Connected);
@@ -2560,17 +2684,27 @@ BlkifRingDisconnect(
                   BlkifRing->Channel);
     BlkifRing->Channel =3D NULL;
=20
-    // Normally the backend has closed by now, so ring pages left over fr=
om
-    // earlier connections should be revocable
+    // Normally the backend has closed by now, so anything still deferred
+    // should be revocable
     __BlkifRingAcquireLock(BlkifRing);
     BlkifRingReclaim(BlkifRing);
+    Deferring =3D !IsListEmpty(&BlkifRing->DeferredList);
     __BlkifRingReleaseLock(BlkifRing);
=20
     RtlZeroMemory(&BlkifRing->Front, sizeof(blkif_front_ring_t));
=20
     BlkifRingReleasePages(BlkifRing);
=20
-    BlkifRingCacheDestroy(BlkifRing);
+    // Deferred requests still own objects from the caches, so keep them =
(and
+    // let the next connection reuse them) until the requests are reclaim=
ed
+    if (Deferring) {
+        Warning("Target[%u][%u] : %u request(s) still deferred\n",
+                FrontendGetTargetId(Ring->Frontend),
+                BlkifRing->Index,
+                BlkifRing->RequestsDeferred - BlkifRing->RequestsReclaime=
d);
+    } else {
+        BlkifRingCacheDestroy(BlkifRing);
+    }
=20
     BlkifRing->Events =3D 0;
     BlkifRing->Dpcs =3D 0;
@@ -2848,6 +2982,20 @@ RingD0ToD3(
     ThreadAlert(Ring->ReclaimThread);
     ThreadJoin(Ring->ReclaimThread);
     Ring->ReclaimThread =3D NULL;
+
+    // Caches kept by a disconnect that left requests deferred, along wit=
h
+    // their cache interface references, can go now
+    for (Index =3D 0; Index < FrontendGetMaxQueues(Ring->Frontend); ++Ind=
ex) {
+        PXENVBD_BLKIF_RING  BlkifRing =3D Ring->Ring[Index];
+        KIRQL               Irql;
+
+        if (BlkifRing->RequestCache =3D=3D NULL)
+            continue;
+
+        KeRaiseIrql(DISPATCH_LEVEL, &Irql);
+        BlkifRingCacheDestroy(BlkifRing);
+        KeLowerIrql(Irql);
+    }
 }
=20
 NTSTATUS
--=20
2=2E56=2E0=2Ewindows=2E3



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.1a0.b973d4a1b403dbbd.1a16953d858.ffa2ceca5ce0f61b=---


From win-pv-devel-bounces@lists.xenproject.org Fri Oct 23 15:14:30 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 23 Oct 2026 15:14:30 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1459424.1671361 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xKGyU-00028X-Do; Fri, 23 Oct 2026 15:14:30 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1459424.1671361; Fri, 23 Oct 2026 15:14:30 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xKGyT-00027k-OC; Fri, 23 Oct 2026 15:14:29 +0000
Received: by outflank-mailman (input) for mailman id 1459424;
 Fri, 23 Oct 2026 15:14:28 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16953d923000f79f@swg.vates.tech>)
 id 1xKGyS-00023O-FJ
 for win-pv-devel@lists.xenproject.org; Fri, 23 Oct 2026 15:14:28 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xKGyR-006XAY-SW
 for win-pv-devel@lists.xenproject.org; Fri, 23 Oct 2026 17:14:27 +0200
Received: from [10.42.69.2] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16953d923000f79f@swg.vates.tech>)
 id 6adb79d3-2eae-0a2a0a5409dd-0a2a4502e7c0-8
 for <win-pv-devel@lists.xenproject.org>; Fri, 23 Oct 2026 17:14:27 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16953d923000f79f@swg.vates.tech>)
 id 6adb79d2-6ca4-0a2a45020019-b9ff1c239655-5
 for <win-pv-devel@lists.xenproject.org>; Fri, 23 Oct 2026 17:14:27 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a16953d923000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Fri, 23 Oct 2026 15:14:25 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id AAE8382C8D;
 Fri, 23 Oct 2026 17:14:24 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=CJeBecQw+6bUKrLifZ0fP6mYkpY7Cly/wxAFmUmYVK4=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=dkDAspTCFjQcrRwFNynJqi2EnigIHwXAJK7KE/8zkGGmJDdXSKEc1vTRARGA/PPADKOUPKOr/
 x+x9V7HxRf0rlHJ7ZVWDl6CdEoejcIA9As2fDG2qQ9tUVJgQTFlWhHBUeJZu0+6FKlFzWEl4CRi
 0xJ+Nth07NyslX1sgWFuXFA1Rn3hXH+UwdHjdPpUG3f5Y+phCQ5N4+qvTyPwLuYwbJJSz2TFF7v
 lIm7C5FR20QdX73G2evenuParH067SJOmVUAP8jGErq/DDg+bgjKHNm1/w4m96a7KUG7BwfPGG7
 1aOf5x2/oW47d6n4/76sJD7ATKCUZmCvnSb0Dde9fgtA==
X-Zone-Loop: cccf20110ee6d820e5479cf816bc1ec72d29b23c37d8
x-campaign-type: default
x-transaction-id: ecac6b3a-62b1-49a5-acdd-56ca7f827d76
x-swg-uid: 01-13348e23-3462-4d8d-ba65-55c9d79b35fe
X-Mailer: Sweego
Message-ID:
 <1792768465.8631fc262581453bbf619ec5b2062170.1a16953d923000f79f@vates.tech>
x-swg-bid: 1792768465.8631fc262581453bbf619ec5b2062170.1a16953d923000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [RFC PATCH 8/9] ring: Defer destruction until backend grant release
Date: Fri, 23 Oct 2026 17:14:16 +0200
In-Reply-To: <20261023151419.1317-1-ngoc-tu.dinh@vates.tech>
References: <1792768355.8631fc262581453bbf619ec5b2062170.1a169522dd1000f79f@vates.tech>
 <20261023151419.1317-1-ngoc-tu.dinh@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.19f.1ad91da167333246.1a16953d77b.1c07a6377b1fbebb=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792768464763
X-purgate-ID: tlsNG-720697/1792768467-30FCE2AC-CB3A1FFB/0/0
X-purgate-type: clean
X-purgate-size: 16132

---=Part.19f.1ad91da167333246.1a16953d77b.1c07a6377b1fbebb=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

If the backend is still accessing the ring page grants, we must defer
ring destruction until the backend has fully released them=2E

Implement a reclaim thread that polls for grant revocation=2E If grant
revocation ever fails, the reclaim thread will take care of polling for
grant release=2E Wait for the reclaim thread when transitioning to D3=2E

Assisted-by: LLM
Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 src/xenvbd/ring=2Ec | 306 ++++++++++++++++++++++++++++++++++++++++------
 1 file changed, 270 insertions(+), 36 deletions(-)

diff --git a/src/xenvbd/ring=2Ec b/src/xenvbd/ring=2Ec
index 3ce3ba5=2E=2Eb0dd283 100644
--- a/src/xenvbd/ring=2Ec
+++ b/src/xenvbd/ring=2Ec
@@ -57,6 +57,14 @@
 #define XENVBD_MAX_RING_PAGE_ORDER  (4)
 #define XENVBD_MAX_RING_PAGES       (1 << XENVBD_MAX_RING_PAGE_ORDER)
=20
+// Separate struct to be transferred to ReclaimThread on ring page reclai=
m=2E
+typedef struct _XENVBD_BLKIF_PAGES {
+    LIST_ENTRY                      ListEntry;
+    PMDL                            Mdl;
+    ULONG                           Count;
+    PXENBUS_GNTTAB_ENTRY            Grants[XENVBD_MAX_RING_PAGES];
+} XENVBD_BLKIF_PAGES, *PXENVBD_BLKIF_PAGES;
+
 typedef struct _XENVBD_BLKIF_RING {
     PXENVBD_RING                    Ring;
     ULONG                           Index;
@@ -64,10 +72,9 @@ typedef struct _XENVBD_BLKIF_RING {
     PXENBUS_CACHE                   RequestCache;
     PXENBUS_CACHE                   SegmentCache;
     PXENBUS_CACHE                   IndirectCache;
-    PMDL                            Mdl;
+    PXENVBD_BLKIF_PAGES             Pages;
     blkif_sring_t                   *Shared;
     blkif_front_ring_t              Front;
-    PXENBUS_GNTTAB_ENTRY            Grants[XENVBD_MAX_RING_PAGES];
     PXENBUS_EVTCHN_CHANNEL          Channel;
     KDPC                            Dpc;
     ULONG                           Dpcs;
@@ -84,6 +91,8 @@ typedef struct _XENVBD_BLKIF_RING {
     LIST_ENTRY                      PreparedQueue;
     LIST_ENTRY                      SubmittedList;
     LIST_ENTRY                      ShutdownQueue;
+    // List of XENVBD_BLKIF_PAGES still being held by the backend
+    LIST_ENTRY                      DeferredPages;
     ULONG                           SrbsQueued;
     ULONG                           SrbsCompleted;
     ULONG                           SrbsFailed;
@@ -119,6 +128,7 @@ struct _XENVBD_RING {
     PXENBUS_DEBUG_CALLBACK          DebugCallback;
     ULONG                           Order;
     PXENVBD_BLKIF_RING              *Ring;
+    PXENVBD_THREAD                  ReclaimThread;
     LONG                            Stats[XENVBD_STAT__MAX];
 };
=20
@@ -1754,6 +1764,215 @@ RingWatchdog(
     return STATUS_SUCCESS;
 }
=20
+static PXENVBD_BLKIF_PAGES
+BlkifRingAllocatePages(
+    _In_ ULONG          Count
+    )
+{
+    PXENVBD_BLKIF_PAGES Pages;
+
+    ASSERT3U(Count, <=3D, XENVBD_MAX_RING_PAGES);
+
+    Pages =3D __RingAllocate(sizeof(XENVBD_BLKIF_PAGES));
+    if (Pages =3D=3D NULL)
+        goto fail1;
+
+    Pages->Mdl =3D __AllocatePages(Count, FALSE);
+    if (Pages->Mdl =3D=3D NULL)
+        goto fail2;
+
+    Pages->Count =3D Count;
+
+    return Pages;
+
+fail2:
+    __RingFree(Pages);
+
+fail1:
+    return NULL;
+}
+
+static VOID
+__BlkifRingFreePages(
+    _In_ PXENVBD_BLKIF_PAGES    Pages
+    )
+{
+    ULONG                       Index;
+
+    for (Index =3D 0; Index < Pages->Count; ++Index)
+        ASSERT3P(Pages->Grants[Index], =3D=3D, NULL);
+
+    __FreePages(Pages->Mdl);
+    Pages->Mdl =3D NULL;
+    Pages->Count =3D 0;
+
+    RtlZeroMemory(&Pages->ListEntry, sizeof(LIST_ENTRY));
+
+    ASSERT(IsZeroMemory(Pages, sizeof(XENVBD_BLKIF_PAGES)));
+    __RingFree(Pages);
+}
+
+_Check_return_
+static BOOLEAN
+__BlkifRingRevokePages(
+    _In_ PXENVBD_BLKIF_RING     BlkifRing,
+    _Inout_ PXENVBD_BLKIF_PAGES Pages
+    )
+{
+    PXENVBD_RING                Ring =3D BlkifRing->Ring;
+    PXENVBD_GRANTER             Granter =3D FrontendGetGranter(Ring->Fron=
tend);
+    ULONG                       Index;
+
+    for (Index =3D 0; Index < Pages->Count; ++Index) {
+        if (Pages->Grants[Index] =3D=3D NULL)
+            continue;
+
+        if (!NT_SUCCESS(GranterTryPut(Granter, Pages->Grants[Index])))
+            return FALSE;
+
+        Pages->Grants[Index] =3D NULL;
+    }
+
+    return TRUE;
+}
+
+_IRQL_requires_(DISPATCH_LEVEL)
+static VOID
+BlkifRingReleasePages(
+    _Inout_ PXENVBD_BLKIF_RING  BlkifRing
+    )
+{
+    PXENVBD_RING                Ring =3D BlkifRing->Ring;
+    PXENVBD_BLKIF_PAGES         Pages =3D BlkifRing->Pages;
+
+    BlkifRing->Shared =3D NULL;
+    BlkifRing->Pages =3D NULL;
+
+    if (__BlkifRingRevokePages(BlkifRing, Pages)) {
+        __BlkifRingFreePages(Pages);
+        return;
+    }
+
+    Warning("Target[%u][%u] : deferring ring pages\n",
+            FrontendGetTargetId(Ring->Frontend),
+            BlkifRing->Index);
+
+    __BlkifRingAcquireLock(BlkifRing);
+    InsertTailList(&BlkifRing->DeferredPages, &Pages->ListEntry);
+    __BlkifRingReleaseLock(BlkifRing);
+
+    ThreadWake(Ring->ReclaimThread);
+}
+
+static FORCEINLINE BOOLEAN
+__BlkifRingIsDeferring(
+    _In_ PXENVBD_BLKIF_RING BlkifRing
+    )
+{
+    return !IsListEmpty(&BlkifRing->DeferredPages);
+}
+
+_IRQL_requires_(DISPATCH_LEVEL)
+static VOID
+BlkifRingReclaim(
+    _Inout_ PXENVBD_BLKIF_RING  BlkifRing
+    )
+{
+#if DBG
+    ASSERT3P(BlkifRing->LockThread, =3D=3D, KeGetCurrentThread());
+#endif
+
+    while (!IsListEmpty(&BlkifRing->DeferredPages)) {
+        PLIST_ENTRY         ListEntry;
+        PXENVBD_BLKIF_PAGES Pages;
+
+        ListEntry =3D RemoveHeadList(&BlkifRing->DeferredPages);
+        Pages =3D CONTAINING_RECORD(ListEntry, XENVBD_BLKIF_PAGES, ListEn=
try);
+
+        if (!__BlkifRingRevokePages(BlkifRing, Pages)) {
+            // Move this reclaim failure to the back so that entries behi=
nd it
+            // are tried first on the next pass=2E
+            InsertTailList(&BlkifRing->DeferredPages, ListEntry);
+            break;
+        }
+
+        __BlkifRingFreePages(Pages);
+    }
+}
+
+#define XENVBD_RECLAIM_PERIOD           TIME_MS(1000)
+#define XENVBD_RECLAIM_WARNING_PERIOD   TIME_S(30)
+
+static NTSTATUS
+RingReclaim(
+    _In_ PXENVBD_THREAD Self,
+    _In_ PVOID          Context
+    )
+{
+    PXENVBD_RING        Ring =3D Context;
+    LARGE_INTEGER       Timeout;
+    BOOLEAN             Deferring;
+    ULONGLONG           NextWarning;
+
+    Trace("=3D=3D=3D=3D>\n");
+
+    Timeout=2EQuadPart =3D TIME_RELATIVE(XENVBD_RECLAIM_PERIOD);
+    Deferring =3D FALSE;
+    NextWarning =3D 0;
+
+    for (;;) {
+        PKEVENT Event;
+        ULONG   Index;
+        KIRQL   Irql;
+
+        Event =3D ThreadGetEvent(Self);
+
+        (VOID) KeWaitForSingleObject(Event,
+                                     Executive,
+                                     KernelMode,
+                                     FALSE,
+                                     Deferring ? &Timeout : NULL);
+        KeClearEvent(Event);
+
+        Deferring =3D FALSE;
+
+        KeRaiseIrql(DISPATCH_LEVEL, &Irql);
+
+        for (Index =3D 0; Index < FrontendGetMaxQueues(Ring->Frontend); +=
+Index) {
+            PXENVBD_BLKIF_RING  BlkifRing =3D Ring->Ring[Index];
+
+            __BlkifRingAcquireLock(BlkifRing);
+
+            BlkifRingReclaim(BlkifRing);
+
+            if (__BlkifRingIsDeferring(BlkifRing))
+                Deferring =3D TRUE;
+
+            __BlkifRingReleaseLock(BlkifRing);
+        }
+
+        KeLowerIrql(Irql);
+
+        if (!ThreadIsAlerted(Self))
+            continue;
+
+        // Only stop once the backend has released everything=2E Freeing =
pages
+        // that it may still access is worse than holding up D0->D3
+        if (!Deferring)
+            break;
+
+        if (KeQueryInterruptTime() >=3D NextWarning) {
+            Warning("Target[%u] : still waiting for backend to release gr=
ants\n",
+                    FrontendGetTargetId(Ring->Frontend));
+            NextWarning =3D KeQueryInterruptTime() + XENVBD_RECLAIM_WARNI=
NG_PERIOD;
+        }
+    }
+
+    Trace("<=3D=3D=3D=3D\n");
+
+    return STATUS_SUCCESS;
+}
+
 static FORCEINLINE NTSTATUS
 BlkifRingCacheCreate(
     _Inout_ PXENVBD_BLKIF_RING  BlkifRing
@@ -1940,6 +2159,7 @@ BlkifRingCreate(
     InitializeListHead(&(*BlkifRing)->ShutdownQueue);
     InitializeListHead(&(*BlkifRing)->SubmittedList);
     InitializeListHead(&(*BlkifRing)->PreparedQueue);
+    InitializeListHead(&(*BlkifRing)->DeferredPages);
=20
     KeInitializeThreadedDpc(&(*BlkifRing)->Dpc, BlkifRingDpc, *BlkifRing)=
;
=20
@@ -1956,6 +2176,7 @@ fail4:
=20
     RtlZeroMemory(&(*BlkifRing)->Dpc, sizeof(KDPC));
=20
+    RtlZeroMemory(&(*BlkifRing)->DeferredPages, sizeof(LIST_ENTRY));
     RtlZeroMemory(&(*BlkifRing)->PreparedQueue, sizeof(LIST_ENTRY));
     RtlZeroMemory(&(*BlkifRing)->SubmittedList, sizeof(LIST_ENTRY));
     RtlZeroMemory(&(*BlkifRing)->ShutdownQueue, sizeof(LIST_ENTRY));
@@ -1988,8 +2209,12 @@ BlkifRingDestroy(
     ThreadJoin(BlkifRing->WatchdogThread);
     BlkifRing->WatchdogThread =3D NULL;
=20
+    BUG_ON(__BlkifRingIsDeferring(BlkifRing));
+
     RtlZeroMemory(&BlkifRing->Dpc, sizeof(KDPC));
=20
+    RtlZeroMemory(&BlkifRing->DeferredPages, sizeof(LIST_ENTRY));
+
     ASSERT(IsListEmpty(&BlkifRing->PreparedQueue));
     RtlZeroMemory(&BlkifRing->PreparedQueue, sizeof(LIST_ENTRY));
=20
@@ -2045,13 +2270,13 @@ BlkifRingConnect(
     if (!NT_SUCCESS(status))
         goto fail1;
=20
-    BlkifRing->Mdl =3D __AllocatePages(1 << Ring->Order, FALSE);
+    BlkifRing->Pages =3D BlkifRingAllocatePages(1ul << Ring->Order);
=20
     status =3D STATUS_NO_MEMORY;
-    if (BlkifRing->Mdl =3D=3D NULL)
+    if (BlkifRing->Pages =3D=3D NULL)
         goto fail2;
=20
-    BlkifRing->Shared =3D MmGetSystemAddressForMdlSafe(BlkifRing->Mdl,
+    BlkifRing->Shared =3D MmGetSystemAddressForMdlSafe(BlkifRing->Pages->=
Mdl,
                                                      NormalPagePriority);
     ASSERT(BlkifRing->Shared !=3D NULL);
=20
@@ -2062,11 +2287,11 @@ BlkifRingConnect(
     FRONT_RING_INIT(&BlkifRing->Front, BlkifRing->Shared, PAGE_SIZE << Ri=
ng->Order);
 #pragma warning(pop)
=20
-    for (Index =3D 0; Index < (1ul << Ring->Order); ++Index) {
+    for (Index =3D 0; Index < BlkifRing->Pages->Count; ++Index) {
         status =3D GranterGet(Granter,
-                            MmGetMdlPfnArray(BlkifRing->Mdl)[Index],
+                            MmGetMdlPfnArray(BlkifRing->Pages->Mdl)[Index=
],
                             FALSE,
-                            &BlkifRing->Grants[Index]);
+                            &BlkifRing->Pages->Grants[Index]);
         if (!NT_SUCCESS(status))
             goto fail3;
     }
@@ -2121,19 +2346,9 @@ fail4:
     Error("fail4\n");
 fail3:
     Error("fail3\n");
-    for (Index =3D 0; Index < (1ul << Ring->Order); ++Index) {
-        if (BlkifRing->Grants[Index] =3D=3D NULL)
-            continue;
-
-        GranterPut(Granter, BlkifRing->Grants[Index]);
-        BlkifRing->Grants[Index] =3D NULL;
-    }
-
     RtlZeroMemory(&BlkifRing->Front, sizeof(blkif_front_ring_t));
=20
-    __FreePages(BlkifRing->Mdl);
-    BlkifRing->Shared =3D NULL;
-    BlkifRing->Mdl =3D NULL;
+    BlkifRingReleasePages(BlkifRing);
 fail2:
     Error("fail2\n");
     BlkifRingCacheDestroy(BlkifRing);
@@ -2177,13 +2392,13 @@ BlkifRingStoreWrite(
                               Path,
                               "ring-ref",
                               "%u",
-                              GranterReference(Granter, BlkifRing->Grants=
[0]));
+                              GranterReference(Granter, BlkifRing->Pages-=
>Grants[0]));
         if (!NT_SUCCESS(status))
             goto fail2;
     } else {
         ULONG           Index;
=20
-        for (Index =3D 0; Index < (1ul << Ring->Order); ++Index) {
+        for (Index =3D 0; Index < BlkifRing->Pages->Count; ++Index) {
             CHAR        Name[MAX_NAME_LEN + 1];
=20
             status =3D RtlStringCchPrintfA(Name,
@@ -2199,7 +2414,7 @@ BlkifRingStoreWrite(
                                   Path,
                                   Name,
                                   "%u",
-                                  GranterReference(Granter, BlkifRing->Gr=
ants[Index]));
+                                  GranterReference(Granter, BlkifRing->Pa=
ges->Grants[Index]));
             if (!NT_SUCCESS(status))
                 goto fail4;
         }
@@ -2331,8 +2546,6 @@ BlkifRingDisconnect(
     )
 {
     PXENVBD_RING                Ring =3D BlkifRing->Ring;
-    PXENVBD_GRANTER             Granter =3D FrontendGetGranter(Ring->Fron=
tend);
-    ULONG                       Index;
=20
     Trace("=3D=3D=3D=3D> %u\n", BlkifRing->Index);
     ASSERT(BlkifRing->Connected);
@@ -2347,19 +2560,15 @@ BlkifRingDisconnect(
                   BlkifRing->Channel);
     BlkifRing->Channel =3D NULL;
=20
-    for (Index =3D 0; Index < (1ul << Ring->Order); ++Index) {
-        if (BlkifRing->Grants[Index] =3D=3D NULL)
-            continue;
-
-        GranterPut(Granter, BlkifRing->Grants[Index]);
-        BlkifRing->Grants[Index] =3D NULL;
-    }
+    // Normally the backend has closed by now, so ring pages left over fr=
om
+    // earlier connections should be revocable
+    __BlkifRingAcquireLock(BlkifRing);
+    BlkifRingReclaim(BlkifRing);
+    __BlkifRingReleaseLock(BlkifRing);
=20
     RtlZeroMemory(&BlkifRing->Front, sizeof(blkif_front_ring_t));
=20
-    __FreePages(BlkifRing->Mdl);
-    BlkifRing->Shared =3D NULL;
-    BlkifRing->Mdl =3D NULL;
+    BlkifRingReleasePages(BlkifRing);
=20
     BlkifRingCacheDestroy(BlkifRing);
=20
@@ -2561,6 +2770,8 @@ RingDestroy(
 {
     LONG                    Index;
=20
+    ASSERT3P(Ring->ReclaimThread, =3D=3D, NULL);
+
     Index =3D (LONG) FrontendGetMaxQueues(Ring->Frontend);
     ASSERT3U(Index, !=3D, 0);
=20
@@ -2599,11 +2810,23 @@ RingD3ToD0(
     _Inout_ PXENVBD_RING    Ring
     )
 {
-    UNREFERENCED_PARAMETER(Ring);
+    NTSTATUS                status;
=20
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, PASSIVE_LEVEL);
+    ASSERT3P(Ring->ReclaimThread, =3D=3D, NULL);
+
+    status =3D ThreadCreate(RingReclaim,
+                          Ring,
+                          &Ring->ReclaimThread);
+    if (!NT_SUCCESS(status))
+        goto fail1;
=20
     return STATUS_SUCCESS;
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return status;
 }
=20
 VOID
@@ -2611,9 +2834,20 @@ RingD0ToD3(
     _Inout_ PXENVBD_RING    Ring
     )
 {
-    UNREFERENCED_PARAMETER(Ring);
+    ULONG                   Index;
=20
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, PASSIVE_LEVEL);
+
+    // Grants are only handed over to the reclaim thread at disconnect, s=
o a
+    // ring still connected here would never be drained
+    for (Index =3D 0; Index < FrontendGetMaxQueues(Ring->Frontend); ++Ind=
ex)
+        ASSERT(!Ring->Ring[Index]->Connected);
+
+    // The reclaim thread only exits once nothing is deferred any more, s=
o no
+    // grant (nor the gnttab reference behind it) survives into D3
+    ThreadAlert(Ring->ReclaimThread);
+    ThreadJoin(Ring->ReclaimThread);
+    Ring->ReclaimThread =3D NULL;
 }
=20
 NTSTATUS
--=20
2=2E56=2E0=2Ewindows=2E3



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.19f.1ad91da167333246.1a16953d77b.1c07a6377b1fbebb=---


From win-pv-devel-bounces@lists.xenproject.org Fri Oct 23 15:14:30 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 23 Oct 2026 15:14:30 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1459426.1671364 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xKGyU-0002Ab-G0; Fri, 23 Oct 2026 15:14:30 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1459426.1671364; Fri, 23 Oct 2026 15:14:30 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xKGyT-00029F-Vx; Fri, 23 Oct 2026 15:14:29 +0000
Received: by outflank-mailman (input) for mailman id 1459426;
 Fri, 23 Oct 2026 15:14:28 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16953d5f8000f79f@swg.vates.tech>)
 id 1xKGyS-000244-O7
 for win-pv-devel@lists.xenproject.org; Fri, 23 Oct 2026 15:14:28 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xKGyS-00AjEz-4x
 for win-pv-devel@lists.xenproject.org; Fri, 23 Oct 2026 17:14:28 +0200
Received: from [10.42.69.11] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16953d5f8000f79f@swg.vates.tech>)
 id 6adb79b7-8faa-0a2a0a5109dd-0a2a450bb502-46
 for <win-pv-devel@lists.xenproject.org>; Fri, 23 Oct 2026 17:14:28 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-42698a.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16953d5f8000f79f@swg.vates.tech>)
 id 6adb79d3-b7e8-0a2a450b0019-b9ff1c23ab33-3
 for <win-pv-devel@lists.xenproject.org>; Fri, 23 Oct 2026 17:14:27 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a16953d5f8000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Fri, 23 Oct 2026 15:14:24 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id DB41081AB9;
 Fri, 23 Oct 2026 17:14:23 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=hsV0fNPQ6XNlTEZ/iEJNvemRmN/HO76FHQFTFpFAAWM=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=tFcfceZ81qDvVoAkMdvJ+iNX1HNqKIxQkwvNTXaOe5f0GJIBLeqBKj10RPXxWHgmIUVcdMn/5
 8/taqE3U0Etg1kdmBJC4axNckKF7jsiRiuTdXRhpKGV6cM9HBY90aB9ZCz7LEYf96tKngaQ5lU+
 Q3TBwsnreGvk95Xads/1Hc7psD/UgoaqR48aV0B15lwy1JcG8KG7GG2Sd4i1FfIkq/9IqfaM+Yd
 shhLX4GqcC+8X5agmsTOr+ZMvk3gTcK5yNFG8UBNrrkkaPvWUt0w/Rw8e+vVOeUzGItjT2JgMVF
 gJsXn+0s1GAmELxkMX4qXz2bMaUsAw3MKCklbI6MEXzA==
X-Zone-Loop: 2c2769fd43b54b5b76c77f750a47b3921c0e1ab466bb
x-campaign-type: default
x-transaction-id: 2ebdfef6-e232-4ffa-b2f6-478a82dfb8a0
x-swg-uid: 01-3a6a3f0b-b038-4803-9546-3225216b8ebe
X-Mailer: Sweego
Message-ID:
 <1792768464.8631fc262581453bbf619ec5b2062170.1a16953d5f8000f79f@vates.tech>
x-swg-bid: 1792768464.8631fc262581453bbf619ec5b2062170.1a16953d5f8000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [RFC PATCH 4/9] granter: Split GranterTryPut to its own function
Date: Fri, 23 Oct 2026 17:14:12 +0200
In-Reply-To: <20261023151419.1317-1-ngoc-tu.dinh@vates.tech>
References: <1792768355.8631fc262581453bbf619ec5b2062170.1a169522dd1000f79f@vates.tech>
 <20261023151419.1317-1-ngoc-tu.dinh@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.19b.4087921968fed187.1a16953d453.60b2ec2949fe9d12=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792768463955
X-purgate-ID: tlsNG-42698a/1792768468-1A6DA9EA-DDB7539F/0/0
X-purgate-type: clean
X-purgate-size: 2777

---=Part.19b.4087921968fed187.1a16953d453.60b2ec2949fe9d12=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

This allows ring consumers to test for still-pending grants and
eventually defer grant revocation=2E

Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 src/xenvbd/granter=2Ec | 37 +++++++++++++++++++++++++++++--------
 src/xenvbd/granter=2Eh |  7 +++++++
 2 files changed, 36 insertions(+), 8 deletions(-)

diff --git a/src/xenvbd/granter=2Ec b/src/xenvbd/granter=2Ec
index 0673891=2E=2E74a786d 100644
--- a/src/xenvbd/granter=2Ec
+++ b/src/xenvbd/granter=2Ec
@@ -346,31 +346,52 @@ fail1:
     return status;
 }
=20
+_Check_return_
+NTSTATUS
+GranterTryPut(
+    _Inout_ PXENVBD_GRANTER Granter,
+    _In_ PVOID              Handle
+    )
+{
+    PXENBUS_GNTTAB_ENTRY    Entry =3D Handle;
+    NTSTATUS                status;
+
+    ASSERT3P(Granter->Cache, !=3D, NULL);
+
+    status =3D XENBUS_GNTTAB(RevokeForeignAccess,
+                           &Granter->GnttabInterface,
+                           Granter->Cache,
+                           FALSE,
+                           Entry);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    InterlockedDecrement(&Granter->Current);
+
+    return STATUS_SUCCESS;
+
+fail1:
+    return status;
+}
+
 VOID
 GranterPut(
     _Inout_ PXENVBD_GRANTER Granter,
     _In_ PVOID              Handle
     )
 {
-    PXENBUS_GNTTAB_ENTRY    Entry =3D Handle;
     NTSTATUS                status;
=20
     if (Granter->Connected =3D=3D FALSE)
         return;
=20
     for (;;) {
-        status =3D XENBUS_GNTTAB(RevokeForeignAccess,
-                               &Granter->GnttabInterface,
-                               Granter->Cache,
-                               FALSE,
-                               Entry);
+        status =3D GranterTryPut(Granter, Handle);
         if (NT_SUCCESS(status))
             break;
=20
         YieldProcessor();
     }
-
-    InterlockedDecrement(&Granter->Current);
 }
=20
 ULONG
diff --git a/src/xenvbd/granter=2Eh b/src/xenvbd/granter=2Eh
index e8d0899=2E=2Ee609a8a 100644
--- a/src/xenvbd/granter=2Eh
+++ b/src/xenvbd/granter=2Eh
@@ -84,6 +84,13 @@ GranterGet(
     _Outptr_ PVOID          *Handle
     );
=20
+_Check_return_
+extern NTSTATUS
+GranterTryPut(
+    _Inout_ PXENVBD_GRANTER Granter,
+    _In_ PVOID              Handle
+    );
+
 extern VOID
 GranterPut(
     _Inout_ PXENVBD_GRANTER Granter,
--=20
2=2E56=2E0=2Ewindows=2E3



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.19b.4087921968fed187.1a16953d453.60b2ec2949fe9d12=---


From win-pv-devel-bounces@lists.xenproject.org Fri Oct 23 15:14:30 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 23 Oct 2026 15:14:30 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1459427.1671369 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xKGyU-0002Cs-L9; Fri, 23 Oct 2026 15:14:30 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1459427.1671369; Fri, 23 Oct 2026 15:14:30 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xKGyU-0002AC-3u; Fri, 23 Oct 2026 15:14:30 +0000
Received: by outflank-mailman (input) for mailman id 1459427;
 Fri, 23 Oct 2026 15:14:28 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16953d7ca000f79f@swg.vates.tech>)
 id 1xKGyS-000242-O3
 for win-pv-devel@lists.xenproject.org; Fri, 23 Oct 2026 15:14:28 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xKGyS-00FbaS-4P
 for win-pv-devel@lists.xenproject.org; Fri, 23 Oct 2026 17:14:28 +0200
Received: from [10.42.69.6] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16953d7ca000f79f@swg.vates.tech>)
 id 6adb79c7-bab6-0a2a0a5309dd-0a2a45069f7c-26
 for <win-pv-devel@lists.xenproject.org>; Fri, 23 Oct 2026 17:14:28 +0200
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-16d1c6.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a16953d7ca000f79f@swg.vates.tech>)
 id 6adb79d3-195a-0a2a45060019-b9ff1c23b3c3-3
 for <win-pv-devel@lists.xenproject.org>; Fri, 23 Oct 2026 17:14:27 +0200
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a16953d7ca000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Fri, 23 Oct 2026 15:14:24 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 4A48582C36;
 Fri, 23 Oct 2026 17:14:24 +0200 (CEST)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=9IoFfdHAlaZmFtvrTTps5HJ1ToiHEp8I7v01vmlejWg=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=knPEwsDlnj1SvSJ0X5oNQrQR/D1HsqAHnJ0Tb6yLOjRFXJzm7Sjt980ifZ5GQqc0a63e/NMW3
 4ac/9TL5st5C3CVGSv35iUimcJu3NSloKd+Ah2t4uyPZfS1L0w6Seci3baX5UQnluLf7hd0Iwnf
 0Pxrd42b58EUbErgEggffPF3MunHPMvyYieGXNy/NNPjKCZAR5nZYv6fRCgSZ9jK8+A/UnUFtA5
 W1qj6qoZMyk36/VAkudFyn6pFiRMk8g9wFC+MewqEisHEEJeAUwGdKSy1X8Wmo2apSUWUDJeJU6
 PEikHRjWC3W/Kt2IjmwM4/pznvwIZz+wjBZ5LxW353CQ==
X-Zone-Loop: 55a35b5c4deb50dc9b24c63d43779dbeee632782ceeb
x-campaign-type: default
x-transaction-id: b1b81244-277d-4b3c-9750-eed95d05eb72
x-swg-uid: 01-8f404f34-1d0a-40e4-90a7-fa607395a8c6
X-Mailer: Sweego
Message-ID:
 <1792768464.8631fc262581453bbf619ec5b2062170.1a16953d7ca000f79f@vates.tech>
x-swg-bid: 1792768464.8631fc262581453bbf619ec5b2062170.1a16953d7ca000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [RFC PATCH 6/9] granter: Introduce GranterD0ToD3/D3ToD0
Date: Fri, 23 Oct 2026 17:14:14 +0200
In-Reply-To: <20261023151419.1317-1-ngoc-tu.dinh@vates.tech>
References: <1792768355.8631fc262581453bbf619ec5b2062170.1a169522dd1000f79f@vates.tech>
 <20261023151419.1317-1-ngoc-tu.dinh@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.19d.a89485988827aee3.1a16953d5e7.c9c2f0bb5148e87=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792768464359
X-purgate-ID: tlsNG-16d1c6/1792768468-FDC0F77B-E3AB33A9/0/0
X-purgate-type: clean
X-purgate-size: 4701

---=Part.19d.a89485988827aee3.1a16953d5e7.c9c2f0bb5148e87=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

XenBus requires all gnttab references to be dropped before hibernation;
otherwise, FdoS3ToS4 will crash=2E Since the granter cache can now outlive
a disconnect if there are outstanding grants, release it on D0->D3 at
the latest=2E

Nothing defers grant revocation yet, so Current is always zero there for
now=2E

Assisted-by: LLM
Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 src/xenvbd/frontend=2Ec | 11 +++++++++--
 src/xenvbd/frontend=2Eh |  4 ++--
 src/xenvbd/granter=2Ec  | 39 +++++++++++++++++++++++++++++++--------
 src/xenvbd/granter=2Eh  | 12 ++++++++++++
 4 files changed, 54 insertions(+), 12 deletions(-)

diff --git a/src/xenvbd/frontend=2Ec b/src/xenvbd/frontend=2Ec
index 8bf4f96=2E=2E442e188 100644
--- a/src/xenvbd/frontend=2Ec
+++ b/src/xenvbd/frontend=2Ec
@@ -1669,7 +1669,7 @@ FrontendDebugCallback(
 }
=20
 _Check_return_
-_IRQL_requires_max_(DISPATCH_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 FrontendD3ToD0(
     _Inout_ PXENVBD_FRONTEND    Frontend
@@ -1679,6 +1679,8 @@ FrontendD3ToD0(
     KIRQL                       Irql;
     NTSTATUS                    status;
=20
+    GranterD3ToD0(Frontend->Granter);
+
     KeAcquireSpinLock(&Frontend->StateLock, &Irql);
=20
     AdapterGetStoreInterface(Adapter, &Frontend->StoreInterface);
@@ -1746,10 +1748,13 @@ fail1:
                   sizeof(XENBUS_STORE_INTERFACE));
=20
     KeReleaseSpinLock(&Frontend->StateLock, Irql);
+
+    GranterD0ToD3(Frontend->Granter);
+
     return status;
 }
=20
-_IRQL_requires_max_(DISPATCH_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 VOID
 FrontendD0ToD3(
     _Inout_ PXENVBD_FRONTEND    Frontend
@@ -1787,6 +1792,8 @@ FrontendD0ToD3(
                   sizeof(XENBUS_STORE_INTERFACE));
=20
     KeReleaseSpinLock(&Frontend->StateLock, Irql);
+
+    GranterD0ToD3(Frontend->Granter);
 }
=20
 _Check_return_
diff --git a/src/xenvbd/frontend=2Eh b/src/xenvbd/frontend=2Eh
index 8b0ad8c=2E=2E3b43950 100644
--- a/src/xenvbd/frontend=2Eh
+++ b/src/xenvbd/frontend=2Eh
@@ -116,13 +116,13 @@ FrontendSetDeviceUsage(
     );
=20
 _Check_return_
-_IRQL_requires_max_(DISPATCH_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 FrontendD3ToD0(
     _Inout_ PXENVBD_FRONTEND    Frontend
     );
=20
-_IRQL_requires_max_(DISPATCH_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 extern VOID
 FrontendD0ToD3(
     _Inout_ PXENVBD_FRONTEND    Frontend
diff --git a/src/xenvbd/granter=2Ec b/src/xenvbd/granter=2Ec
index 2a10f57=2E=2E4041fe3 100644
--- a/src/xenvbd/granter=2Ec
+++ b/src/xenvbd/granter=2Ec
@@ -111,14 +111,7 @@ GranterDestroy(
     )
 {
     BUG_ON(Granter->Current !=3D 0);
-
-    if (Granter->Cache !=3D NULL) {
-        KIRQL   Irql;
-
-        KeRaiseIrql(DISPATCH_LEVEL, &Irql);
-        __GranterDestroyCache(Granter);
-        KeLowerIrql(Irql);
-    }
+    ASSERT3P(Granter->Cache, =3D=3D, NULL);
=20
     Granter->Frontend =3D NULL;
     RtlZeroMemory(&Granter->Lock, sizeof(KSPIN_LOCK));
@@ -367,6 +360,36 @@ GranterDisconnect(
     __GranterDestroyCache(Granter);
 }
=20
+VOID
+GranterD3ToD0(
+    _Inout_ PXENVBD_GRANTER Granter
+    )
+{
+    ASSERT3P(Granter->Cache, =3D=3D, NULL);
+    ASSERT3S(Granter->Current, =3D=3D, 0);
+}
+
+VOID
+GranterD0ToD3(
+    _Inout_ PXENVBD_GRANTER Granter
+    )
+{
+    KIRQL                   Irql;
+
+    ASSERT(!Granter->Connected);
+
+    // All grants must be revoked before transitioning to S3=2E
+
+    BUG_ON(Granter->Current !=3D 0);
+
+    if (Granter->Cache =3D=3D NULL)
+        return;
+
+    KeRaiseIrql(DISPATCH_LEVEL, &Irql);
+    __GranterDestroyCache(Granter);
+    KeLowerIrql(Irql);
+}
+
 NTSTATUS
 GranterGet(
     _Inout_ PXENVBD_GRANTER Granter,
diff --git a/src/xenvbd/granter=2Eh b/src/xenvbd/granter=2Eh
index e609a8a=2E=2E93b962c 100644
--- a/src/xenvbd/granter=2Eh
+++ b/src/xenvbd/granter=2Eh
@@ -50,6 +50,18 @@ GranterDestroy(
     _Inout_ PXENVBD_GRANTER Granter
     );
=20
+_IRQL_requires_(PASSIVE_LEVEL)
+extern VOID
+GranterD3ToD0(
+    _Inout_ PXENVBD_GRANTER Granter
+    );
+
+_IRQL_requires_(PASSIVE_LEVEL)
+extern VOID
+GranterD0ToD3(
+    _Inout_ PXENVBD_GRANTER Granter
+    );
+
 extern NTSTATUS
 GranterConnect(
     _Inout_ PXENVBD_GRANTER Granter
--=20
2=2E56=2E0=2Ewindows=2E3



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.19d.a89485988827aee3.1a16953d5e7.c9c2f0bb5148e87=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 26 06:58:11 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 26 Oct 2026 06:58:11 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1460779.1671620 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xLEeo-0000ed-1g; Mon, 26 Oct 2026 06:58:10 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1460779.1671620; Mon, 26 Oct 2026 06:58:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xLEen-0000eV-V4; Mon, 26 Oct 2026 06:58:09 +0000
Received: by outflank-mailman (input) for mailman id 1460779;
 Mon, 26 Oct 2026 06:58:08 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a177007add000f79f@swg.vates.tech>)
 id 1xLEel-0000eP-Vp
 for win-pv-devel@lists.xenproject.org; Mon, 26 Oct 2026 06:58:08 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xLEel-00H9Cq-1U
 for win-pv-devel@lists.xenproject.org; Mon, 26 Oct 2026 07:58:07 +0100
Received: from [10.42.69.12] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a177007add000f79f@swg.vates.tech>)
 id 6adef9fd-8faa-0a2a0a5109dd-0a2a450c8dee-6
 for <win-pv-devel@lists.xenproject.org>; Mon, 26 Oct 2026 07:58:06 +0100
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-d25034.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a177007add000f79f@swg.vates.tech>)
 id 6adef9fe-f479-0a2a450c0019-b9ff1c239223-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 26 Oct 2026 07:58:06 +0100
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a177007add000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 26 Oct 2026 06:58:02 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 6FEE581F41;
 Mon, 26 Oct 2026 07:58:01 +0100 (CET)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=7wldN/jDCWMJlCWbztcWuzehnNOyDNMuo8fbh2tLq18=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:feedback-id;
 b=PqR4PJ/bRxWrYyx9F7jWwqVj+XyUm+rummcUJijYsHlW9ECRlKJcX3JJlWppPmo7aSMwz+SLq
 aokksPVc1UPPA4uzkYFp7IlkPGYzn3/ji+M87En1ANykD0UEpxByQHE56qE9r9hXFanP7svcf2s
 nrICAwiYk7gaS3UxZVbyhE5YOkdewNTrxrZ+Ev9WCKaG11z72lPyjRQoyk9U/rBA/j8YGXmiWLB
 YtAwP8/NUPe+FiIN902JA9MVHIiYFhrS5OhAAZq2XJ1XlWmkAzfGnYFRZ1KeH+s4xHdoUgpmaik
 JTs+Vp4wONexe4D+NHme2XQ017hbNMteFU/c4ZVfcwxA==
X-Zone-Loop: aa2d784c30a4a99697ba2678e8ef4b1fe0951e27b00a
x-campaign-type: default
x-transaction-id: 67de7156-9789-4893-9fb3-303227a63970
x-swg-uid: 01-cdab7388-c4e7-4f09-934e-585f1a1c2967
X-Mailer: Sweego
Message-ID:
 <1792997882.8631fc262581453bbf619ec5b2062170.1a177007add000f79f@vates.tech>
x-swg-bid: 1792997882.8631fc262581453bbf619ec5b2062170.1a177007add000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [PATCH] Add UseConsole parameter to disable default console
Date: Mon, 26 Oct 2026 07:57:35 +0100
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.1b8.467e3b446a0907a7.1a1770076b3.f8443f9dc00fd399=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1792997881524
X-purgate-ID: tlsNG-d25034/1792997886-76CDBA5B-38849EF0/0/0
X-purgate-type: clean
X-purgate-size: 6001

---=Part.1b8.467e3b446a0907a7.1a1770076b3.f8443f9dc00fd399=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

In some cases, we may want to assign the default console to something
else (e=2Eg=2E a debug transport)=2E So add a parameter to allow disabling=
 it=2E

Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 src/xenbus/console=2Ec | 68 ++++++++++++++++++++++++++++++--------------
 1 file changed, 47 insertions(+), 21 deletions(-)

diff --git a/src/xenbus/console=2Ec b/src/xenbus/console=2Ec
index 2d747cb=2E=2E0bfe504 100644
--- a/src/xenbus/console=2Ec
+++ b/src/xenbus/console=2Ec
@@ -43,6 +43,8 @@
 #include "dbg_print=2Eh"
 #include "assert=2Eh"
 #include "util=2Eh"
+#include "driver=2Eh"
+#include "registry=2Eh"
=20
 #define CONSOLE_WAKEUP_MAGIC 'EKAW'
=20
@@ -71,6 +73,7 @@ struct _XENBUS_CONSOLE_CONTEXT {
     XENBUS_DEBUG_INTERFACE      DebugInterface;
     PXENBUS_SUSPEND_CALLBACK    SuspendCallbackLate;
     PXENBUS_DEBUG_CALLBACK      DebugCallback;
+    BOOLEAN                     UseConsole;
     BOOLEAN                     Enabled;
 };
=20
@@ -692,13 +695,17 @@ ConsoleAcquire(
=20
     Trace("=3D=3D=3D=3D>\n");
=20
+    status =3D STATUS_NOT_SUPPORTED;
+    if (!Context->UseConsole)
+        goto fail1;
+
     status =3D XENBUS_GNTTAB(Acquire, &Context->GnttabInterface);
     if (!NT_SUCCESS(status))
-        goto fail1;
+        goto fail2;
=20
     status =3D ConsoleGetAddress(Context, &Address);
     if (!NT_SUCCESS(status))
-        goto fail2;
+        goto fail3;
=20
     Context->Address =3D Address;
     Context->Shared =3D (struct xencons_interface *)MmMapIoSpace(Context-=
>Address,
@@ -706,19 +713,19 @@ ConsoleAcquire(
                                                                MmCached);
     status =3D STATUS_UNSUCCESSFUL;
     if (Context->Shared =3D=3D NULL)
-        goto fail3;
+        goto fail4;
=20
     status =3D XENBUS_EVTCHN(Acquire, &Context->EvtchnInterface);
     if (!NT_SUCCESS(status))
-        goto fail4;
+        goto fail5;
=20
     status =3D ConsoleEnable(Context);
     if (!NT_SUCCESS(status))
-        goto fail5;
+        goto fail6;
=20
     status =3D XENBUS_SUSPEND(Acquire, &Context->SuspendInterface);
     if (!NT_SUCCESS(status))
-        goto fail6;
+        goto fail7;
=20
     status =3D XENBUS_SUSPEND(Register,
                             &Context->SuspendInterface,
@@ -727,11 +734,11 @@ ConsoleAcquire(
                             Context,
                             &Context->SuspendCallbackLate);
     if (!NT_SUCCESS(status))
-        goto fail7;
+        goto fail8;
=20
     status =3D XENBUS_DEBUG(Acquire, &Context->DebugInterface);
     if (!NT_SUCCESS(status))
-        goto fail8;
+        goto fail9;
=20
     status =3D XENBUS_DEBUG(Register,
                           &Context->DebugInterface,
@@ -740,7 +747,7 @@ ConsoleAcquire(
                           Context,
                           &Context->DebugCallback);
     if (!NT_SUCCESS(status))
-        goto fail9;
+        goto fail10;
=20
     Trace("<=3D=3D=3D=3D\n");
=20
@@ -749,50 +756,53 @@ done:
=20
     return STATUS_SUCCESS;
=20
-fail9:
-    Error("fail9\n");
+fail10:
+    Error("fail10\n");
=20
     XENBUS_DEBUG(Release, &Context->DebugInterface);
=20
-fail8:
-    Error("fail8\n");
+fail9:
+    Error("fail9\n");
=20
     XENBUS_SUSPEND(Deregister,
                    &Context->SuspendInterface,
                    Context->SuspendCallbackLate);
     Context->SuspendCallbackLate =3D NULL;
=20
+fail8:
+    Error("fail8\n");
+
+    XENBUS_SUSPEND(Release, &Context->SuspendInterface);
+
 fail7:
     Error("fail7\n");
=20
-    XENBUS_SUSPEND(Release, &Context->SuspendInterface);
+    ConsoleDisable(Context);
=20
 fail6:
     Error("fail6\n");
=20
-    ConsoleDisable(Context);
+    XENBUS_EVTCHN(Release, &Context->EvtchnInterface);
=20
 fail5:
     Error("fail5\n");
=20
-    XENBUS_EVTCHN(Release, &Context->EvtchnInterface);
+    MmUnmapIoSpace(Context->Shared, PAGE_SIZE);
+    Context->Shared =3D NULL;
=20
 fail4:
     Error("fail4\n");
=20
-    MmUnmapIoSpace(Context->Shared, PAGE_SIZE);
-    Context->Shared =3D NULL;
+    Context->Address=2EQuadPart =3D 0;
=20
 fail3:
     Error("fail3\n");
=20
-    Context->Address=2EQuadPart =3D 0;
+    XENBUS_GNTTAB(Release, &Context->GnttabInterface);
=20
 fail2:
     Error("fail2\n");
=20
-    XENBUS_GNTTAB(Release, &Context->GnttabInterface);
-
 fail1:
     Error("fail1 (%08x)\n", status);
=20
@@ -872,6 +882,8 @@ ConsoleInitialize(
     _Outptr_ PXENBUS_CONSOLE_CONTEXT    *Context
     )
 {
+    HANDLE                              ParametersKey;
+    ULONG                               UseConsole;
     NTSTATUS                            status;
=20
     Trace("=3D=3D=3D=3D>\n");
@@ -917,6 +929,19 @@ ConsoleInitialize(
=20
     KeInitializeDpc(&(*Context)->Dpc, ConsoleDpc, *Context);
=20
+    ParametersKey =3D DriverGetParametersKey();
+
+    status =3D RegistryQueryDwordValue(ParametersKey,
+                                     "UseConsole",
+                                     &UseConsole);
+    if (!NT_SUCCESS(status))
+        UseConsole =3D 1;
+
+    (*Context)->UseConsole =3D (UseConsole !=3D 0) ? TRUE : FALSE;
+
+    if (!(*Context)->UseConsole)
+        Info("DISABLED\n");
+
     (*Context)->Fdo =3D Fdo;
=20
     Trace("<=3D=3D=3D=3D\n");
@@ -988,6 +1013,7 @@ ConsoleTeardown(
     Context->Dpcs =3D 0;
     Context->Events =3D 0;
=20
+    Context->UseConsole =3D FALSE;
     Context->Fdo =3D NULL;
=20
     RtlZeroMemory(&Context->Dpc, sizeof (KDPC));
--=20
2=2E56=2E0=2Ewindows=2E3



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.1b8.467e3b446a0907a7.1a1770076b3.f8443f9dc00fd399=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 26 10:14:45 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 26 Oct 2026 10:14:45 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1461058.1671998 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xLHj2-0001yb-Om; Mon, 26 Oct 2026 10:14:44 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1461058.1671998; Mon, 26 Oct 2026 10:14:44 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xLHj2-0001yT-Ls; Mon, 26 Oct 2026 10:14:44 +0000
Received: by outflank-mailman (input) for mailman id 1461058;
 Mon, 26 Oct 2026 10:14:43 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <owen.smith@citrix.com>) id 1xLHj1-0001xI-AF
 for win-pv-devel@lists.xenproject.org; Mon, 26 Oct 2026 10:14:43 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xLHj0-003xj0-4j
 for win-pv-devel@lists.xenproject.org; Mon, 26 Oct 2026 11:14:42 +0100
Received: from [10.42.69.4] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6adf2806-bab6-0a2a0a5309dd-0a2a45049222-44
 for <win-pv-devel@lists.xenproject.org>; Mon, 26 Oct 2026 11:14:42 +0100
Received: from [52.101.48.50]
 (helo=MW6PR02CU001.outbound.protection.outlook.com)
 by tlsNG-ebf023.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6adf2810-b57f-0a2a45040019-3465303211d9-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 26 Oct 2026 11:14:41 +0100
Received: from SA6PR03MB7760.namprd03.prod.outlook.com (2603:10b6:806:43c::5)
 by SJ0PR03MB5470.namprd03.prod.outlook.com (2603:10b6:a03:287::8)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.546.22; Mon, 26 Oct
 2026 10:14:37 +0000
Received: from SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38]) by SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38%5]) with mapi id 15.21.0546.021; Mon, 26 Oct 2026
 10:14:37 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:x-ms-exchange-senderadcheck"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
 b=i+HG1PX1Bped+7MueGc0kOVNbbBgJov0oV+mqSpMgWdHA1evTFB3ImgmEyPYxQncYbfo1PJDJOdlNF0nyv7hMVwaSMrkUoE+nocgZK6pAW/mtgWVCVyFtPnDMK/Mq8ylLE0iET1ec2ZaIutCOiepYpGIJvL/JNu1ce+61GZPJmXNUvBAsN/hPEuGPWQkUKTPOn4Fmow5hKXm9/D6uw2ZaSZ1XbKC/BToqzNQblj72pKqfjczX57Odoph0vmjeMGtvlzePSUbwM0Re7jxShPOpGUIB0mCfVXksrILr29nMetk51DOOz9yDwCuZBGc8pFv54oU3Y4DKbkSJJTYqNlnLA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector10001;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=EaVewx4TUrMMTRnAtlPpaz3tGKR8yApyHwXfF1SLv3w=;
 b=NZTOZiZ9kZNIUG7STLSWWvoAyTZTkvjhF9x7GHkweoeLRhLlUSMsIgKPIl8fBxUs1FimLBsU6q37hAENEVIrLExmv5P8wBIXgIqy28FB57vUiaVUOdHUiIsbmAn+tD7h1rbeQLTIe45wt1+5F/GUg3HiI22gRPCG3ez9k2WiL8ZoIkjDjSLjFBXC9FcZf6bdGukfGN7wlO/Bkm7DVaFq2ragkJEzf6YXLPVayuHqKnE5My61tl72WMONCMzhbY10FJzKG31HBOUOxRXoANFyitFWMiXfhpWnRI05jIHWqait+KRGtGtghG1gaPaMzGjlvl918muZquN58jCilZ5ieg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=EaVewx4TUrMMTRnAtlPpaz3tGKR8yApyHwXfF1SLv3w=;
 b=kbGrVWCr7WjIH3FpgC8NnUbBozG0lTIH13hMDO5tyeAePgq37asKUsRgWbxhQhsjeEXCmMdgKQhT0YlVabLBWuCR1urf96RV5DdyWKjQHNKbn7idAa1/4//53Ikd2vNye9DSBkNXHgqm+yI5R+Z3l+68LqmwwgNlURxpnUBsAzs=
From: Owen Smith <owen.smith@citrix.com>
To: Tu Dinh <ngoc-tu.dinh@vates.tech>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Subject: Re: [PATCH] Add UseConsole parameter to disable default console
Thread-Topic: [PATCH] Add UseConsole parameter to disable default console
Thread-Index: AQHdZRdnsgXsHTe+9UuY0/QI3ZURircPmdno
Date: Mon, 26 Oct 2026 10:14:37 +0000
Message-ID:
 <SA6PR03MB77608D0200C08E175F449B85FE612@SA6PR03MB7760.namprd03.prod.outlook.com>
References:
 <1792997882.8631fc262581453bbf619ec5b2062170.1a177007add000f79f@vates.tech>
In-Reply-To:
 <1792997882.8631fc262581453bbf619ec5b2062170.1a177007add000f79f@vates.tech>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
msip_labels:
authentication-results: mx.microsoft.com 1; dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=citrix.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: SA6PR03MB7760:EE_|SJ0PR03MB5470:EE_
x-ms-office365-filtering-correlation-id: e315dd58-93b9-4e46-1124-08df3349f08d
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam:
 BCL:0;ARA:13230040|23010399003|376014|366016|1800799024|261009223027099003|261022115727099003|261021121427099003|261021123027099003|261022105027099003|10067099003|56012099006|3023799007|22082099003|18002099003|11063799006|38070700021;
x-microsoft-antispam-message-info:
 9jsEq3ZOH4eMK3Iyk2nYAcPuzOhwEnoMQVLg+PjnVD0lpdRKWryNiDeza6x3OYAGJsFvo3p/3oAZ6GiLLKb2fcaugZ5dG9EV0+LP/hiRgik6b0Lowqf+oot8s7tKjMCPDYXzdbpcg1FRA5RhLqoT/3wDf9rtcieZ8jt8oRv+DQfIdd5Skawnj/Nz7KWRBj81imLvrbX9EzX6LZyGVMuFlabH2bX4v7a4wvxL5pIc3SOVmLkg+b/F8sYyZhDnhX2XivBM6qY6Lz4GUCDeyIyQQwHVRIXbMQXvn37I/wKPEHhzleYKe2laRvWzsLkraQIY4bXDGQYoI8e72N8563GDC5tw3RAWgrfes5ghJmd1djOmuFPSQ0Z1xZmhDd21OuDKDaZ/xatFA3xER401ckaCoFL3C3/S7dySeM7k/+kuhgVCNvzBlAURGmJJ4diyWy5R7n017O6i3wYVpgSbvt943Dm1sCK5W9GczqnAPzB/iQJbu0bHQ5e9rxbAgyaUllSHHHvdK3k9w5IU/4oYsTRkfBimsDSO1rtmVOZI3T+8e1yJHUCBbGVVySBC3WeOYjtas3BLKa7i6BhN2z79h3Fget8jdvmteo5YQNoH+yCnfoYK3yLdopys1+E4rKxvS0acUNk8oPxzi/WMCTQUEH+JrOKoRh0foIndY1ExMXuoJ/o=
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SA6PR03MB7760.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(376014)(366016)(1800799024)(261009223027099003)(261022115727099003)(261021121427099003)(261021123027099003)(261022105027099003)(10067099003)(56012099006)(3023799007)(22082099003)(18002099003)(11063799006)(38070700021);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?iso-8859-1?Q?JQ1PrKfsx2bZHnkI46wyUsG2+VhHq7pfs7rPwqwbtQ2GthWUO1WufbUoNJ?=
 =?iso-8859-1?Q?8N63bsmRqdT7+Lxq6NVbxmDJEnl3Sa3WjGVPOQcYklEh8F5rOdkyMhMw0c?=
 =?iso-8859-1?Q?9lcD1bqp54V9ze67pEfb166snrX/WcJM9ev0sc2GU4aKTZ1QEBu7ad8B1m?=
 =?iso-8859-1?Q?i7iZMkgR7OSq2xcM+HQasiiZ2rXWZBPyftmrrzSKqwEEYB/MOP/DFU/v0f?=
 =?iso-8859-1?Q?wWU0JYZqJ/aNVZrWG5cPQ/CWT44OsZNLwcqpNUlXAr+89vflvkYms0zSWF?=
 =?iso-8859-1?Q?YJhbb++lHkxxNz0UALjXyT9v46uQUtIXTH9wPaR9pEGVqpUektq2a9qfeD?=
 =?iso-8859-1?Q?b5vPBjchh5NBcMDbPvY6ok23ltfXigsOGXI584ey1kSqzwdT5q5ZscQ9PR?=
 =?iso-8859-1?Q?KyMnSLv56Gm7pTGWGaPV0Vdr7SssQn9DsJMh2q9CYdGBRDnpGnolalM+VC?=
 =?iso-8859-1?Q?eAeK7IFv54ZncbmBHwQGVg4YpsrB26kTA0ZCI4K1x1X/WOwujQG8PbcB+Q?=
 =?iso-8859-1?Q?aKyeC3lhWRzzakQK6TNEBFZHvTiZKa2MZ+ugYGHQdXdIJC1q5W4FCAY0H3?=
 =?iso-8859-1?Q?x/I4pC92cKeRyvpWTUH0VQeu3DNjd/MqOMSZukuVWFZUg73QmUG2NAY4/6?=
 =?iso-8859-1?Q?XnSuyG+Qp00qYke3UbFDxCOsJga7fSoHhVfAQ5MBmiQai1gOd63wwVIpRe?=
 =?iso-8859-1?Q?uqsOlRSHMHvi/H1nTrNJmLltrHKOjP8MVoZwQnxy3YYuHc69ekJQB8zOo+?=
 =?iso-8859-1?Q?YzCy/wp6zsKmSHt7XIzHvC3/KI0/lcNAiXjyhe1oElXKCdSs1CEC9BiEz9?=
 =?iso-8859-1?Q?M06O60n2XfxDbnON13cf3o5Y7fpn3UEfvBg80f6FEkY019nJRoms3lhcz1?=
 =?iso-8859-1?Q?TgikU9rHSc3JVBUxESSZ5JNfeTAHvTNdTBAlFl4MV7KOgEOr7FM/Zl+ypa?=
 =?iso-8859-1?Q?EI+d1lX9clQWX8/6f64l/MV/kLvb+p4HCaOkrjI/Kjv7X9FvGyo+z+56Qk?=
 =?iso-8859-1?Q?mTBLtI8LitLHx++kuoPRDBUnAjklh5PgsokNPXaXPpPSu1ZC2fdkDaWVyW?=
 =?iso-8859-1?Q?Li3HWwPi2z8medHfkipWIvDjUpV6/aqB4iZ7sS60Fo0Bx5mfHHEaME2CMb?=
 =?iso-8859-1?Q?3kxTJN0CBxVIP8rCKdUaLPvY+HDMKgQ9qlJmaRtsziTyyXdSgZw1XXZ4QX?=
 =?iso-8859-1?Q?ekblQq3GzP0zhADW4Old9XgUuEbHvhBEUtMJwlshlu8wbdE+FnfaBK4jsd?=
 =?iso-8859-1?Q?bS5QSSFXN2tdzomypDmzFqnM+e+ZG5L8W59o4ax4J+yLylNCmG19U+Ormu?=
 =?iso-8859-1?Q?KXnX5A+Gsmxh/p072NQJhtpaG8fuVUMbQHcnzyh6AvCn/xGcvUEpUQXZql?=
 =?iso-8859-1?Q?TbGnm+cTQJSFtqDsdLg88fBuS4OPJZVxITFKHG8lOPZwu+YfF4NmarYnZI?=
 =?iso-8859-1?Q?fXo9KeOOU3M1F9Ez9FLh4tBtQX7R13H6DL2TJ2iVFE4LwkfbXqZEveDE9s?=
 =?iso-8859-1?Q?+IhTC7hiFisSqYeeHmvC9wOfEHA9eSWnhAVnpi3qm0/yVw0e1YnTV2e+mK?=
 =?iso-8859-1?Q?6m480oP7VcOZfo3XlAzVmghxcWHYrH6WKwBHk8eBOC2LX6dzVkwrv4TtWY?=
 =?iso-8859-1?Q?FP8ixYLKLtJ3JddkWNXAm3eAmFjYT+aM6qw7ExWnpeAMlqHEW1IMwuGpqw?=
 =?iso-8859-1?Q?E+ZYUprySR1KZWc3LZfjpqMbwFaaeU30L00+d9ZXZCsDMnhAOtJDBvVjbZ?=
 =?iso-8859-1?Q?aly/9Lx6Uh2l3S0ucDPMmRiJk+93B/1xoi35WC3uiq9Jh/?=
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-OriginatorOrg: citrix.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: SA6PR03MB7760.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: e315dd58-93b9-4e46-1124-08df3349f08d
X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Oct 2026 10:14:37.0567
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: R/bWwtouszI1SetL0BPC9UFtu+kR6ixY1Wxol5dlUezgNR5sWu2XjcS7JfR8F1urRODKEO2WoUqbTLAw2aqK+w==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR03MB5470
X-purgate-ID: tlsNG-ebf023/1793009681-526CAB50-DE150C42/0/0
X-purgate-type: clean
X-purgate-size: 7159

By setting "UseConsole" =3D 1, the default console (and CONSOLE) interface =
will fail.=0A=
The default console's PDO will still be created, but any attempt to call Cr=
eateFile will=0A=
fail, so I'd assume any alternate use would need to manage the default cons=
ole ring=0A=
itself. Non-default console's PDOs are unaffected.=0A=
=0A=
Owen=0A=
=0A=
=0A=
________________________________________=0A=
From: win-pv-devel <win-pv-devel-bounces@lists.xenproject.org> on behalf of=
 Tu Dinh <ngoc-tu.dinh@vates.tech>=0A=
Sent: 26 October 2026 6:57 AM=0A=
To: win-pv-devel@lists.xenproject.org=0A=
Cc: Tu Dinh=0A=
Subject: [PATCH] Add UseConsole parameter to disable default console=0A=
=0A=
In some cases, we may want to assign the default console to something=0A=
else (e.g. a debug transport). So add a parameter to allow disabling it.=0A=
=0A=
Signed-off-by: Tu Dinh <ngoc-tu.dinh@vates.tech>=0A=
---=0A=
 src/xenbus/console.c | 68 ++++++++++++++++++++++++++++++--------------=0A=
 1 file changed, 47 insertions(+), 21 deletions(-)=0A=
=0A=
diff --git a/src/xenbus/console.c b/src/xenbus/console.c=0A=
index 2d747cb..0bfe504 100644=0A=
--- a/src/xenbus/console.c=0A=
+++ b/src/xenbus/console.c=0A=
@@ -43,6 +43,8 @@=0A=
 #include "dbg_print.h"=0A=
 #include "assert.h"=0A=
 #include "util.h"=0A=
+#include "driver.h"=0A=
+#include "registry.h"=0A=
=0A=
 #define CONSOLE_WAKEUP_MAGIC 'EKAW'=0A=
=0A=
@@ -71,6 +73,7 @@ struct _XENBUS_CONSOLE_CONTEXT {=0A=
     XENBUS_DEBUG_INTERFACE      DebugInterface;=0A=
     PXENBUS_SUSPEND_CALLBACK    SuspendCallbackLate;=0A=
     PXENBUS_DEBUG_CALLBACK      DebugCallback;=0A=
+    BOOLEAN                     UseConsole;=0A=
     BOOLEAN                     Enabled;=0A=
 };=0A=
=0A=
@@ -692,13 +695,17 @@ ConsoleAcquire(=0A=
=0A=
     Trace("=3D=3D=3D=3D>\n");=0A=
=0A=
+    status =3D STATUS_NOT_SUPPORTED;=0A=
+    if (!Context->UseConsole)=0A=
+        goto fail1;=0A=
+=0A=
     status =3D XENBUS_GNTTAB(Acquire, &Context->GnttabInterface);=0A=
     if (!NT_SUCCESS(status))=0A=
-        goto fail1;=0A=
+        goto fail2;=0A=
=0A=
     status =3D ConsoleGetAddress(Context, &Address);=0A=
     if (!NT_SUCCESS(status))=0A=
-        goto fail2;=0A=
+        goto fail3;=0A=
=0A=
     Context->Address =3D Address;=0A=
     Context->Shared =3D (struct xencons_interface *)MmMapIoSpace(Context->=
Address,=0A=
@@ -706,19 +713,19 @@ ConsoleAcquire(=0A=
                                                                MmCached);=
=0A=
     status =3D STATUS_UNSUCCESSFUL;=0A=
     if (Context->Shared =3D=3D NULL)=0A=
-        goto fail3;=0A=
+        goto fail4;=0A=
=0A=
     status =3D XENBUS_EVTCHN(Acquire, &Context->EvtchnInterface);=0A=
     if (!NT_SUCCESS(status))=0A=
-        goto fail4;=0A=
+        goto fail5;=0A=
=0A=
     status =3D ConsoleEnable(Context);=0A=
     if (!NT_SUCCESS(status))=0A=
-        goto fail5;=0A=
+        goto fail6;=0A=
=0A=
     status =3D XENBUS_SUSPEND(Acquire, &Context->SuspendInterface);=0A=
     if (!NT_SUCCESS(status))=0A=
-        goto fail6;=0A=
+        goto fail7;=0A=
=0A=
     status =3D XENBUS_SUSPEND(Register,=0A=
                             &Context->SuspendInterface,=0A=
@@ -727,11 +734,11 @@ ConsoleAcquire(=0A=
                             Context,=0A=
                             &Context->SuspendCallbackLate);=0A=
     if (!NT_SUCCESS(status))=0A=
-        goto fail7;=0A=
+        goto fail8;=0A=
=0A=
     status =3D XENBUS_DEBUG(Acquire, &Context->DebugInterface);=0A=
     if (!NT_SUCCESS(status))=0A=
-        goto fail8;=0A=
+        goto fail9;=0A=
=0A=
     status =3D XENBUS_DEBUG(Register,=0A=
                           &Context->DebugInterface,=0A=
@@ -740,7 +747,7 @@ ConsoleAcquire(=0A=
                           Context,=0A=
                           &Context->DebugCallback);=0A=
     if (!NT_SUCCESS(status))=0A=
-        goto fail9;=0A=
+        goto fail10;=0A=
=0A=
     Trace("<=3D=3D=3D=3D\n");=0A=
=0A=
@@ -749,50 +756,53 @@ done:=0A=
=0A=
     return STATUS_SUCCESS;=0A=
=0A=
-fail9:=0A=
-    Error("fail9\n");=0A=
+fail10:=0A=
+    Error("fail10\n");=0A=
=0A=
     XENBUS_DEBUG(Release, &Context->DebugInterface);=0A=
=0A=
-fail8:=0A=
-    Error("fail8\n");=0A=
+fail9:=0A=
+    Error("fail9\n");=0A=
=0A=
     XENBUS_SUSPEND(Deregister,=0A=
                    &Context->SuspendInterface,=0A=
                    Context->SuspendCallbackLate);=0A=
     Context->SuspendCallbackLate =3D NULL;=0A=
=0A=
+fail8:=0A=
+    Error("fail8\n");=0A=
+=0A=
+    XENBUS_SUSPEND(Release, &Context->SuspendInterface);=0A=
+=0A=
 fail7:=0A=
     Error("fail7\n");=0A=
=0A=
-    XENBUS_SUSPEND(Release, &Context->SuspendInterface);=0A=
+    ConsoleDisable(Context);=0A=
=0A=
 fail6:=0A=
     Error("fail6\n");=0A=
=0A=
-    ConsoleDisable(Context);=0A=
+    XENBUS_EVTCHN(Release, &Context->EvtchnInterface);=0A=
=0A=
 fail5:=0A=
     Error("fail5\n");=0A=
=0A=
-    XENBUS_EVTCHN(Release, &Context->EvtchnInterface);=0A=
+    MmUnmapIoSpace(Context->Shared, PAGE_SIZE);=0A=
+    Context->Shared =3D NULL;=0A=
=0A=
 fail4:=0A=
     Error("fail4\n");=0A=
=0A=
-    MmUnmapIoSpace(Context->Shared, PAGE_SIZE);=0A=
-    Context->Shared =3D NULL;=0A=
+    Context->Address.QuadPart =3D 0;=0A=
=0A=
 fail3:=0A=
     Error("fail3\n");=0A=
=0A=
-    Context->Address.QuadPart =3D 0;=0A=
+    XENBUS_GNTTAB(Release, &Context->GnttabInterface);=0A=
=0A=
 fail2:=0A=
     Error("fail2\n");=0A=
=0A=
-    XENBUS_GNTTAB(Release, &Context->GnttabInterface);=0A=
-=0A=
 fail1:=0A=
     Error("fail1 (%08x)\n", status);=0A=
=0A=
@@ -872,6 +882,8 @@ ConsoleInitialize(=0A=
     _Outptr_ PXENBUS_CONSOLE_CONTEXT    *Context=0A=
     )=0A=
 {=0A=
+    HANDLE                              ParametersKey;=0A=
+    ULONG                               UseConsole;=0A=
     NTSTATUS                            status;=0A=
=0A=
     Trace("=3D=3D=3D=3D>\n");=0A=
@@ -917,6 +929,19 @@ ConsoleInitialize(=0A=
=0A=
     KeInitializeDpc(&(*Context)->Dpc, ConsoleDpc, *Context);=0A=
=0A=
+    ParametersKey =3D DriverGetParametersKey();=0A=
+=0A=
+    status =3D RegistryQueryDwordValue(ParametersKey,=0A=
+                                     "UseConsole",=0A=
+                                     &UseConsole);=0A=
+    if (!NT_SUCCESS(status))=0A=
+        UseConsole =3D 1;=0A=
+=0A=
+    (*Context)->UseConsole =3D (UseConsole !=3D 0) ? TRUE : FALSE;=0A=
+=0A=
+    if (!(*Context)->UseConsole)=0A=
+        Info("DISABLED\n");=0A=
+=0A=
     (*Context)->Fdo =3D Fdo;=0A=
=0A=
     Trace("<=3D=3D=3D=3D\n");=0A=
@@ -988,6 +1013,7 @@ ConsoleTeardown(=0A=
     Context->Dpcs =3D 0;=0A=
     Context->Events =3D 0;=0A=
=0A=
+    Context->UseConsole =3D FALSE;=0A=
     Context->Fdo =3D NULL;=0A=
=0A=
     RtlZeroMemory(&Context->Dpc, sizeof (KDPC));=0A=
--=0A=
2.56.0.windows.3=0A=
=0A=
=0A=
=0A=
--=0A=
Ngoc Tu Dinh | Vates XCP-ng Developer=0A=
=0A=
XCP-ng & Xen Orchestra - Vates solutions=0A=
=0A=
web: https://vates.tech=0A=


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 26 10:25:29 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 26 Oct 2026 10:25:29 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1461068.1672011 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xLHtQ-0004hb-S8; Mon, 26 Oct 2026 10:25:28 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1461068.1672011; Mon, 26 Oct 2026 10:25:28 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xLHtQ-0004hU-PM; Mon, 26 Oct 2026 10:25:28 +0000
Received: by outflank-mailman (input) for mailman id 1461068;
 Mon, 26 Oct 2026 10:25:27 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a177be53fd000f79f@swg.vates.tech>)
 id 1xLHtO-0004hO-PG
 for win-pv-devel@lists.xenproject.org; Mon, 26 Oct 2026 10:25:27 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xLHtO-000G6Q-1O
 for win-pv-devel@lists.xenproject.org; Mon, 26 Oct 2026 11:25:26 +0100
Received: from [10.42.69.10] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a177be53fd000f79f@swg.vates.tech>)
 id 6adf2a8b-e002-0a2a0a5209dd-0a2a450ad0a4-18
 for <win-pv-devel@lists.xenproject.org>; Mon, 26 Oct 2026 11:25:25 +0100
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-4011c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a177be53fd000f79f@swg.vates.tech>)
 id 6adf2a95-f2d2-0a2a450a0019-b9ff1c23af57-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 26 Oct 2026 11:25:25 +0100
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a177be53fd000f79f.002 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 26 Oct 2026 10:25:24 +0000
Received: from [192.168.1.61] (142.220.66.37.rev.sfr.net [37.66.220.142])
 (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id B531482C43;
 Mon, 26 Oct 2026 11:25:23 +0100 (CET)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=Q8YUpie3Ph+TC2I1Gql7nl3uKw6ELuqu4gT37bcGuIk=;
 h=from:subject:date:message-id:to:mime-version:content-type:in-reply-to:references:feedback-id;
 b=rPLKgiXaIHHUAfxt6EtL4OtAIQDZxRfeEdlblNyrmyIWZldLGwTmGw5OMBIBQmY+DuOK5XW2y
 9ShOSbokgYcVEYhRuXmSYEUWSJ90pDoTMg5ArSuDBOAr7P4ClpCzi9cPZMV2t0bqbumxyIBsvMe
 yJ0gIehN31/Hi2JwIc3E/jFYo3+zAuSbf+xn+ns3laDu3y38gXG1BDf0ed6z7OxYb8Tj0ipuhtJ
 AzcOkftU5cJpGg6lZElfVEZDkmWrAYLKwswalYWkJAulxgUUzLoSfrio9jyay4fVSu+NkTdNogM
 uuYBbvu2IDqsP19LBlIBZLIvwadgyRWbNpXSXUk3VWgA==
X-Zone-Loop: 04594d143b3572bc3e2f7d6a60d0c1c74d4d8039dacf
x-campaign-type: default
x-transaction-id: 7ecc3e0f-c7ff-4178-9a26-61e429240fb0
x-swg-uid: 01-d99b159c-d9a2-4897-b0b2-217d572e5d76
X-Mailer: Sweego
Message-ID:
 <1793010324.8631fc262581453bbf619ec5b2062170.1a177be53fd000f79f@vates.tech>
x-swg-bid: 1793010324.8631fc262581453bbf619ec5b2062170.1a177be53fd000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
Date: Mon, 26 Oct 2026 11:25:23 +0100
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH] Add UseConsole parameter to disable default console
Content-Language: en-US
To: Owen Smith <owen.smith@citrix.com>,
 "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <1792997882.8631fc262581453bbf619ec5b2062170.1a177007add000f79f@vates.tech>
 <SA6PR03MB77608D0200C08E175F449B85FE612@SA6PR03MB7760.namprd03.prod.outlook.com>
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
In-Reply-To: <SA6PR03MB77608D0200C08E175F449B85FE612@SA6PR03MB7760.namprd03.prod.outlook.com>
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.1d7.244cd5e99a3bd0f3.1a177be5155.cafb8dbac8c7009e=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1793010323797
X-purgate-ID: tlsNG-4011c0/1793010325-52ADCCFC-57D1A35D/0/0
X-purgate-type: clean
X-purgate-size: 7867

---=Part.1d7.244cd5e99a3bd0f3.1a177be5155.cafb8dbac8c7009e=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

On 26/10/2026 11:15, Owen Smith wrote:
> By setting "UseConsole" =3D 1, the default console (and CONSOLE) interfa=
ce will fail=2E
> The default console's PDO will still be created, but any attempt to call=
 CreateFile will
> fail, so I'd assume any alternate use would need to manage the default c=
onsole ring
> itself=2E Non-default console's PDOs are unaffected=2E
>=20

My idea is to totally prevent xenbus and others from touching the=20
default console ring and leave the console ring's usage to some other=20
applications=2E That seemed simpler than swallowing read/write requests at=
=20
first glance=2E

 From my testing, it looks like I can still open handles to the default=20
console PDO XENCONS\VEN_XN&DEV_CONSOLE\0 (e=2Eg=2E Get-NtFile -Access=20
ReadData,WriteData,Synchronize -ShareMode Delete \Device\=2E=2E=2E)=2E Alt=
hough=20
I haven't tested this point further=2E

> Owen
>=20
>=20
> ________________________________________
> From: win-pv-devel <win-pv-devel-bounces@lists=2Exenproject=2Eorg> on be=
half of Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
> Sent: 26 October 2026 6:57 AM
> To: win-pv-devel@lists=2Exenproject=2Eorg
> Cc: Tu Dinh
> Subject: [PATCH] Add UseConsole parameter to disable default console
>=20
> In some cases, we may want to assign the default console to something
> else (e=2Eg=2E a debug transport)=2E So add a parameter to allow disabli=
ng it=2E
>=20
> Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
> ---
>   src/xenbus/console=2Ec | 68 ++++++++++++++++++++++++++++++------------=
--
>   1 file changed, 47 insertions(+), 21 deletions(-)
>=20
> diff --git a/src/xenbus/console=2Ec b/src/xenbus/console=2Ec
> index 2d747cb=2E=2E0bfe504 100644
> --- a/src/xenbus/console=2Ec
> +++ b/src/xenbus/console=2Ec
> @@ -43,6 +43,8 @@
>   #include "dbg_print=2Eh"
>   #include "assert=2Eh"
>   #include "util=2Eh"
> +#include "driver=2Eh"
> +#include "registry=2Eh"
>=20
>   #define CONSOLE_WAKEUP_MAGIC 'EKAW'
>=20
> @@ -71,6 +73,7 @@ struct _XENBUS_CONSOLE_CONTEXT {
>       XENBUS_DEBUG_INTERFACE      DebugInterface;
>       PXENBUS_SUSPEND_CALLBACK    SuspendCallbackLate;
>       PXENBUS_DEBUG_CALLBACK      DebugCallback;
> +    BOOLEAN                     UseConsole;
>       BOOLEAN                     Enabled;
>   };
>=20
> @@ -692,13 +695,17 @@ ConsoleAcquire(
>=20
>       Trace("=3D=3D=3D=3D>\n");
>=20
> +    status =3D STATUS_NOT_SUPPORTED;
> +    if (!Context->UseConsole)
> +        goto fail1;
> +
>       status =3D XENBUS_GNTTAB(Acquire, &Context->GnttabInterface);
>       if (!NT_SUCCESS(status))
> -        goto fail1;
> +        goto fail2;
>=20
>       status =3D ConsoleGetAddress(Context, &Address);
>       if (!NT_SUCCESS(status))
> -        goto fail2;
> +        goto fail3;
>=20
>       Context->Address =3D Address;
>       Context->Shared =3D (struct xencons_interface *)MmMapIoSpace(Conte=
xt->Address,
> @@ -706,19 +713,19 @@ ConsoleAcquire(
>                                                                  MmCache=
d);
>       status =3D STATUS_UNSUCCESSFUL;
>       if (Context->Shared =3D=3D NULL)
> -        goto fail3;
> +        goto fail4;
>=20
>       status =3D XENBUS_EVTCHN(Acquire, &Context->EvtchnInterface);
>       if (!NT_SUCCESS(status))
> -        goto fail4;
> +        goto fail5;
>=20
>       status =3D ConsoleEnable(Context);
>       if (!NT_SUCCESS(status))
> -        goto fail5;
> +        goto fail6;
>=20
>       status =3D XENBUS_SUSPEND(Acquire, &Context->SuspendInterface);
>       if (!NT_SUCCESS(status))
> -        goto fail6;
> +        goto fail7;
>=20
>       status =3D XENBUS_SUSPEND(Register,
>                               &Context->SuspendInterface,
> @@ -727,11 +734,11 @@ ConsoleAcquire(
>                               Context,
>                               &Context->SuspendCallbackLate);
>       if (!NT_SUCCESS(status))
> -        goto fail7;
> +        goto fail8;
>=20
>       status =3D XENBUS_DEBUG(Acquire, &Context->DebugInterface);
>       if (!NT_SUCCESS(status))
> -        goto fail8;
> +        goto fail9;
>=20
>       status =3D XENBUS_DEBUG(Register,
>                             &Context->DebugInterface,
> @@ -740,7 +747,7 @@ ConsoleAcquire(
>                             Context,
>                             &Context->DebugCallback);
>       if (!NT_SUCCESS(status))
> -        goto fail9;
> +        goto fail10;
>=20
>       Trace("<=3D=3D=3D=3D\n");
>=20
> @@ -749,50 +756,53 @@ done:
>=20
>       return STATUS_SUCCESS;
>=20
> -fail9:
> -    Error("fail9\n");
> +fail10:
> +    Error("fail10\n");
>=20
>       XENBUS_DEBUG(Release, &Context->DebugInterface);
>=20
> -fail8:
> -    Error("fail8\n");
> +fail9:
> +    Error("fail9\n");
>=20
>       XENBUS_SUSPEND(Deregister,
>                      &Context->SuspendInterface,
>                      Context->SuspendCallbackLate);
>       Context->SuspendCallbackLate =3D NULL;
>=20
> +fail8:
> +    Error("fail8\n");
> +
> +    XENBUS_SUSPEND(Release, &Context->SuspendInterface);
> +
>   fail7:
>       Error("fail7\n");
>=20
> -    XENBUS_SUSPEND(Release, &Context->SuspendInterface);
> +    ConsoleDisable(Context);
>=20
>   fail6:
>       Error("fail6\n");
>=20
> -    ConsoleDisable(Context);
> +    XENBUS_EVTCHN(Release, &Context->EvtchnInterface);
>=20
>   fail5:
>       Error("fail5\n");
>=20
> -    XENBUS_EVTCHN(Release, &Context->EvtchnInterface);
> +    MmUnmapIoSpace(Context->Shared, PAGE_SIZE);
> +    Context->Shared =3D NULL;
>=20
>   fail4:
>       Error("fail4\n");
>=20
> -    MmUnmapIoSpace(Context->Shared, PAGE_SIZE);
> -    Context->Shared =3D NULL;
> +    Context->Address=2EQuadPart =3D 0;
>=20
>   fail3:
>       Error("fail3\n");
>=20
> -    Context->Address=2EQuadPart =3D 0;
> +    XENBUS_GNTTAB(Release, &Context->GnttabInterface);
>=20
>   fail2:
>       Error("fail2\n");
>=20
> -    XENBUS_GNTTAB(Release, &Context->GnttabInterface);
> -
>   fail1:
>       Error("fail1 (%08x)\n", status);
>=20
> @@ -872,6 +882,8 @@ ConsoleInitialize(
>       _Outptr_ PXENBUS_CONSOLE_CONTEXT    *Context
>       )
>   {
> +    HANDLE                              ParametersKey;
> +    ULONG                               UseConsole;
>       NTSTATUS                            status;
>=20
>       Trace("=3D=3D=3D=3D>\n");
> @@ -917,6 +929,19 @@ ConsoleInitialize(
>=20
>       KeInitializeDpc(&(*Context)->Dpc, ConsoleDpc, *Context);
>=20
> +    ParametersKey =3D DriverGetParametersKey();
> +
> +    status =3D RegistryQueryDwordValue(ParametersKey,
> +                                     "UseConsole",
> +                                     &UseConsole);
> +    if (!NT_SUCCESS(status))
> +        UseConsole =3D 1;
> +
> +    (*Context)->UseConsole =3D (UseConsole !=3D 0) ? TRUE : FALSE;
> +
> +    if (!(*Context)->UseConsole)
> +        Info("DISABLED\n");
> +
>       (*Context)->Fdo =3D Fdo;
>=20
>       Trace("<=3D=3D=3D=3D\n");
> @@ -988,6 +1013,7 @@ ConsoleTeardown(
>       Context->Dpcs =3D 0;
>       Context->Events =3D 0;
>=20
> +    Context->UseConsole =3D FALSE;
>       Context->Fdo =3D NULL;
>=20
>       RtlZeroMemory(&Context->Dpc, sizeof (KDPC));
> --
> 2=2E56=2E0=2Ewindows=2E3
>=20
>=20
>=20
> --
> Ngoc Tu Dinh | Vates XCP-ng Developer
>=20
> XCP-ng & Xen Orchestra - Vates solutions
>=20
> web: https://vates=2Etech
>=20



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.1d7.244cd5e99a3bd0f3.1a177be5155.cafb8dbac8c7009e=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 26 10:42:59 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 26 Oct 2026 10:42:59 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1461086.1672033 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xLIAN-0000tQ-Er; Mon, 26 Oct 2026 10:42:59 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1461086.1672033; Mon, 26 Oct 2026 10:42:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xLIAN-0000tJ-C8; Mon, 26 Oct 2026 10:42:59 +0000
Received: by outflank-mailman (input) for mailman id 1461086;
 Mon, 26 Oct 2026 10:42:59 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <owen.smith@citrix.com>) id 1xLIAM-0000tD-Oz
 for win-pv-devel@lists.xenproject.org; Mon, 26 Oct 2026 10:42:58 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xLIAM-000JdN-5d
 for win-pv-devel@lists.xenproject.org; Mon, 26 Oct 2026 11:42:58 +0100
Received: from [10.42.69.6] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6adf2e9b-bab6-0a2a0a5309dd-0a2a4506eb14-40
 for <win-pv-devel@lists.xenproject.org>; Mon, 26 Oct 2026 11:42:58 +0100
Received: from [40.107.208.7]
 (helo=PH0PR06CU001.outbound.protection.outlook.com)
 by tlsNG-16d1c6.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6adf2eb0-195a-0a2a45060019-286bd007a118-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 26 Oct 2026 11:42:57 +0100
Received: from SA6PR03MB7760.namprd03.prod.outlook.com (2603:10b6:806:43c::5)
 by SJ0PR03MB5423.namprd03.prod.outlook.com (2603:10b6:a03:28c::5)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.546.21; Mon, 26 Oct
 2026 10:42:55 +0000
Received: from SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38]) by SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38%5]) with mapi id 15.21.0546.021; Mon, 26 Oct 2026
 10:42:55 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:x-ms-exchange-senderadcheck"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
 b=Mor8Gq4vEFL9BIZjEX1miz/yWgz4Nev5b1Rlwc7XBGOdB1QXRSrs+Nm3JP447cbKVRDtVgzz3CbkhmlLGVFGp2ESb3KQW1Wcn1u/W+Vobg2TDnbat53oxKUQf92V3gKb/OFR1TAUm2kic9gJ9cbVRFUB3cMoO4RvxxcBYxr49I7oamWXWn9OhT8Nyinw7kkgp4+oEvGpycf7MyzVDh4hfbjg9C33MGhglheo3RDvaIMuGEqM8QBH13vu+TcodRjAh/omVcxXd/FTrk0ODzQFGe77djfr2I9UCnNhPph5yPDaRQSk6lIAlmS3HSRFHoOCtYglGh0EAuOuIxg2hD1aHA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector10001;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=l8w3E9l+0tRdPPKqal6LzlStfPeczJhCn5hihPEa8Tg=;
 b=iuLN/Q+I67hF1RVqIVxBjhwpnECpebgO7v/TX7BeP3dGrLn6s9TBjmmF3UykZ/PgFiKVE0Knl/9OvvVhPhvq76/7KmnrunV1mx08vReqk9By8Z7gVlwGt6UcmBnHOi249UWJzk0Vla/qv9oyjrY6r3HKcCaq7+kVW44/TvjIJTM+jbcsKn565aL9hxWsLHK3it55lYrW//0A84DwwFqSyR4J/x6PtfbDBpoAjOnS0Ok+pY2OraGHUY1uN83WePIUvvdDes80F8B/digyMdWTc0RAfFEfDFhU8URC+Xs0FQIFsGbP4OoD7aaZVG+OuFCNMU+rxhsEXxAocNtXJgCFtw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=l8w3E9l+0tRdPPKqal6LzlStfPeczJhCn5hihPEa8Tg=;
 b=0gL7iF80Ly+76yX7WMrl617Tb6dKp5jlVKzsU4iaujEp5q731X8SvzuLCS5qolowCx11uKH9sLhvmPIz+JnSKWPSlLdHuL9u6eF/GMDbAZedTSS5FOev22Q0pChYHiatMQnLDxvzIWOfUe5eP6DVN5m3Ub7hicT3F9VxEwK6FPo=
From: Owen Smith <owen.smith@citrix.com>
To: Tu Dinh <ngoc-tu.dinh@vates.tech>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Subject: Re: [PATCH] Add UseConsole parameter to disable default console
Thread-Topic: [PATCH] Add UseConsole parameter to disable default console
Thread-Index: AQHdZRdnsgXsHTe+9UuY0/QI3ZURircPmdnogAAEloCAAAE2mg==
Date: Mon, 26 Oct 2026 10:42:54 +0000
Message-ID:
 <SA6PR03MB77603897E6776D5CECC518B2FE612@SA6PR03MB7760.namprd03.prod.outlook.com>
References:
 <1792997882.8631fc262581453bbf619ec5b2062170.1a177007add000f79f@vates.tech>
 <SA6PR03MB77608D0200C08E175F449B85FE612@SA6PR03MB7760.namprd03.prod.outlook.com>
 <1793010324.8631fc262581453bbf619ec5b2062170.1a177be53fd000f79f@vates.tech>
In-Reply-To:
 <1793010324.8631fc262581453bbf619ec5b2062170.1a177be53fd000f79f@vates.tech>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
msip_labels:
authentication-results: mx.microsoft.com 1; dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=citrix.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: SA6PR03MB7760:EE_|SJ0PR03MB5423:EE_
x-ms-office365-filtering-correlation-id: c3560ba6-9ffb-42dc-ddb5-08df334de48f
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam:
 BCL:0;ARA:13230040|1800799024|366016|23010399003|376014|38070700021|4143699003|56012099006|11063799006|5023799004|261021121427099003|261021123027099003|261022105027099003|18002099003|22082099003|10067099003;
x-microsoft-antispam-message-info:
 evyu1k7/uvjpWEWDUqQyLeKwZgHi9vufgOBlCfDVGhjzvClpmtoczKn7Ti49459RORRjZq3t1/E+Q55nTM5J76ufngq+8ksVu8zD4PcHD0R2ih2No6FNEqxgpLZ1oB4wAmksUgVaeg4hT/81PtFn2b1YYwFhCoFtJ15LhBZs+NHlLVwMrFwvAX2mcrYfVQqh1elAZKnayRQfR7HX2b1VgZ8uGG+RMudXNv7L9XfW9GQiztu0HkbLciT9HMACEHhsdMNLrn8esROCHr5YMhf1r+Fgz06TN6MufiVUDEehXb9c4LmunP6nK9vQ4E/0gw5N2x+3so3eLOH2Y0CjxcU6x5nCI/NRvcXR/9jQoX30LzBaqzfa/g+xfnrrSHnxtB9bUZ0gktF2dYpcnyzn3AqmAlon8Vp6roTe+PN0ablVlors+wmTwHJC0DwZrvz26PHZuf/c9wSwj9TFQSC991ec5V3r9+5kEnBOvLSEZHCwSkC7Fn38mfZEbps4GpxsGj0O3/l9egqKR817H3OkVJygRC1/oPoZUYpDR7WOj4mfIWKJN3p0GFvfbPqNVAIJiq1bB+KmX/5OzCQ8xLPy/DXVwIs20xtX7GSmxP5EXR0AdW5bpeDhaaiqbJ2q9YiOyCweTRp+BVqNEwSsAOpsLl2AQpWssTPCneJ4VeGKqaRbz+W2N4ct1PMyYVxDfY0t+a0Xt5A69vhychJISkEF7DacFDo97UnTdMSA8I+U7NIn+W8=
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SA6PR03MB7760.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(23010399003)(376014)(38070700021)(4143699003)(56012099006)(11063799006)(5023799004)(261021121427099003)(261021123027099003)(261022105027099003)(18002099003)(22082099003)(10067099003);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?iso-8859-1?Q?0Xe8pKHNWL8fGZosYfW4GP2JgF2FNOiOGMagGZmHJZjVJj8owh19ucW6DE?=
 =?iso-8859-1?Q?VwIw/GHNqETOP8jHgnrt0HM2WERtsoL9pK+Irpn2m8rAHqFLNwSpLwkwkm?=
 =?iso-8859-1?Q?62m2nCk4LcnGIjS3QUxL3UeAFvm3MDBseMMU9yDSjg9c5NT41QLS2OVE7C?=
 =?iso-8859-1?Q?VmnGkiQlnNI6d7akKJPL93BKa1kI+2RUWi3Aa5ibbFC2Vg40COqasCmKv7?=
 =?iso-8859-1?Q?ifVTTaMvCSZilDHU7F+joeTYKkTfxcSbUNncX8ifb9sj+WiDemaGml/4iD?=
 =?iso-8859-1?Q?l30j4P6HYL6WMiWad4vJQQCPBBI8aDQOT2e6UsnItuUpagI0VPT+2wRRHH?=
 =?iso-8859-1?Q?XK3+7n3cdiQ4wOT+mLu5oOtKAXzDuT3SVHINx7NPmyxsI/JF0g4Xs/G8JJ?=
 =?iso-8859-1?Q?D09evoh/VCs2m63RjU5RLDHCu/1ym+vesXQwBlncRDA2/5P6ZwR6yx8MM3?=
 =?iso-8859-1?Q?G0cC9kcUZatOSHOkdjFaHcaDM4G3Iuu89zH/zaZv37fBZyYzEGZJi4H8i0?=
 =?iso-8859-1?Q?cw134FkA7z8J/dBsAZG9IrAYEAQ5Vt9s593LMawQDOz2iLzPN2JUcdqntV?=
 =?iso-8859-1?Q?s4voKjQkIDdeD//Uml8KeM65pEYWfhGhUPy9kVJlME3zd2J2vMo/QTQ2NV?=
 =?iso-8859-1?Q?n1cOgpvahkNgBBVw7LoJWRcNQZgWanM7QXXVSa1ZDW3ioo9OG+0Dy+bTMr?=
 =?iso-8859-1?Q?2LYl3Zdqxez1z+LnyZNSuyc29KTxZAv3H2d+me1xvYzJrJb0m7oX0PvoGL?=
 =?iso-8859-1?Q?8RfUAgh2z51eXTMvlWHpw1w+KrKtDoO6WlQ6PLfraHuDyVdoq66yaCEvv6?=
 =?iso-8859-1?Q?kVoNIPeY+mMU8a0pNj8zN0ZhFSAO6jhYDOCNL+1xB9FPMT+d3yBYNUvCnz?=
 =?iso-8859-1?Q?x0i3i4qsICf4cAmOAtRohjJpviNRIIMTE133SASChJg6DYbwWflmeSpkMN?=
 =?iso-8859-1?Q?EE6cLTtZY93uU4qPqZuwS6guMH2Oe1/qHu4c7bhCvcjAcvhhTgMPpjkfxN?=
 =?iso-8859-1?Q?s3DilTnbMeMcCOGIZz1hwY8ARXmaotvbXtTpk6lCO/W3f0wO3CiYQsvnhZ?=
 =?iso-8859-1?Q?cIaZwUAPWOkkYu/L2xf/UVBdranN602Epw2JHDq1B2hvB0n8R/AhjWaHfv?=
 =?iso-8859-1?Q?8j7EG2rQpid4neaDW49WpBO3gtWNsUaWsjx8MQeO43BL+edZErblstJXiA?=
 =?iso-8859-1?Q?eWTnVOuPVnaHOsbKeiFeRNOdqIug3RyJReZRciYw2Vd/5fFvwnwT9K/43G?=
 =?iso-8859-1?Q?pH6yjv7uSJn+nBYem5GExKeFgDDJEpq69XkG/4QmSaNU7znVVW45N3NaQW?=
 =?iso-8859-1?Q?ROFZqbIhYFYvyJeFUgx6mYaZwBqJpFRNInZGY7IUVt4EO007YQfmZ795te?=
 =?iso-8859-1?Q?qztg3jmkusdKa56Fwsrh/9kQDLr5rvfBFldpjfFkGrBPaP+XTdBvejA90q?=
 =?iso-8859-1?Q?Pb/DCquUAFJTBNUVscQZ6Cws8v4gQizXx4Ygikprb/1WQNZmteeFZet3L7?=
 =?iso-8859-1?Q?B88edRvNW8+sUxSfc2TJWINcwqSJItH/4G30mEaPXEGM3hYVVJa9LJqlqH?=
 =?iso-8859-1?Q?FSmy3EZmIJ+6XPaxa/uaQ/UDm4zl+cjOG3c79nPHk/nkWDnypBe4BeDVFO?=
 =?iso-8859-1?Q?fTBE6gyTfibERSfmotu6rhp+pfbWxTlm5K5KqBSKKxnpJJEAze/vWQGFpd?=
 =?iso-8859-1?Q?BzIPdBmBn2nfBhXRFO7ZEekxRWP2DNf+kceoqKEFpiula8jmKL4/Q2CnR0?=
 =?iso-8859-1?Q?HG8uIRHgroZlLH17e72xz8ELLH2ipz6WCq8Ow/rF6XE8pg?=
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-OriginatorOrg: citrix.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: SA6PR03MB7760.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: c3560ba6-9ffb-42dc-ddb5-08df334de48f
X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Oct 2026 10:42:54.9784
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: ikbuyA6C0aHqwhLwFchVW/lARVNQFdQW3I+ODmKPUCOdbirBvz183xBzTYMW4pVpV5bTx8l5ZjdyPIC8OHuOPw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR03MB5423
X-purgate-ID: tlsNG-16d1c6/1793011378-F4E0677B-4979A582/0/0
X-purgate-type: clean
X-purgate-size: 1449

=0A=
> On 26/10/2026 11:15, Owen Smith wrote:=0A=
> > By setting "UseConsole" =3D 1, the default console (and CONSOLE) interf=
ace will fail.=0A=
> > The default console's PDO will still be created, but any attempt to cal=
l CreateFile will=0A=
> > fail, so I'd assume any alternate use would need to manage the default =
console ring=0A=
> > itself. Non-default console's PDOs are unaffected.=0A=
> > =0A=
> =0A=
> My idea is to totally prevent xenbus and others from touching the =0A=
> default console ring and leave the console ring's usage to some other =0A=
> applications. That seemed simpler than swallowing read/write requests at =
=0A=
> first glance.=0A=
> =0A=
> =A0From my testing, it looks like I can still open handles to the default=
 =0A=
> console PDO XENCONS\VEN_XN&DEV_CONSOLE\0 (e.g. Get-NtFile -Access =0A=
> ReadData,WriteData,Synchronize -ShareMode Delete \Device\...). Although =
=0A=
> I haven't tested this point further.=0A=
> =0A=
=0A=
PdoDispatchCreate calls the console's ABI Open, which does not directly cal=
l=0A=
the CONSOLE(Acquire) interface, so the PDO can be opened (I missed this)=0A=
The default console's StreamWorker thread will attempt to acquire the conso=
le=0A=
interface and fail, skipping any attempt to drive the default console ring.=
=0A=
StreamPutQueue will allow IRPs to be queued, but nothing will pop them unti=
l=0A=
they are cancelled.=0A=
=0A=
Owen=0A=


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 26 10:46:21 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 26 Oct 2026 10:46:21 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1461088.1672037 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xLIDd-00019n-Nc; Mon, 26 Oct 2026 10:46:21 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1461088.1672037; Mon, 26 Oct 2026 10:46:21 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xLIDd-00019f-Kn; Mon, 26 Oct 2026 10:46:21 +0000
Received: by outflank-mailman (input) for mailman id 1461088;
 Mon, 26 Oct 2026 10:46:20 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a177d16e5b000f79f@swg.vates.tech>)
 id 1xLIDc-00019Z-Mu
 for win-pv-devel@lists.xenproject.org; Mon, 26 Oct 2026 10:46:20 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xLIDb-000KLk-V1
 for win-pv-devel@lists.xenproject.org; Mon, 26 Oct 2026 11:46:20 +0100
Received: from [10.42.69.5] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a177d16e5b000f79f@swg.vates.tech>)
 id 6adf2f70-2eae-0a2a0a5409dd-0a2a45059b40-46
 for <win-pv-devel@lists.xenproject.org>; Mon, 26 Oct 2026 11:46:19 +0100
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-c201ff.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a177d16e5b000f79f@swg.vates.tech>)
 id 6adf2f7b-4cb1-0a2a45050019-b9ff1c23b687-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 26 Oct 2026 11:46:19 +0100
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a177d16e5b000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 26 Oct 2026 10:46:16 +0000
Received: from [192.168.1.61] (142.220.66.37.rev.sfr.net [37.66.220.142])
 (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id A5821804A3
 for <win-pv-devel@lists.xenproject.org>; Mon, 26 Oct 2026 11:46:15 +0100 (CET)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:MIME-Version:Content-Type:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=2rh2e27FMSOEXZ/T9uOQ6tOysJCeD7Tg8wuuQVRwcW4=;
 h=from:subject:date:message-id:to:mime-version:content-type:feedback-id;
 b=Hc4I8ltoQmqxXwMCM70Z4ciQmw94X2GP/iS6vpSabDANCNjNQrd4SMXupolEfjioa1hNwis2S
 XAFS+MLk7ZC1rGiudqVT8m7fh9G4xLFIb5E/bHHB/16xGGxWasJ5LDUZwgV+lYwUJ9W/BCIjEIM
 TSEBcclO74Y+/Ivic/Yybniv4SC4CCFOaxAD+zmJ+eOcde2lwQvI/OvjTw/NHEod5nRXRHxGREd
 iJWl5yhw+ce4TfxFJskqTKs9bvxXtP6w5vB/3AYY/Lu8+KP4AFx9pbhC06LjpZT0JDVVYnlJbIh
 CmrbOZ4Jlh2wMr1gNovqyJ0aT9p9RVGgfWuqVCyfCQVg==
X-Zone-Loop: 995bc666265e195f9b4191a43f2d9864d9fdffa65640
x-campaign-type: default
x-transaction-id: 615509a0-6868-4047-be89-94cde93fdf22
x-swg-uid: 01-20487bc3-85f7-4e53-80c7-d06340f72cd2
X-Mailer: Sweego
Message-ID:
 <1793011576.8631fc262581453bbf619ec5b2062170.1a177d16e5b000f79f@vates.tech>
x-swg-bid: 1793011576.8631fc262581453bbf619ec5b2062170.1a177d16e5b000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
Date: Mon, 26 Oct 2026 11:46:15 +0100
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: High-speed KDNET transport for Xen guests
To: win-pv-devel <win-pv-devel@lists.xenproject.org>
Content-Language: en-US
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.1da.c52a1a10b72cc11a.1a177d16ba7.828aa8feea60109c=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1793011575719
X-purgate-ID: tlsNG-c201ff/1793011579-F46A52A1-9E1851F3/0/0
X-purgate-type: clean
X-purgate-size: 1432

---=Part.1da.c52a1a10b72cc11a.1a177d16ba7.828aa8feea60109c=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Hello all,

You may have experienced difficulties with using hvm_serial for=20
debugging Windows guests on Xen: it is incredibly slow and very=20
difficult to do anything substantial (e=2Eg=2E large scripts, complex=20
commands) with it=2E KDNET with emulated NICs works, but then you cannot=
=20
debug xenvif or xennet with it=2E

I've prepared a custom KDNET transport, which works along with Windbg's=20
KDNET functionality:

https://github=2Ecom/xcp-ng/win-xenkd

It can reach speeds over 30 MB/s, which is fast enough to do a kernel=20
memory dump in a few seconds=2E It also reconnects cleanly whenever

It uses the default console ring as a configuration channel, so you=20
might want to patch that out of xenbus first=2E

It requires a dummy PCI device (5853:C201 by default), which you can add=
=20
to QEMU like so:

     -device xen-pvdevice,vendor-id=3D0x5853,device-id=3D0xc201

Finally, by default, Windows refuses to load testsigned KDNET transport=20
DLLs even with testsigning enabled=2E That's a pain, but there are ways to=
=20
work around it=2E


-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.1da.c52a1a10b72cc11a.1a177d16ba7.828aa8feea60109c=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 26 10:55:42 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 26 Oct 2026 10:55:42 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1461106.1672059 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xLIMf-0003y1-Tx; Mon, 26 Oct 2026 10:55:41 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1461106.1672059; Mon, 26 Oct 2026 10:55:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xLIMf-0003xw-Qy; Mon, 26 Oct 2026 10:55:41 +0000
Received: by outflank-mailman (input) for mailman id 1461106;
 Mon, 26 Oct 2026 10:55:40 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a177d9f4c6000f79f@swg.vates.tech>)
 id 1xLIMe-0003wg-76
 for win-pv-devel@lists.xenproject.org; Mon, 26 Oct 2026 10:55:40 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xLIMd-00GMqR-K2
 for win-pv-devel@lists.xenproject.org; Mon, 26 Oct 2026 11:55:39 +0100
Received: from [10.42.69.3] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a177d9f4c6000f79f@swg.vates.tech>)
 id 6adf31aa-8faa-0a2a0a5109dd-0a2a45039e16-8
 for <win-pv-devel@lists.xenproject.org>; Mon, 26 Oct 2026 11:55:39 +0100
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-33051d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a177d9f4c6000f79f@swg.vates.tech>)
 id 6adf31ab-fae8-0a2a45030019-b9ff1c23ada5-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 26 Oct 2026 11:55:39 +0100
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a177d9f4c6000f79f.002 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 26 Oct 2026 10:55:35 +0000
Received: from [192.168.1.61] (142.220.66.37.rev.sfr.net [37.66.220.142])
 (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 87A0D82C38;
 Mon, 26 Oct 2026 11:55:34 +0100 (CET)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=uyPIJFisAaqk4Ls8gRUk1TQ6Mokjanfq+kZ8+1ltLoM=;
 h=from:subject:date:message-id:to:mime-version:content-type:in-reply-to:references:feedback-id;
 b=o4ViVycEdMleCUV/9SLAVCrLW4UkZIUOjeKK/wD0ZlUJ3A8sUD0kdfqftfTRGPWzeknQbjUfc
 HCUbSAPecGMpM8C9e6iV01QNGTxF+31MPeQjAtyBjlF+yQ/AbjVrAyQTfJIKAOCt9HbOo6LVV7R
 Xx+0VkUi04+qARAMwscm5sG83+Ck9mP/2vyO/nwf2uJ5H07ktsjgwEWPHN6hbPezxynN6ln02+r
 EpkK2Zl6gQZ6v4LV/TzyKCpIEubrxoGyL7+cPkqosAAre2i5Jayr4EkrvKtuflZm7Jea9cxd6rt
 AGVmaMMk6CYeE/g4cCfWE4pmOWt+xjuqneZqz85fz4KQ==
X-Zone-Loop: d6563f0a046b62e499306a718df1b68c2911d82d45c4
x-campaign-type: default
x-transaction-id: ca232a4d-ffda-4ae4-b9ae-8d7f1a088a16
x-swg-uid: 01-a36695a8-0456-43c1-aafc-fa8b5cf1a742
X-Mailer: Sweego
Message-ID:
 <1793012135.8631fc262581453bbf619ec5b2062170.1a177d9f4c6000f79f@vates.tech>
x-swg-bid: 1793012135.8631fc262581453bbf619ec5b2062170.1a177d9f4c6000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
Date: Mon, 26 Oct 2026 11:55:34 +0100
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH] Add UseConsole parameter to disable default console
Content-Language: en-US
To: Owen Smith <owen.smith@citrix.com>,
 "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <1792997882.8631fc262581453bbf619ec5b2062170.1a177007add000f79f@vates.tech>
 <SA6PR03MB77608D0200C08E175F449B85FE612@SA6PR03MB7760.namprd03.prod.outlook.com>
 <1793010324.8631fc262581453bbf619ec5b2062170.1a177be53fd000f79f@vates.tech>
 <SA6PR03MB77603897E6776D5CECC518B2FE612@SA6PR03MB7760.namprd03.prod.outlook.com>
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
In-Reply-To: <SA6PR03MB77603897E6776D5CECC518B2FE612@SA6PR03MB7760.namprd03.prod.outlook.com>
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.1dd.f748d389c149c89e.1a177d9f2cc.a50ef7c5337249c7=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1793012134604
X-purgate-ID: tlsNG-33051d/1793012139-76EF74E9-2C0C75E3/0/0
X-purgate-type: clean
X-purgate-size: 1895

---=Part.1dd.f748d389c149c89e.1a177d9f2cc.a50ef7c5337249c7=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

On 26/10/2026 11:43, Owen Smith wrote:
>=20
>> On 26/10/2026 11:15, Owen Smith wrote:
>>> By setting "UseConsole" =3D 1, the default console (and CONSOLE) inter=
face will fail=2E
>>> The default console's PDO will still be created, but any attempt to ca=
ll CreateFile will
>>> fail, so I'd assume any alternate use would need to manage the default=
 console ring
>>> itself=2E Non-default console's PDOs are unaffected=2E
>>>
>>
>> My idea is to totally prevent xenbus and others from touching the
>> default console ring and leave the console ring's usage to some other
>> applications=2E That seemed simpler than swallowing read/write requests=
 at
>> first glance=2E
>>
>>  =C2=A0From my testing, it looks like I can still open handles to the d=
efault
>> console PDO XENCONS\VEN_XN&DEV_CONSOLE\0 (e=2Eg=2E Get-NtFile -Access
>> ReadData,WriteData,Synchronize -ShareMode Delete \Device\=2E=2E=2E)=2E =
Although
>> I haven't tested this point further=2E
>>
>=20
> PdoDispatchCreate calls the console's ABI Open, which does not directly =
call
> the CONSOLE(Acquire) interface, so the PDO can be opened (I missed this)
> The default console's StreamWorker thread will attempt to acquire the co=
nsole
> interface and fail, skipping any attempt to drive the default console ri=
ng=2E
> StreamPutQueue will allow IRPs to be queued, but nothing will pop them u=
ntil
> they are cancelled=2E
>=20

I can error handling for StreamWorker to simply error out during=20
read/writes=2E What do you think?

> Owen
>=20



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.1dd.f748d389c149c89e.1a177d9f2cc.a50ef7c5337249c7=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 26 10:58:41 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 26 Oct 2026 10:58:41 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1461108.1672063 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xLIPZ-0004LE-5J; Mon, 26 Oct 2026 10:58:41 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1461108.1672063; Mon, 26 Oct 2026 10:58:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xLIPZ-0004L7-2E; Mon, 26 Oct 2026 10:58:41 +0000
Received: by outflank-mailman (input) for mailman id 1461108;
 Mon, 26 Oct 2026 10:58:39 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <owen.smith@citrix.com>) id 1xLIPX-0004L1-PP
 for win-pv-devel@lists.xenproject.org; Mon, 26 Oct 2026 10:58:39 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xLIPX-00DfZl-2F
 for win-pv-devel@lists.xenproject.org; Mon, 26 Oct 2026 11:58:39 +0100
Received: from [10.42.69.6] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6adf3256-e002-0a2a0a5209dd-0a2a4506e2a8-44
 for <win-pv-devel@lists.xenproject.org>; Mon, 26 Oct 2026 11:58:39 +0100
Received: from [40.107.209.16]
 (helo=PH8PR06CU001.outbound.protection.outlook.com)
 by tlsNG-16d1c6.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6adf325d-195a-0a2a45060019-286bd110a41a-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 26 Oct 2026 11:58:38 +0100
Received: from SA6PR03MB7760.namprd03.prod.outlook.com (2603:10b6:806:43c::5)
 by BY1PR03MB7801.namprd03.prod.outlook.com (2603:10b6:a03:5b8::5)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.546.22; Mon, 26 Oct
 2026 10:58:34 +0000
Received: from SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38]) by SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38%5]) with mapi id 15.21.0546.021; Mon, 26 Oct 2026
 10:58:34 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:x-ms-exchange-senderadcheck"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
 b=lYf19pgobl76ombLolwbb5qDlAQDqvDuV/Xt2eGoO2wn4WL4QY/E5ax04AwGmIGMY98l6CTCPt5MYPg6VYFouY4HnmYbaFVBcMQaH/MoZa9xlNHri+kgOGLY6JZqE7KMXePJhZIQQbO8XOqYNBmvg0qyoAmP4geAf8sasqKDdNdezlqeo4q1X6DkOIalJ0Exb+X5RE6njVq5HirelYV/E+yf4VYDqoW0He6BPp4orj1EmI/CSN5D0tZ+CMcTd0d/t4M/rjyWaXrhtYXpwcTI8WdP8ZdMDARWO1IT+jXEyExBqFyHDj4q8DwbgpaqJ0bzy9sr7vjdyxE36yBrkB8/Hw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector10001;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=znIbBGHBgDwUytaiJ3SHnJRt4/DzohB+klpoYXvIh6I=;
 b=l5rsbTRCrL6YPEL2IORnCJshBe7nn5T7txOsaQ5MhRYx97SKtLhs2PD19e83IUxFEKYXUazuaUi1MlhG8e+3cVkImV1BR46v9lLHwpgzdV8lpAHA8cOFvyalNMbfgBBhfjdT6zvjfgwc0KB5U75r9L6wBvmDkqXBRYSE1Nti6+EpYJdoQO8zNn4DSIHoyoYxOCtQSkSOnAX0su3PyFnyDcUdDMs1WAq6rZ+z3RVir95iSitY/qGB54c1ioQL8626eD1pOZMDkjQEByvktWB1Rni+AFEQPKb9it24nAMcuK/WntvyrMBRHilfr92qs9+PnmT/bntOiE0MbyKsXaEF8A==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=znIbBGHBgDwUytaiJ3SHnJRt4/DzohB+klpoYXvIh6I=;
 b=uhP2MsLqGYDG5bw0OhDWdiyKPVlba7pdGw+0yBy0Z2/rJwaiAcJzqiy/TZcLanaZSqB1Rk9xO0rs1Awrw52NDMDop+vcwpi7viVW/9GpqrOrizThAx8d1BsxD+RJbVodWcdk8BLaJpUC9nFvjLwRICuAnyuG4Y3GHRtY6xIYtgQ=
From: Owen Smith <owen.smith@citrix.com>
To: Tu Dinh <ngoc-tu.dinh@vates.tech>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Subject: Re: [PATCH] Add UseConsole parameter to disable default console
Thread-Topic: [PATCH] Add UseConsole parameter to disable default console
Thread-Index: AQHdZRdnsgXsHTe+9UuY0/QI3ZURircPmdnogAAEloCAAAE2moAABzkAgAAAUCg=
Date: Mon, 26 Oct 2026 10:58:34 +0000
Message-ID:
 <SA6PR03MB7760B2DB80CD5ADE266CAA79FE612@SA6PR03MB7760.namprd03.prod.outlook.com>
References:
 <1792997882.8631fc262581453bbf619ec5b2062170.1a177007add000f79f@vates.tech>
 <SA6PR03MB77608D0200C08E175F449B85FE612@SA6PR03MB7760.namprd03.prod.outlook.com>
 <1793010324.8631fc262581453bbf619ec5b2062170.1a177be53fd000f79f@vates.tech>
 <SA6PR03MB77603897E6776D5CECC518B2FE612@SA6PR03MB7760.namprd03.prod.outlook.com>
 <1793012135.8631fc262581453bbf619ec5b2062170.1a177d9f4c6000f79f@vates.tech>
In-Reply-To:
 <1793012135.8631fc262581453bbf619ec5b2062170.1a177d9f4c6000f79f@vates.tech>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
msip_labels:
authentication-results: mx.microsoft.com 1; dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=citrix.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: SA6PR03MB7760:EE_|BY1PR03MB7801:EE_
x-ms-office365-filtering-correlation-id: b2510fb1-9566-4e26-df66-08df33501462
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam:
 BCL:0;ARA:13230040|23010399003|1800799024|376014|366016|38070700021|11063799006|4143699003|5023799004|56012099006|261022075727099003|261022105027099003|261021121427099003|261021123027099003|10067099003|18002099003|22082099003|6133799003;
x-microsoft-antispam-message-info:
 bHeLmh/3JBKy642C9HFzjHKw4PN6XaBTkfdtfNRxVAv1Usd3OY5LZqUPaynxcKQ41UZEHYuzfWFZNAzGg+4SvB8RA1wFugVKjDtVA2Rl607J9sOW9ojMSYEiIVS/ge0ktzLTxAS6eZlT0Hu745im3pfBFQpCxdjry//UqSeY2KeFgvLu6R+O/4EZc1iV9YT3wXHyR0aXnyY1xi9QihGA2k6579SoeTjYUj03j9hIlp4Yzz5jhUN7A17EyFox/58+gzfl161a/MP9URB13hOoptgJx3+M00c5XjZ6GSyqLHGGHQ0w53XrDyuSgzciITWPd8YiMrUstJTJNySFrICXcLQRab7TKh99gSrz8JSBH95rDc5XFqgGSE1qFr7cX5mreOwk55h8Ov0k0v0qF92smpeS1HjTYXfmoIPCeDwGi+f+dUmbbLPgM3WY65DkyeDc/kPC/XIxnbrLKQEoTaQb7QHk0g/YeKo50fXq1ZA21veYkefW5fh93l81EMnyNXYhASs/zpheJtnk22PaSmylGFJniEoumJpRMPPAJf9kbg63SeQDwYnXcxHkT+b/PFN171XiayR0bu4RxgitynQ85SoLHyxcvvDPKRJd0+5JNF7nsSEtfzxHrvEwILHUoBVPDZLr5SCNqob/f1yfGrPzdQ8fcacSCl4+0oqqeE3/+K8xUuiGIFeLtlbiBmR1P0co6wKBgvJBS6aNGRaZ4resFeT8RyiJhyJZ9+KTCYYuVVE=
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SA6PR03MB7760.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(1800799024)(376014)(366016)(38070700021)(11063799006)(4143699003)(5023799004)(56012099006)(261022075727099003)(261022105027099003)(261021121427099003)(261021123027099003)(10067099003)(18002099003)(22082099003)(6133799003);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?iso-8859-1?Q?TN6maNLNqv7smE6rXMho5TUcCdjvdrcOgvqte2cr3ecwE4Fr/IhxSLUblb?=
 =?iso-8859-1?Q?jacSR1HnECJWVIdtKdjBIiyHg7gU9WywvN+Mc0Zy+hX6Rz13V2pqDqVy6H?=
 =?iso-8859-1?Q?DgftBi9VvYzPQTnfeDNVD+tGqRxN49k/W5ZzcbYrHNHPhLiIeDkvgTifIx?=
 =?iso-8859-1?Q?NWxwiYIOVI8bIdIv3jsZZ8wbDubrs2ktKT0Imp/wUJgY/g/X1mYlDnvMwH?=
 =?iso-8859-1?Q?riWtNUD+TnjnKHvn9ZfCTvr6qZ4HcsAxAEHbIw2gPASLkz85SttQdVQkN2?=
 =?iso-8859-1?Q?3GmXMSOQZCe7KiNXqFc3F4Gc7PFUOMW8oj/1ZQwm+SRer1UHP6mT4aENWt?=
 =?iso-8859-1?Q?/BRLgou2nsxRqVkvwTQLiJN2w2z4REVBvFxzHioy38TldOqRZMdLThod42?=
 =?iso-8859-1?Q?WgO4FI5pz7j0FlI549C/Lhehj3jzEWDimp2b1is0ccNH45E0HYA21iEwxc?=
 =?iso-8859-1?Q?JDwzx+sdjFq/nN1s7mwwG/DjCFJEQdEZhTVL5pkMKfRmAVBgHYMdPcbgpC?=
 =?iso-8859-1?Q?NE3hD5IPDWhmupwsto2C2lRLw/++jUVXlCBa1rk2cNMuRA5Yx1bZeFvDvC?=
 =?iso-8859-1?Q?QoTfYmtv7JIpzleoarcegctzr6uvZbyWC4jQzRUc9ZiX9cuiukAbNTBVvJ?=
 =?iso-8859-1?Q?KkIpeXvKhZYQoXBp4uudUUHMvY/Xchn++FIcznTnNQhLSBXyUB6hNB1LS8?=
 =?iso-8859-1?Q?0odSpFu4pGloWNrvtp6T3P+UBx648qO3NcZJbAN3/9gmzymUYJ0UFiv4sT?=
 =?iso-8859-1?Q?A21zB2GKDo2LAAboXWWMsvIO1LqbgvjCKgd6PgxWaPgFg7a5NvwPQwtonh?=
 =?iso-8859-1?Q?tIbPUDUPl0Gt577FpzJu0IX2Q9wCOJTb3MIb635DaXuFrKuaqQwXC7/ybW?=
 =?iso-8859-1?Q?0XZwkifyLoIftiwWClopMZGoZneRsJPVlZn9OOnLgaxsnK94bQhnCLDFuh?=
 =?iso-8859-1?Q?BS5cyV/XH1aQCH3LPzupUkB/Yd2KZG0yR0jw5648xjHlcNIMGmhzFsycVb?=
 =?iso-8859-1?Q?dvX5Uqgz2qoxkjfzbunVQMcuZQuSqxlujkskA0us2GsIT6e8Q7/ov1jdZy?=
 =?iso-8859-1?Q?2dX2/IDwkDrQ5tlrrJQkqDHIJVHcWkG49RP6HVDIjLnaB94JDC/ISeFGdF?=
 =?iso-8859-1?Q?tnIWyBiBteH3XncExQBkbJsWttebNA1rWKyPUEYGFQjlSrsDoft6vx2BQU?=
 =?iso-8859-1?Q?h3l4iEvFoepq29xhzZv1zl4k0scITg1Ox3+LzofB5SQ+ArtE7PXQAzgFWe?=
 =?iso-8859-1?Q?CClfqlcp3EEE+ofax1mcWsINcvWgvur8ZhCTVIO+ukIMfa8VsJxy4DCWDK?=
 =?iso-8859-1?Q?1sm6AXPgYJMpaL4Wrm4LHPAby/QH8mOK/9lGensYoxNP1dg2iZZGPoYEFF?=
 =?iso-8859-1?Q?8u8FOl27tKvAwWjZKABoGLKpmC5rBN2FyyYPRtQ+oqK6QLw7ANSeSFBDtt?=
 =?iso-8859-1?Q?nrMuimpPHVdhhmGpyLJhTTJ7sg5R4/dSRGG7CG5JDibVv7WiArxUQ+5Jer?=
 =?iso-8859-1?Q?A9ev71k+JhwzFt0LvNiAHeIJsiFOcjhNoan3PbuyekGcpcGsi55aBUAvWi?=
 =?iso-8859-1?Q?2989uXab6myF5j9A4Cia93d54E9R7ruvmnAGOJMJRQLn1QBYBwAxD4CbLt?=
 =?iso-8859-1?Q?9siGWyaHnPKtc9/WeX/BUf+O7wOT2IkOPg3HLvvj8iDdWJzB1/VqwUN8cj?=
 =?iso-8859-1?Q?rE+G+WXAd0VwpD/mSM8F9RIUJQBODGhZwmJ0s5tEUHlDuaGmpIK4UtBBHh?=
 =?iso-8859-1?Q?i7gAUASCaqJ0yEFQK17qsqr5p88xL+wmE76FTIH8B8Gaqa?=
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-OriginatorOrg: citrix.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: SA6PR03MB7760.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: b2510fb1-9566-4e26-df66-08df33501462
X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Oct 2026 10:58:34.1883
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: ov8JIJpkv1CG6T9oY21/q16+tsjQbBoPq/FiPvpxOwvsZfeFwtbdaWeUwdXQ/1yMmd2qlGzhUX03CCjNW7zIWg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR03MB7801
X-purgate-ID: tlsNG-16d1c6/1793012318-FD00977B-F5680504/0/0
X-purgate-type: clean
X-purgate-size: 1925

=0A=
=0A=
On 26/10/2026 11:43, Owen Smith wrote:=0A=
> =0A=
>> On 26/10/2026 11:15, Owen Smith wrote:=0A=
>>> By setting "UseConsole" =3D 1, the default console (and CONSOLE) interf=
ace will fail.=0A=
>>> The default console's PDO will still be created, but any attempt to cal=
l CreateFile will=0A=
>>> fail, so I'd assume any alternate use would need to manage the default =
console ring=0A=
>>> itself. Non-default console's PDOs are unaffected.=0A=
>>>=0A=
>>=0A=
>> My idea is to totally prevent xenbus and others from touching the=0A=
>> default console ring and leave the console ring's usage to some other=0A=
>> applications. That seemed simpler than swallowing read/write requests at=
=0A=
>> first glance.=0A=
>>=0A=
>>=A0 =A0From my testing, it looks like I can still open handles to the def=
ault=0A=
>> console PDO XENCONS\VEN_XN&DEV_CONSOLE\0 (e.g. Get-NtFile -Access=0A=
>> ReadData,WriteData,Synchronize -ShareMode Delete \Device\...). Although=
=0A=
>> I haven't tested this point further.=0A=
>>=0A=
> =0A=
> PdoDispatchCreate calls the console's ABI Open, which does not directly c=
all=0A=
> the CONSOLE(Acquire) interface, so the PDO can be opened (I missed this)=
=0A=
> The default console's StreamWorker thread will attempt to acquire the con=
sole=0A=
> interface and fail, skipping any attempt to drive the default console rin=
g.=0A=
> StreamPutQueue will allow IRPs to be queued, but nothing will pop them un=
til=0A=
> they are cancelled.=0A=
> =0A=
=0A=
I can error handling for StreamWorker to simply error out during =0A=
read/writes. What do you think?=0A=
=0A=
> Owen=0A=
> =0A=
=0A=
=0A=
A 'enabled' flag in XENCONS_STREAM, set in the worker, and checked before=
=0A=
StreamPutQueue queues the IRP should be sufficient.=0A=
=0A=
Owen=0A=
=0A=
=0A=
Xenbus change here: Reviewed-by: Owen Smith <owen.smith@citrix.com>=0A=
=0A=
=0A=


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 26 13:32:54 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 26 Oct 2026 13:32:54 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1461369.1672363 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xLKoo-0007AY-6b; Mon, 26 Oct 2026 13:32:54 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1461369.1672363; Mon, 26 Oct 2026 13:32:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xLKoo-0007AP-3J; Mon, 26 Oct 2026 13:32:54 +0000
Received: by outflank-mailman (input) for mailman id 1461369;
 Mon, 26 Oct 2026 13:32:53 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a17869e686000f79f@swg.vates.tech>)
 id 1xLKom-0007AJ-UI
 for win-pv-devel@lists.xenproject.org; Mon, 26 Oct 2026 13:32:53 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xLKom-000r2u-7G
 for win-pv-devel@lists.xenproject.org; Mon, 26 Oct 2026 14:32:52 +0100
Received: from [10.42.69.11] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a17869e686000f79f@swg.vates.tech>)
 id 6adf5680-bab6-0a2a0a5309dd-0a2a450b8974-24
 for <win-pv-devel@lists.xenproject.org>; Mon, 26 Oct 2026 14:32:52 +0100
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-42698a.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a17869e686000f79f@swg.vates.tech>)
 id 6adf5683-b7e8-0a2a450b0019-b9ff1c12a28d-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 26 Oct 2026 14:32:51 +0100
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a17869e686000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 26 Oct 2026 13:32:48 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id E3BE8804A3;
 Mon, 26 Oct 2026 14:32:47 +0100 (CET)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=MStP88E5G8BiF167Zqbqq87tA6G61guOoCmkjkdGmBs=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:feedback-id;
 b=TzFvjcb8gaYBi2KQU92yoLFqzknyot1paWvw4KTBPnW2AWjz66rabPeFoZoJ47AbcBD4f8N+Z
 f6SIJcqIqdeGA4k8IPB9WJWnVedFZD2rXsHXFPSFkarcEQdQwpzc0USPf0BwsKoThy6F2oi52y0
 OQE4lbJ7eLlpPyTDG3KCcfMWO0TdobCluFFFGVDobo0itPf6DjYdiSNi5FRr3b7u8g8qz8ulP24
 Vewa5AjTp/476brVpecvNufqXwSbAsaK9b1F2yklRn2twcqRjQ33eFdJRBEAhdHXRmuyTE96Mvy
 ETilr1K1lgZGkcg8ph/WXP3LsxIpAMxVq2cqzcKhdtHA==
X-Zone-Loop: 0116acee768b1be61508307e5ffb6102fe53bd677b68
x-campaign-type: default
x-transaction-id: bb66347f-7734-4227-9021-45eb950f8145
x-swg-uid: 01-2f8fe61e-a5a6-4193-9d4c-bd4f49fb0c6e
X-Mailer: Sweego
Message-ID:
 <1793021568.8631fc262581453bbf619ec5b2062170.1a17869e686000f79f@vates.tech>
x-swg-bid: 1793021568.8631fc262581453bbf619ec5b2062170.1a17869e686000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [PATCH] thread: Wait for the thread if ObReferenceObjectByHandle fails
Date: Mon, 26 Oct 2026 14:32:43 +0100
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.1e7.22098541cd82500b.1a17869e3fc.db88c04442b705c5=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1793021567996
X-purgate-ID: tlsNG-42698a/1793021572-1AAD89EA-115399B4/0/0
X-purgate-type: clean
X-purgate-size: 1575

---=Part.1e7.22098541cd82500b.1a17869e3fc.db88c04442b705c5=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

If ObReferenceObjectByHandle fails, the thread would have already
started=2E We need to wait for it to exit before cleaning up=2E

Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 src/xenbus/thread=2Ec  | 2 ++
 src/xenfilt/thread=2Ec | 2 ++
 2 files changed, 4 insertions(+)

diff --git a/src/xenbus/thread=2Ec b/src/xenbus/thread=2Ec
index a8cfce2=2E=2E9510307 100644
--- a/src/xenbus/thread=2Ec
+++ b/src/xenbus/thread=2Ec
@@ -30,6 +30,7 @@
  * SUCH DAMAGE=2E
  */
=20
+#include <ntifs=2Eh>
 #include <ntddk=2Eh>
=20
 #include "thread=2Eh"
@@ -171,6 +172,7 @@ fail3:
     Error("fail3\n");
=20
     __ThreadAlert(*Thread);
+    ZwWaitForSingleObject(Handle, FALSE, NULL);
     ZwClose(Handle);
=20
 fail2:
diff --git a/src/xenfilt/thread=2Ec b/src/xenfilt/thread=2Ec
index e26469b=2E=2E89f4f91 100644
--- a/src/xenfilt/thread=2Ec
+++ b/src/xenfilt/thread=2Ec
@@ -30,6 +30,7 @@
  * SUCH DAMAGE=2E
  */
=20
+#include <ntifs=2Eh>
 #include <ntddk=2Eh>
=20
 #include "thread=2Eh"
@@ -171,6 +172,7 @@ fail3:
     Error("fail3\n");
=20
     __ThreadAlert(*Thread);
+    ZwWaitForSingleObject(Handle, FALSE, NULL);
     ZwClose(Handle);
=20
 fail2:
--=20
2=2E56=2E0=2Ewindows=2E4



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.1e7.22098541cd82500b.1a17869e3fc.db88c04442b705c5=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 26 13:34:46 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 26 Oct 2026 13:34:46 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1461370.1672367 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xLKqc-0007NE-BS; Mon, 26 Oct 2026 13:34:46 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1461370.1672367; Mon, 26 Oct 2026 13:34:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xLKqc-0007N7-8a; Mon, 26 Oct 2026 13:34:46 +0000
Received: by outflank-mailman (input) for mailman id 1461370;
 Mon, 26 Oct 2026 13:34:45 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1786ba2cb000f79f@swg.vates.tech>)
 id 1xLKqa-0007LS-WC
 for win-pv-devel@lists.xenproject.org; Mon, 26 Oct 2026 13:34:45 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xLKqa-007EJz-CZ
 for win-pv-devel@lists.xenproject.org; Mon, 26 Oct 2026 14:34:44 +0100
Received: from [10.42.69.9] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1786ba2cb000f79f@swg.vates.tech>)
 id 6adf56ef-8faa-0a2a0a5109dd-0a2a4509c50c-24
 for <win-pv-devel@lists.xenproject.org>; Mon, 26 Oct 2026 14:34:44 +0100
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-bad1c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1786ba2cb000f79f@swg.vates.tech>)
 id 6adf56f3-be1a-0a2a45090019-b9ff1c129017-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 26 Oct 2026 14:34:44 +0100
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1786ba2cb000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 26 Oct 2026 13:34:42 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id D406D82DEC;
 Mon, 26 Oct 2026 14:34:41 +0100 (CET)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=aAv0+zpHjx9trQVACcAStEoTLHFa2cGCauFq5tBOmr4=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=nncVGA76fpS18HdpMirvRNEoB9tiB2axrl131w83kUWFCBYJEPQxdIW2LOKIM2Fgy+/y4vqxA
 +fU4nPvoUwOZ6rBrowg0jbdTHW8sj8QJV6Nre0vXlSz4SePEkYQ48nxED4io+eKMCXh7ubwLUBk
 xjGWi7qDErGECDz0jtDYiXBu+jffHpkG0UHEAbuLWzXfRNZ99hZGvXWRLPgLEZcGeUXrO5I7Yqx
 YxwOWSz4XUTuPgyaGwRYDq8ALF+05uewwpdXKDuCZpw1nA8Lvslwe9gVIayeXlHvm3t25SbcBUn
 4eNoIhIGc0QBTujE2ZYYMVqq6j1iZ/aGbBXXQ12vCE+Q==
X-Zone-Loop: b9775133b31369b2dc820e6f3da959a19938e720d75f
x-campaign-type: default
x-transaction-id: 0b4bc437-7e71-4e21-8d9f-0df251b0d7ca
x-swg-uid: 01-914573b8-757c-434f-97b7-3456cf60c678
X-Mailer: Sweego
Message-ID:
 <1793021682.8631fc262581453bbf619ec5b2062170.1a1786ba2cb000f79f@vates.tech>
x-swg-bid: 1793021682.8631fc262581453bbf619ec5b2062170.1a1786ba2cb000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [XENIFACE PATCH] thread: Wait for the thread if ObReferenceObjectByHandle fails
Date: Mon, 26 Oct 2026 14:34:20 +0100
In-Reply-To: <20261026133436.1703-1-ngoc-tu.dinh@vates.tech>
References: <1793021568.8631fc262581453bbf619ec5b2062170.1a17869e686000f79f@vates.tech>
 <20261026133436.1703-1-ngoc-tu.dinh@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.1ea.1bfa1cb9bb4070e5.1a1786ba12a.dbbeb624a8ae8d05=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1793021681962
X-purgate-ID: tlsNG-bad1c0/1793021684-FCC15034-06EDA7F3/0/0
X-purgate-type: clean
X-purgate-size: 1095

---=Part.1ea.1bfa1cb9bb4070e5.1a1786ba12a.dbbeb624a8ae8d05=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

If ObReferenceObjectByHandle fails, the thread would have already
started=2E We need to wait for it to exit before cleaning up=2E

Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 src/xeniface/thread=2Ec | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/xeniface/thread=2Ec b/src/xeniface/thread=2Ec
index 0f144fe=2E=2Ea7fd423 100644
--- a/src/xeniface/thread=2Ec
+++ b/src/xeniface/thread=2Ec
@@ -30,6 +30,7 @@
  * SUCH DAMAGE=2E
  */
=20
+#include <ntifs=2Eh>
 #include <ntddk=2Eh>
=20
 #include "thread=2Eh"
@@ -171,6 +172,7 @@ fail3:
     Error("fail3\n");
=20
     __ThreadAlert(*Thread);
+    ZwWaitForSingleObject(Handle, FALSE, NULL);
     ZwClose(Handle);
=20
 fail2:
--=20
2=2E56=2E0=2Ewindows=2E4



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.1ea.1bfa1cb9bb4070e5.1a1786ba12a.dbbeb624a8ae8d05=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 26 13:34:46 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 26 Oct 2026 13:34:46 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1461373.1672374 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xLKqc-0007Oi-Il; Mon, 26 Oct 2026 13:34:46 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1461373.1672374; Mon, 26 Oct 2026 13:34:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xLKqc-0007Nv-DB; Mon, 26 Oct 2026 13:34:46 +0000
Received: by outflank-mailman (input) for mailman id 1461373;
 Mon, 26 Oct 2026 13:34:45 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1786ba3a4000f79f@swg.vates.tech>)
 id 1xLKqb-0007LV-4J
 for win-pv-devel@lists.xenproject.org; Mon, 26 Oct 2026 13:34:45 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xLKqa-003JH4-Fv
 for win-pv-devel@lists.xenproject.org; Mon, 26 Oct 2026 14:34:44 +0100
Received: from [10.42.69.10] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1786ba3a4000f79f@swg.vates.tech>)
 id 6adf56f0-2eae-0a2a0a5409dd-0a2a450ae4ae-8
 for <win-pv-devel@lists.xenproject.org>; Mon, 26 Oct 2026 14:34:44 +0100
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-4011c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1786ba3a4000f79f@swg.vates.tech>)
 id 6adf56f4-f2d2-0a2a450a0019-b9ff1c239d2d-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 26 Oct 2026 14:34:44 +0100
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1786ba3a4000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 26 Oct 2026 13:34:42 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 19C2582CF4;
 Mon, 26 Oct 2026 14:34:42 +0100 (CET)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=zLisbl3dMAfrrca67b5jKTu8MM8I301Owz2jTFKxS2E=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=kGRICJx2SuMIvqp4NysNQ+eGWi5oRoEw5fZAgGH8F6y81kpxC7OypKX8u1eLUM4i5Oo33wCBp
 ExOkX7UKbuZkw4laFq/kQvpLZquze7Msc9dHVs1t9l5IWSgZ/ksyUoIEHi4WzVfh1IP4uIru74Y
 PqvrHqWVI/iI82brVvQLbDvQIy1ntSUjLDH4jtFPx18om3xal4aAOElZ7K9Xwg1d9jx+ysMIZna
 7XyMjmzxshSqJC3MhDI3dMzNDFqNCjF3QTqinkNBB56piiUWZm/dQUJHMVo65v3bMMF8cLdPCnj
 70NIf/Byu21htyy/l/hYSdbh+JzfsuABbGzj8P+/Gvkw==
X-Zone-Loop: 965458f6e6e8062a8b9dc8f667d394911e968717a230
x-campaign-type: default
x-transaction-id: 4498ffec-41ff-492c-9988-42962897298f
x-swg-uid: 01-64aacead-4090-4529-8251-e7af880c22f6
X-Mailer: Sweego
Message-ID:
 <1793021682.8631fc262581453bbf619ec5b2062170.1a1786ba3a4000f79f@vates.tech>
x-swg-bid: 1793021682.8631fc262581453bbf619ec5b2062170.1a1786ba3a4000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [XENVBD PATCH] thread: Wait for the thread if ObReferenceObjectByHandle fails
Date: Mon, 26 Oct 2026 14:34:21 +0100
In-Reply-To: <20261026133436.1703-1-ngoc-tu.dinh@vates.tech>
References: <1793021568.8631fc262581453bbf619ec5b2062170.1a17869e686000f79f@vates.tech>
 <20261026133436.1703-1-ngoc-tu.dinh@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.1eb.8a4acbfbc0f9df17.1a1786ba215.68e5bb851affad5b=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1793021682197
X-purgate-ID: tlsNG-4011c0/1793021684-585CBCFC-8BE27304/0/0
X-purgate-type: clean
X-purgate-size: 1085

---=Part.1eb.8a4acbfbc0f9df17.1a1786ba215.68e5bb851affad5b=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

If ObReferenceObjectByHandle fails, the thread would have already
started=2E We need to wait for it to exit before cleaning up=2E

Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 src/xenvbd/thread=2Ec | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/xenvbd/thread=2Ec b/src/xenvbd/thread=2Ec
index 22baf10=2E=2E632aca0 100644
--- a/src/xenvbd/thread=2Ec
+++ b/src/xenvbd/thread=2Ec
@@ -30,6 +30,7 @@
  * SUCH DAMAGE=2E
  */=20
=20
+#include <ntifs=2Eh>
 #include <ntddk=2Eh>
 #include "util=2Eh"
=20
@@ -207,6 +208,7 @@ fail3:
     Error("fail3\n");
=20
     __ThreadAlert(Thread);
+    ZwWaitForSingleObject(Handle, FALSE, NULL);
     ZwClose(Handle);
=20
 fail2:
--=20
2=2E56=2E0=2Ewindows=2E4



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.1eb.8a4acbfbc0f9df17.1a1786ba215.68e5bb851affad5b=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 26 13:34:46 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 26 Oct 2026 13:34:46 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1461371.1672372 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xLKqc-0007Nb-H9; Mon, 26 Oct 2026 13:34:46 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1461371.1672372; Mon, 26 Oct 2026 13:34:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xLKqc-0007NI-9r; Mon, 26 Oct 2026 13:34:46 +0000
Received: by outflank-mailman (input) for mailman id 1461371;
 Mon, 26 Oct 2026 13:34:45 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1786ba4e0000f79f@swg.vates.tech>)
 id 1xLKqb-0007LT-0Y
 for win-pv-devel@lists.xenproject.org; Mon, 26 Oct 2026 13:34:45 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xLKqa-003JH4-DT
 for win-pv-devel@lists.xenproject.org; Mon, 26 Oct 2026 14:34:44 +0100
Received: from [10.42.69.12] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1786ba4e0000f79f@swg.vates.tech>)
 id 6adf56d9-2eae-0a2a0a5409dd-0a2a450cd2cc-46
 for <win-pv-devel@lists.xenproject.org>; Mon, 26 Oct 2026 14:34:44 +0100
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-d25034.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1786ba4e0000f79f@swg.vates.tech>)
 id 6adf56f4-f479-0a2a450c0019-b9ff1c12a319-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 26 Oct 2026 14:34:44 +0100
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1786ba4e0000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 26 Oct 2026 13:34:42 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 50F0C82D67;
 Mon, 26 Oct 2026 14:34:42 +0100 (CET)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=H7SQPLErSEr6lYzrcvtzwWG9fcExxPCq4EbZYqnjLog=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=iqsk7idbabNQf9CdFB3pYAYnucI+3+7du1o7Lt86eY1I5JkzybKyYgROb+q+Y/B1lEfphQcsV
 6VGUXdXekDgVfH1p7J54HCQp+jRPBjv6mucdM1ZsCp++A0xuPUrrfN74dJigncLQRi91PAjGqll
 gN90tzxmH8e81zAei9nGKWp8Z6NLM0bLklxaGjmcYhFd4AdaAIKV9aiHACpTFIxBfkElNhSx6rS
 f78Lcfd7GUk21R4gnP/r6Oqg0GFS/jknLpM1QXgSwelGVqCSdwl+5WxMtD1JqfooHQKDYvtnr5p
 QIDI2ZC4Lm1aACH1A4sD9qSL0DbXZpfekNJxlau58lnw==
X-Zone-Loop: 927d8b9bc904477d81de43d94ce56c84c3aa566d8099
x-campaign-type: default
x-transaction-id: 6a6ef6d9-b456-480c-ad35-08950a9182da
x-swg-uid: 01-526afda8-9638-409f-9dd1-a493bc959db1
X-Mailer: Sweego
Message-ID:
 <1793021682.8631fc262581453bbf619ec5b2062170.1a1786ba4e0000f79f@vates.tech>
x-swg-bid: 1793021682.8631fc262581453bbf619ec5b2062170.1a1786ba4e0000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [XENVIF PATCH] thread: Wait for the thread if ObReferenceObjectByHandle fails
Date: Mon, 26 Oct 2026 14:34:22 +0100
In-Reply-To: <20261026133436.1703-1-ngoc-tu.dinh@vates.tech>
References: <1793021568.8631fc262581453bbf619ec5b2062170.1a17869e686000f79f@vates.tech>
 <20261026133436.1703-1-ngoc-tu.dinh@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.1ec.bc926e027f7e672c.1a1786ba2f6.3139946f374cf27b=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1793021682423
X-purgate-ID: tlsNG-d25034/1793021684-01CC3A5B-957A25DE/0/0
X-purgate-type: clean
X-purgate-size: 1085

---=Part.1ec.bc926e027f7e672c.1a1786ba2f6.3139946f374cf27b=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

If ObReferenceObjectByHandle fails, the thread would have already
started=2E We need to wait for it to exit before cleaning up=2E

Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 src/xenvif/thread=2Ec | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/xenvif/thread=2Ec b/src/xenvif/thread=2Ec
index ed7266b=2E=2E9ef073c 100644
--- a/src/xenvif/thread=2Ec
+++ b/src/xenvif/thread=2Ec
@@ -30,6 +30,7 @@
  * SUCH DAMAGE=2E
  */
=20
+#include <ntifs=2Eh>
 #include <ntddk=2Eh>
=20
 #include "thread=2Eh"
@@ -171,6 +172,7 @@ fail3:
     Error("fail3\n");
=20
     __ThreadAlert(*Thread);
+    ZwWaitForSingleObject(Handle, FALSE, NULL);
     ZwClose(Handle);
=20
 fail2:
--=20
2=2E56=2E0=2Ewindows=2E4



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.1ec.bc926e027f7e672c.1a1786ba2f6.3139946f374cf27b=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 26 13:34:46 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 26 Oct 2026 13:34:46 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1461372.1672382 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xLKqc-0007O2-Pl; Mon, 26 Oct 2026 13:34:46 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1461372.1672382; Mon, 26 Oct 2026 13:34:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xLKqc-0007NW-BS; Mon, 26 Oct 2026 13:34:46 +0000
Received: by outflank-mailman (input) for mailman id 1461372;
 Mon, 26 Oct 2026 13:34:45 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1786ba1f6000f79f@swg.vates.tech>)
 id 1xLKqb-0007LU-1d
 for win-pv-devel@lists.xenproject.org; Mon, 26 Oct 2026 13:34:45 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xLKqa-007EJz-DU
 for win-pv-devel@lists.xenproject.org; Mon, 26 Oct 2026 14:34:44 +0100
Received: from [10.42.69.5] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1786ba1f6000f79f@swg.vates.tech>)
 id 6adf56f3-8faa-0a2a0a5109dd-0a2a4505da96-8
 for <win-pv-devel@lists.xenproject.org>; Mon, 26 Oct 2026 14:34:44 +0100
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-c201ff.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1786ba1f6000f79f@swg.vates.tech>)
 id 6adf56f4-4cb1-0a2a45050019-b9ff1c23b0b3-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 26 Oct 2026 14:34:44 +0100
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1786ba1f6000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 26 Oct 2026 13:34:42 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 9BDA482DC7;
 Mon, 26 Oct 2026 14:34:41 +0100 (CET)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=ZwlyNO7jvwZ+X8UdsJo3eYITnd8htz2ZTQWHTx5+9K0=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=dNLb+28/j8JjGiJ0mYdeiFtrSfxjkGeTeOG5ccxrsPuCXCAEVjqxwTKkx/8FnV3YRr1ueSjxa
 dha7MVaIk6fWy88lWt1lj8bFaHQg8cRxfm+WdnGmKwiETLQmbVoNh8nB13KG3Jx6UiNeWD6nnWp
 L5pH1QfOlIhDSamK4IUVRrnpQtQydLfmz9XKY2pBVOYMo4G5qaBQrYvqlYliopxLzGnKdo7kPUQ
 5YHBPuf0yptjn7z12uyQiVZb+uF0LLI1ddw3tEKxSAfJrBRMKVZrEiOQ8hqlFEttY1PAcMiJH6n
 AXBulUprCJcPSLWCk39wSpc3YprVz2OHsZl6zYNZRT5w==
X-Zone-Loop: 541a23c7691ae953d7895733aed43ae75cab64e199a6
x-campaign-type: default
x-transaction-id: cea141e3-707e-418a-97a8-7bff029298eb
x-swg-uid: 01-3ee8bfa3-239c-4716-94ad-5f440032a8b3
X-Mailer: Sweego
Message-ID:
 <1793021682.8631fc262581453bbf619ec5b2062170.1a1786ba1f6000f79f@vates.tech>
x-swg-bid: 1793021682.8631fc262581453bbf619ec5b2062170.1a1786ba1f6000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [XENHID PATCH] thread: Wait for the thread if ObReferenceObjectByHandle fails
Date: Mon, 26 Oct 2026 14:34:19 +0100
In-Reply-To: <20261026133436.1703-1-ngoc-tu.dinh@vates.tech>
References: <1793021568.8631fc262581453bbf619ec5b2062170.1a17869e686000f79f@vates.tech>
 <20261026133436.1703-1-ngoc-tu.dinh@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.1e9.9504398ef86349b6.1a1786ba03f.1f6c62958a5ce8e6=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1793021681727
X-purgate-ID: tlsNG-c201ff/1793021684-245122A1-4D7C808C/0/0
X-purgate-type: clean
X-purgate-size: 1085

---=Part.1e9.9504398ef86349b6.1a1786ba03f.1f6c62958a5ce8e6=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

If ObReferenceObjectByHandle fails, the thread would have already
started=2E We need to wait for it to exit before cleaning up=2E

Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 src/xenhid/thread=2Ec | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/xenhid/thread=2Ec b/src/xenhid/thread=2Ec
index 954e060=2E=2E24ffbce 100644
--- a/src/xenhid/thread=2Ec
+++ b/src/xenhid/thread=2Ec
@@ -30,6 +30,7 @@
  * SUCH DAMAGE=2E
  */
=20
+#include <ntifs=2Eh>
 #include <ntddk=2Eh>
=20
 #include "thread=2Eh"
@@ -171,6 +172,7 @@ fail3:
     Error("fail3\n");
=20
     __ThreadAlert(*Thread);
+    ZwWaitForSingleObject(Handle, FALSE, NULL);
     ZwClose(Handle);
=20
 fail2:
--=20
2=2E56=2E0=2Ewindows=2E4



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.1e9.9504398ef86349b6.1a1786ba03f.1f6c62958a5ce8e6=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 26 13:34:46 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 26 Oct 2026 13:34:46 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1461374.1672384 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xLKqc-0007P8-QW; Mon, 26 Oct 2026 13:34:46 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1461374.1672384; Mon, 26 Oct 2026 13:34:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xLKqc-0007OK-F9; Mon, 26 Oct 2026 13:34:46 +0000
Received: by outflank-mailman (input) for mailman id 1461374;
 Mon, 26 Oct 2026 13:34:45 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1786ba588000f79f@swg.vates.tech>)
 id 1xLKqb-0007Mu-ED
 for win-pv-devel@lists.xenproject.org; Mon, 26 Oct 2026 13:34:45 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xLKqa-007EJz-R6
 for win-pv-devel@lists.xenproject.org; Mon, 26 Oct 2026 14:34:44 +0100
Received: from [10.42.69.9] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1786ba588000f79f@swg.vates.tech>)
 id 6adf56ef-8faa-0a2a0a5109dd-0a2a4509c50c-28
 for <win-pv-devel@lists.xenproject.org>; Mon, 26 Oct 2026 14:34:44 +0100
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-bad1c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1786ba588000f79f@swg.vates.tech>)
 id 6adf56f3-be1a-0a2a45090019-b9ff1c129017-4
 for <win-pv-devel@lists.xenproject.org>; Mon, 26 Oct 2026 14:34:44 +0100
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1786ba588000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 26 Oct 2026 13:34:43 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 8ACD482DEC;
 Mon, 26 Oct 2026 14:34:42 +0100 (CET)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=lMyXFuz4fFTbc8aHf4jmFw6/kt7NMbd8xmEejy/bSzA=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=hjeDGCzf1ocD6u7swGdhGAA+ZhwSExdENXW6oTbY7TjfZDCpGEJjXx+BWM36dxDqk0qYl1wH4
 03jN7JZm3miFqzJ5XwaWiTK3CWH+P5diDxIvExT9mDUvXO5BXOxVJM3EFh1OP/C8DkTFY5ZfRPU
 ZqOYZULUMlIURzkpwDt5wY9Wy1mqCVKDsS7NNkn2M9OEa2Q8U8hUm/czAqLfrxdDj7DaqGAWKK5
 /AzhOt/Op+NUjD/yB1376bORz6GgcysLSgpJXKSrttFmVje+SOZFL/284s0G57bXuiXnLiMHvsF
 V72iORf2bo+Xa+pncGJj/yE2XlM8/IkDmxsH5KCENmcw==
X-Zone-Loop: 9b85cf85f6bdf8b2c0b2b39b8d48b22921917555427a
x-campaign-type: default
x-transaction-id: a1d775ea-48f6-4eab-9096-44c62c4ff078
x-swg-uid: 01-815835a5-2baf-44ff-b35d-4041e1f72add
X-Mailer: Sweego
Message-ID:
 <1793021683.8631fc262581453bbf619ec5b2062170.1a1786ba588000f79f@vates.tech>
x-swg-bid: 1793021683.8631fc262581453bbf619ec5b2062170.1a1786ba588000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [XENVKBD PATCH] thread: Wait for the thread if ObReferenceObjectByHandle fails
Date: Mon, 26 Oct 2026 14:34:23 +0100
In-Reply-To: <20261026133436.1703-1-ngoc-tu.dinh@vates.tech>
References: <1793021568.8631fc262581453bbf619ec5b2062170.1a17869e686000f79f@vates.tech>
 <20261026133436.1703-1-ngoc-tu.dinh@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.1ed.e7ed9088d27c576a.1a1786ba3e4.2db4ac63b26d473=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1793021682660
X-purgate-ID: tlsNG-bad1c0/1793021684-3A6DA034-4F52D491/0/0
X-purgate-type: clean
X-purgate-size: 1088

---=Part.1ed.e7ed9088d27c576a.1a1786ba3e4.2db4ac63b26d473=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

If ObReferenceObjectByHandle fails, the thread would have already
started=2E We need to wait for it to exit before cleaning up=2E

Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 src/xenvkbd/thread=2Ec | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/xenvkbd/thread=2Ec b/src/xenvkbd/thread=2Ec
index 2f1427d=2E=2E79dcb29 100644
--- a/src/xenvkbd/thread=2Ec
+++ b/src/xenvkbd/thread=2Ec
@@ -30,6 +30,7 @@
  * SUCH DAMAGE=2E
  */
=20
+#include <ntifs=2Eh>
 #include <ntddk=2Eh>
=20
 #include "thread=2Eh"
@@ -171,6 +172,7 @@ fail3:
     Error("fail3\n");
=20
     __ThreadAlert(*Thread);
+    ZwWaitForSingleObject(Handle, FALSE, NULL);
     ZwClose(Handle);
=20
 fail2:
--=20
2=2E56=2E0=2Ewindows=2E4



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.1ed.e7ed9088d27c576a.1a1786ba3e4.2db4ac63b26d473=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 26 13:34:47 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 26 Oct 2026 13:34:47 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1461375.1672388 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xLKqd-0007UR-KY; Mon, 26 Oct 2026 13:34:47 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1461375.1672388; Mon, 26 Oct 2026 13:34:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xLKqd-0007UJ-HM; Mon, 26 Oct 2026 13:34:47 +0000
Received: by outflank-mailman (input) for mailman id 1461375;
 Mon, 26 Oct 2026 13:34:46 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1786ba104000f79f@swg.vates.tech>)
 id 1xLKqc-0007N1-02
 for win-pv-devel@lists.xenproject.org; Mon, 26 Oct 2026 13:34:46 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xLKqb-007EJz-D4
 for win-pv-devel@lists.xenproject.org; Mon, 26 Oct 2026 14:34:45 +0100
Received: from [10.42.69.9] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1786ba104000f79f@swg.vates.tech>)
 id 6adf56ef-8faa-0a2a0a5109dd-0a2a4509c50c-32
 for <win-pv-devel@lists.xenproject.org>; Mon, 26 Oct 2026 14:34:45 +0100
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-bad1c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1786ba104000f79f@swg.vates.tech>)
 id 6adf56f3-be1a-0a2a45090019-b9ff1c12a67f-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 26 Oct 2026 14:34:44 +0100
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1786ba104000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 26 Oct 2026 13:34:41 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 0F43382CF4;
 Mon, 26 Oct 2026 14:34:41 +0100 (CET)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=fiaL3R9mmtmaMq96Uu0ZPgkZQD0759iH/XlMAzR3tiE=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=VxO/Mf2/vjFidhZhgEaV+Ja+GA/3x2bD393OHV/sjSflAD6ctoO7qyF36hRrmCTxSNXO/ROuV
 1j6iYggdvReXBDLIeIMhGdRurzpjAn4kObUlKzFmT4X3K2XvM5CKs58FnUzzh1nNPxfy4FPV5CA
 CjemH4lDnrbnlafgkN7c35Y2v8lp/x/HDUY7CK23pfL2KtECCpcWw6TMTZZkCJLJtnWD8a+FCbv
 p87dZDlynEr56IVW7goOlIJTHvUxjYDR04USPn/aOSDWJLR0MDiqWBtRwhVoGHChmUjRdNoBFsG
 8vdpbV1xY7XMEfe6VMsihFWIvorbLX9tDbNSIne6G8Pg==
X-Zone-Loop: 498932f04d0209f78d7dafcf6c41e2d8a1e945014c58
x-campaign-type: default
x-transaction-id: 2b00262f-9888-4d9a-96e9-54440a1688d8
x-swg-uid: 01-f2ca749a-8e30-4431-805c-138c2bb376d5
X-Mailer: Sweego
Message-ID:
 <1793021681.8631fc262581453bbf619ec5b2062170.1a1786ba104000f79f@vates.tech>
x-swg-bid: 1793021681.8631fc262581453bbf619ec5b2062170.1a1786ba104000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [XENCONS PATCH] thread: Wait for the thread if ObReferenceObjectByHandle fails
Date: Mon, 26 Oct 2026 14:34:18 +0100
In-Reply-To: <1793021568.8631fc262581453bbf619ec5b2062170.1a17869e686000f79f@vates.tech>
References: <1793021568.8631fc262581453bbf619ec5b2062170.1a17869e686000f79f@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.1e8.3ead2e5a091e1de4.1a1786b9e09.a61cd5265cffb697=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1793021681162
X-purgate-ID: tlsNG-bad1c0/1793021684-BD8C1034-F1CB4311/0/0
X-purgate-type: clean
X-purgate-size: 1090

---=Part.1e8.3ead2e5a091e1de4.1a1786b9e09.a61cd5265cffb697=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

If ObReferenceObjectByHandle fails, the thread would have already
started=2E We need to wait for it to exit before cleaning up=2E

Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 src/xencons/thread=2Ec | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/xencons/thread=2Ec b/src/xencons/thread=2Ec
index ad30f8f=2E=2Ebd40bda 100644
--- a/src/xencons/thread=2Ec
+++ b/src/xencons/thread=2Ec
@@ -30,6 +30,7 @@
  * SUCH DAMAGE=2E
  */
=20
+#include <ntifs=2Eh>
 #include <ntddk=2Eh>
=20
 #include "thread=2Eh"
@@ -171,6 +172,7 @@ fail3:
     Error("fail3\n");
=20
     __ThreadAlert(*Thread);
+    ZwWaitForSingleObject(Handle, FALSE, NULL);
     ZwClose(Handle);
=20
 fail2:
--=20
2=2E56=2E0=2Ewindows=2E4



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.1e8.3ead2e5a091e1de4.1a1786b9e09.a61cd5265cffb697=---


From win-pv-devel-bounces@lists.xenproject.org Mon Oct 26 14:31:18 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 26 Oct 2026 14:31:18 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1461436.1672446 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xLLjK-0004YS-QP; Mon, 26 Oct 2026 14:31:18 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1461436.1672446; Mon, 26 Oct 2026 14:31:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xLLjK-0004YL-NV; Mon, 26 Oct 2026 14:31:18 +0000
Received: by outflank-mailman (input) for mailman id 1461436;
 Mon, 26 Oct 2026 14:31:17 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1789f6b0b000f79f@swg.vates.tech>)
 id 1xLLjJ-0004YF-UI
 for win-pv-devel@lists.xenproject.org; Mon, 26 Oct 2026 14:31:17 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xLLjJ-00H6Q0-9W
 for win-pv-devel@lists.xenproject.org; Mon, 26 Oct 2026 15:31:17 +0100
Received: from [10.42.69.12] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1789f6b0b000f79f@swg.vates.tech>)
 id 6adf642c-8faa-0a2a0a5109dd-0a2a450cecc0-46
 for <win-pv-devel@lists.xenproject.org>; Mon, 26 Oct 2026 15:31:17 +0100
Received: from [185.255.28.18] (helo=prod-mta-13.swg-srv.net)
 by tlsNG-d25034.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1789f6b0b000f79f@swg.vates.tech>)
 id 6adf6434-f479-0a2a450c0019-b9ff1c128bf3-3
 for <win-pv-devel@lists.xenproject.org>; Mon, 26 Oct 2026 15:31:17 +0100
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1789f6b0b000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Mon, 26 Oct 2026 14:31:15 +0000
Received: from [192.168.1.61] (142.220.66.37.rev.sfr.net [37.66.220.142])
 (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 3B9DF82BF5
 for <win-pv-devel@lists.xenproject.org>; Mon, 26 Oct 2026 15:31:15 +0100 (CET)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=m/+F5Hgpioprz2dzaiPYIA8fwqxH0MIh8MkMRLtOprY=;
 h=from:subject:date:message-id:to:mime-version:content-type:in-reply-to:references:feedback-id;
 b=g7F+yovcBdmZMMyBDwNXaGCeAM/YdTcCfTYwzOGaRTAANl5IL7aIri6D5QBAkGJJeGxCo9N6z
 hFqYK++XZoEw8JimqL3K7GCAzuEOBmLQTegJ81GuSQg/L24ERlFAhEATMnUeWMnz9BcIxeOOIv1
 j0vvYJqk/nAsfPY88R2ByEZJEOLZFVwb+nMkeXFzA4jEYKeGa7byX6SuR7s89+GPfkAD4LUextz
 GhWiFUIEufUVcXm3nlqBFezIJNnSs9Sxz8hzU+N6L7ku1CDv1r+kHOeoqdfustoekfDggrrG9BX
 sqo6Dzz7ep+fVU/8O7cEaUWth28LQHA9LMDSl/NfL2YA==
X-Zone-Loop: 997af718c66b5676a2ba767b0fc5a8aa73412d36150f
x-campaign-type: default
x-transaction-id: 0b234091-63b6-4a36-aa5b-8b5152af0510
x-swg-uid: 01-da2bad95-26b7-4f18-9a56-fdd89e452222
X-Mailer: Sweego
Message-ID:
 <1793025076.8631fc262581453bbf619ec5b2062170.1a1789f6b0b000f79f@vates.tech>
x-swg-bid: 1793025076.8631fc262581453bbf619ec5b2062170.1a1789f6b0b000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
Date: Mon, 26 Oct 2026 15:31:15 +0100
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: [RFC PATCH 0/9] Defer completion and ring destruction until
 backend grant release
Content-Language: en-US
To: win-pv-devel@lists.xenproject.org
References: <1792768355.8631fc262581453bbf619ec5b2062170.1a169522dd1000f79f@vates.tech>
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
In-Reply-To: <1792768355.8631fc262581453bbf619ec5b2062170.1a169522dd1000f79f@vates.tech>
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.1fc.8d17d6916a9f4b7c.1a1789f6856.529a66a44482377a=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1793025075287
X-purgate-ID: tlsNG-d25034/1793025077-5270FA5B-D2331751/0/0
X-purgate-type: clean
X-purgate-size: 2612

---=Part.1fc.8d17d6916a9f4b7c.1a1789f6856.529a66a44482377a=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

On 23/10/2026 17:14, Tu Dinh wrote:
> Hello,
>=20
> When a backend is accessing a grant entry, it'll set the GTF_reading|
> GTF_writing bits on that entry=2E RevokeForeignAccess will fail as long =
as
> these bits are still set=2E
>=20
> WinPV drivers assume that you can ignore RevokeForeignAccess failures
> after a certain number of retries=2E This is unfortunately not the case,
> as backends can still access the grants and corrupt things=2E We've
> observed data corruption that we suspect as being caused by this issue=
=2E
>=20
> This series attempts to clarify the fallible nature of
> RevokeForeignAccess, and fixes the problem by deferring request
> completion and ring destruction until after the corresponding grants
> have been released by the backend=2E
>=20
> It's freshly written and will undergo testing on our side, but I'd
> appreciate if you could test this series on your testing infrastructure
> as well to reveal any early errors=2E
>=20
> This is the first series of fix for a class of similar issues=2E Further
> fixes will be needed in other drivers using the grant interface (esp=2E
> XenVif, XenIface); there are also other issues that have not been
> discussed in this series=2E
>=20

There's a deadlock somewhere in this series, I'm looking for it=2E I'll=20
send a v2=2E

> Tu Dinh (9):
>    granter: Correct the accounting of Current
>    Use GNTTAB_INTERFACE_V5
>    frontend: Initialize the granter before the ring
>    granter: Split GranterTryPut to its own function
>    granter: Decouple cache lifetime from Connected
>    granter: Introduce GranterD0ToD3/D3ToD0
>    ring: Introduce RingD3ToD0/RingD0ToD3
>    ring: Defer destruction until backend grant release
>    ring: Defer request completion until backend grant release
>=20
>   include/gnttab_interface=2Eh |  90 +++--
>   src/xenvbd=2Einf             |   6 +-
>   src/xenvbd/frontend=2Ec      |  63 ++--
>   src/xenvbd/frontend=2Eh      |   4 +-
>   src/xenvbd/granter=2Ec       | 173 +++++++---
>   src/xenvbd/granter=2Eh       |  17 +-
>   src/xenvbd/ring=2Ec          | 662 +++++++++++++++++++++++++++++------=
--
>   src/xenvbd/ring=2Eh          |  13 +
>   8 files changed, 807 insertions(+), 221 deletions(-)
>=20



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.1fc.8d17d6916a9f4b7c.1a1789f6856.529a66a44482377a=---


From win-pv-devel-bounces@lists.xenproject.org Wed Oct 28 17:16:40 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 28 Oct 2026 17:16:40 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1463496.1674345 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xM7GR-0004NV-H7; Wed, 28 Oct 2026 17:16:39 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1463496.1674345; Wed, 28 Oct 2026 17:16:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xM7GR-0004NN-ET; Wed, 28 Oct 2026 17:16:39 +0000
Received: by outflank-mailman (input) for mailman id 1463496;
 Wed, 28 Oct 2026 17:16:38 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1838377bc000f79f@swg.vates.tech>)
 id 1xM7GQ-0004NH-6c
 for win-pv-devel@lists.xenproject.org; Wed, 28 Oct 2026 17:16:38 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xM7GP-00EY4d-Jf
 for win-pv-devel@lists.xenproject.org; Wed, 28 Oct 2026 18:16:37 +0100
Received: from [10.42.69.1] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1838377bc000f79f@swg.vates.tech>)
 id 6ae22dd7-e002-0a2a0a5209dd-0a2a4501de00-36
 for <win-pv-devel@lists.xenproject.org>; Wed, 28 Oct 2026 18:16:37 +0100
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a1838377bc000f79f@swg.vates.tech>)
 id 6ae22df5-5984-0a2a45010019-b9ff1c229613-3
 for <win-pv-devel@lists.xenproject.org>; Wed, 28 Oct 2026 18:16:37 +0100
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a1838377bc000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Wed, 28 Oct 2026 17:16:33 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 7B656805F9;
 Wed, 28 Oct 2026 18:16:32 +0100 (CET)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=9Chwttl4JAC9xiO9ZecZmFr2ojQKwRB/B54tmL1F85U=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:feedback-id;
 b=Veotykg4n8rp2QqgXNJVBIbNph6zBDqlSaGa9SqPIQ/SmUcPt/ZWww2+f/kZ4OMugytVF++6p
 tPUVkoJjss+ZTmC8SAqxe//JBqGOoXwVskvGV5BUVnj3AJ86lVgYyGzHIRqeihIzboaIFvSlKds
 /R8ABYLe4iD/wER86fNnf436zweex9q3FvesK/PKHxzUiw2o+o3QL3AWfD39lSUEPK7cdTZxhca
 /z4Y1bjeW+ynI1hmNkt30PLixVhHf4th4mAAODGj7lalNkHm3EOWUworIoC8Zb6UdLjn14sRyoD
 fwM8otGGhXbmvbNhvLOfQlGuOpA5GSKA38/EWMmrMDEw==
X-Zone-Loop: 92138944d871d16aca0266d3828dc3cda4496f3c460e
x-campaign-type: default
x-transaction-id: fad81147-c03a-4224-b3bf-1526f0714fdd
x-swg-uid: 01-4417bbe9-ebcc-4362-86f0-ec9be68aaa95
X-Mailer: Sweego
Message-ID:
 <1793207793.8631fc262581453bbf619ec5b2062170.1a1838377bc000f79f@vates.tech>
x-swg-bid: 1793207793.8631fc262581453bbf619ec5b2062170.1a1838377bc000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [PATCH v2 00/10] Defer completion and ring destruction until backend grant release
Date: Wed, 28 Oct 2026 18:16:29 +0100
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.2ab.230ab92439b05236.1a1838373b7.b6b7acd1953fbb08=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1793207792567
X-purgate-ID: tlsNG-d62444/1793207797-BF86F757-3F88A532/0/0
X-purgate-type: clean
X-purgate-size: 2705

---=Part.2ab.230ab92439b05236.1a1838373b7.b6b7acd1953fbb08=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

When a backend is accessing a grant entry, it'll set the GTF_reading|
GTF_writing bits on that entry=2E RevokeForeignAccess will fail as long as
these bits are still set=2E

WinPV drivers assume that you can ignore RevokeForeignAccess failures
after a certain number of retries=2E This is unfortunately not the case,
as backends can still access the grants and corrupt things=2E We've
observed data corruption that we suspect as being caused by this issue=2E

This series converts RevokeForeignAccess into a fallible call named
TryRevokeForeignAccess, and fixes the problem by deferring request
completion and ring destruction until after the corresponding grants
have been released by the backend=2E

It has undergone testing using a harness for suspending I/O handling at
critical points, and showed no deadlock or data corruption when the
associated issues in tapdisk are fixed=2E

This is the first series of fix for a class of similar issues=2E Further
fixes will be needed in other drivers using the grant interface (esp=2E
XenVif, XenIface); there are also other issues that have not been
discussed in this series=2E

Changes in V2:
* Rename RevokeForeignAccess in GNTTAB V5 to TryRevokeForeignAccess
* Fix a deadlock during RingD0ToD3 (see the "ring: Defer destruction
  until backend grant release" commit for more details)
* Add a fix for a C6387 warning in BlkifRing

Tu Dinh (10):
  ring: Fix warning C6387: 'BlkifRing' could be '0'
  granter: Correct the accounting of Current
  Use GNTTAB_INTERFACE_V5
  frontend: Initialize the granter before the ring
  granter: Split GranterTryPut to its own function
  granter: Decouple cache lifetime from Connected
  granter: Introduce GranterD0ToD3/D3ToD0
  ring: Introduce RingD3ToD0/RingD0ToD3
  ring: Defer destruction until backend grant release
  ring: Defer request completion until backend grant release

 include/gnttab_interface=2Eh | 116 ++++--
 src/xenvbd=2Einf             |   6 +-
 src/xenvbd/frontend=2Ec      |  63 ++--
 src/xenvbd/frontend=2Eh      |   4 +-
 src/xenvbd/granter=2Ec       | 177 +++++++---
 src/xenvbd/granter=2Eh       |  17 +-
 src/xenvbd/ring=2Ec          | 707 ++++++++++++++++++++++++++++++-------
 src/xenvbd/ring=2Eh          |  13 +
 8 files changed, 867 insertions(+), 236 deletions(-)

--=20
2=2E56=2E0=2Ewindows=2E4



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.2ab.230ab92439b05236.1a1838373b7.b6b7acd1953fbb08=---


From win-pv-devel-bounces@lists.xenproject.org Wed Oct 28 17:18:09 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 28 Oct 2026 17:18:09 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1463503.1674358 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xM7Ht-0004mt-S7; Wed, 28 Oct 2026 17:18:09 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1463503.1674358; Wed, 28 Oct 2026 17:18:09 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xM7Ht-0004mm-PV; Wed, 28 Oct 2026 17:18:09 +0000
Received: by outflank-mailman (input) for mailman id 1463503;
 Wed, 28 Oct 2026 17:18:08 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a18384d9e0000f79f@swg.vates.tech>)
 id 1xM7Hs-0004lO-AL
 for win-pv-devel@lists.xenproject.org; Wed, 28 Oct 2026 17:18:08 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xM7Hr-003lOS-NS
 for win-pv-devel@lists.xenproject.org; Wed, 28 Oct 2026 18:18:07 +0100
Received: from [10.42.69.2] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a18384d9e0000f79f@swg.vates.tech>)
 id 6ae22e4f-8faa-0a2a0a5109dd-0a2a45028568-0
 for <win-pv-devel@lists.xenproject.org>; Wed, 28 Oct 2026 18:18:07 +0100
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a18384d9e0000f79f@swg.vates.tech>)
 id 6ae22e4f-6ca4-0a2a45020019-b9ff1c229ec1-3
 for <win-pv-devel@lists.xenproject.org>; Wed, 28 Oct 2026 18:18:07 +0100
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a18384d9e0000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Wed, 28 Oct 2026 17:18:04 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id B1E67805F9;
 Wed, 28 Oct 2026 18:18:02 +0100 (CET)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=KZZlZsucqvCCDV6TIxw+S9o8+sSSuNCHrQGDg4LsCKE=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=R2FoT5MzxEcKosVByMfCrnosbiDfvNSYXQTSLd278OhwOQ588bAd6Rs1YPFpQ+eRWxqKFkUaE
 UacuRn3E3NhJFJLM2MgjMDBbtVu8fxTdJbJVSr5wMTrIbrGf/iPu9Gn+hAB+GSxHg9fF7yJeqpo
 zq9IpcarzmFjDFMV1y3R8sNqhGQ4ye+HFlD1foEflSVr6aWlnhMN7pn6a3nSFq1e5h76GyrpeBw
 Rv14k3I7+uWhh1E4mv053X6jzKSawrkAMZ4Uz50y5dk7kRPUbEAhVW6jGvG/LzEZrIfkLfnKpmI
 qh6Jo3eYcQEjQ0YoDrg3ioJMYeq0kXSUAi9mHyfcJwdw==
X-Zone-Loop: 0d5bdead6ea908b8dbcd8b20cb63ffba1be87a7eb4fd
x-campaign-type: default
x-transaction-id: 583c567d-fca7-44cc-80d6-b6c3e2ca8371
x-swg-uid: 01-efe29648-6027-4af8-9bc3-691e3696b7aa
X-Mailer: Sweego
Message-ID:
 <1793207884.8631fc262581453bbf619ec5b2062170.1a18384d9e0000f79f@vates.tech>
x-swg-bid: 1793207884.8631fc262581453bbf619ec5b2062170.1a18384d9e0000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [XENBUS PATCH v2] Add GNTTAB_INTERFACE_V5
Date: Wed, 28 Oct 2026 18:17:58 +0100
In-Reply-To: <1793207793.8631fc262581453bbf619ec5b2062170.1a1838377bc000f79f@vates.tech>
References: <1793207793.8631fc262581453bbf619ec5b2062170.1a1838377bc000f79f@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.2ac.8f2e84287f3160db.1a18384d420.473449124b7bdafa=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1793207882785
X-purgate-ID: tlsNG-720697/1793207887-F0EA32AC-80DA6510/0/0
X-purgate-type: clean
X-purgate-size: 15160

---=Part.2ac.8f2e84287f3160db.1a18384d420.473449124b7bdafa=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Rework RevokeForeignAccess into TryRevokeForeignAccess=2E Avoid retrying
and calling SCHEDOP_yield in TryRevokeForeignAccess=2E Leave the retry
logic to the individual drivers instead, because individual drivers need
to revoke grants in the background to avoid having backends trample over
pages that have an active grant entry yet have already been released to
the OS=2E

RevokeForeignAccessV2 continues providing the retry logic to legacy
clients=2E

Note that TryRevokeForeignAccess in GNTTAB_INTERFACE_V5 cannot
transparently replace RevokeForeignAccessV2 because of semantic changes=2E
Migrating to GNTTAB_INTERFACE_V5 requires reimplementing the drivers'
grant revocation path=2E

Assisted-by: LLM
Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
v2: Rename to TryRevokeForeignAccess
---
 include/gnttab_interface=2Eh | 116 +++++++++++++++++++++++++------------
 include/revision=2Eh         |   3 +-
 src/xenbus/gnttab=2Ec        |  82 +++++++++++++++++++++-----
 3 files changed, 150 insertions(+), 51 deletions(-)

diff --git a/include/gnttab_interface=2Eh b/include/gnttab_interface=2Eh
index 92a95a7=2E=2E40ea821 100644
--- a/include/gnttab_interface=2Eh
+++ b/include/gnttab_interface=2Eh
@@ -132,7 +132,7 @@ typedef NTSTATUS
     _Outptr_ PXENBUS_GNTTAB_ENTRY   *Entry
     );
=20
-/*! \typedef XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS
+/*! \typedef XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS_V2
     \brief Revoke foreign access and return the \a Entry to the \a Cache
=20
     \param Interface The interface header
@@ -140,9 +140,35 @@ typedef NTSTATUS
     \param Locked If mutually exclusive access to the cache is already
     guaranteed then set this to TRUE
     \param Entry The grant table entry handle
+
+    If the foreign domain is still accessing the granted page, this retri=
es
+    for a while before giving up=2E
 */
 typedef NTSTATUS
-(*XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS)(
+(*XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS_V2)(
+    _In_ PINTERFACE                 Interface,
+    _In_ PXENBUS_GNTTAB_CACHE       Cache,
+    _In_ BOOLEAN                    Locked,
+    _In_ PXENBUS_GNTTAB_ENTRY       Entry
+    );
+
+/*! \typedef XENBUS_GNTTAB_TRY_REVOKE_FOREIGN_ACCESS
+    \brief Revoke foreign access and return the \a Entry to the \a Cache
+
+    \param Interface The interface header
+    \param Cache The grant table cache handle
+    \param Locked If mutually exclusive access to the cache is already
+    guaranteed then set this to TRUE
+    \param Entry The grant table entry handle
+    \return STATUS_DEVICE_BUSY if the foreign domain is still accessing t=
he
+    granted page
+
+    This does not wait for the foreign domain=2E On failure, foreign acce=
ss
+    remains in effect and \a Entry remains valid: the caller must keep th=
e
+    granted page alive, and should retry the revocation later=2E
+*/
+typedef NTSTATUS
+(*XENBUS_GNTTAB_TRY_REVOKE_FOREIGN_ACCESS)(
     _In_ PINTERFACE                 Interface,
     _In_ PXENBUS_GNTTAB_CACHE       Cache,
     _In_ BOOLEAN                    Locked,
@@ -239,16 +265,16 @@ DEFINE_GUID(GUID_XENBUS_GNTTAB_INTERFACE,
     \ingroup interfaces
 */
 struct _XENBUS_GNTTAB_INTERFACE_V2 {
-    INTERFACE                           Interface;
-    XENBUS_GNTTAB_ACQUIRE               GnttabAcquire;
-    XENBUS_GNTTAB_RELEASE               GnttabRelease;
-    XENBUS_GNTTAB_CREATE_CACHE_V1       GnttabCreateCacheVersion1;
-    XENBUS_GNTTAB_PERMIT_FOREIGN_ACCESS GnttabPermitForeignAccess;
-    XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS GnttabRevokeForeignAccess;
-    XENBUS_GNTTAB_GET_REFERENCE         GnttabGetReference;
-    XENBUS_GNTTAB_DESTROY_CACHE         GnttabDestroyCache;
-    XENBUS_GNTTAB_MAP_FOREIGN_PAGES     GnttabMapForeignPages;
-    XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES   GnttabUnmapForeignPages;
+    INTERFACE                               Interface;
+    XENBUS_GNTTAB_ACQUIRE                   GnttabAcquire;
+    XENBUS_GNTTAB_RELEASE                   GnttabRelease;
+    XENBUS_GNTTAB_CREATE_CACHE_V1           GnttabCreateCacheVersion1;
+    XENBUS_GNTTAB_PERMIT_FOREIGN_ACCESS     GnttabPermitForeignAccess;
+    XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS_V2  GnttabRevokeForeignAccessVers=
ion2;
+    XENBUS_GNTTAB_GET_REFERENCE             GnttabGetReference;
+    XENBUS_GNTTAB_DESTROY_CACHE             GnttabDestroyCache;
+    XENBUS_GNTTAB_MAP_FOREIGN_PAGES         GnttabMapForeignPages;
+    XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES       GnttabUnmapForeignPages;
 };
=20
 /*! \struct _XENBUS_GNTTAB_INTERFACE_V3
@@ -256,17 +282,17 @@ struct _XENBUS_GNTTAB_INTERFACE_V2 {
     \ingroup interfaces
 */
 struct _XENBUS_GNTTAB_INTERFACE_V3 {
-    INTERFACE                           Interface;
-    XENBUS_GNTTAB_ACQUIRE               GnttabAcquire;
-    XENBUS_GNTTAB_RELEASE               GnttabRelease;
-    XENBUS_GNTTAB_CREATE_CACHE_V1       GnttabCreateCacheVersion1;
-    XENBUS_GNTTAB_PERMIT_FOREIGN_ACCESS GnttabPermitForeignAccess;
-    XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS GnttabRevokeForeignAccess;
-    XENBUS_GNTTAB_GET_REFERENCE         GnttabGetReference;
-    XENBUS_GNTTAB_QUERY_REFERENCE       GnttabQueryReference;
-    XENBUS_GNTTAB_DESTROY_CACHE         GnttabDestroyCache;
-    XENBUS_GNTTAB_MAP_FOREIGN_PAGES     GnttabMapForeignPages;
-    XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES   GnttabUnmapForeignPages;
+    INTERFACE                               Interface;
+    XENBUS_GNTTAB_ACQUIRE                   GnttabAcquire;
+    XENBUS_GNTTAB_RELEASE                   GnttabRelease;
+    XENBUS_GNTTAB_CREATE_CACHE_V1           GnttabCreateCacheVersion1;
+    XENBUS_GNTTAB_PERMIT_FOREIGN_ACCESS     GnttabPermitForeignAccess;
+    XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS_V2  GnttabRevokeForeignAccessVers=
ion2;
+    XENBUS_GNTTAB_GET_REFERENCE             GnttabGetReference;
+    XENBUS_GNTTAB_QUERY_REFERENCE           GnttabQueryReference;
+    XENBUS_GNTTAB_DESTROY_CACHE             GnttabDestroyCache;
+    XENBUS_GNTTAB_MAP_FOREIGN_PAGES         GnttabMapForeignPages;
+    XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES       GnttabUnmapForeignPages;
 };
=20
 /*! \struct _XENBUS_GNTTAB_INTERFACE_V4
@@ -274,20 +300,38 @@ struct _XENBUS_GNTTAB_INTERFACE_V3 {
     \ingroup interfaces
 */
 struct _XENBUS_GNTTAB_INTERFACE_V4 {
-    INTERFACE                           Interface;
-    XENBUS_GNTTAB_ACQUIRE               GnttabAcquire;
-    XENBUS_GNTTAB_RELEASE               GnttabRelease;
-    XENBUS_GNTTAB_CREATE_CACHE          GnttabCreateCache;
-    XENBUS_GNTTAB_PERMIT_FOREIGN_ACCESS GnttabPermitForeignAccess;
-    XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS GnttabRevokeForeignAccess;
-    XENBUS_GNTTAB_GET_REFERENCE         GnttabGetReference;
-    XENBUS_GNTTAB_QUERY_REFERENCE       GnttabQueryReference;
-    XENBUS_GNTTAB_DESTROY_CACHE         GnttabDestroyCache;
-    XENBUS_GNTTAB_MAP_FOREIGN_PAGES     GnttabMapForeignPages;
-    XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES   GnttabUnmapForeignPages;
+    INTERFACE                               Interface;
+    XENBUS_GNTTAB_ACQUIRE                   GnttabAcquire;
+    XENBUS_GNTTAB_RELEASE                   GnttabRelease;
+    XENBUS_GNTTAB_CREATE_CACHE              GnttabCreateCache;
+    XENBUS_GNTTAB_PERMIT_FOREIGN_ACCESS     GnttabPermitForeignAccess;
+    XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS_V2  GnttabRevokeForeignAccessVers=
ion2;
+    XENBUS_GNTTAB_GET_REFERENCE             GnttabGetReference;
+    XENBUS_GNTTAB_QUERY_REFERENCE           GnttabQueryReference;
+    XENBUS_GNTTAB_DESTROY_CACHE             GnttabDestroyCache;
+    XENBUS_GNTTAB_MAP_FOREIGN_PAGES         GnttabMapForeignPages;
+    XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES       GnttabUnmapForeignPages;
+};
+
+/*! \struct _XENBUS_GNTTAB_INTERFACE_V5
+    \brief GNTTAB interface version 5
+    \ingroup interfaces
+*/
+struct _XENBUS_GNTTAB_INTERFACE_V5 {
+    INTERFACE                               Interface;
+    XENBUS_GNTTAB_ACQUIRE                   GnttabAcquire;
+    XENBUS_GNTTAB_RELEASE                   GnttabRelease;
+    XENBUS_GNTTAB_CREATE_CACHE              GnttabCreateCache;
+    XENBUS_GNTTAB_PERMIT_FOREIGN_ACCESS     GnttabPermitForeignAccess;
+    XENBUS_GNTTAB_TRY_REVOKE_FOREIGN_ACCESS GnttabTryRevokeForeignAccess;
+    XENBUS_GNTTAB_GET_REFERENCE             GnttabGetReference;
+    XENBUS_GNTTAB_QUERY_REFERENCE           GnttabQueryReference;
+    XENBUS_GNTTAB_DESTROY_CACHE             GnttabDestroyCache;
+    XENBUS_GNTTAB_MAP_FOREIGN_PAGES         GnttabMapForeignPages;
+    XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES       GnttabUnmapForeignPages;
 };
=20
-typedef struct _XENBUS_GNTTAB_INTERFACE_V4 XENBUS_GNTTAB_INTERFACE, *PXEN=
BUS_GNTTAB_INTERFACE;
+typedef struct _XENBUS_GNTTAB_INTERFACE_V5 XENBUS_GNTTAB_INTERFACE, *PXEN=
BUS_GNTTAB_INTERFACE;
=20
 /*! \def XENBUS_GNTTAB
     \brief Macro at assist in method invocation
@@ -298,6 +342,6 @@ typedef struct _XENBUS_GNTTAB_INTERFACE_V4 XENBUS_GNTT=
AB_INTERFACE, *PXENBUS_GNT
 #endif  // _WINDLL
=20
 #define XENBUS_GNTTAB_INTERFACE_VERSION_MIN 2
-#define XENBUS_GNTTAB_INTERFACE_VERSION_MAX 4
+#define XENBUS_GNTTAB_INTERFACE_VERSION_MAX 5
=20
 #endif  // _XENBUS_GNTTAB_INTERFACE_H
diff --git a/include/revision=2Eh b/include/revision=2Eh
index a63e550=2E=2Ec1ab047 100644
--- a/include/revision=2Eh
+++ b/include/revision=2Eh
@@ -52,6 +52,7 @@
     DEFINE_REVISION(0x09000009,  1,  4,  9,  1,  2,  1,  2,  4,  1,  1,  =
2), \
     DEFINE_REVISION(0x0900000A,  1,  4,  9,  1,  2,  1,  2,  4,  2,  1,  =
2), \
     DEFINE_REVISION(0x0900000B,  1,  4,  9,  1,  2,  1,  2,  4,  3,  1,  =
2), \
-    DEFINE_REVISION(0x0900000C,  1,  4,  9,  1,  2,  1,  2,  4,  3,  1,  =
3)
+    DEFINE_REVISION(0x0900000C,  1,  4,  9,  1,  2,  1,  2,  4,  3,  1,  =
3), \
+    DEFINE_REVISION(0x0900000D,  1,  4,  9,  1,  2,  1,  2,  5,  3,  1,  =
3)
=20
 #endif  // _REVISION_H
diff --git a/src/xenbus/gnttab=2Ec b/src/xenbus/gnttab=2Ec
index bdf8b2b=2E=2E4c9b505 100644
--- a/src/xenbus/gnttab=2Ec
+++ b/src/xenbus/gnttab=2Ec
@@ -548,7 +548,7 @@ fail1:
 }
=20
 static NTSTATUS
-GnttabRevokeForeignAccess(
+GnttabTryRevokeForeignAccess(
     _In_ PINTERFACE             Interface,
     _In_ PXENBUS_GNTTAB_CACHE   Cache,
     _In_ BOOLEAN                Locked,
@@ -559,8 +559,6 @@ GnttabRevokeForeignAccess(
     PXENBUS_GNTTAB_FRAME        Frame;
     ULONG                       Index;
     volatile SHORT              *flags;
-    ULONG                       Attempt;
-    NTSTATUS                    status;
=20
     ASSERT3U(Entry->Magic, =3D=3D, XENBUS_GNTTAB_ENTRY_MAGIC);
     ASSERT3U(Entry->Reference, >=3D, XENBUS_GNTTAB_RESERVED_ENTRY_COUNT);
@@ -571,25 +569,21 @@ GnttabRevokeForeignAccess(
=20
     flags =3D (volatile SHORT *)&Frame->Entry[Index]=2Eflags;
=20
-    for (Attempt =3D 0; Attempt < 100; Attempt++) {
+    for (;;) {
         uint16_t    Old;
         uint16_t    New;
=20
         Old =3D *flags;
-        Old &=3D ~(GTF_reading | GTF_writing);
+
+        if (Old & (GTF_reading | GTF_writing))
+            return STATUS_DEVICE_BUSY;
=20
         New =3D Old & ~GTF_permit_access;
=20
         if (InterlockedCompareExchange16(flags, New, Old) =3D=3D Old)
             break;
-
-        SchedYield();
     }
=20
-    status =3D STATUS_UNSUCCESSFUL;
-    if (Attempt =3D=3D 100)
-        goto fail1;
-
     RtlZeroMemory(&Frame->Entry[Index], sizeof (grant_entry_v1_t));
     RtlZeroMemory(&Entry->Entry, sizeof (grant_entry_v1_t));
=20
@@ -600,6 +594,35 @@ GnttabRevokeForeignAccess(
                  Locked);
=20
     return STATUS_SUCCESS;
+}
+
+static NTSTATUS
+GnttabRevokeForeignAccessVersion2(
+    _In_ PINTERFACE             Interface,
+    _In_ PXENBUS_GNTTAB_CACHE   Cache,
+    _In_ BOOLEAN                Locked,
+    _In_ PXENBUS_GNTTAB_ENTRY   Entry
+    )
+{
+    ULONG                       Attempt;
+    NTSTATUS                    status;
+
+    for (Attempt =3D 0; Attempt < 100; Attempt++) {
+        status =3D GnttabTryRevokeForeignAccess(Interface,
+                                              Cache,
+                                              Locked,
+                                              Entry);
+        if (NT_SUCCESS(status))
+            break;
+
+        SchedYield();
+    }
+
+    status =3D STATUS_UNSUCCESSFUL;
+    if (Attempt =3D=3D 100)
+        goto fail1;
+
+    return STATUS_SUCCESS;
=20
 fail1:
     Error("fail1 (%08x)\n", status);
@@ -1044,7 +1067,7 @@ static struct _XENBUS_GNTTAB_INTERFACE_V2   GnttabIn=
terfaceVersion2 =3D {
     GnttabRelease,
     GnttabCreateCacheVersion1,
     GnttabPermitForeignAccess,
-    GnttabRevokeForeignAccess,
+    GnttabRevokeForeignAccessVersion2,
     GnttabGetReference,
     GnttabDestroyCache,
     GnttabMapForeignPages,
@@ -1057,7 +1080,7 @@ static struct _XENBUS_GNTTAB_INTERFACE_V3   GnttabIn=
terfaceVersion3 =3D {
     GnttabRelease,
     GnttabCreateCacheVersion1,
     GnttabPermitForeignAccess,
-    GnttabRevokeForeignAccess,
+    GnttabRevokeForeignAccessVersion2,
     GnttabGetReference,
     GnttabQueryReference,
     GnttabDestroyCache,
@@ -1071,7 +1094,21 @@ static struct _XENBUS_GNTTAB_INTERFACE_V4   GnttabI=
nterfaceVersion4 =3D {
     GnttabRelease,
     GnttabCreateCache,
     GnttabPermitForeignAccess,
-    GnttabRevokeForeignAccess,
+    GnttabRevokeForeignAccessVersion2,
+    GnttabGetReference,
+    GnttabQueryReference,
+    GnttabDestroyCache,
+    GnttabMapForeignPages,
+    GnttabUnmapForeignPages
+};
+
+static struct _XENBUS_GNTTAB_INTERFACE_V5   GnttabInterfaceVersion5 =3D {
+    { sizeof (struct _XENBUS_GNTTAB_INTERFACE_V5), 5, NULL, NULL, NULL },
+    GnttabAcquire,
+    GnttabRelease,
+    GnttabCreateCache,
+    GnttabPermitForeignAccess,
+    GnttabTryRevokeForeignAccess,
     GnttabGetReference,
     GnttabQueryReference,
     GnttabDestroyCache,
@@ -1212,6 +1249,23 @@ GnttabGetInterface(
         status =3D STATUS_SUCCESS;
         break;
     }
+    case 5: {
+        struct _XENBUS_GNTTAB_INTERFACE_V5  *GnttabInterface;
+
+        GnttabInterface =3D (struct _XENBUS_GNTTAB_INTERFACE_V5 *)Interfa=
ce;
+
+        status =3D STATUS_BUFFER_OVERFLOW;
+        if (Size < sizeof (struct _XENBUS_GNTTAB_INTERFACE_V5))
+            break;
+
+        *GnttabInterface =3D GnttabInterfaceVersion5;
+
+        ASSERT3U(Interface->Version, =3D=3D, Version);
+        Interface->Context =3D Context;
+
+        status =3D STATUS_SUCCESS;
+        break;
+    }
     default:
         status =3D STATUS_NOT_SUPPORTED;
         break;
--=20
2=2E56=2E0=2Ewindows=2E4



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.2ac.8f2e84287f3160db.1a18384d420.473449124b7bdafa=---


From win-pv-devel-bounces@lists.xenproject.org Wed Oct 28 17:19:00 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 28 Oct 2026 17:19:00 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1463505.1674361 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xM7Ih-0004xt-VM; Wed, 28 Oct 2026 17:18:59 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1463505.1674361; Wed, 28 Oct 2026 17:18:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xM7Ih-0004xm-Sf; Wed, 28 Oct 2026 17:18:59 +0000
Received: by outflank-mailman (input) for mailman id 1463505;
 Wed, 28 Oct 2026 17:18:59 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a183859df1000f79f@swg.vates.tech>)
 id 1xM7Ih-0004wp-2k
 for win-pv-devel@lists.xenproject.org; Wed, 28 Oct 2026 17:18:59 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xM7Ig-003675-CB
 for win-pv-devel@lists.xenproject.org; Wed, 28 Oct 2026 18:18:58 +0100
Received: from [10.42.69.7] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a183859df1000f79f@swg.vates.tech>)
 id 6ae22e66-2eae-0a2a0a5409dd-0a2a4507912c-32
 for <win-pv-devel@lists.xenproject.org>; Wed, 28 Oct 2026 18:18:58 +0100
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-ef75cf.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a183859df1000f79f@swg.vates.tech>)
 id 6ae22e82-b4ea-0a2a45070019-b9ff1c229df5-3
 for <win-pv-devel@lists.xenproject.org>; Wed, 28 Oct 2026 18:18:58 +0100
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a183859df1000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Wed, 28 Oct 2026 17:18:54 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id F22F182B39;
 Wed, 28 Oct 2026 18:18:53 +0100 (CET)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=P/yrN6dxtxR4mX6lij+SHzSgyb/moyQFENsKOuDMOaQ=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=ZAnjjUORKOl5PaupROa299eqjRmFkjvHS8hmyHFu+BG2Fl0ipgi87ezs6YfA/0TtWHOPzsoXv
 2LyqKNhmKVbGi6mq2mFasSPHDz+fNZGPkc+xrnQWkE56L9RFnSulVQ5WzuJDrYVhuVwIN3eHwi8
 Xy6UOKiyOE1ZFo7KHw1NNumRcrkzi5Uj6axSwrlJvyRvkQtrnXHZ02g3AVvWCscv241nN5xQimw
 Kg+NkPcs/JNyNh5xpjJzHhsuQ66cfPfHbPk1FxC0ZJ6fmFg0tUlOu61fNov6T411gqKCLl32Ppw
 AtcvQsjjKm5zR8rCH93sweLKIHo2U/kbo5PEKMu6p+xQ==
X-Zone-Loop: 123e3b30e3d49755897856fd2916aeab5082d9d39194
x-campaign-type: default
x-transaction-id: 8284a413-5d63-410e-a431-3eaac3ec0b74
x-swg-uid: 01-4cd8c5d8-03ed-46ea-b7d2-f0fa184ea5c3
X-Mailer: Sweego
Message-ID:
 <1793207934.8631fc262581453bbf619ec5b2062170.1a183859df1000f79f@vates.tech>
x-swg-bid: 1793207934.8631fc262581453bbf619ec5b2062170.1a183859df1000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [PATCH v2 05/10] granter: Split GranterTryPut to its own function
Date: Wed, 28 Oct 2026 18:18:35 +0100
In-Reply-To: <20261028171840.4940-1-ngoc-tu.dinh@vates.tech>
References: <1793207793.8631fc262581453bbf619ec5b2062170.1a1838377bc000f79f@vates.tech>
 <20261028171840.4940-1-ngoc-tu.dinh@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.2b1.4339a1f3eb8079e9.1a183859c5b.bb5caadbd01f466b=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1793207934043
X-purgate-ID: tlsNG-ef75cf/1793207938-350CDAE4-0864F39E/0/0
X-purgate-type: clean
X-purgate-size: 2783

---=Part.2b1.4339a1f3eb8079e9.1a183859c5b.bb5caadbd01f466b=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

This allows ring consumers to test for still-pending grants and
eventually defer grant revocation=2E

Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 src/xenvbd/granter=2Ec | 37 +++++++++++++++++++++++++++++--------
 src/xenvbd/granter=2Eh |  7 +++++++
 2 files changed, 36 insertions(+), 8 deletions(-)

diff --git a/src/xenvbd/granter=2Ec b/src/xenvbd/granter=2Ec
index bacd245=2E=2E8271771 100644
--- a/src/xenvbd/granter=2Ec
+++ b/src/xenvbd/granter=2Ec
@@ -346,31 +346,52 @@ fail1:
     return status;
 }
=20
+_Check_return_
+NTSTATUS
+GranterTryPut(
+    _Inout_ PXENVBD_GRANTER Granter,
+    _In_ PVOID              Handle
+    )
+{
+    PXENBUS_GNTTAB_ENTRY    Entry =3D Handle;
+    NTSTATUS                status;
+
+    ASSERT3P(Granter->Cache, !=3D, NULL);
+
+    status =3D XENBUS_GNTTAB(TryRevokeForeignAccess,
+                           &Granter->GnttabInterface,
+                           Granter->Cache,
+                           FALSE,
+                           Entry);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    InterlockedDecrement(&Granter->Current);
+
+    return STATUS_SUCCESS;
+
+fail1:
+    return status;
+}
+
 VOID
 GranterPut(
     _Inout_ PXENVBD_GRANTER Granter,
     _In_ PVOID              Handle
     )
 {
-    PXENBUS_GNTTAB_ENTRY    Entry =3D Handle;
     NTSTATUS                status;
=20
     if (Granter->Connected =3D=3D FALSE)
         return;
=20
     for (;;) {
-        status =3D XENBUS_GNTTAB(TryRevokeForeignAccess,
-                               &Granter->GnttabInterface,
-                               Granter->Cache,
-                               FALSE,
-                               Entry);
+        status =3D GranterTryPut(Granter, Handle);
         if (NT_SUCCESS(status))
             break;
=20
         YieldProcessor();
     }
-
-    InterlockedDecrement(&Granter->Current);
 }
=20
 ULONG
diff --git a/src/xenvbd/granter=2Eh b/src/xenvbd/granter=2Eh
index e8d0899=2E=2Ee609a8a 100644
--- a/src/xenvbd/granter=2Eh
+++ b/src/xenvbd/granter=2Eh
@@ -84,6 +84,13 @@ GranterGet(
     _Outptr_ PVOID          *Handle
     );
=20
+_Check_return_
+extern NTSTATUS
+GranterTryPut(
+    _Inout_ PXENVBD_GRANTER Granter,
+    _In_ PVOID              Handle
+    );
+
 extern VOID
 GranterPut(
     _Inout_ PXENVBD_GRANTER Granter,
--=20
2=2E56=2E0=2Ewindows=2E4



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.2b1.4339a1f3eb8079e9.1a183859c5b.bb5caadbd01f466b=---


From win-pv-devel-bounces@lists.xenproject.org Wed Oct 28 17:19:00 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 28 Oct 2026 17:19:00 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1463508.1674371 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xM7Ii-0004zP-9M; Wed, 28 Oct 2026 17:19:00 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1463508.1674371; Wed, 28 Oct 2026 17:19:00 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xM7Ii-0004ye-2s; Wed, 28 Oct 2026 17:19:00 +0000
Received: by outflank-mailman (input) for mailman id 1463508;
 Wed, 28 Oct 2026 17:18:59 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a183859d88000f79f@swg.vates.tech>)
 id 1xM7Ih-0004wq-5q
 for win-pv-devel@lists.xenproject.org; Wed, 28 Oct 2026 17:18:59 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xM7Ig-00DORB-Cr
 for win-pv-devel@lists.xenproject.org; Wed, 28 Oct 2026 18:18:58 +0100
Received: from [10.42.69.9] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a183859d88000f79f@swg.vates.tech>)
 id 6ae22e76-bab6-0a2a0a5309dd-0a2a4509d7d8-26
 for <win-pv-devel@lists.xenproject.org>; Wed, 28 Oct 2026 18:18:58 +0100
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-bad1c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a183859d88000f79f@swg.vates.tech>)
 id 6ae22e82-be1a-0a2a45090019-b9ff1c22a869-3
 for <win-pv-devel@lists.xenproject.org>; Wed, 28 Oct 2026 18:18:58 +0100
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a183859d88000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Wed, 28 Oct 2026 17:18:54 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id C2E3282C07;
 Wed, 28 Oct 2026 18:18:53 +0100 (CET)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=YfcXEqVXESU/QZQODeSaZAVOr8gQ1FfDF2fAr1DWyDI=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=rW/b0YpZ7QFIB9QLk14JtCkyZbuZQoPZFWrl0lnaEUQf4uRvcj1iCOothqtZf/uajZTybIoU9
 RCrpkVmyuqYi7TZpkR7oj9VYlztkM8iEh9O6E2eEOfaLTcK6ntUunWWPof0aRvsD/lZb/7Hj7LY
 DvSR6tbrID4MhPIMRWT+VZuR5J1OapmmDHBN6Iz44EnDnY3a/U/4LUJ4DYEnXYitz9PnfuDDPZ+
 a5+GmyynRGknff/n/zgZneks7GG9xerMUPCMGt2VUjAQLvmofWIb0XHSVQmIizMLcrjNk+y5k1r
 VGQx7aaqDGU9OtYhgaScwvY2Ff6HNYueeza6418ldCtw==
X-Zone-Loop: 8d355312582c298f91b0cfac2fe03e258eac60cce44c
x-campaign-type: default
x-transaction-id: 3bd3960b-9995-4cae-af18-2ae40c9a5c32
x-swg-uid: 01-fee62df3-9b06-4a23-a059-b396bc49b60a
X-Mailer: Sweego
Message-ID:
 <1793207934.8631fc262581453bbf619ec5b2062170.1a183859d88000f79f@vates.tech>
x-swg-bid: 1793207934.8631fc262581453bbf619ec5b2062170.1a183859d88000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [PATCH v2 04/10] frontend: Initialize the granter before the ring
Date: Wed, 28 Oct 2026 18:18:34 +0100
In-Reply-To: <20261028171840.4940-1-ngoc-tu.dinh@vates.tech>
References: <1793207793.8631fc262581453bbf619ec5b2062170.1a1838377bc000f79f@vates.tech>
 <20261028171840.4940-1-ngoc-tu.dinh@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.2b0.a6879ca83797881a.1a183859b9a.d006e6827ad8417d=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1793207933850
X-purgate-ID: tlsNG-bad1c0/1793207938-3A2C4034-4AC4EF1D/0/0
X-purgate-type: clean
X-purgate-size: 2236

---=Part.2b0.a6879ca83797881a.1a183859b9a.d006e6827ad8417d=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

This is preparation for deferred grant revocation, as this requires the
granter to outlive the ring=2E

Assisted-by: LLM
Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 src/xenvbd/frontend=2Ec | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/src/xenvbd/frontend=2Ec b/src/xenvbd/frontend=2Ec
index 06c7295=2E=2E8bf4f96 100644
--- a/src/xenvbd/frontend=2Ec
+++ b/src/xenvbd/frontend=2Ec
@@ -1907,11 +1907,11 @@ FrontendCreate(
     if (!NT_SUCCESS(status))
         goto fail3;
=20
-    status =3D RingCreate(Frontend, &Frontend->Ring);
+    status =3D GranterCreate(Frontend, &Frontend->Granter);
     if (!NT_SUCCESS(status))
         goto fail4;
=20
-    status =3D GranterCreate(Frontend, &Frontend->Granter);
+    status =3D RingCreate(Frontend, &Frontend->Ring);
     if (!NT_SUCCESS(status))
         goto fail5;
=20
@@ -1928,12 +1928,12 @@ FrontendCreate(
=20
 fail6:
     Error("fail6\n");
-    GranterDestroy(Frontend->Granter);
-    Frontend->Granter =3D NULL;
-fail5:
-    Error("fail5\n");
     RingDestroy(Frontend->Ring);
     Frontend->Ring =3D NULL;
+fail5:
+    Error("fail5\n");
+    GranterDestroy(Frontend->Granter);
+    Frontend->Granter =3D NULL;
 fail4:
     Error("fail4\n");
     RtlZeroMemory(Frontend->TargetPath, sizeof(Frontend->TargetPath));
@@ -1970,12 +1970,12 @@ FrontendDestroy(
     ThreadJoin(Frontend->BackendThread);
     Frontend->BackendThread =3D NULL;
=20
-    GranterDestroy(Frontend->Granter);
-    Frontend->Granter =3D NULL;
-
     RingDestroy(Frontend->Ring);
     Frontend->Ring =3D NULL;
=20
+    GranterDestroy(Frontend->Granter);
+    Frontend->Granter =3D NULL;
+
     RtlZeroMemory(&Frontend->StateLock, sizeof(KSPIN_LOCK));
=20
     RtlZeroMemory(Frontend->TargetPath, sizeof(Frontend->TargetPath));
--=20
2=2E56=2E0=2Ewindows=2E4



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.2b0.a6879ca83797881a.1a183859b9a.d006e6827ad8417d=---


From win-pv-devel-bounces@lists.xenproject.org Wed Oct 28 17:19:00 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 28 Oct 2026 17:19:00 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1463507.1674373 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xM7Ii-0004yj-A8; Wed, 28 Oct 2026 17:19:00 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1463507.1674373; Wed, 28 Oct 2026 17:19:00 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xM7Ii-0004y8-00; Wed, 28 Oct 2026 17:19:00 +0000
Received: by outflank-mailman (input) for mailman id 1463507;
 Wed, 28 Oct 2026 17:18:59 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a183859b1c000f79f@swg.vates.tech>)
 id 1xM7Ih-0004wo-5r
 for win-pv-devel@lists.xenproject.org; Wed, 28 Oct 2026 17:18:59 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xM7Ig-00DORB-Bm
 for win-pv-devel@lists.xenproject.org; Wed, 28 Oct 2026 18:18:58 +0100
Received: from [10.42.69.4] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a183859b1c000f79f@swg.vates.tech>)
 id 6ae22e56-bab6-0a2a0a5309dd-0a2a45049842-36
 for <win-pv-devel@lists.xenproject.org>; Wed, 28 Oct 2026 18:18:58 +0100
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-ebf023.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a183859b1c000f79f@swg.vates.tech>)
 id 6ae22e81-b57f-0a2a45040019-b9ff1c23aa45-3
 for <win-pv-devel@lists.xenproject.org>; Wed, 28 Oct 2026 18:18:58 +0100
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a183859b1c000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Wed, 28 Oct 2026 17:18:53 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id ED71481A82;
 Wed, 28 Oct 2026 18:18:52 +0100 (CET)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=ix3zsmhNkyNoTp6m818bF9GF+VjO/MqEIlLycWLBZuc=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=prbawVpTX6bQTmXJ1+MDyGQOEL+Fn9suRal4Hj+z89bU9WsGQWfC8Jf+b2Ut1Zqv8yi33KE3l
 hHU73+32TnYjwMmwnZ4pOtn2Baty7jcP0LzJpKa+wIgWTouNo6nXEpniF58ChDdXh9AXZ3OYekU
 EgPKtnvo176YH2s1UKA6Clo/KrkaSp3dg12BBmLIlElKKlhM9JS2hD5FamaZJwa/CjRlebELPKo
 AARXMYaO5M2Vq9yAuNa5ScXF5kCcHm5zR1o+yDxWQ9DNCxamEbtVvWSMb161yNaCbtsvS959dlQ
 P8HZUh8iFQx+DkVbHwKjMAZgpMlGBCIJqA1vRDbktLDw==
X-Zone-Loop: 2a7749a0601170344229d6b33c583eec52d404750bb4
x-campaign-type: default
x-transaction-id: 18dd93af-1927-4135-9c7d-7f3e96933dac
x-swg-uid: 01-c9b5d4ba-1e1e-46a4-921e-5dd48580c6a9
X-Mailer: Sweego
Message-ID:
 <1793207933.8631fc262581453bbf619ec5b2062170.1a183859b1c000f79f@vates.tech>
x-swg-bid: 1793207933.8631fc262581453bbf619ec5b2062170.1a183859b1c000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [PATCH v2 01/10] ring: Fix warning C6387: 'BlkifRing' could be '0'
Date: Wed, 28 Oct 2026 18:18:31 +0100
In-Reply-To: <1793207793.8631fc262581453bbf619ec5b2062170.1a1838377bc000f79f@vates.tech>
References: <1793207793.8631fc262581453bbf619ec5b2062170.1a1838377bc000f79f@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.2ad.44f522e94f5d49ca.1a18385988a.372833f269a19c7b=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1793207933067
X-purgate-ID: tlsNG-ebf023/1793207938-C08D9B50-AD7F032C/0/0
X-purgate-type: clean
X-purgate-size: 950

---=Part.2ad.44f522e94f5d49ca.1a18385988a.372833f269a19c7b=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 src/xenvbd/ring=2Ec | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/xenvbd/ring=2Ec b/src/xenvbd/ring=2Ec
index dae2ca0=2E=2E5ef62c9 100644
--- a/src/xenvbd/ring=2Ec
+++ b/src/xenvbd/ring=2Ec
@@ -2568,7 +2568,8 @@ RingDestroy(
         PXENVBD_BLKIF_RING  BlkifRing =3D Ring->Ring[Index];
=20
         Ring->Ring[Index] =3D NULL;
-        BlkifRingDestroy(BlkifRing);
+        if (BlkifRing)
+            BlkifRingDestroy(BlkifRing);
     }
=20
     __RingFree(Ring->Ring);
--=20
2=2E56=2E0=2Ewindows=2E4



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.2ad.44f522e94f5d49ca.1a18385988a.372833f269a19c7b=---


From win-pv-devel-bounces@lists.xenproject.org Wed Oct 28 17:19:00 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 28 Oct 2026 17:19:00 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1463506.1674369 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xM7Ii-0004yD-99; Wed, 28 Oct 2026 17:19:00 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1463506.1674369; Wed, 28 Oct 2026 17:19:00 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xM7Ih-0004xy-U2; Wed, 28 Oct 2026 17:18:59 +0000
Received: by outflank-mailman (input) for mailman id 1463506;
 Wed, 28 Oct 2026 17:18:59 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a183859bbd000f79f@swg.vates.tech>)
 id 1xM7Ih-0004wr-3s
 for win-pv-devel@lists.xenproject.org; Wed, 28 Oct 2026 17:18:59 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xM7Ig-003lTd-Dm
 for win-pv-devel@lists.xenproject.org; Wed, 28 Oct 2026 18:18:58 +0100
Received: from [10.42.69.11] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a183859bbd000f79f@swg.vates.tech>)
 id 6ae22e58-e002-0a2a0a5209dd-0a2a450bc56e-32
 for <win-pv-devel@lists.xenproject.org>; Wed, 28 Oct 2026 18:18:58 +0100
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-42698a.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a183859bbd000f79f@swg.vates.tech>)
 id 6ae22e81-b7e8-0a2a450b0019-b9ff1c22915f-3
 for <win-pv-devel@lists.xenproject.org>; Wed, 28 Oct 2026 18:18:58 +0100
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a183859bbd000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Wed, 28 Oct 2026 17:18:53 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 646B182B39;
 Wed, 28 Oct 2026 18:18:53 +0100 (CET)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=1SsJfQZ5KyZifRkDd6FyH1Rjr/X+TJBnN5TAXawXwsU=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=AeOxphO98KBwQy5BKKpAIEJxXmd37ptdFvDUviTK3CfGxW7Cs8hyIpXhdKyHoeyZ6fptX6AYO
 pgbqonT8UTOwV6w7GCUXP44tZK1fnBRZgdjwSGlpkM/ImOIa6JcUWmcQRCn3z1iw4lP1bOXcoJt
 sLZ3207kVTGKSljcFssoNMotgKadKOtFpUlyed/RohRvfXuKhH3k0t94BteIsJPr1BwYcblklXA
 HApkRn272i5v3xg/Cr+4DvSXsrfNe6QtqIO7qJeHEGSn9qbmR/ijwlZesolksfKbjXNnJ2r/iJ6
 +wKkZMtYEAEirMZuOccXyvmVN7pR2JvhUm95/v89+7pg==
X-Zone-Loop: b5d7299da1eabcf31217a171b6cf5c273683e8bed378
x-campaign-type: default
x-transaction-id: f69c539f-c36c-42b4-b0b5-27bd37423960
x-swg-uid: 01-304ea0dd-beee-4bca-a04a-dfaae943008b
X-Mailer: Sweego
Message-ID:
 <1793207933.8631fc262581453bbf619ec5b2062170.1a183859bbd000f79f@vates.tech>
x-swg-bid: 1793207933.8631fc262581453bbf619ec5b2062170.1a183859bbd000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [PATCH v2 02/10] granter: Correct the accounting of Current
Date: Wed, 28 Oct 2026 18:18:32 +0100
In-Reply-To: <20261028171840.4940-1-ngoc-tu.dinh@vates.tech>
References: <1793207793.8631fc262581453bbf619ec5b2062170.1a1838377bc000f79f@vates.tech>
 <20261028171840.4940-1-ngoc-tu.dinh@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.2ae.f8c81ba8ea59fd1b.1a183859a18.bb939014755cee19=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1793207933464
X-purgate-ID: tlsNG-42698a/1793207938-AA4DB9EA-089CFB04/0/0
X-purgate-type: clean
X-purgate-size: 1766

---=Part.2ae.f8c81ba8ea59fd1b.1a183859a18.bb939014755cee19=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Current serves as an upper bound on the number of taken grants and must
be 0 on GranterDisconnect=2E We must increment Current before calling
PermitForeignAccess, and decrement it again on failure=2E

Assisted-by: LLM
Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 src/xenvbd/granter=2Ec | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/xenvbd/granter=2Ec b/src/xenvbd/granter=2Ec
index fd90965=2E=2Eeddcdcf 100644
--- a/src/xenvbd/granter=2Ec
+++ b/src/xenvbd/granter=2Ec
@@ -319,7 +319,9 @@ GranterGet(
     if (Granter->Connected =3D=3D FALSE)
         goto fail1;
=20
-    status =3D XENBUS_GNTTAB(PermitForeignAccess,=20
+    Value =3D InterlockedIncrement(&Granter->Current);
+
+    status =3D XENBUS_GNTTAB(PermitForeignAccess,
                            &Granter->GnttabInterface,
                            Granter->Cache,
                            FALSE,
@@ -329,8 +331,7 @@ GranterGet(
                            &Entry);
     if (!NT_SUCCESS(status))
         goto fail2;
-   =20
-    Value =3D InterlockedIncrement(&Granter->Current);
+
     if (Value > Granter->Maximum)
         Granter->Maximum =3D Value;
=20
@@ -339,6 +340,7 @@ GranterGet(
=20
 fail2:
     Error("fail2\n");
+    InterlockedDecrement(&Granter->Current);
 fail1:
     Error("fail1 %08x\n", status);
     return status;
--=20
2=2E56=2E0=2Ewindows=2E4



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.2ae.f8c81ba8ea59fd1b.1a183859a18.bb939014755cee19=---


From win-pv-devel-bounces@lists.xenproject.org Wed Oct 28 17:19:01 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 28 Oct 2026 17:19:01 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1463509.1674378 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xM7Ij-00053g-8v; Wed, 28 Oct 2026 17:19:01 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1463509.1674378; Wed, 28 Oct 2026 17:19:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xM7Ij-00053T-55; Wed, 28 Oct 2026 17:19:01 +0000
Received: by outflank-mailman (input) for mailman id 1463509;
 Wed, 28 Oct 2026 17:18:59 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a183859c7a000f79f@swg.vates.tech>)
 id 1xM7Ih-0004ws-4B
 for win-pv-devel@lists.xenproject.org; Wed, 28 Oct 2026 17:18:59 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xM7Ig-003lRl-HG
 for win-pv-devel@lists.xenproject.org; Wed, 28 Oct 2026 18:18:58 +0100
Received: from [10.42.69.1] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a183859c7a000f79f@swg.vates.tech>)
 id 6ae22e58-8faa-0a2a0a5109dd-0a2a4501c95a-40
 for <win-pv-devel@lists.xenproject.org>; Wed, 28 Oct 2026 18:18:58 +0100
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a183859c7a000f79f@swg.vates.tech>)
 id 6ae22e82-5984-0a2a45010019-b9ff1c23b2d9-3
 for <win-pv-devel@lists.xenproject.org>; Wed, 28 Oct 2026 18:18:58 +0100
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a183859c7a000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Wed, 28 Oct 2026 17:18:54 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 9433582BD5;
 Wed, 28 Oct 2026 18:18:53 +0100 (CET)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=ov+q0YKJKU0AJDy8C7DUbH0b5v1FMykkouCYodSsACU=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=XWwCuuM/1znm6h1h7HHIujhEsOD2FWYPOCEJtSw/hhFUZysu2eDYc9hkibhQygoedhr4A1sl4
 JBFc7+3O+/h4sxX4WTbuJmAw+EbadbbhPsfndv+Xz98Dpb4EUxXwYl2tCq+ITAk1Z0FOhWSTa7a
 hOJJZUNwOug2He+1vw5+42oW8U0pYlOUiz+arEiiNzY8HZOIZ8E2vYoHs2yn9TtBQZ8voGNTwig
 U/i2dCoPEVGSPGEPWv2Ab3F9ZPZIItH0xk4xpZgt7880oQTMzsR1uteaUOK3joPjJTiO3ynzmiV
 W7Cympju0tR4E1PhJKjGgAhEyD/v/p5+hcYbbFUcHF0A==
X-Zone-Loop: e2852e85085f7e14074d01539350fbd41e81c924d314
x-campaign-type: default
x-transaction-id: e7458d56-466c-46b3-8697-6262dc2d3e1f
x-swg-uid: 01-e4f16fba-4cb8-4973-9c2c-4209431a456f
X-Mailer: Sweego
Message-ID:
 <1793207934.8631fc262581453bbf619ec5b2062170.1a183859c7a000f79f@vates.tech>
x-swg-bid: 1793207934.8631fc262581453bbf619ec5b2062170.1a183859c7a000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [PATCH v2 03/10] Use GNTTAB_INTERFACE_V5
Date: Wed, 28 Oct 2026 18:18:33 +0100
In-Reply-To: <20261028171840.4940-1-ngoc-tu.dinh@vates.tech>
References: <1793207793.8631fc262581453bbf619ec5b2062170.1a1838377bc000f79f@vates.tech>
 <20261028171840.4940-1-ngoc-tu.dinh@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.2af.5fe57080c4e56f7a.1a183859ad8.2b8bbe4bb7195f4b=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1793207933656
X-purgate-ID: tlsNG-d62444/1793207938-BFC69757-D6618F2A/0/0
X-purgate-type: clean
X-purgate-size: 10681

---=Part.2af.5fe57080c4e56f7a.1a183859ad8.2b8bbe4bb7195f4b=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

GNTTAB v5 fails straight away if the backend is still using the grant=2E
Spin in GranterPut until the backend lets go; otherwise, the caller
could reuse the page while the backend is still accessing it=2E

Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 include/gnttab_interface=2Eh | 116 +++++++++++++++++++++++++------------
 src/xenvbd=2Einf             |   6 +-
 src/xenvbd/granter=2Ec       |  17 ++++--
 3 files changed, 94 insertions(+), 45 deletions(-)

diff --git a/include/gnttab_interface=2Eh b/include/gnttab_interface=2Eh
index 92a95a7=2E=2E40ea821 100644
--- a/include/gnttab_interface=2Eh
+++ b/include/gnttab_interface=2Eh
@@ -132,7 +132,7 @@ typedef NTSTATUS
     _Outptr_ PXENBUS_GNTTAB_ENTRY   *Entry
     );
=20
-/*! \typedef XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS
+/*! \typedef XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS_V2
     \brief Revoke foreign access and return the \a Entry to the \a Cache
=20
     \param Interface The interface header
@@ -140,9 +140,35 @@ typedef NTSTATUS
     \param Locked If mutually exclusive access to the cache is already
     guaranteed then set this to TRUE
     \param Entry The grant table entry handle
+
+    If the foreign domain is still accessing the granted page, this retri=
es
+    for a while before giving up=2E
 */
 typedef NTSTATUS
-(*XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS)(
+(*XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS_V2)(
+    _In_ PINTERFACE                 Interface,
+    _In_ PXENBUS_GNTTAB_CACHE       Cache,
+    _In_ BOOLEAN                    Locked,
+    _In_ PXENBUS_GNTTAB_ENTRY       Entry
+    );
+
+/*! \typedef XENBUS_GNTTAB_TRY_REVOKE_FOREIGN_ACCESS
+    \brief Revoke foreign access and return the \a Entry to the \a Cache
+
+    \param Interface The interface header
+    \param Cache The grant table cache handle
+    \param Locked If mutually exclusive access to the cache is already
+    guaranteed then set this to TRUE
+    \param Entry The grant table entry handle
+    \return STATUS_DEVICE_BUSY if the foreign domain is still accessing t=
he
+    granted page
+
+    This does not wait for the foreign domain=2E On failure, foreign acce=
ss
+    remains in effect and \a Entry remains valid: the caller must keep th=
e
+    granted page alive, and should retry the revocation later=2E
+*/
+typedef NTSTATUS
+(*XENBUS_GNTTAB_TRY_REVOKE_FOREIGN_ACCESS)(
     _In_ PINTERFACE                 Interface,
     _In_ PXENBUS_GNTTAB_CACHE       Cache,
     _In_ BOOLEAN                    Locked,
@@ -239,16 +265,16 @@ DEFINE_GUID(GUID_XENBUS_GNTTAB_INTERFACE,
     \ingroup interfaces
 */
 struct _XENBUS_GNTTAB_INTERFACE_V2 {
-    INTERFACE                           Interface;
-    XENBUS_GNTTAB_ACQUIRE               GnttabAcquire;
-    XENBUS_GNTTAB_RELEASE               GnttabRelease;
-    XENBUS_GNTTAB_CREATE_CACHE_V1       GnttabCreateCacheVersion1;
-    XENBUS_GNTTAB_PERMIT_FOREIGN_ACCESS GnttabPermitForeignAccess;
-    XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS GnttabRevokeForeignAccess;
-    XENBUS_GNTTAB_GET_REFERENCE         GnttabGetReference;
-    XENBUS_GNTTAB_DESTROY_CACHE         GnttabDestroyCache;
-    XENBUS_GNTTAB_MAP_FOREIGN_PAGES     GnttabMapForeignPages;
-    XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES   GnttabUnmapForeignPages;
+    INTERFACE                               Interface;
+    XENBUS_GNTTAB_ACQUIRE                   GnttabAcquire;
+    XENBUS_GNTTAB_RELEASE                   GnttabRelease;
+    XENBUS_GNTTAB_CREATE_CACHE_V1           GnttabCreateCacheVersion1;
+    XENBUS_GNTTAB_PERMIT_FOREIGN_ACCESS     GnttabPermitForeignAccess;
+    XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS_V2  GnttabRevokeForeignAccessVers=
ion2;
+    XENBUS_GNTTAB_GET_REFERENCE             GnttabGetReference;
+    XENBUS_GNTTAB_DESTROY_CACHE             GnttabDestroyCache;
+    XENBUS_GNTTAB_MAP_FOREIGN_PAGES         GnttabMapForeignPages;
+    XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES       GnttabUnmapForeignPages;
 };
=20
 /*! \struct _XENBUS_GNTTAB_INTERFACE_V3
@@ -256,17 +282,17 @@ struct _XENBUS_GNTTAB_INTERFACE_V2 {
     \ingroup interfaces
 */
 struct _XENBUS_GNTTAB_INTERFACE_V3 {
-    INTERFACE                           Interface;
-    XENBUS_GNTTAB_ACQUIRE               GnttabAcquire;
-    XENBUS_GNTTAB_RELEASE               GnttabRelease;
-    XENBUS_GNTTAB_CREATE_CACHE_V1       GnttabCreateCacheVersion1;
-    XENBUS_GNTTAB_PERMIT_FOREIGN_ACCESS GnttabPermitForeignAccess;
-    XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS GnttabRevokeForeignAccess;
-    XENBUS_GNTTAB_GET_REFERENCE         GnttabGetReference;
-    XENBUS_GNTTAB_QUERY_REFERENCE       GnttabQueryReference;
-    XENBUS_GNTTAB_DESTROY_CACHE         GnttabDestroyCache;
-    XENBUS_GNTTAB_MAP_FOREIGN_PAGES     GnttabMapForeignPages;
-    XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES   GnttabUnmapForeignPages;
+    INTERFACE                               Interface;
+    XENBUS_GNTTAB_ACQUIRE                   GnttabAcquire;
+    XENBUS_GNTTAB_RELEASE                   GnttabRelease;
+    XENBUS_GNTTAB_CREATE_CACHE_V1           GnttabCreateCacheVersion1;
+    XENBUS_GNTTAB_PERMIT_FOREIGN_ACCESS     GnttabPermitForeignAccess;
+    XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS_V2  GnttabRevokeForeignAccessVers=
ion2;
+    XENBUS_GNTTAB_GET_REFERENCE             GnttabGetReference;
+    XENBUS_GNTTAB_QUERY_REFERENCE           GnttabQueryReference;
+    XENBUS_GNTTAB_DESTROY_CACHE             GnttabDestroyCache;
+    XENBUS_GNTTAB_MAP_FOREIGN_PAGES         GnttabMapForeignPages;
+    XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES       GnttabUnmapForeignPages;
 };
=20
 /*! \struct _XENBUS_GNTTAB_INTERFACE_V4
@@ -274,20 +300,38 @@ struct _XENBUS_GNTTAB_INTERFACE_V3 {
     \ingroup interfaces
 */
 struct _XENBUS_GNTTAB_INTERFACE_V4 {
-    INTERFACE                           Interface;
-    XENBUS_GNTTAB_ACQUIRE               GnttabAcquire;
-    XENBUS_GNTTAB_RELEASE               GnttabRelease;
-    XENBUS_GNTTAB_CREATE_CACHE          GnttabCreateCache;
-    XENBUS_GNTTAB_PERMIT_FOREIGN_ACCESS GnttabPermitForeignAccess;
-    XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS GnttabRevokeForeignAccess;
-    XENBUS_GNTTAB_GET_REFERENCE         GnttabGetReference;
-    XENBUS_GNTTAB_QUERY_REFERENCE       GnttabQueryReference;
-    XENBUS_GNTTAB_DESTROY_CACHE         GnttabDestroyCache;
-    XENBUS_GNTTAB_MAP_FOREIGN_PAGES     GnttabMapForeignPages;
-    XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES   GnttabUnmapForeignPages;
+    INTERFACE                               Interface;
+    XENBUS_GNTTAB_ACQUIRE                   GnttabAcquire;
+    XENBUS_GNTTAB_RELEASE                   GnttabRelease;
+    XENBUS_GNTTAB_CREATE_CACHE              GnttabCreateCache;
+    XENBUS_GNTTAB_PERMIT_FOREIGN_ACCESS     GnttabPermitForeignAccess;
+    XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS_V2  GnttabRevokeForeignAccessVers=
ion2;
+    XENBUS_GNTTAB_GET_REFERENCE             GnttabGetReference;
+    XENBUS_GNTTAB_QUERY_REFERENCE           GnttabQueryReference;
+    XENBUS_GNTTAB_DESTROY_CACHE             GnttabDestroyCache;
+    XENBUS_GNTTAB_MAP_FOREIGN_PAGES         GnttabMapForeignPages;
+    XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES       GnttabUnmapForeignPages;
+};
+
+/*! \struct _XENBUS_GNTTAB_INTERFACE_V5
+    \brief GNTTAB interface version 5
+    \ingroup interfaces
+*/
+struct _XENBUS_GNTTAB_INTERFACE_V5 {
+    INTERFACE                               Interface;
+    XENBUS_GNTTAB_ACQUIRE                   GnttabAcquire;
+    XENBUS_GNTTAB_RELEASE                   GnttabRelease;
+    XENBUS_GNTTAB_CREATE_CACHE              GnttabCreateCache;
+    XENBUS_GNTTAB_PERMIT_FOREIGN_ACCESS     GnttabPermitForeignAccess;
+    XENBUS_GNTTAB_TRY_REVOKE_FOREIGN_ACCESS GnttabTryRevokeForeignAccess;
+    XENBUS_GNTTAB_GET_REFERENCE             GnttabGetReference;
+    XENBUS_GNTTAB_QUERY_REFERENCE           GnttabQueryReference;
+    XENBUS_GNTTAB_DESTROY_CACHE             GnttabDestroyCache;
+    XENBUS_GNTTAB_MAP_FOREIGN_PAGES         GnttabMapForeignPages;
+    XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES       GnttabUnmapForeignPages;
 };
=20
-typedef struct _XENBUS_GNTTAB_INTERFACE_V4 XENBUS_GNTTAB_INTERFACE, *PXEN=
BUS_GNTTAB_INTERFACE;
+typedef struct _XENBUS_GNTTAB_INTERFACE_V5 XENBUS_GNTTAB_INTERFACE, *PXEN=
BUS_GNTTAB_INTERFACE;
=20
 /*! \def XENBUS_GNTTAB
     \brief Macro at assist in method invocation
@@ -298,6 +342,6 @@ typedef struct _XENBUS_GNTTAB_INTERFACE_V4 XENBUS_GNTT=
AB_INTERFACE, *PXENBUS_GNT
 #endif  // _WINDLL
=20
 #define XENBUS_GNTTAB_INTERFACE_VERSION_MIN 2
-#define XENBUS_GNTTAB_INTERFACE_VERSION_MAX 4
+#define XENBUS_GNTTAB_INTERFACE_VERSION_MAX 5
=20
 #endif  // _XENBUS_GNTTAB_INTERFACE_H
diff --git a/src/xenvbd=2Einf b/src/xenvbd=2Einf
index 28405f6=2E=2E055ffdc 100644
--- a/src/xenvbd=2Einf
+++ b/src/xenvbd=2Einf
@@ -54,9 +54,9 @@ xencrsh=2Esys=3D0,,
=20
 [Inst=2ENT@INF_ARCH@]
 %XenVbdName%=3DXenVbd_Inst,\
-XENBUS\VEN_@VENDOR_PREFIX@@VENDOR_DEVICE_ID@&DEV_VBD&REV_0900000C,\
-XENBUS\VEN_@VENDOR_PREFIX@0001&DEV_VBD&REV_0900000C,\
-XENBUS\VEN_@VENDOR_PREFIX@0002&DEV_VBD&REV_0900000C
+XENBUS\VEN_@VENDOR_PREFIX@@VENDOR_DEVICE_ID@&DEV_VBD&REV_0900000D,\
+XENBUS\VEN_@VENDOR_PREFIX@0001&DEV_VBD&REV_0900000D,\
+XENBUS\VEN_@VENDOR_PREFIX@0002&DEV_VBD&REV_0900000D
=20
 [XenVbd_Inst]=20
 CopyFiles=3DXenVbd_Copyfiles
diff --git a/src/xenvbd/granter=2Ec b/src/xenvbd/granter=2Ec
index eddcdcf=2E=2Ebacd245 100644
--- a/src/xenvbd/granter=2Ec
+++ b/src/xenvbd/granter=2Ec
@@ -358,12 +358,17 @@ GranterPut(
     if (Granter->Connected =3D=3D FALSE)
         return;
=20
-    status =3D XENBUS_GNTTAB(RevokeForeignAccess,
-                           &Granter->GnttabInterface,
-                           Granter->Cache,
-                           FALSE,
-                           Entry);
-    ASSERT(NT_SUCCESS(status));
+    for (;;) {
+        status =3D XENBUS_GNTTAB(TryRevokeForeignAccess,
+                               &Granter->GnttabInterface,
+                               Granter->Cache,
+                               FALSE,
+                               Entry);
+        if (NT_SUCCESS(status))
+            break;
+
+        YieldProcessor();
+    }
=20
     InterlockedDecrement(&Granter->Current);
 }
--=20
2=2E56=2E0=2Ewindows=2E4



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.2af.5fe57080c4e56f7a.1a183859ad8.2b8bbe4bb7195f4b=---


From win-pv-devel-bounces@lists.xenproject.org Wed Oct 28 17:19:01 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 28 Oct 2026 17:19:01 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1463510.1674384 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xM7Ij-000541-IF; Wed, 28 Oct 2026 17:19:01 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1463510.1674384; Wed, 28 Oct 2026 17:19:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xM7Ij-00053l-6O; Wed, 28 Oct 2026 17:19:01 +0000
Received: by outflank-mailman (input) for mailman id 1463510;
 Wed, 28 Oct 2026 17:18:59 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a18385a062000f79f@swg.vates.tech>)
 id 1xM7Ih-0004wt-6I
 for win-pv-devel@lists.xenproject.org; Wed, 28 Oct 2026 17:18:59 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xM7Ig-003675-JM
 for win-pv-devel@lists.xenproject.org; Wed, 28 Oct 2026 18:18:58 +0100
Received: from [10.42.69.7] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a18385a062000f79f@swg.vates.tech>)
 id 6ae22e66-2eae-0a2a0a5409dd-0a2a4507912c-34
 for <win-pv-devel@lists.xenproject.org>; Wed, 28 Oct 2026 18:18:58 +0100
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-ef75cf.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a18385a062000f79f@swg.vates.tech>)
 id 6ae22e82-b4ea-0a2a45070019-b9ff1c229df5-4
 for <win-pv-devel@lists.xenproject.org>; Wed, 28 Oct 2026 18:18:58 +0100
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a18385a062000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Wed, 28 Oct 2026 17:18:55 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 9323D82B39;
 Wed, 28 Oct 2026 18:18:54 +0100 (CET)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=dTbw6ACpsP3IFFKwstXjqFrvL4d9E9Fu6JIjGsRTei4=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=SzjPDjhfTolyCcakL+lgZn3T41BLuTSkppoI6dbSr4818QPKSlrk8Q4J1iB9AqiVm84KNMVMm
 ZOSMMkG6c1/hUe1Gu34CnH6/nhu160X8ZzdpYTwIG2HBeNs2jzNcEBE1Nxj80BH01a6RCgXZnkf
 CCs4fOBdInlgo+A9Oyvrjy8msbweH6Hd7Kz7blrsKN52fWNWvbD0dfeAmThwKbihvv0PgUI6FNn
 drNY5Yq1EQr+CJi6oPiebFRoF/GqDuUweyxhPhVxmyNP34ypXGaEY3Qzfxds6TfxLvbinC6jtre
 gfU/OU860NU8cPspN1vIKXm++JjCaLExEs8MpuIkSwXg==
X-Zone-Loop: 50967bc2d2378efa1ede13b9c4744cd6441459c6254c
x-campaign-type: default
x-transaction-id: b2acd094-9ded-45c5-8517-b3ebcbd666b2
x-swg-uid: 01-344a789e-43fe-4e3a-a2ca-ef9e506d18b9
X-Mailer: Sweego
Message-ID:
 <1793207935.8631fc262581453bbf619ec5b2062170.1a18385a062000f79f@vates.tech>
x-swg-bid: 1793207935.8631fc262581453bbf619ec5b2062170.1a18385a062000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [PATCH v2 08/10] ring: Introduce RingD3ToD0/RingD0ToD3
Date: Wed, 28 Oct 2026 18:18:38 +0100
In-Reply-To: <20261028171840.4940-1-ngoc-tu.dinh@vates.tech>
References: <1793207793.8631fc262581453bbf619ec5b2062170.1a1838377bc000f79f@vates.tech>
 <20261028171840.4940-1-ngoc-tu.dinh@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.2b4.3495714f18596ffa.1a183859ebe.4a25c0853c907b5a=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1793207934654
X-purgate-ID: tlsNG-ef75cf/1793207938-A5AC0AE4-8F97EDC7/0/0
X-purgate-type: clean
X-purgate-size: 5190

---=Part.2b4.3495714f18596ffa.1a183859ebe.4a25c0853c907b5a=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Add D0 power transition hooks to the ring, called by the frontend at
PASSIVE_LEVEL outside of its state lock, so that the ring can manage
resources that must only exist while in D0=2E

They do nothing yet=2E

Assisted-by: LLM
Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 src/xenvbd/frontend=2Ec | 34 ++++++++++++++++++++++------------
 src/xenvbd/ring=2Ec     | 25 +++++++++++++++++++++++++
 src/xenvbd/ring=2Eh     | 13 +++++++++++++
 3 files changed, 60 insertions(+), 12 deletions(-)

diff --git a/src/xenvbd/frontend=2Ec b/src/xenvbd/frontend=2Ec
index 442e188=2E=2E20207ba 100644
--- a/src/xenvbd/frontend=2Ec
+++ b/src/xenvbd/frontend=2Ec
@@ -1681,6 +1681,10 @@ FrontendD3ToD0(
=20
     GranterD3ToD0(Frontend->Granter);
=20
+    status =3D RingD3ToD0(Frontend->Ring);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
     KeAcquireSpinLock(&Frontend->StateLock, &Irql);
=20
     AdapterGetStoreInterface(Adapter, &Frontend->StoreInterface);
@@ -1689,15 +1693,15 @@ FrontendD3ToD0(
=20
     status =3D XENBUS_STORE(Acquire, &Frontend->StoreInterface);
     if (!NT_SUCCESS(status))
-        goto fail1;
+        goto fail2;
=20
     status =3D XENBUS_DEBUG(Acquire, &Frontend->DebugInterface);
     if (!NT_SUCCESS(status))
-        goto fail2;
+        goto fail3;
=20
     status =3D XENBUS_SUSPEND(Acquire, &Frontend->SuspendInterface);
     if (!NT_SUCCESS(status))
-        goto fail3;
+        goto fail4;
=20
     status =3D XENBUS_SUSPEND(Register,
                             &Frontend->SuspendInterface,
@@ -1706,7 +1710,7 @@ FrontendD3ToD0(
                             Frontend,
                             &Frontend->SuspendCallback);
     if (!NT_SUCCESS(status))
-        goto fail4;
+        goto fail5;
=20
     status =3D XENBUS_DEBUG(Register,
                           &Frontend->DebugInterface,
@@ -1715,30 +1719,30 @@ FrontendD3ToD0(
                           Frontend,
                           &Frontend->DebugCallback);
     if (!NT_SUCCESS(status))
-        goto fail5;
+        goto fail6;
=20
     Frontend->Active =3D TRUE;
=20
     KeReleaseSpinLock(&Frontend->StateLock, Irql);
     return STATUS_SUCCESS;
=20
-fail5:
-    Error("fail5\n");
+fail6:
+    Error("fail6\n");
     XENBUS_SUSPEND(Deregister,
                    &Frontend->SuspendInterface,
                    Frontend->SuspendCallback);
     Frontend->SuspendCallback =3D NULL;
+fail5:
+    Error("fail5\n");
+    XENBUS_SUSPEND(Release, &Frontend->SuspendInterface);
 fail4:
     Error("fail4\n");
-    XENBUS_SUSPEND(Release, &Frontend->SuspendInterface);
+    XENBUS_DEBUG(Release, &Frontend->DebugInterface);
 fail3:
     Error("fail3\n");
-    XENBUS_DEBUG(Release, &Frontend->DebugInterface);
+    XENBUS_STORE(Release, &Frontend->StoreInterface);
 fail2:
     Error("fail2\n");
-    XENBUS_STORE(Release, &Frontend->StoreInterface);
-fail1:
-    Error("fail1 (%08x)\n", status);
=20
     RtlZeroMemory(&Frontend->SuspendInterface,
                   sizeof(XENBUS_SUSPEND_INTERFACE));
@@ -1749,6 +1753,11 @@ fail1:
=20
     KeReleaseSpinLock(&Frontend->StateLock, Irql);
=20
+    RingD0ToD3(Frontend->Ring);
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
     GranterD0ToD3(Frontend->Granter);
=20
     return status;
@@ -1793,6 +1802,7 @@ FrontendD0ToD3(
=20
     KeReleaseSpinLock(&Frontend->StateLock, Irql);
=20
+    RingD0ToD3(Frontend->Ring);
     GranterD0ToD3(Frontend->Granter);
 }
=20
diff --git a/src/xenvbd/ring=2Ec b/src/xenvbd/ring=2Ec
index 5ef62c9=2E=2E341ce52 100644
--- a/src/xenvbd/ring=2Ec
+++ b/src/xenvbd/ring=2Ec
@@ -2595,6 +2595,31 @@ RingDestroy(
     __RingFree(Ring);
 }
=20
+_Check_return_
+_IRQL_requires_(PASSIVE_LEVEL)
+NTSTATUS
+RingD3ToD0(
+    _Inout_ PXENVBD_RING    Ring
+    )
+{
+    UNREFERENCED_PARAMETER(Ring);
+
+    ASSERT3U(KeGetCurrentIrql(), =3D=3D, PASSIVE_LEVEL);
+
+    return STATUS_SUCCESS;
+}
+
+_IRQL_requires_(PASSIVE_LEVEL)
+VOID
+RingD0ToD3(
+    _Inout_ PXENVBD_RING    Ring
+    )
+{
+    UNREFERENCED_PARAMETER(Ring);
+
+    ASSERT3U(KeGetCurrentIrql(), =3D=3D, PASSIVE_LEVEL);
+}
+
 NTSTATUS
 RingConnect(
     _Inout_ PXENVBD_RING    Ring
diff --git a/src/xenvbd/ring=2Eh b/src/xenvbd/ring=2Eh
index 6dfdb74=2E=2Ebd5f322 100644
--- a/src/xenvbd/ring=2Eh
+++ b/src/xenvbd/ring=2Eh
@@ -49,6 +49,19 @@ RingDestroy(
     _Inout_ PXENVBD_RING    Ring
     );
=20
+_Check_return_
+_IRQL_requires_(PASSIVE_LEVEL)
+extern NTSTATUS
+RingD3ToD0(
+    _Inout_ PXENVBD_RING    Ring
+    );
+
+_IRQL_requires_(PASSIVE_LEVEL)
+extern VOID
+RingD0ToD3(
+    _Inout_ PXENVBD_RING    Ring
+    );
+
 extern NTSTATUS
 RingConnect(
     _Inout_ PXENVBD_RING    Ring
--=20
2=2E56=2E0=2Ewindows=2E4



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.2b4.3495714f18596ffa.1a183859ebe.4a25c0853c907b5a=---


From win-pv-devel-bounces@lists.xenproject.org Wed Oct 28 17:19:01 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 28 Oct 2026 17:19:01 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1463512.1674391 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xM7Ij-00054z-Q7; Wed, 28 Oct 2026 17:19:01 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1463512.1674391; Wed, 28 Oct 2026 17:19:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xM7Ij-00054F-A8; Wed, 28 Oct 2026 17:19:01 +0000
Received: by outflank-mailman (input) for mailman id 1463512;
 Wed, 28 Oct 2026 17:18:59 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a18385a213000f79f@swg.vates.tech>)
 id 1xM7Ih-0004x4-BQ
 for win-pv-devel@lists.xenproject.org; Wed, 28 Oct 2026 17:18:59 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xM7Ig-003lTd-Oa
 for win-pv-devel@lists.xenproject.org; Wed, 28 Oct 2026 18:18:58 +0100
Received: from [10.42.69.11] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a18385a213000f79f@swg.vates.tech>)
 id 6ae22e58-e002-0a2a0a5209dd-0a2a450bc56e-34
 for <win-pv-devel@lists.xenproject.org>; Wed, 28 Oct 2026 18:18:58 +0100
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-42698a.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a18385a213000f79f@swg.vates.tech>)
 id 6ae22e81-b7e8-0a2a450b0019-b9ff1c22915f-4
 for <win-pv-devel@lists.xenproject.org>; Wed, 28 Oct 2026 18:18:58 +0100
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a18385a213000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Wed, 28 Oct 2026 17:18:55 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 029A982DF6;
 Wed, 28 Oct 2026 18:18:54 +0100 (CET)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=8o46Z3v+OUh7CK6rDA0TN+XadXDFu0sO0zMXZuwdAkk=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=O1aGRdZonkxbceMlzM4NW4hG4lvWMtVhK9HglDhueQgwGfKhDyRuHHskavhTv9WWzf8B4NMYs
 JNuRzCv9TcpDubRUu2EAARMdfko3eiOvVSYakNrhukY+az3dFt1wr5UhO3R5Z2bMFTAFzfYE4qN
 5MKrAFMOoIb25kY6m92k1RWe2Lo0TQiehrGOZV767YRF5aPJd3DldT3imGcUeePmcSJnqPSZDN8
 6TOWuwFiC9Q50B0vgasl0aNKMbhGfX2lbqxLSPzCuiSmnojvbTE9vbI1w5ldKn2eUkjFbIDeGON
 8Wv8L2VxzE2b8DHrQ+UdfDhDYZ6r6QquGbX4Kqlhvtag==
X-Zone-Loop: 13f5d0c4b7a1e073ede922dd64ef33a56745f91b7a61
x-campaign-type: default
x-transaction-id: 351ae876-252e-450d-9980-1b3b192f3c19
x-swg-uid: 01-a8185718-d097-42bf-8996-77170401945c
X-Mailer: Sweego
Message-ID:
 <1793207935.8631fc262581453bbf619ec5b2062170.1a18385a213000f79f@vates.tech>
x-swg-bid: 1793207935.8631fc262581453bbf619ec5b2062170.1a18385a213000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [PATCH v2 10/10] ring: Defer request completion until backend grant release
Date: Wed, 28 Oct 2026 18:18:40 +0100
In-Reply-To: <20261028171840.4940-1-ngoc-tu.dinh@vates.tech>
References: <1793207793.8631fc262581453bbf619ec5b2062170.1a1838377bc000f79f@vates.tech>
 <20261028171840.4940-1-ngoc-tu.dinh@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.2b6.7fe56939d5b74291.1a18385a063.d1c039c5368fbdab=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1793207935076
X-purgate-ID: tlsNG-42698a/1793207938-1B2DC9EA-C0378730/0/0
X-purgate-type: clean
X-purgate-size: 25162

---=Part.2b6.7fe56939d5b74291.1a18385a063.d1c039c5368fbdab=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

If the backend is still accessing the request grants, we must defer
completion until the backend has fully released them=2E

Check for request grant revocation results=2E If it fails, queue the
request onto the reclaim thread=2E

Request lifecycle changes are documented in BlkifRingGetRequest=2E
GranterPut is removed since there are no more users=2E

Assisted-by: LLM
Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 src/xenvbd/granter=2Ec |  17 ---
 src/xenvbd/granter=2Eh |   6 -
 src/xenvbd/ring=2Ec    | 348 ++++++++++++++++++++++++++++++-------------
 3 files changed, 248 insertions(+), 123 deletions(-)

diff --git a/src/xenvbd/granter=2Ec b/src/xenvbd/granter=2Ec
index 7b7a7c8=2E=2Ecbd5022 100644
--- a/src/xenvbd/granter=2Ec
+++ b/src/xenvbd/granter=2Ec
@@ -463,23 +463,6 @@ fail1:
     return status;
 }
=20
-VOID
-GranterPut(
-    _Inout_ PXENVBD_GRANTER Granter,
-    _In_ PVOID              Handle
-    )
-{
-    NTSTATUS                status;
-
-    for (;;) {
-        status =3D GranterTryPut(Granter, Handle);
-        if (NT_SUCCESS(status))
-            break;
-
-        YieldProcessor();
-    }
-}
-
 ULONG
 GranterReference(
     _In_ PXENVBD_GRANTER    Granter,
diff --git a/src/xenvbd/granter=2Eh b/src/xenvbd/granter=2Eh
index 93b962c=2E=2E873f028 100644
--- a/src/xenvbd/granter=2Eh
+++ b/src/xenvbd/granter=2Eh
@@ -103,12 +103,6 @@ GranterTryPut(
     _In_ PVOID              Handle
     );
=20
-extern VOID
-GranterPut(
-    _Inout_ PXENVBD_GRANTER Granter,
-    _In_ PVOID              Handle
-    );
-
 extern ULONG
 GranterReference(
     _In_ PXENVBD_GRANTER    Granter,
diff --git a/src/xenvbd/ring=2Ec b/src/xenvbd/ring=2Ec
index 0cb8e5a=2E=2Ea4c35a8 100644
--- a/src/xenvbd/ring=2Ec
+++ b/src/xenvbd/ring=2Ec
@@ -91,8 +91,12 @@ typedef struct _XENVBD_BLKIF_RING {
     LIST_ENTRY                      PreparedQueue;
     LIST_ENTRY                      SubmittedList;
     LIST_ENTRY                      ShutdownQueue;
+    // List of XENVBD_REQUEST still being held by the backend
+    LIST_ENTRY                      DeferredList;
     // List of XENVBD_BLKIF_PAGES still being held by the backend
     LIST_ENTRY                      DeferredPages;
+    ULONG                           RequestsDeferred;
+    ULONG                           RequestsReclaimed;
     ULONG                           SrbsQueued;
     ULONG                           SrbsCompleted;
     ULONG                           SrbsFailed;
@@ -288,12 +292,8 @@ BlkifRingPutIndirect(
     )
 {
     PXENVBD_RING                Ring =3D BlkifRing->Ring;
-    PXENVBD_FRONTEND            Frontend =3D Ring->Frontend;
-    PXENVBD_GRANTER             Granter =3D FrontendGetGranter(Frontend);
=20
-    if (Indirect->Grant)
-        GranterPut(Granter, Indirect->Grant);
-    Indirect->Grant =3D NULL;
+    ASSERT3P(Indirect->Grant, =3D=3D, NULL);
=20
     RtlZeroMemory(&Indirect->ListEntry, sizeof(LIST_ENTRY));
=20
@@ -325,12 +325,9 @@ BlkifRingPutSegment(
 {
     PXENVBD_RING            Ring =3D BlkifRing->Ring;
     PXENVBD_FRONTEND        Frontend =3D Ring->Frontend;
-    PXENVBD_GRANTER         Granter =3D FrontendGetGranter(Frontend);
     PXENVBD_BOUNCE          Bounce =3D Segment->Bounce;
=20
-    if (Segment->Grant)
-        GranterPut(Granter, Segment->Grant);
-    Segment->Grant =3D NULL;
+    ASSERT3P(Segment->Grant, =3D=3D, NULL);
=20
     if (Bounce) {
         if (Bounce->SourcePtr) {
@@ -358,6 +355,20 @@ BlkifRingPutSegment(
                  TRUE);
 }
=20
+/*
+ * Request lifecycle:
+ * - Prepare: BlkifRingPrepare*() attach segments, bounce buffers, indire=
ct
+ *   pages and grants, and take a SrbExt->RequestCount reference for each
+ *   request=2E The SRB completes when the last reference is dropped=2E
+ * - Done (response received or faked by BlkifRingDisable(), or preparati=
on
+ *   failed): BlkifRingTryPutRequest(), then BlkifRingDeferRequest() if t=
hat
+ *   fails=2E
+ * - If deferred: ReclaimThread retries BlkifRingTryPutRequest() until it
+ *   succeeds=2E
+ * - BlkifRingTryPutRequest() revokes all grants first, then puts everyth=
ing
+ *   back into the caches and drops the SRB reference (__BlkifRingPutSrb(=
))=2E
+ *   Revocation can fail and be retried=2E
+ */
 static PXENVBD_REQUEST
 BlkifRingGetRequest(
     _In_ PXENVBD_BLKIF_RING BlkifRing
@@ -372,47 +383,17 @@ BlkifRingGetRequest(
 }
=20
 static VOID
-BlkifRingPutRequest(
-    _In_ PXENVBD_BLKIF_RING BlkifRing,
-    _Inout_ PXENVBD_REQUEST Request
+BlkifRingDeferRequest(
+    _Inout_ PXENVBD_BLKIF_RING  BlkifRing,
+    _Inout_ PXENVBD_REQUEST     Request
     )
 {
-    PXENVBD_RING            Ring =3D BlkifRing->Ring;
-    PLIST_ENTRY             ListEntry;
-
-    for (;;) {
-        PXENVBD_SEGMENT Segment;
-
-        ListEntry =3D RemoveHeadList(&Request->Segments);
-        if (ListEntry =3D=3D &Request->Segments)
-            break;
-        Segment =3D CONTAINING_RECORD(ListEntry, XENVBD_SEGMENT, ListEntr=
y);
-        BlkifRingPutSegment(BlkifRing, Segment);
-    }
-
-    for (;;) {
-        PXENVBD_INDIRECT    Indirect;
-
-        ListEntry =3D RemoveHeadList(&Request->Indirects);
-        if (ListEntry =3D=3D &Request->Indirects)
-            break;
-        Indirect =3D CONTAINING_RECORD(ListEntry, XENVBD_INDIRECT, ListEn=
try);
-        BlkifRingPutIndirect(BlkifRing, Indirect);
-    }
+    PXENVBD_RING                Ring =3D BlkifRing->Ring;
=20
-    Request->SrbExt =3D NULL;
-    Request->Operation =3D 0;
-    Request->Flags =3D 0;
-    Request->NrSegments =3D 0;
-    Request->FirstSector =3D 0;
-    Request->NrSectors =3D 0;
-    RtlZeroMemory(&Request->ListEntry, sizeof(LIST_ENTRY));
+    InsertTailList(&BlkifRing->DeferredList, &Request->ListEntry);
+    BlkifRing->RequestsDeferred++;
=20
-    XENBUS_CACHE(Put,
-                 &Ring->CacheInterface,
-                 BlkifRing->RequestCache,
-                 Request,
-                 TRUE);
+    ThreadWake(Ring->ReclaimThread);
 }
=20
 static DECLSPEC_NOINLINE NTSTATUS
@@ -552,6 +533,13 @@ BlkifRingDebugCallback(
                  BlkifRing->SrbsCompleted,
                  BlkifRing->SrbsFailed);
=20
+    XENBUS_DEBUG(Printf,
+                 &Ring->DebugInterface,
+                 "RequestsDeferred =3D %u RequestsReclaimed =3D %u%s\n",
+                 BlkifRing->RequestsDeferred,
+                 BlkifRing->RequestsReclaimed,
+                 IsListEmpty(&BlkifRing->DeferredPages) ? "" : " (ring pa=
ges deferred)");
+
     XENBUS_DEBUG(Printf,
                  &Ring->DebugInterface,
                  "Dpcs =3D %u, Events =3D %u\n",
@@ -586,6 +574,97 @@ __BlkifRingCompleteSrb(
     AdapterCompleteSrb(Adapter, SrbExt);
 }
=20
+static FORCEINLINE VOID
+__BlkifRingPutSrb(
+    _Inout_ PXENVBD_BLKIF_RING  BlkifRing,
+    _In_ PXENVBD_SRBEXT         SrbExt
+    )
+{
+    ASSERT3S(SrbExt->RequestCount, >, 0);
+
+    if (--SrbExt->RequestCount =3D=3D 0)
+        __BlkifRingCompleteSrb(BlkifRing, SrbExt);
+}
+
+_Check_return_
+static BOOLEAN
+BlkifRingTryPutRequest(
+    _Inout_ PXENVBD_BLKIF_RING  BlkifRing,
+    _Inout_ PXENVBD_REQUEST     Request
+    )
+{
+    PXENVBD_RING                Ring =3D BlkifRing->Ring;
+    PXENVBD_GRANTER             Granter =3D FrontendGetGranter(Ring->Fron=
tend);
+    PXENVBD_SRBEXT              SrbExt =3D Request->SrbExt;
+    PLIST_ENTRY                 ListEntry;
+
+    for (ListEntry =3D Request->Segments=2EFlink;
+         ListEntry !=3D &Request->Segments;
+         ListEntry =3D ListEntry->Flink) {
+        PXENVBD_SEGMENT Segment =3D CONTAINING_RECORD(ListEntry, XENVBD_S=
EGMENT, ListEntry);
+
+        if (Segment->Grant =3D=3D NULL)
+            continue;
+
+        if (!NT_SUCCESS(GranterTryPut(Granter, Segment->Grant)))
+            return FALSE;
+
+        Segment->Grant =3D NULL;
+    }
+
+    for (ListEntry =3D Request->Indirects=2EFlink;
+         ListEntry !=3D &Request->Indirects;
+         ListEntry =3D ListEntry->Flink) {
+        PXENVBD_INDIRECT    Indirect =3D CONTAINING_RECORD(ListEntry, XEN=
VBD_INDIRECT, ListEntry);
+
+        if (Indirect->Grant =3D=3D NULL)
+            continue;
+
+        if (!NT_SUCCESS(GranterTryPut(Granter, Indirect->Grant)))
+            return FALSE;
+
+        Indirect->Grant =3D NULL;
+    }
+
+    for (;;) {
+        PXENVBD_SEGMENT Segment;
+
+        ListEntry =3D RemoveHeadList(&Request->Segments);
+        if (ListEntry =3D=3D &Request->Segments)
+            break;
+        Segment =3D CONTAINING_RECORD(ListEntry, XENVBD_SEGMENT, ListEntr=
y);
+        BlkifRingPutSegment(BlkifRing, Segment);
+    }
+
+    for (;;) {
+        PXENVBD_INDIRECT    Indirect;
+
+        ListEntry =3D RemoveHeadList(&Request->Indirects);
+        if (ListEntry =3D=3D &Request->Indirects)
+            break;
+        Indirect =3D CONTAINING_RECORD(ListEntry, XENVBD_INDIRECT, ListEn=
try);
+        BlkifRingPutIndirect(BlkifRing, Indirect);
+    }
+
+    Request->SrbExt =3D NULL;
+    Request->Operation =3D 0;
+    Request->Flags =3D 0;
+    Request->NrSegments =3D 0;
+    Request->FirstSector =3D 0;
+    Request->NrSectors =3D 0;
+    RtlZeroMemory(&Request->ListEntry, sizeof(LIST_ENTRY));
+
+    XENBUS_CACHE(Put,
+                 &Ring->CacheInterface,
+                 BlkifRing->RequestCache,
+                 Request,
+                 TRUE);
+
+    __BlkifRingPutSrb(BlkifRing, SrbExt);
+
+    return TRUE;
+}
+
 static FORCEINLINE VOID
 BlkifRingUnprepareRequest(
     _In_ PXENVBD_BLKIF_RING BlkifRing,
@@ -604,7 +683,8 @@ BlkifRingUnprepareRequest(
                                     XENVBD_REQUEST,
                                     ListEntry);
=20
-        BlkifRingPutRequest(BlkifRing, Request);
+        if (!BlkifRingTryPutRequest(BlkifRing, Request))
+            BlkifRingDeferRequest(BlkifRing, Request);
     }
 }
=20
@@ -771,8 +851,6 @@ BlkifRingPrepareReadWrite(
=20
     Srb->SrbStatus =3D SRB_STATUS_PENDING;
=20
-    SrbExt->RequestCount =3D 0;
-
     while (SectorsLeft > 0) {
         ULONG           Index;
         ULONG           MaxSegments;
@@ -846,7 +924,6 @@ fail3:
 fail2:
 fail1:
     BlkifRingUnprepareRequest(BlkifRing, &List);
-    SrbExt->RequestCount =3D 0;
     Srb->SrbStatus =3D SRB_STATUS_ERROR;
     return STATUS_UNSUCCESSFUL;
 }
@@ -871,8 +948,6 @@ BlkifRingPrepareUnmap(
     Count =3D _byteswap_ushort(*(PUSHORT)Unmap->BlockDescrDataLength) / s=
izeof(UNMAP_BLOCK_DESCRIPTOR);
     Srb->SrbStatus =3D SRB_STATUS_PENDING;
=20
-    SrbExt->RequestCount =3D 0;
-
     for (Index =3D 0; Index < Count; ++Index) {
         PUNMAP_BLOCK_DESCRIPTOR Descr =3D &Unmap->Descriptors[Index];
         PXENVBD_REQUEST         Request;
@@ -885,13 +960,14 @@ BlkifRingPrepareUnmap(
         InsertTailList(&List, &Request->ListEntry);
         SrbExt->RequestCount++;
=20
+        Request->SrbExt =3D SrbExt;
+
         StartLBA =3D _byteswap_uint64(*(PULONG64)Descr->StartingLba);
         CountLBA =3D _byteswap_ulong(*(PULONG)Descr->LbaCount);
=20
         if (!DiskInfoIsValidExtent(DiskInfo, StartLBA, CountLBA))
             goto fail2;
=20
-        Request->SrbExt =3D SrbExt;
         Request->Operation =3D BLKIF_OP_DISCARD;
         Request->FirstSector =3D StartLBA << DiskInfo->SectorShift;
         Request->NrSectors =3D CountLBA << DiskInfo->SectorShift;
@@ -904,7 +980,6 @@ BlkifRingPrepareUnmap(
 fail2:
 fail1:
     BlkifRingUnprepareRequest(BlkifRing, &List);
-    SrbExt->RequestCount =3D 0;
     Srb->SrbStatus =3D SRB_STATUS_ERROR;
     return STATUS_UNSUCCESSFUL;
 }
@@ -931,8 +1006,6 @@ BlkifRingPrepareSyncCache(
     else
         Operation =3D BLKIF_OP_WRITE_BARRIER;
=20
-    SrbExt->RequestCount =3D 0;
-
     Request =3D BlkifRingGetRequest(BlkifRing);
     if (Request =3D=3D NULL)
         goto fail1;
@@ -948,35 +1021,50 @@ BlkifRingPrepareSyncCache(
=20
 fail1:
     BlkifRingUnprepareRequest(BlkifRing, &List);
-    SrbExt->RequestCount =3D 0;
     Srb->SrbStatus =3D SRB_STATUS_ERROR;
     return STATUS_UNSUCCESSFUL;
 }
=20
-static DECLSPEC_NOINLINE NTSTATUS
+static DECLSPEC_NOINLINE VOID
 __BlkifRingPrepareSrb(
     _Inout_ PXENVBD_BLKIF_RING  BlkifRing,
     _Inout_ PXENVBD_SRBEXT      SrbExt
     )
 {
-    switch (Cdb_OperationEx(SrbExt->Srb)) {
+    PSCSI_REQUEST_BLOCK         Srb =3D SrbExt->Srb;
+    NTSTATUS                    status;
+
+    // Held while the requests are built, so that releasing them on failu=
re
+    // cannot complete the SRB before its status is set
+    SrbExt->RequestCount =3D 1;
+
+    switch (Cdb_OperationEx(Srb)) {
     case SCSIOP_READ:
     case SCSIOP_WRITE:
-        return BlkifRingPrepareReadWrite(BlkifRing,
-                                         SrbExt);
+        status =3D BlkifRingPrepareReadWrite(BlkifRing,
+                                           SrbExt);
+        break;
=20
     case SCSIOP_SYNCHRONIZE_CACHE:
-        return BlkifRingPrepareSyncCache(BlkifRing,
-                                         SrbExt);
+        status =3D BlkifRingPrepareSyncCache(BlkifRing,
+                                           SrbExt);
+        break;
=20
     case SCSIOP_UNMAP:
-        return BlkifRingPrepareUnmap(BlkifRing,
-                                     SrbExt);
+        status =3D BlkifRingPrepareUnmap(BlkifRing,
+                                       SrbExt);
+        break;
=20
     default:
         ASSERT(FALSE);
-        return STATUS_NOT_SUPPORTED;
+        status =3D STATUS_NOT_SUPPORTED;
+        break;
     }
+
+    if (!NT_SUCCESS(status))
+        Srb->SrbStatus =3D SRB_STATUS_BUSY;
+
+    __BlkifRingPutSrb(BlkifRing, SrbExt);
 }
=20
 static FORCEINLINE VOID
@@ -1213,12 +1301,8 @@ __BlkifRingCompleteResponse(
         }
     }
=20
-    BlkifRingPutRequest(BlkifRing, Request);
-
-    // complete srb
-    if (--SrbExt->RequestCount =3D=3D 0) {
-        __BlkifRingCompleteSrb(BlkifRing, SrbExt);
-    }
+    if (!BlkifRingTryPutRequest(BlkifRing, Request))
+        BlkifRingDeferRequest(BlkifRing, Request);
 }
=20
 static FORCEINLINE BOOLEAN
@@ -1468,12 +1552,7 @@ BlkifRingSchedule(
                                    XENVBD_SRBEXT,
                                    ListEntry);
=20
-        status =3D __BlkifRingPrepareSrb(BlkifRing, SrbExt);
-        if (!NT_SUCCESS(status)) {
-            PSCSI_REQUEST_BLOCK Srb =3D SrbExt->Srb;
-            Srb->SrbStatus =3D SRB_STATUS_BUSY;
-            __BlkifRingCompleteSrb(BlkifRing, SrbExt);
-        }
+        __BlkifRingPrepareSrb(BlkifRing, SrbExt);
     }
=20
     __BlkifRingPushRequests(BlkifRing);
@@ -1870,7 +1949,8 @@ __BlkifRingIsDeferring(
     _In_ PXENVBD_BLKIF_RING BlkifRing
     )
 {
-    return !IsListEmpty(&BlkifRing->DeferredPages);
+    return !IsListEmpty(&BlkifRing->DeferredList) ||
+           !IsListEmpty(&BlkifRing->DeferredPages);
 }
=20
 _IRQL_requires_(DISPATCH_LEVEL)
@@ -1883,6 +1963,23 @@ BlkifRingReclaim(
     ASSERT3P(BlkifRing->LockThread, =3D=3D, KeGetCurrentThread());
 #endif
=20
+    while (!IsListEmpty(&BlkifRing->DeferredList)) {
+        PLIST_ENTRY         ListEntry;
+        PXENVBD_REQUEST     Request;
+
+        ListEntry =3D RemoveHeadList(&BlkifRing->DeferredList);
+        Request =3D CONTAINING_RECORD(ListEntry, XENVBD_REQUEST, ListEntr=
y);
+
+        if (!BlkifRingTryPutRequest(BlkifRing, Request)) {
+            // Move this reclaim failure to the back so that entries behi=
nd it
+            // are tried first on the next pass=2E
+            InsertTailList(&BlkifRing->DeferredList, ListEntry);
+            break;
+        }
+
+        BlkifRing->RequestsReclaimed++;
+    }
+
     while (!IsListEmpty(&BlkifRing->DeferredPages)) {
         PLIST_ENTRY         ListEntry;
         PXENVBD_BLKIF_PAGES Pages;
@@ -1891,8 +1988,6 @@ BlkifRingReclaim(
         Pages =3D CONTAINING_RECORD(ListEntry, XENVBD_BLKIF_PAGES, ListEn=
try);
=20
         if (!__BlkifRingRevokePages(BlkifRing, Pages)) {
-            // Move this reclaim failure to the back so that entries behi=
nd it
-            // are tried first on the next pass=2E
             InsertTailList(&BlkifRing->DeferredPages, ListEntry);
             break;
         }
@@ -2008,13 +2103,19 @@ BlkifRingCacheCreate(
     Ring =3D BlkifRing->Ring;
     Frontend =3D Ring->Frontend;
=20
+    // The caches hold their own reference on the interface, as they outl=
ive
+    // a disconnect while any of their objects are deferred=2E
+    status =3D XENBUS_CACHE(Acquire, &Ring->CacheInterface);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
     status =3D RtlStringCbPrintfA(Name,
                                 sizeof(Name),
                                 "vbd_%u_queue_%u_request",
                                 FrontendGetTargetId(Frontend),
                                 BlkifRing->Index);
     if (!NT_SUCCESS(status))
-        goto fail1;
+        goto fail2;
=20
     status =3D XENBUS_CACHE(Create,
                           &Ring->CacheInterface,
@@ -2029,7 +2130,7 @@ BlkifRingCacheCreate(
                           BlkifRing,
                           &BlkifRing->RequestCache);
     if (!NT_SUCCESS(status))
-        goto fail2;
+        goto fail3;
=20
     status =3D RtlStringCbPrintfA(Name,
                                 sizeof(Name),
@@ -2037,7 +2138,7 @@ BlkifRingCacheCreate(
                                 FrontendGetTargetId(Frontend),
                                 BlkifRing->Index);
     if (!NT_SUCCESS(status))
-        goto fail3;
+        goto fail4;
=20
     status =3D XENBUS_CACHE(Create,
                           &Ring->CacheInterface,
@@ -2052,7 +2153,7 @@ BlkifRingCacheCreate(
                           BlkifRing,
                           &BlkifRing->SegmentCache);
     if (!NT_SUCCESS(status))
-        goto fail4;
+        goto fail5;
=20
     status =3D RtlStringCbPrintfA(Name,
                                 sizeof(Name),
@@ -2060,7 +2161,7 @@ BlkifRingCacheCreate(
                                 FrontendGetTargetId(Frontend),
                                 BlkifRing->Index);
     if (!NT_SUCCESS(status))
-        goto fail5;
+        goto fail6;
=20
     status =3D XENBUS_CACHE(Create,
                           &Ring->CacheInterface,
@@ -2075,35 +2176,40 @@ BlkifRingCacheCreate(
                           BlkifRing,
                           &BlkifRing->IndirectCache);
     if (!NT_SUCCESS(status))
-        goto fail6;
+        goto fail7;
=20
     return STATUS_SUCCESS;
=20
+fail7:
+    Error("fail7\n");
+
 fail6:
     Error("fail6\n");
=20
-fail5:
-    Error("fail5\n");
-
     XENBUS_CACHE(Destroy,
                  &Ring->CacheInterface,
                  BlkifRing->SegmentCache);
     BlkifRing->SegmentCache =3D NULL;
=20
+fail5:
+    Error("fail5\n");
+
 fail4:
     Error("fail4\n");
=20
-fail3:
-    Error("fail3\n");
-
     XENBUS_CACHE(Destroy,
                  &Ring->CacheInterface,
                  BlkifRing->RequestCache);
     BlkifRing->RequestCache =3D NULL;
=20
+fail3:
+    Error("fail3\n");
+
 fail2:
     Error("fail2\n");
=20
+    XENBUS_CACHE(Release, &Ring->CacheInterface);
+
 fail1:
     Error("fail1 %08x\n", status);
=20
@@ -2133,6 +2239,8 @@ BlkifRingCacheDestroy(
                  &Ring->CacheInterface,
                  BlkifRing->RequestCache);
     BlkifRing->RequestCache =3D NULL;
+
+    XENBUS_CACHE(Release, &Ring->CacheInterface);
 }
=20
 static NTSTATUS
@@ -2181,6 +2289,7 @@ BlkifRingCreate(
     InitializeListHead(&(*BlkifRing)->ShutdownQueue);
     InitializeListHead(&(*BlkifRing)->SubmittedList);
     InitializeListHead(&(*BlkifRing)->PreparedQueue);
+    InitializeListHead(&(*BlkifRing)->DeferredList);
     InitializeListHead(&(*BlkifRing)->DeferredPages);
=20
     KeInitializeThreadedDpc(&(*BlkifRing)->Dpc, BlkifRingDpc, *BlkifRing)=
;
@@ -2199,6 +2308,7 @@ fail4:
     RtlZeroMemory(&(*BlkifRing)->Dpc, sizeof(KDPC));
=20
     RtlZeroMemory(&(*BlkifRing)->DeferredPages, sizeof(LIST_ENTRY));
+    RtlZeroMemory(&(*BlkifRing)->DeferredList, sizeof(LIST_ENTRY));
     RtlZeroMemory(&(*BlkifRing)->PreparedQueue, sizeof(LIST_ENTRY));
     RtlZeroMemory(&(*BlkifRing)->SubmittedList, sizeof(LIST_ENTRY));
     RtlZeroMemory(&(*BlkifRing)->ShutdownQueue, sizeof(LIST_ENTRY));
@@ -2232,10 +2342,15 @@ BlkifRingDestroy(
     BlkifRing->WatchdogThread =3D NULL;
=20
     BUG_ON(__BlkifRingIsDeferring(BlkifRing));
+    ASSERT3P(BlkifRing->RequestCache, =3D=3D, NULL);
+
+    BlkifRing->RequestsDeferred =3D 0;
+    BlkifRing->RequestsReclaimed =3D 0;
=20
     RtlZeroMemory(&BlkifRing->Dpc, sizeof(KDPC));
=20
     RtlZeroMemory(&BlkifRing->DeferredPages, sizeof(LIST_ENTRY));
+    RtlZeroMemory(&BlkifRing->DeferredList, sizeof(LIST_ENTRY));
=20
     ASSERT(IsListEmpty(&BlkifRing->PreparedQueue));
     RtlZeroMemory(&BlkifRing->PreparedQueue, sizeof(LIST_ENTRY));
@@ -2271,6 +2386,7 @@ BlkifRingConnect(
     PXENVBD_FRONTEND            Frontend =3D Ring->Frontend;
     PXENVBD_GRANTER             Granter =3D FrontendGetGranter(Frontend);
     CHAR                        Name[MAX_NAME_LEN];
+    BOOLEAN                     CacheCreated;
     ULONG                       Index;
     NTSTATUS                    status;
=20
@@ -2288,9 +2404,15 @@ BlkifRingConnect(
     }
     KeSetImportanceDpc(&BlkifRing->Dpc, MediumHighImportance);
=20
-    status =3D BlkifRingCacheCreate(BlkifRing);
-    if (!NT_SUCCESS(status))
-        goto fail1;
+    // The caches are kept by a disconnect that left requests deferred
+    CacheCreated =3D FALSE;
+    if (BlkifRing->RequestCache =3D=3D NULL) {
+        status =3D BlkifRingCacheCreate(BlkifRing);
+        if (!NT_SUCCESS(status))
+            goto fail1;
+
+        CacheCreated =3D TRUE;
+    }
=20
     BlkifRing->Pages =3D BlkifRingAllocatePages(1ul << Ring->Order);
=20
@@ -2373,7 +2495,8 @@ fail3:
     BlkifRingReleasePages(BlkifRing);
 fail2:
     Error("fail2\n");
-    BlkifRingCacheDestroy(BlkifRing);
+    if (CacheCreated)
+        BlkifRingCacheDestroy(BlkifRing);
 fail1:
     Error("fail1 %08x\n", status);
     return status;
@@ -2568,6 +2691,7 @@ BlkifRingDisconnect(
     )
 {
     PXENVBD_RING                Ring =3D BlkifRing->Ring;
+    BOOLEAN                     Deferring;
=20
     Trace("=3D=3D=3D=3D> %u\n", BlkifRing->Index);
     ASSERT(BlkifRing->Connected);
@@ -2582,17 +2706,27 @@ BlkifRingDisconnect(
                   BlkifRing->Channel);
     BlkifRing->Channel =3D NULL;
=20
-    // Normally the backend has closed by now, so ring pages left over fr=
om
-    // earlier connections should be revocable
+    // Normally the backend has closed by now, so anything still deferred
+    // should be revocable
     __BlkifRingAcquireLock(BlkifRing);
     BlkifRingReclaim(BlkifRing);
+    Deferring =3D !IsListEmpty(&BlkifRing->DeferredList);
     __BlkifRingReleaseLock(BlkifRing);
=20
     RtlZeroMemory(&BlkifRing->Front, sizeof(blkif_front_ring_t));
=20
     BlkifRingReleasePages(BlkifRing);
=20
-    BlkifRingCacheDestroy(BlkifRing);
+    // Deferred requests still own objects from the caches, so keep them =
(and
+    // let the next connection reuse them) until the requests are reclaim=
ed
+    if (Deferring) {
+        Warning("Target[%u][%u] : %u request(s) still deferred\n",
+                FrontendGetTargetId(Ring->Frontend),
+                BlkifRing->Index,
+                BlkifRing->RequestsDeferred - BlkifRing->RequestsReclaime=
d);
+    } else {
+        BlkifRingCacheDestroy(BlkifRing);
+    }
=20
     BlkifRing->Events =3D 0;
     BlkifRing->Dpcs =3D 0;
@@ -2891,6 +3025,20 @@ RingD0ToD3(
=20
         Trace("done\n");
     }
+
+    // Caches kept by a disconnect that left requests deferred, along wit=
h
+    // their cache interface references, can go now
+    for (Index =3D 0; Index < FrontendGetMaxQueues(Ring->Frontend); ++Ind=
ex) {
+        PXENVBD_BLKIF_RING  BlkifRing =3D Ring->Ring[Index];
+        KIRQL               Irql;
+
+        if (BlkifRing->RequestCache =3D=3D NULL)
+            continue;
+
+        KeRaiseIrql(DISPATCH_LEVEL, &Irql);
+        BlkifRingCacheDestroy(BlkifRing);
+        KeLowerIrql(Irql);
+    }
 }
=20
 NTSTATUS
--=20
2=2E56=2E0=2Ewindows=2E4



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.2b6.7fe56939d5b74291.1a18385a063.d1c039c5368fbdab=---


From win-pv-devel-bounces@lists.xenproject.org Wed Oct 28 17:19:01 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 28 Oct 2026 17:19:01 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1463513.1674390 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xM7Ij-00055W-Pf; Wed, 28 Oct 2026 17:19:01 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1463513.1674390; Wed, 28 Oct 2026 17:19:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xM7Ij-00054y-Dc; Wed, 28 Oct 2026 17:19:01 +0000
Received: by outflank-mailman (input) for mailman id 1463513;
 Wed, 28 Oct 2026 17:18:59 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a183859ee2000f79f@swg.vates.tech>)
 id 1xM7Ih-0004xT-Im
 for win-pv-devel@lists.xenproject.org; Wed, 28 Oct 2026 17:18:59 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xM7Ig-003lRl-Vy
 for win-pv-devel@lists.xenproject.org; Wed, 28 Oct 2026 18:18:59 +0100
Received: from [10.42.69.1] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a183859ee2000f79f@swg.vates.tech>)
 id 6ae22e58-8faa-0a2a0a5109dd-0a2a4501c95a-44
 for <win-pv-devel@lists.xenproject.org>; Wed, 28 Oct 2026 18:18:58 +0100
Received: from [185.255.28.34] (helo=prod-mta-13-01.swg-srv.net)
 by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a183859ee2000f79f@swg.vates.tech>)
 id 6ae22e82-5984-0a2a45010019-b9ff1c229a6d-3
 for <win-pv-devel@lists.xenproject.org>; Wed, 28 Oct 2026 18:18:58 +0100
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-01.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a183859ee2000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Wed, 28 Oct 2026 17:18:54 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 2C80482BD5;
 Wed, 28 Oct 2026 18:18:54 +0100 (CET)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=6xB+PB3zbuDEGNqzioLfQEDpElNmsADXgQv7sORLTjY=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=eLUm/zUd5vPgCfXVlN39w6Cj1+l37VxBsuuiU2yq1yjHcbYoEZvTiWuIzhYkiD7BRx+jwBrrA
 IshSh2GFOWTOXh4RcB25ki9m3lvzso86TZ2ig74MkpZ1z8KcugFH6Bc/GmHJCocZfqLFFtPK3MZ
 LKY3BfXaKaMeh5XEwGKczTwk/g+lscmxA9ITqXirXrSbONb1+i7RmhztPoExVadcYVdgWq3lQcB
 z99Z/H8wyasKUeewGCyAyya2akv+Cm58JtDvhI/F0Y77KoaXNRdOauPP3f/+eceNCQqY/Z2PLQu
 GGqG7xj0kdc52pXTcvHrZ0jCs4YjAgcACjWLFoj5fg1Q==
X-Zone-Loop: 5c5f6b3242188bbd06a4165ddfd0a456dd3654b03af9
x-campaign-type: default
x-transaction-id: 98d05e80-e7a9-4f7f-bdd7-04e40e6269ad
x-swg-uid: 01-3d12a29e-0fe5-402f-8453-5c9c69d002b1
X-Mailer: Sweego
Message-ID:
 <1793207934.8631fc262581453bbf619ec5b2062170.1a183859ee2000f79f@vates.tech>
x-swg-bid: 1793207934.8631fc262581453bbf619ec5b2062170.1a183859ee2000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [PATCH v2 06/10] granter: Decouple cache lifetime from Connected
Date: Wed, 28 Oct 2026 18:18:36 +0100
In-Reply-To: <20261028171840.4940-1-ngoc-tu.dinh@vates.tech>
References: <1793207793.8631fc262581453bbf619ec5b2062170.1a1838377bc000f79f@vates.tech>
 <20261028171840.4940-1-ngoc-tu.dinh@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.2b2.df1fea9f54b6fc04.1a183859d19.617c691c18022fb2=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1793207934233
X-purgate-ID: tlsNG-d62444/1793207938-BE465757-52C1A908/0/0
X-purgate-type: clean
X-purgate-size: 6682

---=Part.2b2.df1fea9f54b6fc04.1a183859d19.617c691c18022fb2=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

We must keep the cache alive until the very last grant has been released
by the backend=2E

Assisted-by: LLM
Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 src/xenvbd/granter=2Ec | 129 +++++++++++++++++++++++++++++++------------
 1 file changed, 95 insertions(+), 34 deletions(-)

diff --git a/src/xenvbd/granter=2Ec b/src/xenvbd/granter=2Ec
index 8271771=2E=2E6adc578 100644
--- a/src/xenvbd/granter=2Ec
+++ b/src/xenvbd/granter=2Ec
@@ -100,11 +100,26 @@ fail1:
     return status;
 }
=20
+static VOID
+__GranterDestroyCache(
+    _Inout_ PXENVBD_GRANTER Granter
+    );
+
 VOID
 GranterDestroy(
     _Inout_ PXENVBD_GRANTER Granter
     )
 {
+    BUG_ON(Granter->Current !=3D 0);
+
+    if (Granter->Cache !=3D NULL) {
+        KIRQL   Irql;
+
+        KeRaiseIrql(DISPATCH_LEVEL, &Irql);
+        __GranterDestroyCache(Granter);
+        KeLowerIrql(Irql);
+    }
+
     Granter->Frontend =3D NULL;
     RtlZeroMemory(&Granter->Lock, sizeof(KSPIN_LOCK));
=20
@@ -166,8 +181,8 @@ GranterDebugCallback(
=20
 #define MAXNAMELEN  32
=20
-NTSTATUS
-GranterConnect(
+static NTSTATUS
+__GranterCreateCache(
     _Inout_ PXENVBD_GRANTER Granter
     )
 {
@@ -175,25 +190,20 @@ GranterConnect(
     CHAR                    Name[MAXNAMELEN];
     NTSTATUS                status;
=20
-    ASSERT(Granter->Connected =3D=3D FALSE);
+    ASSERT3P(Granter->Cache, =3D=3D, NULL);
=20
     AdapterGetGnttabInterface(Adapter, &Granter->GnttabInterface);
-    AdapterGetDebugInterface(Adapter, &Granter->DebugInterface);
=20
     status =3D XENBUS_GNTTAB(Acquire, &Granter->GnttabInterface);
     if (!NT_SUCCESS(status))
         goto fail1;
=20
-    status =3D XENBUS_DEBUG(Acquire, &Granter->DebugInterface);
-    if (!NT_SUCCESS(status))
-        goto fail2;
-
     status =3D RtlStringCbPrintfA(Name,
                                 sizeof (Name),
                                 "disk_%u",
                                 FrontendGetTargetId(Granter->Frontend));
     if (!NT_SUCCESS(status))
-        goto fail3;
+        goto fail2;
=20
     status =3D XENBUS_GNTTAB(CreateCache,
                            &Granter->GnttabInterface,
@@ -205,7 +215,64 @@ GranterConnect(
                            Granter,
                            &Granter->Cache);
     if (!NT_SUCCESS(status))
-        goto fail4;
+        goto fail3;
+
+    return STATUS_SUCCESS;
+
+fail3:
+    Error("fail3\n");
+
+fail2:
+    Error("fail2\n");
+
+    XENBUS_GNTTAB(Release, &Granter->GnttabInterface);
+
+fail1:
+    Error("fail1 %08x\n", status);
+
+    RtlZeroMemory(&Granter->GnttabInterface, sizeof(XENBUS_GNTTAB_INTERFA=
CE));
+
+    return status;
+}
+
+static VOID
+__GranterDestroyCache(
+    _Inout_ PXENVBD_GRANTER Granter
+    )
+{
+    ASSERT3S(Granter->Current, =3D=3D, 0);
+
+    XENBUS_GNTTAB(DestroyCache,
+                  &Granter->GnttabInterface,
+                  Granter->Cache);
+    Granter->Cache =3D NULL;
+
+    XENBUS_GNTTAB(Release, &Granter->GnttabInterface);
+
+    RtlZeroMemory(&Granter->GnttabInterface, sizeof(XENBUS_GNTTAB_INTERFA=
CE));
+}
+
+NTSTATUS
+GranterConnect(
+    _Inout_ PXENVBD_GRANTER Granter
+    )
+{
+    PXENVBD_ADAPTER         Adapter =3D TargetGetAdapter(FrontendGetTarge=
t(Granter->Frontend));
+    NTSTATUS                status;
+
+    ASSERT(Granter->Connected =3D=3D FALSE);
+
+    if (Granter->Cache =3D=3D NULL) {
+        status =3D __GranterCreateCache(Granter);
+        if (!NT_SUCCESS(status))
+            goto fail1;
+    }
+
+    AdapterGetDebugInterface(Adapter, &Granter->DebugInterface);
+
+    status =3D XENBUS_DEBUG(Acquire, &Granter->DebugInterface);
+    if (!NT_SUCCESS(status))
+        goto fail2;
=20
     status =3D XENBUS_DEBUG(Register,
                           &Granter->DebugInterface,
@@ -214,30 +281,26 @@ GranterConnect(
                           Granter,
                           &Granter->DebugCallback);
     if (!NT_SUCCESS(status))
-        goto fail5;
+        goto fail3;
=20
     Granter->Connected =3D TRUE;
     return STATUS_SUCCESS;
=20
-fail5:
-    Error("fail5\n");
-    XENBUS_GNTTAB(DestroyCache,
-                  &Granter->GnttabInterface,
-                  Granter->Cache);
-    Granter->Cache =3D NULL;
-fail4:
-    Error("fail4\n");
 fail3:
     Error("fail3\n");
+
     XENBUS_DEBUG(Release, &Granter->DebugInterface);
+
 fail2:
     Error("fail2\n");
-    XENBUS_GNTTAB(Release, &Granter->GnttabInterface);
-fail1:
-    Error("fail1 %08x\n", status);
=20
     RtlZeroMemory(&Granter->DebugInterface, sizeof(XENBUS_DEBUG_INTERFACE=
));
-    RtlZeroMemory(&Granter->GnttabInterface, sizeof(XENBUS_GNTTAB_INTERFA=
CE));
+
+    if (Granter->Current =3D=3D 0)
+        __GranterDestroyCache(Granter);
+
+fail1:
+    Error("fail1 %08x\n", status);
=20
     return status;
 }
@@ -281,7 +344,6 @@ GranterDisconnect(
 {
     ASSERT(Granter->Connected =3D=3D TRUE);
=20
-    ASSERT3S(Granter->Current, =3D=3D, 0);
     Granter->Maximum =3D 0;
=20
     XENBUS_DEBUG(Deregister,
@@ -289,18 +351,20 @@ GranterDisconnect(
                  Granter->DebugCallback);
     Granter->DebugCallback =3D NULL;
=20
-    XENBUS_GNTTAB(DestroyCache,
-                  &Granter->GnttabInterface,
-                  Granter->Cache);
-    Granter->Cache =3D NULL;
-
     XENBUS_DEBUG(Release, &Granter->DebugInterface);
-    XENBUS_GNTTAB(Release, &Granter->GnttabInterface);
=20
     RtlZeroMemory(&Granter->DebugInterface, sizeof(XENBUS_DEBUG_INTERFACE=
));
-    RtlZeroMemory(&Granter->GnttabInterface, sizeof(XENBUS_GNTTAB_INTERFA=
CE));
=20
     Granter->Connected =3D FALSE;
+
+    if (Granter->Current !=3D 0) {
+        Warning("Target[%u] : %ld grants outstanding\n",
+                FrontendGetTargetId(Granter->Frontend),
+                Granter->Current);
+        return;
+    }
+
+    __GranterDestroyCache(Granter);
 }
=20
 NTSTATUS
@@ -382,9 +446,6 @@ GranterPut(
 {
     NTSTATUS                status;
=20
-    if (Granter->Connected =3D=3D FALSE)
-        return;
-
     for (;;) {
         status =3D GranterTryPut(Granter, Handle);
         if (NT_SUCCESS(status))
--=20
2=2E56=2E0=2Ewindows=2E4



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.2b2.df1fea9f54b6fc04.1a183859d19.617c691c18022fb2=---


From win-pv-devel-bounces@lists.xenproject.org Wed Oct 28 17:19:01 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 28 Oct 2026 17:19:01 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1463511.1674389 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xM7Ij-00054T-Os; Wed, 28 Oct 2026 17:19:01 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1463511.1674389; Wed, 28 Oct 2026 17:19:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xM7Ij-00053u-86; Wed, 28 Oct 2026 17:19:01 +0000
Received: by outflank-mailman (input) for mailman id 1463511;
 Wed, 28 Oct 2026 17:18:59 +0000
Received: from mx.expurgate.net ([194.145.224.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a183859f9d000f79f@swg.vates.tech>)
 id 1xM7Ih-0004wu-6a
 for win-pv-devel@lists.xenproject.org; Wed, 28 Oct 2026 17:18:59 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xM7Ig-00DORB-J8
 for win-pv-devel@lists.xenproject.org; Wed, 28 Oct 2026 18:18:58 +0100
Received: from [10.42.69.4] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a183859f9d000f79f@swg.vates.tech>)
 id 6ae22e56-bab6-0a2a0a5309dd-0a2a45049842-38
 for <win-pv-devel@lists.xenproject.org>; Wed, 28 Oct 2026 18:18:58 +0100
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-ebf023.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a183859f9d000f79f@swg.vates.tech>)
 id 6ae22e81-b57f-0a2a45040019-b9ff1c23aa45-4
 for <win-pv-devel@lists.xenproject.org>; Wed, 28 Oct 2026 18:18:58 +0100
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a183859f9d000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Wed, 28 Oct 2026 17:18:54 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id 5BC7982DF6;
 Wed, 28 Oct 2026 18:18:54 +0100 (CET)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=0buf6/tSBUj2faNkJoMK/tJH+pJchE6fmj/x7xwDy+0=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=JT/41iH26h8HzTgK817iFVXL7ZvxAb/I6Tjx8xp5TZWkDubzsFHmvHsDNmr2kXUK7a+KZ72Fu
 dkTJ3o21mV0MHn/jhs3DHuY2bBalUN1hPhIowZp540No2vbuju92sefvIyqlVu6/x6FjMJQh0PU
 bSEe27wZj2VGt1RT7mtd+VSKz/xw/3p6I+slUA5Ot/yc4LjtnTj/Q6ASIJPzd6bepaL/o2ZUz1y
 A2E4CxWxbIFNo3ORhGNEAAVdEZKAj8FSbDtbY7IFD6q57RcmRjClIDV3RzY0mQ2+Jd2lbCyJ4Wc
 nZSMznLDOlWLS4IbqLlXcBb557Q4YFvB6+W+lM19f/9Q==
X-Zone-Loop: 01759d4c9de3fd480d5f2118b4cd63e70977adfa0a10
x-campaign-type: default
x-transaction-id: dccb0462-a956-47c7-9dff-c5b20f73695f
x-swg-uid: 01-93775383-f8c6-4333-84ee-a72b3c557a99
X-Mailer: Sweego
Message-ID:
 <1793207934.8631fc262581453bbf619ec5b2062170.1a183859f9d000f79f@vates.tech>
x-swg-bid: 1793207934.8631fc262581453bbf619ec5b2062170.1a183859f9d000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [PATCH v2 07/10] granter: Introduce GranterD0ToD3/D3ToD0
Date: Wed, 28 Oct 2026 18:18:37 +0100
In-Reply-To: <20261028171840.4940-1-ngoc-tu.dinh@vates.tech>
References: <1793207793.8631fc262581453bbf619ec5b2062170.1a1838377bc000f79f@vates.tech>
 <20261028171840.4940-1-ngoc-tu.dinh@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.2b3.b847034e3cad156c.1a183859ddb.8efbae46055f63a3=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1793207934427
X-purgate-ID: tlsNG-ebf023/1793207938-534C3B50-0A4DE3AB/0/0
X-purgate-type: clean
X-purgate-size: 4771

---=Part.2b3.b847034e3cad156c.1a183859ddb.8efbae46055f63a3=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

XenBus requires all gnttab references to be dropped before hibernation;
otherwise, FdoS3ToS4 will crash=2E Since the granter cache can now outlive
a disconnect if there are outstanding grants, release it on D0->D3 at
the latest=2E

Nothing defers grant revocation yet, so Current is always zero there for
now=2E

Assisted-by: LLM
Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 src/xenvbd/frontend=2Ec | 11 +++++++++--
 src/xenvbd/frontend=2Eh |  4 ++--
 src/xenvbd/granter=2Ec  | 41 +++++++++++++++++++++++++++++++++--------
 src/xenvbd/granter=2Eh  | 12 ++++++++++++
 4 files changed, 56 insertions(+), 12 deletions(-)

diff --git a/src/xenvbd/frontend=2Ec b/src/xenvbd/frontend=2Ec
index 8bf4f96=2E=2E442e188 100644
--- a/src/xenvbd/frontend=2Ec
+++ b/src/xenvbd/frontend=2Ec
@@ -1669,7 +1669,7 @@ FrontendDebugCallback(
 }
=20
 _Check_return_
-_IRQL_requires_max_(DISPATCH_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 NTSTATUS
 FrontendD3ToD0(
     _Inout_ PXENVBD_FRONTEND    Frontend
@@ -1679,6 +1679,8 @@ FrontendD3ToD0(
     KIRQL                       Irql;
     NTSTATUS                    status;
=20
+    GranterD3ToD0(Frontend->Granter);
+
     KeAcquireSpinLock(&Frontend->StateLock, &Irql);
=20
     AdapterGetStoreInterface(Adapter, &Frontend->StoreInterface);
@@ -1746,10 +1748,13 @@ fail1:
                   sizeof(XENBUS_STORE_INTERFACE));
=20
     KeReleaseSpinLock(&Frontend->StateLock, Irql);
+
+    GranterD0ToD3(Frontend->Granter);
+
     return status;
 }
=20
-_IRQL_requires_max_(DISPATCH_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 VOID
 FrontendD0ToD3(
     _Inout_ PXENVBD_FRONTEND    Frontend
@@ -1787,6 +1792,8 @@ FrontendD0ToD3(
                   sizeof(XENBUS_STORE_INTERFACE));
=20
     KeReleaseSpinLock(&Frontend->StateLock, Irql);
+
+    GranterD0ToD3(Frontend->Granter);
 }
=20
 _Check_return_
diff --git a/src/xenvbd/frontend=2Eh b/src/xenvbd/frontend=2Eh
index 8b0ad8c=2E=2E3b43950 100644
--- a/src/xenvbd/frontend=2Eh
+++ b/src/xenvbd/frontend=2Eh
@@ -116,13 +116,13 @@ FrontendSetDeviceUsage(
     );
=20
 _Check_return_
-_IRQL_requires_max_(DISPATCH_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 extern NTSTATUS
 FrontendD3ToD0(
     _Inout_ PXENVBD_FRONTEND    Frontend
     );
=20
-_IRQL_requires_max_(DISPATCH_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
 extern VOID
 FrontendD0ToD3(
     _Inout_ PXENVBD_FRONTEND    Frontend
diff --git a/src/xenvbd/granter=2Ec b/src/xenvbd/granter=2Ec
index 6adc578=2E=2E7b7a7c8 100644
--- a/src/xenvbd/granter=2Ec
+++ b/src/xenvbd/granter=2Ec
@@ -111,14 +111,7 @@ GranterDestroy(
     )
 {
     BUG_ON(Granter->Current !=3D 0);
-
-    if (Granter->Cache !=3D NULL) {
-        KIRQL   Irql;
-
-        KeRaiseIrql(DISPATCH_LEVEL, &Irql);
-        __GranterDestroyCache(Granter);
-        KeLowerIrql(Irql);
-    }
+    ASSERT3P(Granter->Cache, =3D=3D, NULL);
=20
     Granter->Frontend =3D NULL;
     RtlZeroMemory(&Granter->Lock, sizeof(KSPIN_LOCK));
@@ -367,6 +360,38 @@ GranterDisconnect(
     __GranterDestroyCache(Granter);
 }
=20
+_IRQL_requires_(PASSIVE_LEVEL)
+VOID
+GranterD3ToD0(
+    _Inout_ PXENVBD_GRANTER Granter
+    )
+{
+    ASSERT3P(Granter->Cache, =3D=3D, NULL);
+    ASSERT3S(Granter->Current, =3D=3D, 0);
+}
+
+_IRQL_requires_(PASSIVE_LEVEL)
+VOID
+GranterD0ToD3(
+    _Inout_ PXENVBD_GRANTER Granter
+    )
+{
+    KIRQL                   Irql;
+
+    ASSERT(!Granter->Connected);
+
+    // All grants must be revoked before transitioning to S3=2E
+
+    BUG_ON(Granter->Current !=3D 0);
+
+    if (Granter->Cache =3D=3D NULL)
+        return;
+
+    KeRaiseIrql(DISPATCH_LEVEL, &Irql);
+    __GranterDestroyCache(Granter);
+    KeLowerIrql(Irql);
+}
+
 NTSTATUS
 GranterGet(
     _Inout_ PXENVBD_GRANTER Granter,
diff --git a/src/xenvbd/granter=2Eh b/src/xenvbd/granter=2Eh
index e609a8a=2E=2E93b962c 100644
--- a/src/xenvbd/granter=2Eh
+++ b/src/xenvbd/granter=2Eh
@@ -50,6 +50,18 @@ GranterDestroy(
     _Inout_ PXENVBD_GRANTER Granter
     );
=20
+_IRQL_requires_(PASSIVE_LEVEL)
+extern VOID
+GranterD3ToD0(
+    _Inout_ PXENVBD_GRANTER Granter
+    );
+
+_IRQL_requires_(PASSIVE_LEVEL)
+extern VOID
+GranterD0ToD3(
+    _Inout_ PXENVBD_GRANTER Granter
+    );
+
 extern NTSTATUS
 GranterConnect(
     _Inout_ PXENVBD_GRANTER Granter
--=20
2=2E56=2E0=2Ewindows=2E4



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.2b3.b847034e3cad156c.1a183859ddb.8efbae46055f63a3=---


From win-pv-devel-bounces@lists.xenproject.org Wed Oct 28 17:19:02 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 28 Oct 2026 17:19:02 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1463514.1674398 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xM7Ij-00056i-Uz; Wed, 28 Oct 2026 17:19:01 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1463514.1674398; Wed, 28 Oct 2026 17:19:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xM7Ij-00055L-Hy; Wed, 28 Oct 2026 17:19:01 +0000
Received: by outflank-mailman (input) for mailman id 1463514;
 Wed, 28 Oct 2026 17:18:59 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a18385a13a000f79f@swg.vates.tech>)
 id 1xM7Ih-0004xV-K4
 for win-pv-devel@lists.xenproject.org; Wed, 28 Oct 2026 17:18:59 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xM7Ih-003675-0x
 for win-pv-devel@lists.xenproject.org; Wed, 28 Oct 2026 18:18:59 +0100
Received: from [10.42.69.12] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a18385a13a000f79f@swg.vates.tech>)
 id 6ae22e82-2eae-0a2a0a5409dd-0a2a450c97d2-2
 for <win-pv-devel@lists.xenproject.org>; Wed, 28 Oct 2026 18:18:59 +0100
Received: from [185.255.28.35] (helo=prod-mta-13-02.swg-srv.net)
 by tlsNG-d25034.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from
 <prod-mta-13.8631fc262581453bbf619ec5b2062170.1a18385a13a000f79f@swg.vates.tech>)
 id 6ae22e82-f479-0a2a450c0019-b9ff1c2387c5-3
 for <win-pv-devel@lists.xenproject.org>; Wed, 28 Oct 2026 18:18:58 +0100
Received: from mail2.vates.fr ([37.26.189.201] mail2.vates.fr)
 (Authenticated sender:
 8631fc262581453bbf619ec5b2062170/smtp/7773de5a-2839-4720-82ee-e06722ae1d3e)
 by prod-mta-13-02.swg-srv.net (ZoneMTA - prod-mta-13) with ESMTPSA id
 1a18385a13a000f79f.001 for <win-pv-devel@lists.xenproject.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Wed, 28 Oct 2026 17:18:55 +0000
Received: from localhost.localdomain (142.220.66.37.rev.sfr.net
 [37.66.220.142]) (Authenticated sender: ngoc-tu.dinh@vates.tech)
 by mail2.vates.fr (Postfix) with ESMTPSA id C379182BD5;
 Wed, 28 Oct 2026 18:18:54 +0100 (CET)
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech;
 q=dns/txt; s=selector1; bh=D2MJu/qieuwdjOxNdZLq1YH/RKAT8AKnsgjqfdtNcCs=;
 h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to:references:feedback-id;
 b=tX4/rpeWwM+7TtpJ8Pp9hIyz0zJdH4y8i3zRHOGnP0u3lVPJBFQ4EjbIpgw1D1c5vvnrrs6sq
 d3NJRRZxVOiyYN8kS1ga0BX5RVffDc2fHaUkTZ26f6myKcDOqh3u2vXtxieUG+UctI7zlYlg1xD
 zbHkhQ8ReqS0azpdjlCXcgHhwknT3KH0fF1tFzhnDjvs6c5OpCc0Df6QnX/RBNunYwE8AR8PisZ
 6CVQRvZjTZIhjqP5ivcFzmwCYVB5OqKlfBr6SVGMOc5V6m7gS9e1pMMtuGPntENDoEYPFPt91wF
 O17y5lb9LOGn4oDOY6n91ZVzzIki4xU0eZs/qyPhG/nw==
X-Zone-Loop: 6ce5765d36450d82f2c1fd4018a7d305ea82d979b73b
x-campaign-type: default
x-transaction-id: 137ed98e-5313-4075-a905-693a606e90a4
x-swg-uid: 01-c094a3f6-79f4-43f2-abbd-67cc09f511c8
X-Mailer: Sweego
Message-ID:
 <1793207935.8631fc262581453bbf619ec5b2062170.1a18385a13a000f79f@vates.tech>
x-swg-bid: 1793207935.8631fc262581453bbf619ec5b2062170.1a18385a13a000f79f
Feedback-ID: default:8631fc262581453bbf619ec5b2062170:Sweego
x-campaign-id: default
x-client-id: 8631fc262581453bbf619ec5b2062170
X-Originating-IP: [37.26.189.201]
From: Tu Dinh <ngoc-tu.dinh@vates.tech>
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh <ngoc-tu.dinh@vates.tech>
Subject: [PATCH v2 09/10] ring: Defer destruction until backend grant release
Date: Wed, 28 Oct 2026 18:18:39 +0100
In-Reply-To: <20261028171840.4940-1-ngoc-tu.dinh@vates.tech>
References: <1793207793.8631fc262581453bbf619ec5b2062170.1a1838377bc000f79f@vates.tech>
 <20261028171840.4940-1-ngoc-tu.dinh@vates.tech>
MIME-Version: 1.0
X-BM-Disclaimer: Yes
Content-Type: multipart/alternative; boundary="-=Part.2b5.d20e2921c4ae6690.1a183859f8d.385f634e2a4d1e0f=-"
X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2
X-Bm-Transport-Timestamp: 1793207934862
X-purgate-ID: tlsNG-d25034/1793207938-024DFA5B-A59EB8C6/0/0
X-purgate-type: clean
X-purgate-size: 17755

---=Part.2b5.d20e2921c4ae6690.1a183859f8d.385f634e2a4d1e0f=-
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

If the backend is still accessing the ring page grants, we must defer
ring destruction until the backend has fully released them=2E

Implement a reclaim thread that polls for grant revocation=2E If grant
revocation ever fails, the reclaim thread will take care of polling for
grant release=2E Wait for a reclaim when transitioning to D3=2E

The reclaim thread lives from RingCreate to RingDestroy, not just while
in D0=2E This is because exiting a thread can cause a page fault that
reads kernel code from the boot disk=2E In D0->D3, the boot disk is
already disconnected at that point, so the read never completes and
shutdown hangs=2E (Note that RingDestroy is not called during shutdown)

We must use a while loop in RingD0ToD3=2E Otherwise, this sequence can
occur:
* The reclaim thread wakes and finds nothing deferred on queue 0=2E
* D0->D3 disconnects queue 0=2E The backend still maps a ring page, so the
  driver defers the pages=2E
* RingD0ToD3 sees queue 0 deferring=2E It clears ReclaimEvent and waits=2E
* The reclaim thread finishes its pass and sets ReclaimEvent=2E Its
  result is old: it checked queue 0 before the deferral=2E
* RingD0ToD3 returns=2E The backend still holds queue 0's grants=2E

Assisted-by: LLM
Signed-off-by: Tu Dinh <ngoc-tu=2Edinh@vates=2Etech>
---
 src/xenvbd/ring=2Ec | 343 +++++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 308 insertions(+), 35 deletions(-)

diff --git a/src/xenvbd/ring=2Ec b/src/xenvbd/ring=2Ec
index 341ce52=2E=2E0cb8e5a 100644
--- a/src/xenvbd/ring=2Ec
+++ b/src/xenvbd/ring=2Ec
@@ -57,6 +57,14 @@
 #define XENVBD_MAX_RING_PAGE_ORDER  (4)
 #define XENVBD_MAX_RING_PAGES       (1 << XENVBD_MAX_RING_PAGE_ORDER)
=20
+// Separate struct to be transferred to ReclaimThread on ring page reclai=
m=2E
+typedef struct _XENVBD_BLKIF_PAGES {
+    LIST_ENTRY                      ListEntry;
+    PMDL                            Mdl;
+    ULONG                           Count;
+    PXENBUS_GNTTAB_ENTRY            Grants[XENVBD_MAX_RING_PAGES];
+} XENVBD_BLKIF_PAGES, *PXENVBD_BLKIF_PAGES;
+
 typedef struct _XENVBD_BLKIF_RING {
     PXENVBD_RING                    Ring;
     ULONG                           Index;
@@ -64,10 +72,9 @@ typedef struct _XENVBD_BLKIF_RING {
     PXENBUS_CACHE                   RequestCache;
     PXENBUS_CACHE                   SegmentCache;
     PXENBUS_CACHE                   IndirectCache;
-    PMDL                            Mdl;
+    PXENVBD_BLKIF_PAGES             Pages;
     blkif_sring_t                   *Shared;
     blkif_front_ring_t              Front;
-    PXENBUS_GNTTAB_ENTRY            Grants[XENVBD_MAX_RING_PAGES];
     PXENBUS_EVTCHN_CHANNEL          Channel;
     KDPC                            Dpc;
     ULONG                           Dpcs;
@@ -84,6 +91,8 @@ typedef struct _XENVBD_BLKIF_RING {
     LIST_ENTRY                      PreparedQueue;
     LIST_ENTRY                      SubmittedList;
     LIST_ENTRY                      ShutdownQueue;
+    // List of XENVBD_BLKIF_PAGES still being held by the backend
+    LIST_ENTRY                      DeferredPages;
     ULONG                           SrbsQueued;
     ULONG                           SrbsCompleted;
     ULONG                           SrbsFailed;
@@ -119,6 +128,8 @@ struct _XENVBD_RING {
     PXENBUS_DEBUG_CALLBACK          DebugCallback;
     ULONG                           Order;
     PXENVBD_BLKIF_RING              *Ring;
+    PXENVBD_THREAD                  ReclaimThread;
+    KEVENT                          ReclaimEvent;
     LONG                            Stats[XENVBD_STAT__MAX];
 };
=20
@@ -1754,6 +1765,236 @@ RingWatchdog(
     return STATUS_SUCCESS;
 }
=20
+static PXENVBD_BLKIF_PAGES
+BlkifRingAllocatePages(
+    _In_ ULONG          Count
+    )
+{
+    PXENVBD_BLKIF_PAGES Pages;
+
+    ASSERT3U(Count, <=3D, XENVBD_MAX_RING_PAGES);
+
+    Pages =3D __RingAllocate(sizeof(XENVBD_BLKIF_PAGES));
+    if (Pages =3D=3D NULL)
+        goto fail1;
+
+    Pages->Mdl =3D __AllocatePages(Count, FALSE);
+    if (Pages->Mdl =3D=3D NULL)
+        goto fail2;
+
+    Pages->Count =3D Count;
+
+    return Pages;
+
+fail2:
+    __RingFree(Pages);
+
+fail1:
+    return NULL;
+}
+
+static VOID
+__BlkifRingFreePages(
+    _In_ PXENVBD_BLKIF_PAGES    Pages
+    )
+{
+    ULONG                       Index;
+
+    for (Index =3D 0; Index < Pages->Count; ++Index)
+        ASSERT3P(Pages->Grants[Index], =3D=3D, NULL);
+
+    __FreePages(Pages->Mdl);
+    Pages->Mdl =3D NULL;
+    Pages->Count =3D 0;
+
+    RtlZeroMemory(&Pages->ListEntry, sizeof(LIST_ENTRY));
+
+    ASSERT(IsZeroMemory(Pages, sizeof(XENVBD_BLKIF_PAGES)));
+    __RingFree(Pages);
+}
+
+_Check_return_
+static BOOLEAN
+__BlkifRingRevokePages(
+    _In_ PXENVBD_BLKIF_RING     BlkifRing,
+    _Inout_ PXENVBD_BLKIF_PAGES Pages
+    )
+{
+    PXENVBD_RING                Ring =3D BlkifRing->Ring;
+    PXENVBD_GRANTER             Granter =3D FrontendGetGranter(Ring->Fron=
tend);
+    ULONG                       Index;
+
+    for (Index =3D 0; Index < Pages->Count; ++Index) {
+        if (Pages->Grants[Index] =3D=3D NULL)
+            continue;
+
+        if (!NT_SUCCESS(GranterTryPut(Granter, Pages->Grants[Index])))
+            return FALSE;
+
+        Pages->Grants[Index] =3D NULL;
+    }
+
+    return TRUE;
+}
+
+_IRQL_requires_(DISPATCH_LEVEL)
+static VOID
+BlkifRingReleasePages(
+    _Inout_ PXENVBD_BLKIF_RING  BlkifRing
+    )
+{
+    PXENVBD_RING                Ring =3D BlkifRing->Ring;
+    PXENVBD_BLKIF_PAGES         Pages =3D BlkifRing->Pages;
+
+    BlkifRing->Shared =3D NULL;
+    BlkifRing->Pages =3D NULL;
+
+    if (__BlkifRingRevokePages(BlkifRing, Pages)) {
+        __BlkifRingFreePages(Pages);
+        return;
+    }
+
+    Warning("Target[%u][%u] : deferring ring pages\n",
+            FrontendGetTargetId(Ring->Frontend),
+            BlkifRing->Index);
+
+    __BlkifRingAcquireLock(BlkifRing);
+    InsertTailList(&BlkifRing->DeferredPages, &Pages->ListEntry);
+    __BlkifRingReleaseLock(BlkifRing);
+
+    ThreadWake(Ring->ReclaimThread);
+}
+
+static FORCEINLINE BOOLEAN
+__BlkifRingIsDeferring(
+    _In_ PXENVBD_BLKIF_RING BlkifRing
+    )
+{
+    return !IsListEmpty(&BlkifRing->DeferredPages);
+}
+
+_IRQL_requires_(DISPATCH_LEVEL)
+static VOID
+BlkifRingReclaim(
+    _Inout_ PXENVBD_BLKIF_RING  BlkifRing
+    )
+{
+#if DBG
+    ASSERT3P(BlkifRing->LockThread, =3D=3D, KeGetCurrentThread());
+#endif
+
+    while (!IsListEmpty(&BlkifRing->DeferredPages)) {
+        PLIST_ENTRY         ListEntry;
+        PXENVBD_BLKIF_PAGES Pages;
+
+        ListEntry =3D RemoveHeadList(&BlkifRing->DeferredPages);
+        Pages =3D CONTAINING_RECORD(ListEntry, XENVBD_BLKIF_PAGES, ListEn=
try);
+
+        if (!__BlkifRingRevokePages(BlkifRing, Pages)) {
+            // Move this reclaim failure to the back so that entries behi=
nd it
+            // are tried first on the next pass=2E
+            InsertTailList(&BlkifRing->DeferredPages, ListEntry);
+            break;
+        }
+
+        __BlkifRingFreePages(Pages);
+    }
+}
+
+#define XENVBD_RECLAIM_PERIOD           TIME_MS(1000)
+
+static NTSTATUS
+RingReclaim(
+    _In_ PXENVBD_THREAD Self,
+    _In_ PVOID          Context
+    )
+{
+    PXENVBD_RING        Ring =3D Context;
+    LARGE_INTEGER       Timeout;
+    BOOLEAN             Deferring;
+
+    Trace("=3D=3D=3D=3D>\n");
+
+    Timeout=2EQuadPart =3D TIME_RELATIVE(XENVBD_RECLAIM_PERIOD);
+    Deferring =3D FALSE;
+
+    for (;;) {
+        PKEVENT Event;
+        ULONG   Index;
+        KIRQL   Irql;
+
+        Event =3D ThreadGetEvent(Self);
+
+        (VOID) KeWaitForSingleObject(Event,
+                                     Executive,
+                                     KernelMode,
+                                     FALSE,
+                                     Deferring ? &Timeout : NULL);
+        KeClearEvent(Event);
+
+        if (ThreadIsAlerted(Self))
+            break;
+
+        Deferring =3D FALSE;
+
+        KeRaiseIrql(DISPATCH_LEVEL, &Irql);
+
+        for (Index =3D 0; Index < FrontendGetMaxQueues(Ring->Frontend); +=
+Index) {
+            PXENVBD_BLKIF_RING  BlkifRing =3D Ring->Ring[Index];
+
+            __BlkifRingAcquireLock(BlkifRing);
+
+            BlkifRingReclaim(BlkifRing);
+
+            if (__BlkifRingIsDeferring(BlkifRing))
+                Deferring =3D TRUE;
+
+            __BlkifRingReleaseLock(BlkifRing);
+        }
+
+        KeLowerIrql(Irql);
+
+        if (!Deferring)
+            KeSetEvent(&Ring->ReclaimEvent, IO_NO_INCREMENT, FALSE);
+    }
+
+    KeSetEvent(&Ring->ReclaimEvent, IO_NO_INCREMENT, FALSE);
+
+    Trace("<=3D=3D=3D=3D\n");
+
+    return STATUS_SUCCESS;
+}
+
+_IRQL_requires_(PASSIVE_LEVEL)
+static BOOLEAN
+RingIsDeferring(
+    _In_ PXENVBD_RING   Ring
+    )
+{
+    ULONG               Index;
+    KIRQL               Irql;
+    BOOLEAN             Deferring;
+
+    Deferring =3D FALSE;
+
+    KeRaiseIrql(DISPATCH_LEVEL, &Irql);
+
+    for (Index =3D 0; Index < FrontendGetMaxQueues(Ring->Frontend); ++Ind=
ex) {
+        PXENVBD_BLKIF_RING  BlkifRing =3D Ring->Ring[Index];
+
+        __BlkifRingAcquireLock(BlkifRing);
+
+        if (__BlkifRingIsDeferring(BlkifRing))
+            Deferring =3D TRUE;
+
+        __BlkifRingReleaseLock(BlkifRing);
+    }
+
+    KeLowerIrql(Irql);
+
+    return Deferring;
+}
+
 static FORCEINLINE NTSTATUS
 BlkifRingCacheCreate(
     _Inout_ PXENVBD_BLKIF_RING  BlkifRing
@@ -1940,6 +2181,7 @@ BlkifRingCreate(
     InitializeListHead(&(*BlkifRing)->ShutdownQueue);
     InitializeListHead(&(*BlkifRing)->SubmittedList);
     InitializeListHead(&(*BlkifRing)->PreparedQueue);
+    InitializeListHead(&(*BlkifRing)->DeferredPages);
=20
     KeInitializeThreadedDpc(&(*BlkifRing)->Dpc, BlkifRingDpc, *BlkifRing)=
;
=20
@@ -1956,6 +2198,7 @@ fail4:
=20
     RtlZeroMemory(&(*BlkifRing)->Dpc, sizeof(KDPC));
=20
+    RtlZeroMemory(&(*BlkifRing)->DeferredPages, sizeof(LIST_ENTRY));
     RtlZeroMemory(&(*BlkifRing)->PreparedQueue, sizeof(LIST_ENTRY));
     RtlZeroMemory(&(*BlkifRing)->SubmittedList, sizeof(LIST_ENTRY));
     RtlZeroMemory(&(*BlkifRing)->ShutdownQueue, sizeof(LIST_ENTRY));
@@ -1988,8 +2231,12 @@ BlkifRingDestroy(
     ThreadJoin(BlkifRing->WatchdogThread);
     BlkifRing->WatchdogThread =3D NULL;
=20
+    BUG_ON(__BlkifRingIsDeferring(BlkifRing));
+
     RtlZeroMemory(&BlkifRing->Dpc, sizeof(KDPC));
=20
+    RtlZeroMemory(&BlkifRing->DeferredPages, sizeof(LIST_ENTRY));
+
     ASSERT(IsListEmpty(&BlkifRing->PreparedQueue));
     RtlZeroMemory(&BlkifRing->PreparedQueue, sizeof(LIST_ENTRY));
=20
@@ -2045,13 +2292,13 @@ BlkifRingConnect(
     if (!NT_SUCCESS(status))
         goto fail1;
=20
-    BlkifRing->Mdl =3D __AllocatePages(1 << Ring->Order, FALSE);
+    BlkifRing->Pages =3D BlkifRingAllocatePages(1ul << Ring->Order);
=20
     status =3D STATUS_NO_MEMORY;
-    if (BlkifRing->Mdl =3D=3D NULL)
+    if (BlkifRing->Pages =3D=3D NULL)
         goto fail2;
=20
-    BlkifRing->Shared =3D MmGetSystemAddressForMdlSafe(BlkifRing->Mdl,
+    BlkifRing->Shared =3D MmGetSystemAddressForMdlSafe(BlkifRing->Pages->=
Mdl,
                                                      NormalPagePriority);
     ASSERT(BlkifRing->Shared !=3D NULL);
=20
@@ -2062,11 +2309,11 @@ BlkifRingConnect(
     FRONT_RING_INIT(&BlkifRing->Front, BlkifRing->Shared, PAGE_SIZE << Ri=
ng->Order);
 #pragma warning(pop)
=20
-    for (Index =3D 0; Index < (1ul << Ring->Order); ++Index) {
+    for (Index =3D 0; Index < BlkifRing->Pages->Count; ++Index) {
         status =3D GranterGet(Granter,
-                            MmGetMdlPfnArray(BlkifRing->Mdl)[Index],
+                            MmGetMdlPfnArray(BlkifRing->Pages->Mdl)[Index=
],
                             FALSE,
-                            &BlkifRing->Grants[Index]);
+                            &BlkifRing->Pages->Grants[Index]);
         if (!NT_SUCCESS(status))
             goto fail3;
     }
@@ -2121,19 +2368,9 @@ fail4:
     Error("fail4\n");
 fail3:
     Error("fail3\n");
-    for (Index =3D 0; Index < (1ul << Ring->Order); ++Index) {
-        if (BlkifRing->Grants[Index] =3D=3D NULL)
-            continue;
-
-        GranterPut(Granter, BlkifRing->Grants[Index]);
-        BlkifRing->Grants[Index] =3D NULL;
-    }
-
     RtlZeroMemory(&BlkifRing->Front, sizeof(blkif_front_ring_t));
=20
-    __FreePages(BlkifRing->Mdl);
-    BlkifRing->Shared =3D NULL;
-    BlkifRing->Mdl =3D NULL;
+    BlkifRingReleasePages(BlkifRing);
 fail2:
     Error("fail2\n");
     BlkifRingCacheDestroy(BlkifRing);
@@ -2177,13 +2414,13 @@ BlkifRingStoreWrite(
                               Path,
                               "ring-ref",
                               "%u",
-                              GranterReference(Granter, BlkifRing->Grants=
[0]));
+                              GranterReference(Granter, BlkifRing->Pages-=
>Grants[0]));
         if (!NT_SUCCESS(status))
             goto fail2;
     } else {
         ULONG           Index;
=20
-        for (Index =3D 0; Index < (1ul << Ring->Order); ++Index) {
+        for (Index =3D 0; Index < BlkifRing->Pages->Count; ++Index) {
             CHAR        Name[MAX_NAME_LEN + 1];
=20
             status =3D RtlStringCchPrintfA(Name,
@@ -2199,7 +2436,7 @@ BlkifRingStoreWrite(
                                   Path,
                                   Name,
                                   "%u",
-                                  GranterReference(Granter, BlkifRing->Gr=
ants[Index]));
+                                  GranterReference(Granter, BlkifRing->Pa=
ges->Grants[Index]));
             if (!NT_SUCCESS(status))
                 goto fail4;
         }
@@ -2331,8 +2568,6 @@ BlkifRingDisconnect(
     )
 {
     PXENVBD_RING                Ring =3D BlkifRing->Ring;
-    PXENVBD_GRANTER             Granter =3D FrontendGetGranter(Ring->Fron=
tend);
-    ULONG                       Index;
=20
     Trace("=3D=3D=3D=3D> %u\n", BlkifRing->Index);
     ASSERT(BlkifRing->Connected);
@@ -2347,19 +2582,15 @@ BlkifRingDisconnect(
                   BlkifRing->Channel);
     BlkifRing->Channel =3D NULL;
=20
-    for (Index =3D 0; Index < (1ul << Ring->Order); ++Index) {
-        if (BlkifRing->Grants[Index] =3D=3D NULL)
-            continue;
-
-        GranterPut(Granter, BlkifRing->Grants[Index]);
-        BlkifRing->Grants[Index] =3D NULL;
-    }
+    // Normally the backend has closed by now, so ring pages left over fr=
om
+    // earlier connections should be revocable
+    __BlkifRingAcquireLock(BlkifRing);
+    BlkifRingReclaim(BlkifRing);
+    __BlkifRingReleaseLock(BlkifRing);
=20
     RtlZeroMemory(&BlkifRing->Front, sizeof(blkif_front_ring_t));
=20
-    __FreePages(BlkifRing->Mdl);
-    BlkifRing->Shared =3D NULL;
-    BlkifRing->Mdl =3D NULL;
+    BlkifRingReleasePages(BlkifRing);
=20
     BlkifRingCacheDestroy(BlkifRing);
=20
@@ -2514,8 +2745,21 @@ RingCreate(
         Index++;
     }
=20
+    KeInitializeEvent(&(*Ring)->ReclaimEvent, NotificationEvent, FALSE);
+
+    status =3D ThreadCreate(RingReclaim,
+                          *Ring,
+                          &(*Ring)->ReclaimThread);
+    if (!NT_SUCCESS(status))
+        goto fail4;
+
     return STATUS_SUCCESS;
=20
+fail4:
+    Error("fail4\n");
+
+    RtlZeroMemory(&(*Ring)->ReclaimEvent, sizeof(KEVENT));
+
 fail3:
     Error("fail3\n");
=20
@@ -2561,6 +2805,12 @@ RingDestroy(
 {
     LONG                    Index;
=20
+    ThreadAlert(Ring->ReclaimThread);
+    ThreadJoin(Ring->ReclaimThread);
+    Ring->ReclaimThread =3D NULL;
+
+    RtlZeroMemory(&Ring->ReclaimEvent, sizeof(KEVENT));
+
     Index =3D (LONG) FrontendGetMaxQueues(Ring->Frontend);
     ASSERT3U(Index, !=3D, 0);
=20
@@ -2615,9 +2865,32 @@ RingD0ToD3(
     _Inout_ PXENVBD_RING    Ring
     )
 {
-    UNREFERENCED_PARAMETER(Ring);
+    ULONG                   Index;
=20
     ASSERT3U(KeGetCurrentIrql(), =3D=3D, PASSIVE_LEVEL);
+
+    // Grants are only handed over to the reclaim thread at disconnect, s=
o a
+    // ring still connected here would never be drained
+    for (Index =3D 0; Index < FrontendGetMaxQueues(Ring->Frontend); ++Ind=
ex)
+        ASSERT(!Ring->Ring[Index]->Connected);
+
+    // Only return once the backend has released everything, so that no g=
rant
+    // survives into D3=2E Freeing pages that backends may still access i=
s worse
+    // than holding up D0->D3=2E
+    while (RingIsDeferring(Ring)) {
+        Trace("waiting for reclaim thread=2E=2E=2E\n");
+
+        KeClearEvent(&Ring->ReclaimEvent);
+        ThreadWake(Ring->ReclaimThread);
+
+        (VOID) KeWaitForSingleObject(&Ring->ReclaimEvent,
+                                     Executive,
+                                     KernelMode,
+                                     FALSE,
+                                     NULL);
+
+        Trace("done\n");
+    }
 }
=20
 NTSTATUS
--=20
2=2E56=2E0=2Ewindows=2E4



-- 
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates =
solutions

web: https://vates=2Etech
---=Part.2b5.d20e2921c4ae6690.1a183859f8d.385f634e2a4d1e0f=---


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 29 09:37:45 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 29 Oct 2026 09:37:45 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1464308.1674996 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xMMZt-0000vk-2p; Thu, 29 Oct 2026 09:37:45 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1464308.1674996; Thu, 29 Oct 2026 09:37:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xMMZs-0000vd-W9; Thu, 29 Oct 2026 09:37:44 +0000
Received: by outflank-mailman (input) for mailman id 1464308;
 Thu, 29 Oct 2026 09:37:43 +0000
Received: from mx.expurgate.net ([195.190.135.20])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <owen.smith@citrix.com>) id 1xMMZr-0000vX-93
 for win-pv-devel@lists.xenproject.org; Thu, 29 Oct 2026 09:37:43 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xMMZq-00AQfR-Ls
 for win-pv-devel@lists.xenproject.org; Thu, 29 Oct 2026 10:37:42 +0100
Received: from [10.42.69.7] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ae313e1-e002-0a2a0a5209dd-0a2a4507c46e-20
 for <win-pv-devel@lists.xenproject.org>; Thu, 29 Oct 2026 10:37:42 +0100
Received: from [52.101.85.61]
 (helo=BYAPR05CU005.outbound.protection.outlook.com)
 by tlsNG-ef75cf.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ae313e4-b4ea-0a2a45070019-3465553d6cff-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 29 Oct 2026 10:37:42 +0100
Received: from SA6PR03MB7760.namprd03.prod.outlook.com (2603:10b6:806:43c::5)
 by BN9PR03MB6027.namprd03.prod.outlook.com (2603:10b6:408:118::7)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.569.8; Thu, 29 Oct
 2026 09:35:56 +0000
Received: from SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38]) by SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38%5]) with mapi id 15.21.0546.021; Thu, 29 Oct 2026
 09:35:56 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:x-ms-exchange-senderadcheck"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
 b=mVzSaajpN+Z4g1gdswjQzLsYFZ3BeBULvygbi/2UOYi2pVlUXR+Bwkh1OQ5aiXW7uav8lmB1h4CXlZnFvqpV4M50evXjsmvCa7OF7BYnASyQ2VYgyC02M/LA/AjnBiObS9fXZ4RJhw+o1/2gNwCByOIOiQcNndoQOiefHD17yldevxCzjp1NuxUvfLROtE/Y4j3s6jP8De3JcIWE3vi9Ob7/bNvYgNw4WLM8i0dvkNvAZcSRStX2x9R1pgM4V1LehLnuHLiVaE8MNGgHbDAaVgKH1xSAE/gcqKsYfX1wJ3mXBd+tcpraieqFJEMPJCoa6zfzIua+YRlaAR0BvgGOww==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector10001;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=I/SH19x/kCbkH0O+2Lso8BGFbBxn61yzjbhjGA0FQIo=;
 b=QeRXdvjoPXKKMdPyErBn+F6/XHBu4TzTPBKbcWix2QMh9kGsOeBe4w9zC2kokgUHEPLsQ5YYAsZaRdLIHiiegRhqe152HRuYNSwnISwxqa4EhI76UjT8w17taDsYUbkhJkAJbsTcoRtMav2aU0e8k3eyIxu/VM8KY4HboOpLBEQByxrvc0tsrGrlhkqBe1+KbNDNgdFceoQhQcaxFCSlPQHy3U6l4z1fRmvd3rKgdO0bG5akhyFmnU/lJSIK4fGnepmbJqgeIQxBYUIPurCKRRgu9kJlDzZPr3hgNyASy9PijsJvWN8sAeMCG6AXkqs9l4jKImrlpop0pgMmBtyY8w==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=I/SH19x/kCbkH0O+2Lso8BGFbBxn61yzjbhjGA0FQIo=;
 b=a3bYodc7+N0zOSiKiRfZK0rXTi9OAB9aTDYJODm68yiYNPKmVju+V2V5AKNI+7i2EOsJTm3lWoKg2/ykSE1EvlYdReiZhGeSgERBdt7Joo4iPIN9a86PM/FSy3+IyrHtoQoUS5j6iADhew0oi3+cOSz0rPM3W+2VWLYz7sUPt0Y=
From: Owen Smith <owen.smith@citrix.com>
To: Tu Dinh <ngoc-tu.dinh@vates.tech>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Subject: Re: [PATCH] thread: Wait for the thread if ObReferenceObjectByHandle
 fails
Thread-Topic: [PATCH] thread: Wait for the thread if ObReferenceObjectByHandle
 fails
Thread-Index: AQHdZU6HRDeywTDe6ki8PAPuk5dHz7cURwQp
Date: Thu, 29 Oct 2026 09:35:56 +0000
Message-ID:
 <SA6PR03MB77609C90126492488316EAB3FE6E2@SA6PR03MB7760.namprd03.prod.outlook.com>
References:
 <1793021568.8631fc262581453bbf619ec5b2062170.1a17869e686000f79f@vates.tech>
In-Reply-To:
 <1793021568.8631fc262581453bbf619ec5b2062170.1a17869e686000f79f@vates.tech>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
msip_labels:
authentication-results: mx.microsoft.com 1; dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=citrix.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: SA6PR03MB7760:EE_|BN9PR03MB6027:EE_
x-ms-office365-filtering-correlation-id: eb7667a9-d55f-442e-1f35-08df35a00898
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam:
 BCL:0;ARA:13230040|366016|1800799024|23010399003|376014|261028144727099003|38070700021|11063799006|56012099006|261009223027099003|261022115727099003|261022113327099003|261026121527099003|261021121427099003|261026140227099003|261022105027099003|10067099003|22082099003|18002099003;
x-microsoft-antispam-message-info:
 HXcbGZIUbxgiaktp072S8WfKfEttoQeMk2/WHFxREDZjgwWHoTyqikxUULPzMTZ+BX4zGTD6QHrQBp2zQXPGiU/1UTR2jDPxIO9p7hVVXtsn1hOgl56QSMPx00xYze1WB3EKT4jqL7IPmPyaHUg8e6kNZflR/a697P9NZVctqeinwujbuSqFIKMqbY5vkE0j9vPs6bNMzej1LIcU3w9Z4qO5GZU1ZcCFB3JIBOH3xOaYma1hUxFkBkqb8JS6EDaHDn0cfYVEsS/SpnaHRQCjFswIg76VsPt9pG2elydxhpQZqwTIcj/NAehZrcd+kPbrwHtR9TabQxKnMROMZGTdSV6mNiz/173glAqy2rV8odLCORlL5My8bt0O9vFybftZp4qprs/PL2ClArUMKfy+j0aQ/Aesrjqfwf4oIrj+Xz6YtKL0vlG8GdAYrfCLVgXMYGqWoFqt4IIESjlK46E5xrp861GaGBTjq+eMNHx+O0rMDWhpkNkSeXLFsstzQ8M5zKj006wH6C4J5PntlYfBb6G93CQejTmB1GzrLVZ/lDx2eMpbV1GKK78h8RZ4PaT4jwVrVS9InE4K57X4s2XY6ARlSVtAi03j9FWNxgBP+lnvUb7AQGuqrPYaVV3NlbdfZQSKC3cIOZnHLOcMgNCa20pf6BiEcGUAq3X3+BY1aCA=
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SA6PR03MB7760.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(23010399003)(376014)(261028144727099003)(38070700021)(11063799006)(56012099006)(261009223027099003)(261022115727099003)(261022113327099003)(261026121527099003)(261021121427099003)(261026140227099003)(261022105027099003)(10067099003)(22082099003)(18002099003);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?us-ascii?Q?pv63dsMr4Z8WG2quTRMzkX702k4f0WNN8T+GWv0Ywg6kUJMD6w/8ySEjUdwt?=
 =?us-ascii?Q?WcZ6Bm7iZhWXOK2IpotE+zchNJ3kS7p9dQ9hZOyHh4mpG76w4n07oRKLWTUv?=
 =?us-ascii?Q?xFpzyQxZ7/FYBi739fYAWWH/xLVyw7aV7Zp6lDKwB8pJakX6jTEUhsEkVDfX?=
 =?us-ascii?Q?k08I3iEgC+SgRjm8dnu0Jnw1RUbdQLgg/hd4c4ztcsk7A9WwoOon7Jw6d+a2?=
 =?us-ascii?Q?+asr0gbpde7xUCeW2Z0k06XrR3ZnNM/ySbG1sVvD0qfqyQgqy9gXoR+9EmHC?=
 =?us-ascii?Q?2XGD5hFjN0zto8osKe7bPlfzKB052DcrTkzXBBlylXG/db3mlXV+LIrSXF85?=
 =?us-ascii?Q?vx1MK8ng/6xBeDdbLlUGkWl2vhrsfEAuN4BW3lr77iPSPQFMnBdp0x0QFei8?=
 =?us-ascii?Q?PMzBexQeQ9k595dXEy5cmCFscwM1HKZr9MsPQFhYN6BlluSU2YxxArWgllmJ?=
 =?us-ascii?Q?eEnKhBOWIsc4KJuxdcIYJU3cxfbKxpPhbcV/vaq521EA0IDxyTB/GfBE5RIy?=
 =?us-ascii?Q?ML++c9ECwuGiAYnCrhMjojXtJMZfBit8e8OBMRb0Q8bfKDBNN+1fiOP661e1?=
 =?us-ascii?Q?KlR1z7Yi1JRCxwqlcT1HRiqDyTkrXXJfRodZUDuwstu0RlIqBLc3IDgfOW3z?=
 =?us-ascii?Q?htBIbOg45kPgRDA6/w21J4Dzsnwswd46gS/CdWBdLenQTWBx3cZ8Gqg4cgom?=
 =?us-ascii?Q?XXsmMfv5Sttidfa0zbt5n93RkjqFvaucL8S60vQahR+bFOkjCvhXAjkgJUQw?=
 =?us-ascii?Q?IIfbsa2oV6LNV0GPFCRCFAf6nRi9C+/qBBuEaNfN4CFpde7sm9uwpP7+zXoX?=
 =?us-ascii?Q?86yWWr4COtuyikSRA+nFjXDrUr3MfYdKjVnhUlM3w8TgwkN9tUUNfLv9B5XM?=
 =?us-ascii?Q?/wje7xY4u1Wuq4ZEP9MmtpoOPaImsZNTtzcO203Ih2+8WPGCB3UqdyIw6fx7?=
 =?us-ascii?Q?pZE8fa5T+zbK6YhwhkQdZjpnbOPvOQa8B/uKQ6aNZw5lnKnHA6pta4Uvccsh?=
 =?us-ascii?Q?eDC4XEGN9ymnzdbUSEdlYr79+FmuiZkyUmTnKmuTagSBzM+eQILUEvQ/Ecv/?=
 =?us-ascii?Q?D9gyH3uN7ODvpEOGUXkILV+jxsgQTqxhVinLBYnl2SPdVecRDBBrVqHDhd3a?=
 =?us-ascii?Q?fcCA7zGbKMVT6dYcb/r4TzQERPdA4J9ZYcne61af+81PnVXGu7TVTDCaax8V?=
 =?us-ascii?Q?aeS/nd+IjmSZAqgjCDnvCiqpgzhkN149mkXATZoDY+l8mIjqOIc2/geEabCN?=
 =?us-ascii?Q?Yr4kia4xpqhAWDZ73Ov1F82oaUjNkbqrEkYxmKX+NtG5Nkw4qUVS7Qc2ImmS?=
 =?us-ascii?Q?J3vg7euqNOohYkca6Wa4zkYXyDf3ehrPpJr2labMJMIDI9uAvUEKdyh6102L?=
 =?us-ascii?Q?iBclzudInPzfuIgKT5zo7mqmnt6VmyWj2GZ+eJjhn4lQFqQPUAkO5LyHFXas?=
 =?us-ascii?Q?9t5iSO7OB3PaEXVRxrtqeIe2O40ipEQ7v6Gnef0u6sqtQAXGgEdqSIcxOsZx?=
 =?us-ascii?Q?drbTWCPssWlcUf5wKx4+1xkFET5J53b4vEqD3BNeP4Xrp/P2ZSHd48dXKDnG?=
 =?us-ascii?Q?Muq7SN6YNgSjF0OEPugh9dN8r1d+qOD9uIFsAxgvYTTWthJ9C+8KHriItVXo?=
 =?us-ascii?Q?nLDGeClXSIfyt91TzcA+aGjr6bs6stvm4xRvXZnB3XxBrDrlmzOKcW10lOoF?=
 =?us-ascii?Q?GkPntYgxpkpJGQjWeO0cm50Zo4MmhG5O++oC3C7MHMqI1t0+?=
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-OriginatorOrg: citrix.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: SA6PR03MB7760.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: eb7667a9-d55f-442e-1f35-08df35a00898
X-MS-Exchange-CrossTenant-originalarrivaltime: 29 Oct 2026 09:35:56.4590
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: 6HLVCPWZxmg4yICZRGxiFJhUMMlVPvzREBoADd0gHfqwoJItl7ZUMAffss8EXg/encqKdVEGeP+hwF/u8AzGBg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN9PR03MB6027
X-purgate-ID: tlsNG-ef75cf/1793266662-376D2AE4-00E57499/0/0
X-purgate-type: clean
X-purgate-size: 1704

This patch, and the patches fixing this across all drivers
Reviewed-by: Owen Smith <owen.smith@citrix.com>

________________________________________
From: win-pv-devel <win-pv-devel-bounces@lists.xenproject.org> on behalf of=
 Tu Dinh <ngoc-tu.dinh@vates.tech>
Sent: 26 October 2026 1:32 PM
To: win-pv-devel@lists.xenproject.org
Cc: Tu Dinh
Subject: [PATCH] thread: Wait for the thread if ObReferenceObjectByHandle f=
ails

If ObReferenceObjectByHandle fails, the thread would have already
started. We need to wait for it to exit before cleaning up.

Signed-off-by: Tu Dinh <ngoc-tu.dinh@vates.tech>
---
 src/xenbus/thread.c  | 2 ++
 src/xenfilt/thread.c | 2 ++
 2 files changed, 4 insertions(+)

diff --git a/src/xenbus/thread.c b/src/xenbus/thread.c
index a8cfce2..9510307 100644
--- a/src/xenbus/thread.c
+++ b/src/xenbus/thread.c
@@ -30,6 +30,7 @@
  * SUCH DAMAGE.
  */

+#include <ntifs.h>
 #include <ntddk.h>

 #include "thread.h"
@@ -171,6 +172,7 @@ fail3:
     Error("fail3\n");

     __ThreadAlert(*Thread);
+    ZwWaitForSingleObject(Handle, FALSE, NULL);
     ZwClose(Handle);

 fail2:
diff --git a/src/xenfilt/thread.c b/src/xenfilt/thread.c
index e26469b..89f4f91 100644
--- a/src/xenfilt/thread.c
+++ b/src/xenfilt/thread.c
@@ -30,6 +30,7 @@
  * SUCH DAMAGE.
  */

+#include <ntifs.h>
 #include <ntddk.h>

 #include "thread.h"
@@ -171,6 +172,7 @@ fail3:
     Error("fail3\n");

     __ThreadAlert(*Thread);
+    ZwWaitForSingleObject(Handle, FALSE, NULL);
     ZwClose(Handle);

 fail2:
--
2.56.0.windows.4



--
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates solutions

web: https://vates.tech


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 29 10:47:25 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 29 Oct 2026 10:47:25 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1464406.1675076 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xMNfJ-0006hZ-1M; Thu, 29 Oct 2026 10:47:25 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1464406.1675076; Thu, 29 Oct 2026 10:47:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xMNfI-0006hS-V4; Thu, 29 Oct 2026 10:47:24 +0000
Received: by outflank-mailman (input) for mailman id 1464406;
 Thu, 29 Oct 2026 10:47:23 +0000
Received: from mx.expurgate.net ([195.190.135.10])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <owen.smith@citrix.com>) id 1xMNfH-0006hM-HV
 for win-pv-devel@lists.xenproject.org; Thu, 29 Oct 2026 10:47:23 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xMNfG-0063Gm-QC
 for win-pv-devel@lists.xenproject.org; Thu, 29 Oct 2026 11:47:22 +0100
Received: from [10.42.69.6] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ae3243a-e002-0a2a0a5209dd-0a2a4506e256-6
 for <win-pv-devel@lists.xenproject.org>; Thu, 29 Oct 2026 11:47:22 +0100
Received: from [52.101.193.67]
 (helo=CH1PR05CU001.outbound.protection.outlook.com)
 by tlsNG-16d1c6.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ae32437-195a-0a2a45060019-3465c1435b71-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 29 Oct 2026 11:47:20 +0100
Received: from SA6PR03MB7760.namprd03.prod.outlook.com (2603:10b6:806:43c::5)
 by DS7PR03MB5462.namprd03.prod.outlook.com (2603:10b6:5:2d0::18) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.569.8; Thu, 29 Oct
 2026 10:47:16 +0000
Received: from SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38]) by SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38%5]) with mapi id 15.21.0546.021; Thu, 29 Oct 2026
 10:47:16 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:x-ms-exchange-senderadcheck"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
 b=F6tW9LOwOWXcmpOd4Pj7gXefqJvygQg2TwnWHgwwunPi2SPvumII5AQGhXT0I/2akxoXLyrDQcEgIlkYfQmI5BiPwOQUJ6WlDxjOBBe/7yxOFcJVge1iGDKuRb14HA3On18n+WG8peCQOP9w5xRYBfETXmfqloX6ORsf0tmF1obFmfp1fr0peCbFkzJkYJx4qG3u0td17q8+ACnw6Ols8RWXatafYx70FKdyLBUkaTOm/YNppH9/LecZzuSvER4yRoQK1SCKEbdEOjRcuw8xRyT0Ew2YwxYceHMpnWOoSgYeh/or2icaE1YEp6DQ6sPqeGTkKIUrEYmHMb3L8a6MYA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector10001;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=7rWPIwS4EQb0P7cbZK3Kiu3nERBfYHWt2UcH3HVM+GE=;
 b=xz4iMm/lgDoE9KtBWZYAEvqgPmTDQ2YIkBSZCe/Ku/1kD5BLNJNY8dWv3NXAPhGXv7JZABKD90q9oVkskta2ROSZnlx8A1Ppg1Ut3LPOdqhQg+APf8T6Zn1dmdL9jIqZmGoLoTuayvBT7gquUY5w2vHRAkXD26l7vhQDlX6d/2MQU9uNj/PGuIo62hCuhhj46q57xLgwTWL4gSMAfBrG0uC1Fu13fx9SsPESgndTUV1OP7E9iGkAHE+q6LJSf1MDHFW+BSgs1v4L9fXIM6JzZVkK8xb9byTI+zDJZmn68Z2ZQLmLc/ZcVhz71MW16BxuKT9e67n7h2iXg3yIWzqn3g==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=7rWPIwS4EQb0P7cbZK3Kiu3nERBfYHWt2UcH3HVM+GE=;
 b=seYHn6KymoI9oJqe8oi20UenBzMqE4fM5UBANlEbbn5YbLvTk8rYDYJqkbraqbgAcxc5ohcnsHUjpV2jeBBSsjIRTjyEVRc6xdVCP4WgQc59kZuyJ84jBLtwyqsDkayVHdZ/WFjEmXJQqlbx99JjOFNVen8ULOhqtIOa2LKhu5s=
From: Owen Smith <owen.smith@citrix.com>
To: Tu Dinh <ngoc-tu.dinh@vates.tech>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Subject: Re: [PATCH v2 09/10] ring: Defer destruction until backend grant
 release
Thread-Topic: [PATCH v2 09/10] ring: Defer destruction until backend grant
 release
Thread-Index: AQHdZwBzzYNdZAdcMEmg3ENCpURe8bcUUhsU
Date: Thu, 29 Oct 2026 10:47:16 +0000
Message-ID:
 <SA6PR03MB7760EFC5ABEA5BB9BCD7E264FE6E2@SA6PR03MB7760.namprd03.prod.outlook.com>
References:
 <1793207793.8631fc262581453bbf619ec5b2062170.1a1838377bc000f79f@vates.tech>
 <20261028171840.4940-1-ngoc-tu.dinh@vates.tech>
 <1793207935.8631fc262581453bbf619ec5b2062170.1a18385a13a000f79f@vates.tech>
In-Reply-To:
 <1793207935.8631fc262581453bbf619ec5b2062170.1a18385a13a000f79f@vates.tech>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
msip_labels:
authentication-results: mx.microsoft.com 1; dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=citrix.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: SA6PR03MB7760:EE_|DS7PR03MB5462:EE_
x-ms-office365-filtering-correlation-id: fd6a6fe6-ec43-4a6e-c800-08df35a9ffc5
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam:
 BCL:0;ARA:13230040|376014|1800799024|366016|23010399003|18002099003|22082099003|56012099006|11063799006|4143699003|10067099003|261028144727099003|261026140227099003|261021121427099003|261022105027099003|38070700021;
x-microsoft-antispam-message-info:
 8vLqxtrnlWAVaGQJBpZ9x5a4EfnjyqgKRDbrvPismr+h/dug4vB/59sCoyERbHepPKLlS6XnZnElYS7cxQ7n91KowdHgOb9gKP4F0tNJbISwijreqm3DCLMRwW7CXtKTZu5w0skEDDKbuVDZ+hNoFtCjMUY4vIySM24swGc9292tsO/VO2ZRFtmRB8QcUKasBccf4BhQJ+hwCcqaltsrDGVMEKZWyyoIxMV6rh/qwGxCSsC/Fgo+n4ssASp8f9zMadZzbrgn8jxJfagZpYsQntIF3It95YRbd4dCA7aCwN+TGs+rK5V1Em5lW5sllTZfUOHN2YfpvESyI8fOYm2Bs8RaVv90SvhQ0zHl52vU1BftNMtom2zvG9hh8BU0OKA/NcWUYUEsYJ2ReFknhmlACQZvZ2cjV6oZ13xR8uuVKIJFgO9FeiBLn3OlOpPWW3H4aU65cUxMbpwUOr6IrNaUsYHltFopZYn2Ttq+ea3U9eE5Dp9BtGnDs3rUR3jK46xhZikjGUCbQbB7IvLHHXIOlrXCPu8Hge0HfLeN734GxJcPmWP4Dam75DFEv3tMabPMoGbrdgL0EJiYmWf0aA2bYTnb0RpHjOJw7oJ8sB8zI4FYttjcOSl/xm0l+JFQYcbCKYLWCYQlASCYG1tYSryLcGtXRRt5Kj6YsngvMnIb1OuU6E5u64Jbp+lhHmeXfLgJfRoIf0yGVcUetwD21fbYYbuXvzK7FlU4KdCPlsmcboc=
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SA6PR03MB7760.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(23010399003)(18002099003)(22082099003)(56012099006)(11063799006)(4143699003)(10067099003)(261028144727099003)(261026140227099003)(261021121427099003)(261022105027099003)(38070700021);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?iso-8859-1?Q?0P/9ES9umzMrWExG6NzmGtaWBsYhEc9S2SEeZ2MD8BqqeOZEGSq8t69wHi?=
 =?iso-8859-1?Q?2DWVMt8zwUb83UkBvsCDx+WRk/8AKBSgoSSEVLFDU7QzJuN3r0HuQFKf16?=
 =?iso-8859-1?Q?/Ex0LsceFdjHJmF72VmQnbwiQPLgbKM1NVb56VRUiLRi9ZqGGG2xUo8i0L?=
 =?iso-8859-1?Q?1m1nXU3xxoqRcP4jn4L9TPFHktZ2d2zEt9A/SuxOhnummfMDGTU0999ECF?=
 =?iso-8859-1?Q?RrDzJ0aCMwIRyoEHBzOSCv62uRCFdbuXVazmwvrjzcNDLLATBGCtwX4nst?=
 =?iso-8859-1?Q?F5wmlfEu5k7hdujEYdJRrM3xDfgLzY4EQ5zoF8fH3xuOnhih25eUcMjVOU?=
 =?iso-8859-1?Q?KcYxU3qJ90bYt+CSsB6v7hToCdM94/XcAVH/WKxF91CfQxfIIkU5YKf0hV?=
 =?iso-8859-1?Q?+6+xoE29OEiN/LWPMrGa/ACMmc5OIM1ku2Ysm7vGeHvIGoWt4ahEu7dtT3?=
 =?iso-8859-1?Q?kTlfZtN8my+1sWWbDjEdd60pB36pUpDq865qfEy6aB4elDI4qfm/b7TL8t?=
 =?iso-8859-1?Q?h8c4Ve6CVlIaydEOKPThIv21qUyVu3AkWBf+KAc768Q37EmX6TNbeDOT5/?=
 =?iso-8859-1?Q?v8G8xXmYUt8BTiLCLZbfQKeeBshjLJHSU9fSShoYo4dSjCBb/NRumdOzGs?=
 =?iso-8859-1?Q?HZiQAPrQT0Ti21X6KmK4mLzh7YryuQJNauY+qZUb/8u+kJfskzmDns+3P9?=
 =?iso-8859-1?Q?nEfNFwH7Gsc0g2+gpsrTrs6o9traVam8Uf5hj46ZHmWNd101U6+DPUAM2C?=
 =?iso-8859-1?Q?o04R6IRi5ATZfpCz7ZSUAHoa+5v2aNT1+G0PK+PXqDe3A95A6FD+WvlmXt?=
 =?iso-8859-1?Q?IuK8+Nld4nKmNKEg+V3cJvPh17GHu7l7LsLrmYqiIfAOORnjiDKP5O7p3r?=
 =?iso-8859-1?Q?1w5gLCx1GH5YjzTtgXXIsNo7NQp22wIvJYgbkX2thzLktRTO8Dka3b5eap?=
 =?iso-8859-1?Q?S/nuHNlcmRurt549SSPzvYQ+GkrnzQ1hQZHtCDImF/+/BXAUDu702MV7Il?=
 =?iso-8859-1?Q?5GfqoR5+767TYE4GXx2tVtvRdd0ODHBT0/na7hprl+xWPwB2R4siX7OG8y?=
 =?iso-8859-1?Q?s9IE3BHkG9ecVYld4AGBrTlchKh9fXg7/a+4Par3iQG+oZFdX3elLzhNkP?=
 =?iso-8859-1?Q?XR/O3EOP5cDSAHAFC4ENSB3tWzmMychOgzYfpMkr4toeDtrgNMJsgTsvs2?=
 =?iso-8859-1?Q?dKUQ/sU38y3MuaZlwE1Wbuv09IWbFRBGk9lqR9nVYg7byTnxmW6oXItRWG?=
 =?iso-8859-1?Q?tSrdN8eKlaUy9jMaHpaBpJsbfxFs8HycxbpFJGfZxvdE+d4NtGtZw0D0K8?=
 =?iso-8859-1?Q?UcOrREohUW3eBkGsiKbXpUgARij5ej1SJwHxnFrQUi7m5wyAiHgfoPKHSH?=
 =?iso-8859-1?Q?RZTWFRK4IGn7PovQyvLEx56f7B2uvykXqmlyJkxHFKUM84TY8TOJe1R1Ew?=
 =?iso-8859-1?Q?b3XqJxmFKuOUOfW+KkZZa/rMtWp3zArXmBazqKyVQkrHihfGh0HHRjDdYC?=
 =?iso-8859-1?Q?pKPSiOcAh4Kx0To+UN4+jHymFcN8nbyQz98qxuSgxL9FNXLoKm9Wmkx8qk?=
 =?iso-8859-1?Q?/EXcDlC8wM/uVGq83/PQMQlu8AhePb8X8qsebEk2Uonf+Qu3mg5NLl13mQ?=
 =?iso-8859-1?Q?W1yGXQT44DfNCWe4Q9uUFSJgCYJryaelU9gYO93+OXanlHa+IVn1oJrwi8?=
 =?iso-8859-1?Q?aFtNE3Y5Yx8vZCZ9PpBaIRqtj0LuEWmIFivk/dkflW27DnU+QnarG07E26?=
 =?iso-8859-1?Q?8Cw1fyxJMdX6nt0NcrTLgjLOKZcGigg1HbH/EdDhVnxBJbJv801xx6Kj7q?=
 =?iso-8859-1?Q?ill63FnmaQ=3D=3D?=
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-OriginatorOrg: citrix.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: SA6PR03MB7760.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: fd6a6fe6-ec43-4a6e-c800-08df35a9ffc5
X-MS-Exchange-CrossTenant-originalarrivaltime: 29 Oct 2026 10:47:16.6538
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: M/S0xL6ugeIFGzPlNZJVJ/Fl428j1R6vQ4BhM3UNXmTXoXtbYydhVvvSqxKp3ZKxBWUqj5ttTWykCTBzZmmM9Q==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR03MB5462
X-purgate-ID: tlsNG-16d1c6/1793270840-F5A0C77B-0435C44D/0/0
X-purgate-type: clean
X-purgate-size: 2732

Some comments inline=0A=
=0A=
>  +static VOID=0A=
>  +__BlkifRingFreePages(=0A=
>  +    _In_ PXENVBD_BLKIF_PAGES    Pages=0A=
>  +    )=0A=
>  +{=0A=
>  +    ULONG                       Index;=0A=
>  +=0A=
>  +    for (Index =3D 0; Index < Pages->Count; ++Index)=0A=
>  +        ASSERT3P(Pages->Grants[Index], =3D=3D, NULL);=0A=
>  +=0A=
=0A=
This loop only matters on a checked build - it can be wrapped by=0A=
#if DBG / #endif=0A=
=0A=
>  +    __FreePages(Pages->Mdl);=0A=
>  +    Pages->Mdl =3D NULL;=0A=
>  +    Pages->Count =3D 0;=0A=
>  +=0A=
>  +    RtlZeroMemory(&Pages->ListEntry, sizeof(LIST_ENTRY));=0A=
>  +=0A=
>  +    ASSERT(IsZeroMemory(Pages, sizeof(XENVBD_BLKIF_PAGES)));=0A=
>  +    __RingFree(Pages);=0A=
>  +}=0A=
>  +=0A=
>  +_Check_return_=0A=
>  +static BOOLEAN=0A=
>  +__BlkifRingRevokePages(=0A=
>  +    _In_ PXENVBD_BLKIF_RING     BlkifRing,=0A=
>  +    _Inout_ PXENVBD_BLKIF_PAGES Pages=0A=
>  +    )=0A=
>  +{=0A=
>  +    PXENVBD_RING                Ring =3D BlkifRing->Ring;=0A=
>  +    PXENVBD_GRANTER             Granter =3D FrontendGetGranter(Ring->Fr=
ontend);=0A=
>  +    ULONG                       Index;=0A=
>  +=0A=
>  +    for (Index =3D 0; Index < Pages->Count; ++Index) {=0A=
>  +        if (Pages->Grants[Index] =3D=3D NULL)=0A=
>  +            continue;=0A=
>  +=0A=
>  +        if (!NT_SUCCESS(GranterTryPut(Granter, Pages->Grants[Index])))=
=0A=
>  +            return FALSE;=0A=
>  +=0A=
=0A=
Should the loop flag the failure, and try other grants, so that the functio=
n=0A=
has released as many grants as possible, but reports if any fail?=0A=
=0A=
=0A=
>  +        Pages->Grants[Index] =3D NULL;=0A=
>  +    }=0A=
>  +=0A=
>  +    return TRUE;=0A=
>  +}=0A=
>  +=0A=
=0A=
>  @@ -2615,9 +2865,32 @@ RingD0ToD3(=0A=
>       _Inout_ PXENVBD_RING    Ring=0A=
>       )=0A=
>   {=0A=
>  -    UNREFERENCED_PARAMETER(Ring);=0A=
>  +    ULONG                   Index;=0A=
>  =0A=
>       ASSERT3U(KeGetCurrentIrql(), =3D=3D, PASSIVE_LEVEL);=0A=
>  +=0A=
>  +    // Grants are only handed over to the reclaim thread at disconnect,=
 so a=0A=
>  +    // ring still connected here would never be drained=0A=
>  +    for (Index =3D 0; Index < FrontendGetMaxQueues(Ring->Frontend); ++I=
ndex)=0A=
>  +        ASSERT(!Ring->Ring[Index]->Connected);=0A=
>  +=0A=
=0A=
Checked only loop, can be optimized with #if DBG / #endif=0A=
=0A=
>  +    // Only return once the backend has released everything, so that no=
 grant=0A=
>  +    // survives into D3. Freeing pages that backends may still access i=
s worse=0A=
>  +    // than holding up D0->D3.=0A=
>  +    while (RingIsDeferring(Ring)) {=0A=
=0A=
=0A=
Owen=


From win-pv-devel-bounces@lists.xenproject.org Thu Oct 29 10:50:36 2026
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 29 Oct 2026 10:50:36 +0000
Received: from list by lists.xenproject.org with outflank-mailman.1464407.1675080 (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xMNiO-00088v-9Y; Thu, 29 Oct 2026 10:50:36 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 1464407.1675080; Thu, 29 Oct 2026 10:50:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1xMNiO-00088o-76; Thu, 29 Oct 2026 10:50:36 +0000
Received: by outflank-mailman (input) for mailman id 1464407;
 Thu, 29 Oct 2026 10:50:34 +0000
Received: from mx.expurgate.net ([194.145.224.20])
 by lists.xenproject.org with esmtp (Exim 4.92)
 (envelope-from <owen.smith@citrix.com>) id 1xMNiM-00087d-FL
 for win-pv-devel@lists.xenproject.org; Thu, 29 Oct 2026 10:50:34 +0000
Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp
 id 1xMNiL-009z9F-Hs
 for win-pv-devel@lists.xenproject.org; Thu, 29 Oct 2026 11:50:33 +0100
Received: from [10.42.69.12] (helo=localhost)
 by localhost with ESMTP (eXpurgate MTA 0.9.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ae324ed-2eae-0a2a0a5409dd-0a2a450cc84e-40
 for <win-pv-devel@lists.xenproject.org>; Thu, 29 Oct 2026 11:50:33 +0100
Received: from [52.101.85.61]
 (helo=BYAPR05CU005.outbound.protection.outlook.com)
 by tlsNG-d25034.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1)
 (envelope-from <owen.smith@citrix.com>)
 id 6ae324f7-f479-0a2a450c0019-3465553d351b-3
 for <win-pv-devel@lists.xenproject.org>; Thu, 29 Oct 2026 11:50:33 +0100
Received: from SA6PR03MB7760.namprd03.prod.outlook.com (2603:10b6:806:43c::5)
 by DS7PR03MB5462.namprd03.prod.outlook.com (2603:10b6:5:2d0::18) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.569.8; Thu, 29 Oct
 2026 10:50:29 +0000
Received: from SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38]) by SA6PR03MB7760.namprd03.prod.outlook.com
 ([fe80::4d5b:a91f:46a3:4b38%5]) with mapi id 15.21.0546.021; Thu, 29 Oct 2026
 10:50:29 +0000
X-BeenThere: win-pv-devel@lists.xenproject.org
List-Id: Developer list for the Windows PV Drivers subproject
 <win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/win-pv-devel>, 
 <mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: win-pv-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "win-pv-devel" <win-pv-devel-bounces@lists.xenproject.org>
Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:x-ms-exchange-senderadcheck"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
 b=t1rjh83vhtJx1LxhejFJID5grjJXkBtT1wfBW24iemiOmC5dieOAH1hHgGbRfm3JgzIYEv8MqwU2kqChggIdrAgXJMU+BIXoCrz6kXgFeu0ZSBZNKxs8gW+tSKyRoGjZZs4pcsct0zCC/+pPn7atp24KzoXowzKAW8WGyZo36qiOL+xLfIMx0Dob3d+6fKotl8P44EBlLNiFY6VxVGnriw5Wl9Z6VIJqKJ+Ax7Bi5Cy+7ZlyfCO9azqbsmIirP++2HcKGGeuyOeEAvrHA4yqkbz/daMSLyMqCT1nwXmZueTZQUNg1aP+SnqudfqZ2yDv5F04NIPZPmmXWdFPqSYTHw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector10001;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=OmoKemZHf3GlM5L7Aa8819193yOhh91Adql/zt5PBBQ=;
 b=yEzJHjccd3U1vx2wzbvI2uk5B8mzcwD0BfZzdWP3iu+vttN/u+1V1j/i1PQUxw91IlUl/LWYAHKo0F+fU43Xs1xUHqLkevhxs7sV/ypHKaR6eET9z5OFYo0QPrEGq+G25P/eWw0N364uhVWW52fu9pWEqjhE1PTOYPEX8vM5KoF+aypsd1uZS6+Ou3wfW/K62hTuKD0hPrdRB1aiCLRKfaAof7XtABhQN3BweHhOpvgak7bcaBCdyx+OZHbXU6ZkaexBwJ5fc8foFGGLob+eiRgKdJqvYrwqwzyH5ypdal7DgT0F4gl9FT/GkWvTcR3bGzxaXaPV3xT5K7vj1EW+cA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com;
 dkim=pass header.d=citrix.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=OmoKemZHf3GlM5L7Aa8819193yOhh91Adql/zt5PBBQ=;
 b=RQ3X6CeiEafOoXT4DeL8RoPncf2UJhrs8nURIr8cbg6774LcMVPp2a5l5f7Q/DuJHYFOsD7rVt1GlK2Sk6mTQ7xdBSE63ISQiWw7gxZm6brDBpUMOXeYDkszcd71UfEhWeWzHSps9vbfdhtikJZ3KHXN30wqIT7qax+USlQ4hW8=
From: Owen Smith <owen.smith@citrix.com>
To: Tu Dinh <ngoc-tu.dinh@vates.tech>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Subject: Re: [PATCH v2 10/10] ring: Defer request completion until backend
 grant release
Thread-Topic: [PATCH v2 10/10] ring: Defer request completion until backend
 grant release
Thread-Index: AQHdZwBwMC9H7ccDx0mYY8HPu9zqOLcUV8Jn
Date: Thu, 29 Oct 2026 10:50:29 +0000
Message-ID:
 <SA6PR03MB77602AF4F337EC636DE602CEFE6E2@SA6PR03MB7760.namprd03.prod.outlook.com>
References:
 <1793207793.8631fc262581453bbf619ec5b2062170.1a1838377bc000f79f@vates.tech>
 <20261028171840.4940-1-ngoc-tu.dinh@vates.tech>
 <1793207935.8631fc262581453bbf619ec5b2062170.1a18385a213000f79f@vates.tech>
In-Reply-To:
 <1793207935.8631fc262581453bbf619ec5b2062170.1a18385a213000f79f@vates.tech>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
msip_labels:
authentication-results: mx.microsoft.com 1; dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=citrix.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: SA6PR03MB7760:EE_|DS7PR03MB5462:EE_
x-ms-office365-filtering-correlation-id: b93824c9-5af4-4db0-83c3-08df35aa72d7
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam:
 BCL:0;ARA:13230040|376014|1800799024|366016|23010399003|18002099003|22082099003|56012099006|11063799006|4143699003|10067099003|261028144727099003|261026140227099003|261021121427099003|261022105027099003|38070700021;
x-microsoft-antispam-message-info:
 9HANzyjdg6y78mHrb2puyKC5W85VSPqwOc7hE1kb/j2YN1Lpt94kCOdhIFvIaZ0VnuGs60jUGxhVlCQ8LISoB1y1PjpF552zOxPmZCIEaDKOEUaiyKo/bA27+z64HMAXyx9QdjG4B6pIuoddguGTfmKwSCykhx2PQ+j1puXIdRcnfM5K5uHgqdiLjahhE8eYKxck/haD0a1OFL/XP6JorwufDoCFUWNIxmmgocaME+elq1YtEF0woRR++KcU9fZmAZj9iLNnb1Ak9EpwA6x1sW5CRftL+bfn49O6RlWZKR2O1ikCbbXSKFLp6ZxxFSqsE30QkiC0t+weS3b7y7obUXZ5bcuG6OtWIu/kXoNCK026PyYcSC8Rs9BkpoMyelTh4mqjl9ypdTV3zqrudXQDSAwcqp5Gx0TWG8a9Q42yQaqbMnbhG7x3lZBnjOMmq5WKPkFQucdTx/r3XmcQszooZpndrbs6EEhRSKe4zl2NMnDnGUulDCMV/9ZhlkNR8k+FIzXRPgJaFz1xHICZ2T8i+bk/IjiRgiF+jYOLWr6u/kO2dQN14vL4YCszqntR35SCwrjKXLZgGrh5wfAipVaKpdIoHBWcXFgLe5GSPFPwbEnJvsIxtqY2uW86NNYt0kCRrFpG8X0alxF0JGs/+80g78pBBmGqPCRmfVPWDYeBi7ntMEutbLyKdgVgxwcIhYiAqQxXpv9LbA5TehYGGwVwCQfg9kygaKSF5e0ycxDkTFM=
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SA6PR03MB7760.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(23010399003)(18002099003)(22082099003)(56012099006)(11063799006)(4143699003)(10067099003)(261028144727099003)(261026140227099003)(261021121427099003)(261022105027099003)(38070700021);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?iso-8859-1?Q?CiTvcx8lTSRjrj1sl50MUFGnVVOmkPsXNpC/kfjAElF7uuoPnFSIcqs3n9?=
 =?iso-8859-1?Q?H1c3ckMcVQ8F2EWOFp37TTstUUizNn7ITYPmX25kl73ZD2HL+hk1OzjeNa?=
 =?iso-8859-1?Q?mfdA2oXhc+3nQJ8OHLFbV6M4UwC+Z66O3/APjCK2BzJvwApDiX55pJpUa3?=
 =?iso-8859-1?Q?YqskrGl1FcwS5//FTjLmmMfgDBzAS1CuNc6CKsAHSA7bIS1EBuIosDBPKb?=
 =?iso-8859-1?Q?/MEOBzP9RjkBIkB5ckBkrA2D1i2xVbtM826qo2hfeHPMuY/rq80l4H4P/T?=
 =?iso-8859-1?Q?I1U2nsYz0FKsgdS3FoQDAwaY1ra254jRqfzOIJKQa7y9xwdx6vvApSnYtP?=
 =?iso-8859-1?Q?9vYnUmeiYhO3wf2WMlNhNP6Nz8bZ5xqi1vuoXK9mKZ/M3eGW0vEy442qLg?=
 =?iso-8859-1?Q?uGEzQA84gHKnSx35O0Vq1HMSvCtqvdjl6vzsiiYbmpDyuUSqvb1hUjeScb?=
 =?iso-8859-1?Q?TmC45srtIc4GRJlvmZzr8w0n6EKOqYlrR/mftVNdv2e4qydrYJNXsX3j/I?=
 =?iso-8859-1?Q?MnQ6Sjr/kTy0G6pyA+V2E60oUMvGdq6R9n/bQwtms/QXCmVHJWJLAOTLHd?=
 =?iso-8859-1?Q?SItMUtxgyC0m+KuV7BOh/+qtuTEgnfnAdM06E+vo0J+NuF5sl5rd6rfV5Z?=
 =?iso-8859-1?Q?aze7oe1kXkyIw2vCM2iHfJHD1ildDSkKYlpyHBXX+xUqYYmDTxRkLvFdiJ?=
 =?iso-8859-1?Q?SxshXbRJx6ZTXPn8/JrCD2+klD+ccj3105VXWTC1nOuQyzGq0KPNZc8FRj?=
 =?iso-8859-1?Q?XNkPhFbirUqB/r4C5iGhV2fIVUSP5djB3vKqTMqWmh20c/FryyIpHZA4S6?=
 =?iso-8859-1?Q?9HyLWJ6dkYxs+7vysraCi/tWVHL7UZXkzjPi6ZQ0Kzgg5xF1tn6BONNvXN?=
 =?iso-8859-1?Q?BQQbCsFf7hos9/PhioywcVfO/Yr4dneQmMs3T+h4WqXjXnM33FgLjCvn/F?=
 =?iso-8859-1?Q?TPyrBeJ0o6++kyl5xpXYkhsXBekcQmOApszQdJc4N/vikzoeKY6DHMiBI7?=
 =?iso-8859-1?Q?y8v7LuobHtLTLaRx4NsE44nLkhs992bqghiYF73LP9UO8nSpAeMNg7GqFJ?=
 =?iso-8859-1?Q?AMVDpJk9BvYxivLC1EBbDQg9Mrmc1GP6mG7y3bbHMDVmdk/bdkiHcR6rfg?=
 =?iso-8859-1?Q?bYuPPegJFUxbsPSOJ1/MSgSlh8kechQ1OMcdr0Rvf3+pnRHt9FoaQ7Cd1A?=
 =?iso-8859-1?Q?EkkN8vHWjAwC7sJ2RRAFZ3toD5Ftd6jZu1q6OCZ8gUVCqM5Q3ip7R2Z6HW?=
 =?iso-8859-1?Q?MYkXc/qlSpy/CTWBJI++ZH0HQjY6l70nCZv2H9uwbPbgVBnsQZbLB6rkVi?=
 =?iso-8859-1?Q?rnxp8IowyQbJGZDz8iRPZchFKkM4uxyMTRIIHSadJjDyr0BvgxY/h0cC2W?=
 =?iso-8859-1?Q?MaJ8JQj/b2qc9e2dHKOzS7S+2D/93N6Z7TRZrfYdoj59+yE9fCwsy6w/kK?=
 =?iso-8859-1?Q?l0mXRUIob4qZtt1VAxa5rbp1QMqo8dncNZqd7CFAcXE4Z73UPP8xsDP9qx?=
 =?iso-8859-1?Q?RYeIOe1y0Pb6Ox6XLBX1IbuA/hermq9pWlNNXivigFHxvvqgnqg3tWEAxV?=
 =?iso-8859-1?Q?iG/7uGnxLwOh1HDMlEUtepVP1hUhVt3LswJQQBdX1dSW5dVdvWUPPbuov8?=
 =?iso-8859-1?Q?+XOTUt7yNeznFQauy8FYz3NO1+kPSV1i6Mrak206e4W4UqmGGuch20T9EB?=
 =?iso-8859-1?Q?3GnlYSJvAj6o2O9tlke+CC1z+4enjheQWCrkZfcjS/lyFR73mdciemnwZq?=
 =?iso-8859-1?Q?llDsJ0mkUPx8HpW81IPsOkWz4/WHHa/J8xzgs4JLrlvp/F?=
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-OriginatorOrg: citrix.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: SA6PR03MB7760.namprd03.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: b93824c9-5af4-4db0-83c3-08df35aa72d7
X-MS-Exchange-CrossTenant-originalarrivaltime: 29 Oct 2026 10:50:29.7095
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 335836de-42ef-43a2-b145-348c2ee9ca5b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: oyIYEpghLy6Tq96scaae3UGI3p7az5RBNnxuUBTFGxxc94hoEdXypefLRIXwRz1gxPJnFeJ5T+VatGvIncStTw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR03MB5462
X-purgate-ID: tlsNG-d25034/1793271033-028DDA5B-8860CA1D/0/0
X-purgate-type: clean
X-purgate-size: 3413

>  =0A=
>  +_Check_return_=0A=
>  +static BOOLEAN=0A=
>  +BlkifRingTryPutRequest(=0A=
>  +    _Inout_ PXENVBD_BLKIF_RING  BlkifRing,=0A=
>  +    _Inout_ PXENVBD_REQUEST     Request=0A=
>  +    )=0A=
>  +{=0A=
>  +    PXENVBD_RING                Ring =3D BlkifRing->Ring;=0A=
>  +    PXENVBD_GRANTER             Granter =3D FrontendGetGranter(Ring->Fr=
ontend);=0A=
>  +    PXENVBD_SRBEXT              SrbExt =3D Request->SrbExt;=0A=
>  +    PLIST_ENTRY                 ListEntry;=0A=
>  +=0A=
>  +    for (ListEntry =3D Request->Segments.Flink;=0A=
>  +         ListEntry !=3D &Request->Segments;=0A=
>  +         ListEntry =3D ListEntry->Flink) {=0A=
>  +        PXENVBD_SEGMENT Segment =3D CONTAINING_RECORD(ListEntry, XENVBD=
_SEGMENT, ListEntry);=0A=
>  +=0A=
>  +        if (Segment->Grant =3D=3D NULL)=0A=
>  +            continue;=0A=
>  +=0A=
>  +        if (!NT_SUCCESS(GranterTryPut(Granter, Segment->Grant)))=0A=
>  +            return FALSE;=0A=
>  +=0A=
=0A=
Should a GranterTryPut be attempted for all Segment->Grants to attempt to r=
eturn=0A=
grantrefs as early as possible - any failure can be flagged and prevent the=
=0A=
Request being recycled into the CACHE=0A=
=0A=
>  +        Segment->Grant =3D NULL;=0A=
>  +    }=0A=
>  +=0A=
>  +    for (ListEntry =3D Request->Indirects.Flink;=0A=
>  +         ListEntry !=3D &Request->Indirects;=0A=
>  +         ListEntry =3D ListEntry->Flink) {=0A=
>  +        PXENVBD_INDIRECT    Indirect =3D CONTAINING_RECORD(ListEntry, X=
ENVBD_INDIRECT, ListEntry);=0A=
>  +=0A=
>  +        if (Indirect->Grant =3D=3D NULL)=0A=
>  +            continue;=0A=
>  +=0A=
>  +        if (!NT_SUCCESS(GranterTryPut(Granter, Indirect->Grant)))=0A=
>  +            return FALSE;=0A=
>  +=0A=
=0A=
Same as above=0A=
=0A=
>  +        Indirect->Grant =3D NULL;=0A=
>  +    }=0A=
>  +=0A=
>  +    for (;;) {=0A=
>  +        PXENVBD_SEGMENT Segment;=0A=
>  +=0A=
>  +        ListEntry =3D RemoveHeadList(&Request->Segments);=0A=
>  +        if (ListEntry =3D=3D &Request->Segments)=0A=
>  +            break;=0A=
>  +        Segment =3D CONTAINING_RECORD(ListEntry, XENVBD_SEGMENT, ListEn=
try);=0A=
>  +        BlkifRingPutSegment(BlkifRing, Segment);=0A=
>  +    }=0A=
>  +=0A=
>  +    for (;;) {=0A=
>  +        PXENVBD_INDIRECT    Indirect;=0A=
>  +=0A=
>  +        ListEntry =3D RemoveHeadList(&Request->Indirects);=0A=
>  +        if (ListEntry =3D=3D &Request->Indirects)=0A=
>  +            break;=0A=
>  +        Indirect =3D CONTAINING_RECORD(ListEntry, XENVBD_INDIRECT, List=
Entry);=0A=
>  +        BlkifRingPutIndirect(BlkifRing, Indirect);=0A=
>  +    }=0A=
>  +=0A=
=0A=
return FALSE at this point when not all grants are revoked=0A=
=0A=
>  +    Request->SrbExt =3D NULL;=0A=
>  +    Request->Operation =3D 0;=0A=
>  +    Request->Flags =3D 0;=0A=
>  +    Request->NrSegments =3D 0;=0A=
>  +    Request->FirstSector =3D 0;=0A=
>  +    Request->NrSectors =3D 0;=0A=
>  +    RtlZeroMemory(&Request->ListEntry, sizeof(LIST_ENTRY));=0A=
>  +=0A=
>  +    XENBUS_CACHE(Put,=0A=
>  +                 &Ring->CacheInterface,=0A=
>  +                 BlkifRing->RequestCache,=0A=
>  +                 Request,=0A=
>  +                 TRUE);=0A=
>  +=0A=
>  +    __BlkifRingPutSrb(BlkifRing, SrbExt);=0A=
>  +=0A=
>  +    return TRUE;=0A=
>  +}=0A=
>  =0A=
=0A=
Owen=


